С Днём России!
  • 1.066
  • 7
Дорогие друзья! Поздравляю вас с Днём России! Этот праздник напоминает нам о богатой истории и культуре нашей страны, о её величии и непоколебимом духе народа! Желаю вам крепкого здоровья...
Новости Анонсирован Atomic Heart II
Новости Анонсирован ремастер Final Fantasy Tactics
  • 433
  • 1
Культовая пошаговая тактическая RPG от Square Enix получит второе дыхание. На проходящей выставке State of Play, где анонсируются игры для Play Station, состоялся анонс ремастера Final Fantasy...
Новости Моддеры Oblivion Remastered нашли способ внедрения абсолютно любых скриптов
  • 545
  • 4
Сообщество моддинга Oblivion Remastered (ORM) переживает настоящий расцвет. После долгих месяцев работы, энтузиасты научили игру работать с мощным скриптовым языком Lua, открыв перед создателями...

В процессе Перенести спавн Атилы в канализации в другое место

TraZag

Полубог
Команда форума
Модератор раздела
Модостроитель
Почётный пользователь
 
Участник форума
Регистрация
6 Окт 2012
Сообщения
13.193
Реакции
11.637
Баллы
1.071
Лучшие ответы
5
#31
Хз, он просто боевик, который решает проблемы. Он говорит про заказчиков, а значит он не в гильдии воров... Тем более, что воры редко опускаются до убийств. Для этого есть наемники, как он. Я бы его никак не связывал с ворами. Лучше уж с асмалом.
 

Divik

Паладин
Участник форума
Регистрация
21 Авг 2022
Сообщения
4.194
Реакции
1.058
Баллы
273
Лучшие ответы
29
#32
Хз, он просто боевик, который решает проблемы. Он говорит про заказчиков, а значит он не в гильдии воров... Тем более, что воры редко опускаются до убийств. Для этого есть наемники, как он. Я бы его никак не связывал с ворами. Лучше уж с асмалом.
А в ванили он потом среди них все время. А само слово "заказчики" - вполне нейтральное, он не хочет говорить, откуда он именно, и на кого он работает. Не захотел сказать,что он от гильдии воров, а просто напустил таинств для ГГ и ключ передает, по типу сам найди от чего он.
Да и это правильно, в ваниле таким образом родили интерес игрока, это что, зачем, от чего ключ. Это сейчас мы все знаем, что и кто и откуда, зачем и т.д. А когда играешь в самый первый раз, тогда всё ровно получается. На самом деле начинаешь задумываться, что такое, куда это меня приглашают, как бы не прямой квест (но по сути он самый), когда - "вот тебе ключ, который от канализации, а канализация вот там", плюс в Дневнике расписано - это ключ от канализации, а канализация находится вот там. Это структура васянских квестов. А тут четко - ключ ржавый! Ржавый....изъеденный морской солью...наводит на мысли. По сути это тоже квест, когда надо понять и найти.
И хотя я не помню, как именно я оказался в канализации и нашел гильдию воров в самую свою первую игру в Готику 2 20 лет назад, но нашел же, значит как-то и в других местах есть ответы или наводки, или просто кто-то совсем в другом месте и в другое время объяснил или в беседе упомянул, что в канализации есть гильдия воров.
 

osipov_jenya

Наемник
Участник форума
Регистрация
27 Окт 2018
Сообщения
726
Реакции
614
Баллы
164
Лучшие ответы
0
#33
Первый квест готов)
CSS:
const string TOPIC_Attila_quest1 = "Аттила и Дар";
var int MIS_Attilaquest1;
var int attilaquest1day;
var int ThiefGuildOffended;

instance ItMi_AttilaPocket(C_Item)
{
    name = "Кошелек для Дара";
    mainflag = ITEM_KAT_NONE;
    flags = ITEM_MULTI | ITEM_MISSION;
    value = 1;
    visual = "ItMi_Pocket_Medium.3ds";
    material = MAT_LEATHER;
    description = name;
    text[4] = "Кошелек Аттилы.";
    inv_animate = 1;
    setitemvartrue(ItMi_AttilaPocket, BIT_ITEM_QUESTITEM);
};

instance dia_attila_quest1_start(C_INFO)
{
    npc         = Vlk_494_Attila;
    condition     = dia_attila_quest1_start_condition;
    information = dia_attila_quest1_start1_info;
    important     = true;
};

func int dia_attila_quest1_start_condition()
{
    if (is_lovcach == TRUE) {
        return TRUE;
    };
};

func void dia_attila_quest1_start1_info()
{
    AI_Output(self, other, "dia_attila_quest1_start_00");     // Погоди немного, кое что хочу тебе поручить.
    AI_Output(other, self, "dia_attila_quest1_start_01");     // Вот и встретились, как ты и говорил.
    AI_Output(self, other, "dia_attila_quest1_start_02");     // И это хорошо для тебя (улыбается)
    AI_Output(self, other, "dia_attila_quest1_start_03");     // Ладно, к делу. Отнеси этот кошелёк нашему коллеге на ферму Онара.
    AI_Output(other, self, "dia_attila_quest1_start_04");     // Как зовут вашего "коллегу"?
    AI_Output(self, other, "dia_attila_quest1_start_05");     // Не перебивай, я не закончил. Его зовут Дар, знаешь его?
    if(Npc_KnowsInfo(other,dia_dar_hallo))
    {
        AI_Output(other, self, "dia_attila_quest1_start_06");     // Да, я уже говорил с ним. Его проблема - он любит покурить.
        AI_Output(self, other, "dia_attila_quest1_start_07");     // ДА!!!! Точно это он (смеётся)
    }
    else
    {
        AI_Output(other, self, "dia_attila_quest1_start_08");     // Нет, я не знаю такого.
        AI_Output(self, other, "dia_attila_quest1_start_09");     // Ну вот будет повод познакомиться.
    };
    AI_Output(self, other, "dia_attila_quest1_start_10");     // Передай ему этот кошелёк, у тебя на это 2 дня. Если опоздаешь - по голове не поглажу (улыбается)
    attilaquest1day = Wld_GetDay();
    MIS_Attilaquest1 = 1;
    B_GiveInvItems(self, hero, ItMi_AttilaPocket, 1);
    Log_CreateTopic(TOPIC_Attila_quest1,LOG_MISSION);
    Log_SetTopicStatus(TOPIC_Attila_quest1,LOG_Running);
    B_LogEntry(TOPIC_Attila_quest1, "Аттила дал мне 2 дня, чтобы я доставил кошелёк Дару на ферму Онару.");
};

instance dia_dar_attila_quest1(C_INFO)
{
    npc         = Sld_810_Dar;
    nr             = 2;
    condition     = dia_dar_attila_quest1_condition;
    information = dia_dar_attila_quest1_info;
    permanent     = FALSE;
    description = "У меня для тебя посылка Аттилы";
};

func int dia_dar_attila_quest1_condition()
{
    if((MIS_Attilaquest1 == 1) && npc_hasitem(hero,ItMi_AttilaPocket))
    {
        return TRUE;
    };
};

func void dia_dar_attila_quest1_info()
{
    var int daynow;
    daynow = Wld_GetDay();
    AI_Output(other, self, "dia_dar_attila_quest1_00");     // У меня для тебя посылка от Аттилы.
    if (daynow <= attilaquest1day + 2)
    {
        AI_Output(self, other, "dia_dar_attila_quest1_01"); // Как всегда вовремя, приятно с ним иметь дело.
        MIS_Attilaquest1 = 4;
        B_LogEntry(TOPIC_Attila_quest1, "В отведённый срок передал кошелек Дару. Можно спокойно возвращаться к Аттиле.");
    };
    if ((daynow > attilaquest1day + 2) && (daynow <= attilaquest1day + 4))
    {
        AI_Output(self, other, "dia_dar_attila_quest1_02"); // Почему задержка? Странно...
        MIS_Attilaquest1 = 3;
        B_LogEntry(TOPIC_Attila_quest1, "С небольшой задержкой передал кошелек Дару. Думаю Аттила будет не в восторге.");
    };
    if (daynow > attilaquest1day + 4)
    {
        AI_Output(self, other, "dia_dar_attila_quest1_03"); // Мдаа, гильдия нынче не та. Придётся это иметь ввиду в следующий раз.(раздосадованный)
        MIS_Attilaquest1 = 2;
        B_LogEntry(TOPIC_Attila_quest1, "С задержкой передал кошелек Дару. Думаю меня ждут неприятности от Аттилы.");
    };
    
};

instance dia_attila_quest1_end(C_INFO)
{
    npc         = Vlk_494_Attila;
    condition     = dia_attila_quest1_end_condition;
    information = dia_attila_quest1_end_info;
    important     = true;
};

func int dia_attila_quest1_end_condition()
{
    var int daynow;
    daynow = Wld_GetDay();
    if (((MIS_Attilaquest1 == 1) && (daynow > attilaquest1day + 2)) || (MIS_Attilaquest1 == 2) || (MIS_Attilaquest1 == 3) || (MIS_Attilaquest1 == 4))
    {
        return TRUE;
    };
};

func void dia_attila_quest1_end_info()
{
    var int daynow;
    daynow = Wld_GetDay();
    if (((MIS_Attilaquest1 == 1) && (daynow > attilaquest1day + 2)) || (MIS_Attilaquest1 == 3))
    {
        AI_Output(self, other, "dia_attila_quest1_end_00"); // Смотрю ты не серьёзно отнёсся к моему заданию....
        AI_Output(self, other, "dia_attila_quest1_end_01"); // Ну чтож, придётся тебе приподать урок.
        AI_Output(other, self, "dia_attila_quest1_end_02"); // Я...
        AI_Output(self, other, "dia_attila_quest1_end_03"); // Закрой рот, меня не волнуют твои оправдания
        MIS_Attilaquest1 = LOG_FAILED;
        ThiefGuildOffended = true;
        B_Logentry_Failed(TOPIC_Attila_quest1);
        self.aivar[AIV_DROPDEADANDKILL] = false;
        npc_removeinvitems(hero, ItMi_AttilaPocket, 1);
        AI_StopProcessInfos(self);
        B_Attack(self,hero,AR_NONE,1);
    };
    if (MIS_Attilaquest1 == 4)
    {
        AI_Output(self, other, "dia_attila_quest1_end_04"); // Ты довольно ответственный парень, меня такие радуют.
        AI_Output(self, other, "dia_attila_quest1_end_05"); // Кассия сделала правильный выбор, приняв тебя.
        AI_Output(other, self, "dia_attila_quest1_end_06"); // Довольно неожиданно слышать это от ТЕБЯ.
        AI_Output(self, other, "dia_attila_quest1_end_07"); // В нашей гильдии уважают репутацию, поэтому все задания должны выполнятся в срок.
        MIS_Attilaquest1 = LOG_SUCCESS;
        THIEF_REPUTATION += 1;
        Log_SetTopicStatus(TOPIC_Attila_quest1,LOG_SUCCESS);
        B_LogEntry(TOPIC_Attila_quest1, "Я выполнил задание Аттилы.");
        B_CloseTopic_Now(TOPIC_Attila_quest1,MIS_Attilaquest1,0,2);
        self.aivar[AIV_DROPDEADANDKILL] = true;
        B_GivePlayerXP(300);
        B_GiveInvItems(self,other, ItMi_Gold, 300);
        AI_StopProcessInfos(self);
    };
    if (MIS_Attilaquest1 == 2)
    {
        AI_Output(self, other, "dia_attila_quest1_end_08"); // Ты хоть и выполнил задание, но с задержкой.
        AI_Output(self, other, "dia_attila_quest1_end_09"); // Это плохо скажется на нашей репутации, но я могу это уладить за небольшую плату. В противном случае тебе придётся понести наказание
        AI_Output(other, self, "dia_attila_quest1_end_10"); // И сколько я должен заплатить?
        AI_Output(self, other, "dia_attila_quest1_end_11"); // 200 золотых.
        info_clearchoices(dia_attila_quest1_end);
        Info_AddChoice(dia_attila_quest1_end,"Я отказываюсь платить.",dia_attila_quest1_end_no);
        if(npc_hasitems(hero,ItMi_Gold) >= 200)
        {
            Info_AddChoice(dia_attila_quest1_end,"Я заплачу.",dia_attila_quest1_end_yes);
        }
        else
        {
            Info_AddChoice(dia_attila_quest1_end,"У меня нет столько золота.",dia_attila_quest1_end_nogold);
        };
    };
};

func void dia_attila_quest1_end_no()
{
    AI_Output(other, self, "dia_attila_quest1_end_12");     // Я отказываюсь платить
    AI_Output(self, other, "dia_attila_quest1_end_13");     // Ты об этом пожалеешь.
    MIS_Attilaquest1 = LOG_FAILED;
    ThiefGuildOffended = true;
    B_Logentry_Failed(TOPIC_Attila_quest1);
    self.aivar[AIV_DROPDEADANDKILL] = false;
    npc_removeinvitems(hero, ItMi_AttilaPocket, 1);
    AI_StopProcessInfos(self);
    B_Attack(self,hero,AR_NONE,1);
};

func void dia_attila_quest1_end_nogold()
{
    AI_Output(other, self, "dia_attila_quest1_end_14");     // У меня нет столько золота
    AI_Output(self, other, "dia_attila_quest1_end_13");     // Ты об этом пожалеешь.
    MIS_Attilaquest1 = LOG_FAILED;
    ThiefGuildOffended = true;
    B_Logentry_Failed(TOPIC_Attila_quest1);
    self.aivar[AIV_DROPDEADANDKILL] = false;
    npc_removeinvitems(hero, ItMi_AttilaPocket, 1);
    AI_StopProcessInfos(self);
    B_Attack(self,hero,AR_NONE,1);
};

func void dia_attila_quest1_end_yes()
{
    AI_Output(other, self, "dia_attila_quest1_end_14");     // Хорошо, вот держи 200 золотых.
    AI_Output(self, other, "dia_attila_quest1_end_13");     // Ты правильно поступил, за ошибки нужно платить.
    MIS_Attilaquest1 = LOG_SUCCESS;
    THIEF_REPUTATION += 1;
    Log_SetTopicStatus(TOPIC_Attila_quest1,LOG_SUCCESS);
    B_LogEntry(TOPIC_Attila_quest1, "Я выполнил задание Аттилы, хоть и с задержкой");
    B_CloseTopic_Now(TOPIC_Attila_quest1,MIS_Attilaquest1,0,2);
    self.aivar[AIV_DROPDEADANDKILL] = true;
    B_GivePlayerXP(200);
    AI_StopProcessInfos(self);
};
--- Добавлено: ---

На первый взгляд он выглядит довольно примитивно(отнеси,передай), но тут будут последствия, если его запороть или сделать не вовремя.
 
Последнее редактирование:

tilil2670

Рыцарь
Участник форума
Регистрация
25 Авг 2022
Сообщения
2.566
Реакции
739
Баллы
176
Лучшие ответы
29
#34
Первый квест готов)
CSS:
const string TOPIC_Attila_quest1 = "Аттила и Дар";
var int MIS_Attilaquest1;
var int attilaquest1day;
var int ThiefGuildOffended;

instance ItMi_AttilaPocket(C_Item)
{
    name = "Кошелек для Дара";
    mainflag = ITEM_KAT_NONE;
    flags = ITEM_MULTI | ITEM_MISSION;
    value = 1;
    visual = "ItMi_Pocket_Medium.3ds";
    material = MAT_LEATHER;
    description = name;
    text[4] = "Кошелек Аттилы.";
    inv_animate = 1;
    setitemvartrue(ItMi_AttilaPocket, BIT_ITEM_QUESTITEM);
};

instance dia_attila_quest1_start(C_INFO)
{
    npc         = Vlk_494_Attila;
    condition     = dia_attila_quest1_start_condition;
    information = dia_attila_quest1_start1_info;
    important     = true;
};

func int dia_attila_quest1_start_condition()
{
    if (is_lovcach == TRUE) {
        return TRUE;
    };
};

func void dia_attila_quest1_start1_info()
{
    AI_Output(self, other, "dia_attila_quest1_start_00");     // Погоди немного, кое что хочу тебе поручить.
    AI_Output(other, self, "dia_attila_quest1_start_01");     // Вот и встретились, как ты и говорил.
    AI_Output(self, other, "dia_attila_quest1_start_02");     // И это хорошо для тебя (улыбается)
    AI_Output(self, other, "dia_attila_quest1_start_03");     // Ладно, к делу. Отнеси этот кошелёк нашему коллеге на ферму Онара.
    AI_Output(other, self, "dia_attila_quest1_start_04");     // Как зовут вашего "коллегу"?
    AI_Output(self, other, "dia_attila_quest1_start_05");     // Не перебивай, я не закончил. Его зовут Дар, знаешь его?
    if(Npc_KnowsInfo(other,dia_dar_hallo))
    {
        AI_Output(other, self, "dia_attila_quest1_start_06");     // Да, я уже говорил с ним. Его проблема - он любит покурить.
        AI_Output(self, other, "dia_attila_quest1_start_07");     // ДА!!!! Точно это он (смеётся)
    }
    else
    {
        AI_Output(other, self, "dia_attila_quest1_start_08");     // Нет, я не знаю такого.
        AI_Output(self, other, "dia_attila_quest1_start_09");     // Ну вот будет повод познакомиться.
    };
    AI_Output(self, other, "dia_attila_quest1_start_10");     // Передай ему этот кошелёк, у тебя на это 2 дня. Если опоздаешь - по голове не поглажу (улыбается)
    attilaquest1day = Wld_GetDay();
    MIS_Attilaquest1 = 1;
    B_GiveInvItems(self, hero, ItMi_AttilaPocket, 1);
    Log_CreateTopic(TOPIC_Attila_quest1,LOG_MISSION);
    Log_SetTopicStatus(TOPIC_Attila_quest1,LOG_Running);
    B_LogEntry(TOPIC_Attila_quest1, "Аттила дал мне 2 дня, чтобы я доставил кошелёк Дару на ферму Онару.");
};

instance dia_dar_attila_quest1(C_INFO)
{
    npc         = Sld_810_Dar;
    nr             = 2;
    condition     = dia_dar_attila_quest1_condition;
    information = dia_dar_attila_quest1_info;
    permanent     = FALSE;
    description = "У меня для тебя посылка Аттилы";
};

func int dia_dar_attila_quest1_condition()
{
    if((MIS_Attilaquest1 == 1) && npc_hasitem(hero,ItMi_AttilaPocket))
    {
        return TRUE;
    };
};

func void dia_dar_attila_quest1_info()
{
    var int daynow;
    daynow = Wld_GetDay();
    AI_Output(other, self, "dia_dar_attila_quest1_00");     // У меня для тебя посылка от Аттилы.
    if (daynow <= attilaquest1day + 2)
    {
        AI_Output(self, other, "dia_dar_attila_quest1_01"); // Как всегда вовремя, приятно с ним иметь дело.
        MIS_Attilaquest1 = 4;
        B_LogEntry(TOPIC_Attila_quest1, "В отведённый срок передал кошелек Дару. Можно спокойно возвращаться к Аттиле.");
    };
    if ((daynow > attilaquest1day + 2) && (daynow <= attilaquest1day + 4))
    {
        AI_Output(self, other, "dia_dar_attila_quest1_02"); // Почему задержка? Странно...
        MIS_Attilaquest1 = 3;
        B_LogEntry(TOPIC_Attila_quest1, "С небольшой задержкой передал кошелек Дару. Думаю Аттила будет не в восторге.");
    };
    if (daynow > attilaquest1day + 4)
    {
        AI_Output(self, other, "dia_dar_attila_quest1_03"); // Мдаа, гильдия нынче не та. Придётся это иметь ввиду в следующий раз.(раздосадованный)
        MIS_Attilaquest1 = 2;
        B_LogEntry(TOPIC_Attila_quest1, "С задержкой передал кошелек Дару. Думаю меня ждут неприятности от Аттилы.");
    };
 
};

instance dia_attila_quest1_end(C_INFO)
{
    npc         = Vlk_494_Attila;
    condition     = dia_attila_quest1_end_condition;
    information = dia_attila_quest1_end_info;
    important     = true;
};

func int dia_attila_quest1_end_condition()
{
    var int daynow;
    daynow = Wld_GetDay();
    if (((MIS_Attilaquest1 == 1) && (daynow > attilaquest1day + 2)) || (MIS_Attilaquest1 == 2) || (MIS_Attilaquest1 == 3) || (MIS_Attilaquest1 == 4))
    {
        return TRUE;
    };
};

func void dia_attila_quest1_end_info()
{
    var int daynow;
    daynow = Wld_GetDay();
    if (((MIS_Attilaquest1 == 1) && (daynow > attilaquest1day + 2)) || (MIS_Attilaquest1 == 3))
    {
        AI_Output(self, other, "dia_attila_quest1_end_00"); // Смотрю ты не серьёзно отнёсся к моему заданию....
        AI_Output(self, other, "dia_attila_quest1_end_01"); // Ну чтож, придётся тебе приподать урок.
        AI_Output(other, self, "dia_attila_quest1_end_02"); // Я...
        AI_Output(self, other, "dia_attila_quest1_end_03"); // Закрой рот, меня не волнуют твои оправдания
        MIS_Attilaquest1 = LOG_FAILED;
        ThiefGuildOffended = true;
        B_Logentry_Failed(TOPIC_Attila_quest1);
        self.aivar[AIV_DROPDEADANDKILL] = false;
        npc_removeinvitems(hero, ItMi_AttilaPocket, 1);
        AI_StopProcessInfos(self);
        B_Attack(self,hero,AR_NONE,1);
    };
    if (MIS_Attilaquest1 == 4)
    {
        AI_Output(self, other, "dia_attila_quest1_end_04"); // Ты довольно ответственный парень, меня такие радуют.
        AI_Output(self, other, "dia_attila_quest1_end_05"); // Кассия сделала правильный выбор, приняв тебя.
        AI_Output(other, self, "dia_attila_quest1_end_06"); // Довольно неожиданно слышать это от ТЕБЯ.
        AI_Output(self, other, "dia_attila_quest1_end_07"); // В нашей гильдии уважают репутацию, поэтому все задания должны выполнятся в срок.
        MIS_Attilaquest1 = LOG_SUCCESS;
        THIEF_REPUTATION += 1;
        Log_SetTopicStatus(TOPIC_Attila_quest1,LOG_SUCCESS);
        B_LogEntry(TOPIC_Attila_quest1, "Я выполнил задание Аттилы.");
        B_CloseTopic_Now(TOPIC_Attila_quest1,MIS_Attilaquest1,0,2);
        self.aivar[AIV_DROPDEADANDKILL] = true;
        B_GivePlayerXP(300);
        B_GiveInvItems(self,other, ItMi_Gold, 300);
        AI_StopProcessInfos(self);
    };
    if (MIS_Attilaquest1 == 2)
    {
        AI_Output(self, other, "dia_attila_quest1_end_08"); // Ты хоть и выполнил задание, но с задержкой.
        AI_Output(self, other, "dia_attila_quest1_end_09"); // Это плохо скажется на нашей репутации, но я могу это уладить за небольшую плату. В противном случае тебе придётся понести наказание
        AI_Output(other, self, "dia_attila_quest1_end_10"); // И сколько я должен заплатить?
        AI_Output(self, other, "dia_attila_quest1_end_11"); // 200 золотых.
        info_clearchoices(dia_attila_quest1_end);
        Info_AddChoice(dia_attila_quest1_end,"Я отказываюсь платить.",dia_attila_quest1_end_no);
        if(npc_hasitems(hero,ItMi_Gold) >= 200)
        {
            Info_AddChoice(dia_attila_quest1_end,"Я заплачу.",dia_attila_quest1_end_yes);
        }
        else
        {
            Info_AddChoice(dia_attila_quest1_end,"У меня нет столько золота.",dia_attila_quest1_end_nogold);
        };
    };
};

func void dia_attila_quest1_end_no()
{
    AI_Output(other, self, "dia_attila_quest1_end_12");     // Я отказываюсь платить
    AI_Output(self, other, "dia_attila_quest1_end_13");     // Ты об этом пожалеешь.
    MIS_Attilaquest1 = LOG_FAILED;
    ThiefGuildOffended = true;
    B_Logentry_Failed(TOPIC_Attila_quest1);
    self.aivar[AIV_DROPDEADANDKILL] = false;
    npc_removeinvitems(hero, ItMi_AttilaPocket, 1);
    AI_StopProcessInfos(self);
    B_Attack(self,hero,AR_NONE,1);
};

func void dia_attila_quest1_end_nogold()
{
    AI_Output(other, self, "dia_attila_quest1_end_14");     // У меня нет столько золота
    AI_Output(self, other, "dia_attila_quest1_end_13");     // Ты об этом пожалеешь.
    MIS_Attilaquest1 = LOG_FAILED;
    ThiefGuildOffended = true;
    B_Logentry_Failed(TOPIC_Attila_quest1);
    self.aivar[AIV_DROPDEADANDKILL] = false;
    npc_removeinvitems(hero, ItMi_AttilaPocket, 1);
    AI_StopProcessInfos(self);
    B_Attack(self,hero,AR_NONE,1);
};

func void dia_attila_quest1_end_yes()
{
    AI_Output(other, self, "dia_attila_quest1_end_14");     // Хорошо, вот держи 200 золотых.
    AI_Output(self, other, "dia_attila_quest1_end_13");     // Ты правильно поступил, за ошибки нужно платить.
    MIS_Attilaquest1 = LOG_SUCCESS;
    THIEF_REPUTATION += 1;
    Log_SetTopicStatus(TOPIC_Attila_quest1,LOG_SUCCESS);
    B_LogEntry(TOPIC_Attila_quest1, "Я выполнил задание Аттилы, хоть и с задержкой");
    B_CloseTopic_Now(TOPIC_Attila_quest1,MIS_Attilaquest1,0,2);
    self.aivar[AIV_DROPDEADANDKILL] = true;
    B_GivePlayerXP(200);
    AI_StopProcessInfos(self);
};
--- Добавлено: ---

На первый взгляд он выглядит довольно примитивно(отнеси,передай), но тут будут последствия, если его запороть или сделать не вовремя.
То что один участник ги воров нападает на собрата это приемлемо? За такие действия из ги по хорошему выгонять надо или Кассии штраф вывешивать, все разборки через неё должны быть, иначе это может нарушить положение дел внутри ги и разладить её участников и прочие моменты, не зря обычно за проступки и прочее несут ответственность перед главами или более высшими чинами в той или иной структуре. Без обид, но квест вообще не реалистичен и высосан из пальца, остальные твои квесты в атмосфере и интересные, этот вообще непонятно зачем и почему. Ну как и осада с перевооружением, но они хотя бы некий драйв дают любителям замесов, а этот квест непонимание вносит, если бы такой беспредел в ги был, она давно бы развалилась, что один согильдиец мочит другого.
 
Последнее редактирование:

Divik

Паладин
Участник форума
Регистрация
21 Авг 2022
Сообщения
4.194
Реакции
1.058
Баллы
273
Лучшие ответы
29
#35
На первый взгляд - ГГ не мир спасает, а подрядился в воровскую гильдию мальчиком на побегушках, хоть и с последствиями за то, что побегушник он медлительный или, наоборот, очень резво взялся за поручение. Ладно бы последствия были и у другой гильдии, среди наемников например. Аттила может Дару пожаловался, что вот поручал одному тормозу принести тебе подарок, а он заватил, с него спроси. И вдруг ты пришел на ферму Онара, а тут Дар в хлам обкуренный вдруг на тебя нападает, типа "я слышал, что ты задерживаешь товары от нашего общего друга, а я между тем очень в них нуждался, а ты...ты! Сейчас я тебя накажу!" вытаскивает меч и ...анимация пьяного Дара, пытается тебя ударить, ты его бьешь, лутаешь.

Проходит глава, в следующей главе бежишь мимо Дара, а если ты выполнил для него квест про знак отличия, ну тот, где он хочет выпендриться перед Ли, что он крутой боец и хочет стать телохранителем Ли - есть ведь такой квест...вот его доделать, ты принес ему жетон элитного орка, окажется что он отнес его Ли, и правда теперь он курит уже не за кухней, а на балконе дома Онара - и Ли говорит тебе - ты обманул моего телохранителя, на тебе, на!
Вот это последствия, понимаю :)
 

osipov_jenya

Наемник
Участник форума
Регистрация
27 Окт 2018
Сообщения
726
Реакции
614
Баллы
164
Лучшие ответы
0
#36
Лет через 10)))когда Готика 2 обрастёт кучей квестов и их пересечений, а пока тратить на это время нет смысла
 
Автор
Автор
~𝔻𝕒𝕣𝕜𝕊𝕚𝕕𝕖~

~𝔻𝕒𝕣𝕜𝕊𝕚𝕕𝕖~

Хранитель мира
Почётный пользователь
Участник форума
Регистрация
17 Мар 2022
Сообщения
8.148
Реакции
4.759
Баллы
632
Лучшие ответы
292
#37
То что один участник ги воров нападает на собрата это приемлемо?
Ну, "собрат" это сильно сказано. ГГ там даже не дух, а запах на птичьих правах. Чтобы за него руководство впряглось это ещё надо имя "заработать".
 

osipov_jenya

Наемник
Участник форума
Регистрация
27 Окт 2018
Сообщения
726
Реакции
614
Баллы
164
Лучшие ответы
0
#38
Вообще реплики вставлять довольно сложно в игру,они глубоко вшиты в готовве скрипты и лезть туда с дополнениями сложно,проще квест написать(
--- Добавлено: ---

я имею ввиду реплики,не относящиеся к прямому диалогу нпс с героем.но диалог просто на поговорить можно сделать.но нет желания
 

deadcorpseeat

Труженик
Участник форума
Регистрация
27 Май 2020
Сообщения
277
Реакции
25
Баллы
36
Лучшие ответы
0
#39
Первый квест готов)
CSS:
const string TOPIC_Attila_quest1 = "Аттила и Дар";
var int MIS_Attilaquest1;
var int attilaquest1day;
var int ThiefGuildOffended;

instance ItMi_AttilaPocket(C_Item)
{
    name = "Кошелек для Дара";
    mainflag = ITEM_KAT_NONE;
    flags = ITEM_MULTI | ITEM_MISSION;
    value = 1;
    visual = "ItMi_Pocket_Medium.3ds";
    material = MAT_LEATHER;
    description = name;
    text[4] = "Кошелек Аттилы.";
    inv_animate = 1;
    setitemvartrue(ItMi_AttilaPocket, BIT_ITEM_QUESTITEM);
};

instance dia_attila_quest1_start(C_INFO)
{
    npc         = Vlk_494_Attila;
    condition     = dia_attila_quest1_start_condition;
    information = dia_attila_quest1_start1_info;
    important     = true;
};

func int dia_attila_quest1_start_condition()
{
    if (is_lovcach == TRUE) {
        return TRUE;
    };
};

func void dia_attila_quest1_start1_info()
{
    AI_Output(self, other, "dia_attila_quest1_start_00");     // Погоди немного, кое что хочу тебе поручить.
    AI_Output(other, self, "dia_attila_quest1_start_01");     // Вот и встретились, как ты и говорил.
    AI_Output(self, other, "dia_attila_quest1_start_02");     // И это хорошо для тебя (улыбается)
    AI_Output(self, other, "dia_attila_quest1_start_03");     // Ладно, к делу. Отнеси этот кошелёк нашему коллеге на ферму Онара.
    AI_Output(other, self, "dia_attila_quest1_start_04");     // Как зовут вашего "коллегу"?
    AI_Output(self, other, "dia_attila_quest1_start_05");     // Не перебивай, я не закончил. Его зовут Дар, знаешь его?
    if(Npc_KnowsInfo(other,dia_dar_hallo))
    {
        AI_Output(other, self, "dia_attila_quest1_start_06");     // Да, я уже говорил с ним. Его проблема - он любит покурить.
        AI_Output(self, other, "dia_attila_quest1_start_07");     // ДА!!!! Точно это он (смеётся)
    }
    else
    {
        AI_Output(other, self, "dia_attila_quest1_start_08");     // Нет, я не знаю такого.
        AI_Output(self, other, "dia_attila_quest1_start_09");     // Ну вот будет повод познакомиться.
    };
    AI_Output(self, other, "dia_attila_quest1_start_10");     // Передай ему этот кошелёк, у тебя на это 2 дня. Если опоздаешь - по голове не поглажу (улыбается)
    attilaquest1day = Wld_GetDay();
    MIS_Attilaquest1 = 1;
    B_GiveInvItems(self, hero, ItMi_AttilaPocket, 1);
    Log_CreateTopic(TOPIC_Attila_quest1,LOG_MISSION);
    Log_SetTopicStatus(TOPIC_Attila_quest1,LOG_Running);
    B_LogEntry(TOPIC_Attila_quest1, "Аттила дал мне 2 дня, чтобы я доставил кошелёк Дару на ферму Онару.");
};

instance dia_dar_attila_quest1(C_INFO)
{
    npc         = Sld_810_Dar;
    nr             = 2;
    condition     = dia_dar_attila_quest1_condition;
    information = dia_dar_attila_quest1_info;
    permanent     = FALSE;
    description = "У меня для тебя посылка Аттилы";
};

func int dia_dar_attila_quest1_condition()
{
    if((MIS_Attilaquest1 == 1) && npc_hasitem(hero,ItMi_AttilaPocket))
    {
        return TRUE;
    };
};

func void dia_dar_attila_quest1_info()
{
    var int daynow;
    daynow = Wld_GetDay();
    AI_Output(other, self, "dia_dar_attila_quest1_00");     // У меня для тебя посылка от Аттилы.
    if (daynow <= attilaquest1day + 2)
    {
        AI_Output(self, other, "dia_dar_attila_quest1_01"); // Как всегда вовремя, приятно с ним иметь дело.
        MIS_Attilaquest1 = 4;
        B_LogEntry(TOPIC_Attila_quest1, "В отведённый срок передал кошелек Дару. Можно спокойно возвращаться к Аттиле.");
    };
    if ((daynow > attilaquest1day + 2) && (daynow <= attilaquest1day + 4))
    {
        AI_Output(self, other, "dia_dar_attila_quest1_02"); // Почему задержка? Странно...
        MIS_Attilaquest1 = 3;
        B_LogEntry(TOPIC_Attila_quest1, "С небольшой задержкой передал кошелек Дару. Думаю Аттила будет не в восторге.");
    };
    if (daynow > attilaquest1day + 4)
    {
        AI_Output(self, other, "dia_dar_attila_quest1_03"); // Мдаа, гильдия нынче не та. Придётся это иметь ввиду в следующий раз.(раздосадованный)
        MIS_Attilaquest1 = 2;
        B_LogEntry(TOPIC_Attila_quest1, "С задержкой передал кошелек Дару. Думаю меня ждут неприятности от Аттилы.");
    };
   
};

instance dia_attila_quest1_end(C_INFO)
{
    npc         = Vlk_494_Attila;
    condition     = dia_attila_quest1_end_condition;
    information = dia_attila_quest1_end_info;
    important     = true;
};

func int dia_attila_quest1_end_condition()
{
    var int daynow;
    daynow = Wld_GetDay();
    if (((MIS_Attilaquest1 == 1) && (daynow > attilaquest1day + 2)) || (MIS_Attilaquest1 == 2) || (MIS_Attilaquest1 == 3) || (MIS_Attilaquest1 == 4))
    {
        return TRUE;
    };
};

func void dia_attila_quest1_end_info()
{
    var int daynow;
    daynow = Wld_GetDay();
    if (((MIS_Attilaquest1 == 1) && (daynow > attilaquest1day + 2)) || (MIS_Attilaquest1 == 3))
    {
        AI_Output(self, other, "dia_attila_quest1_end_00"); // Смотрю ты не серьёзно отнёсся к моему заданию....
        AI_Output(self, other, "dia_attila_quest1_end_01"); // Ну чтож, придётся тебе приподать урок.
        AI_Output(other, self, "dia_attila_quest1_end_02"); // Я...
        AI_Output(self, other, "dia_attila_quest1_end_03"); // Закрой рот, меня не волнуют твои оправдания
        MIS_Attilaquest1 = LOG_FAILED;
        ThiefGuildOffended = true;
        B_Logentry_Failed(TOPIC_Attila_quest1);
        self.aivar[AIV_DROPDEADANDKILL] = false;
        npc_removeinvitems(hero, ItMi_AttilaPocket, 1);
        AI_StopProcessInfos(self);
        B_Attack(self,hero,AR_NONE,1);
    };
    if (MIS_Attilaquest1 == 4)
    {
        AI_Output(self, other, "dia_attila_quest1_end_04"); // Ты довольно ответственный парень, меня такие радуют.
        AI_Output(self, other, "dia_attila_quest1_end_05"); // Кассия сделала правильный выбор, приняв тебя.
        AI_Output(other, self, "dia_attila_quest1_end_06"); // Довольно неожиданно слышать это от ТЕБЯ.
        AI_Output(self, other, "dia_attila_quest1_end_07"); // В нашей гильдии уважают репутацию, поэтому все задания должны выполнятся в срок.
        MIS_Attilaquest1 = LOG_SUCCESS;
        THIEF_REPUTATION += 1;
        Log_SetTopicStatus(TOPIC_Attila_quest1,LOG_SUCCESS);
        B_LogEntry(TOPIC_Attila_quest1, "Я выполнил задание Аттилы.");
        B_CloseTopic_Now(TOPIC_Attila_quest1,MIS_Attilaquest1,0,2);
        self.aivar[AIV_DROPDEADANDKILL] = true;
        B_GivePlayerXP(300);
        B_GiveInvItems(self,other, ItMi_Gold, 300);
        AI_StopProcessInfos(self);
    };
    if (MIS_Attilaquest1 == 2)
    {
        AI_Output(self, other, "dia_attila_quest1_end_08"); // Ты хоть и выполнил задание, но с задержкой.
        AI_Output(self, other, "dia_attila_quest1_end_09"); // Это плохо скажется на нашей репутации, но я могу это уладить за небольшую плату. В противном случае тебе придётся понести наказание
        AI_Output(other, self, "dia_attila_quest1_end_10"); // И сколько я должен заплатить?
        AI_Output(self, other, "dia_attila_quest1_end_11"); // 200 золотых.
        info_clearchoices(dia_attila_quest1_end);
        Info_AddChoice(dia_attila_quest1_end,"Я отказываюсь платить.",dia_attila_quest1_end_no);
        if(npc_hasitems(hero,ItMi_Gold) >= 200)
        {
            Info_AddChoice(dia_attila_quest1_end,"Я заплачу.",dia_attila_quest1_end_yes);
        }
        else
        {
            Info_AddChoice(dia_attila_quest1_end,"У меня нет столько золота.",dia_attila_quest1_end_nogold);
        };
    };
};

func void dia_attila_quest1_end_no()
{
    AI_Output(other, self, "dia_attila_quest1_end_12");     // Я отказываюсь платить
    AI_Output(self, other, "dia_attila_quest1_end_13");     // Ты об этом пожалеешь.
    MIS_Attilaquest1 = LOG_FAILED;
    ThiefGuildOffended = true;
    B_Logentry_Failed(TOPIC_Attila_quest1);
    self.aivar[AIV_DROPDEADANDKILL] = false;
    npc_removeinvitems(hero, ItMi_AttilaPocket, 1);
    AI_StopProcessInfos(self);
    B_Attack(self,hero,AR_NONE,1);
};

func void dia_attila_quest1_end_nogold()
{
    AI_Output(other, self, "dia_attila_quest1_end_14");     // У меня нет столько золота
    AI_Output(self, other, "dia_attila_quest1_end_13");     // Ты об этом пожалеешь.
    MIS_Attilaquest1 = LOG_FAILED;
    ThiefGuildOffended = true;
    B_Logentry_Failed(TOPIC_Attila_quest1);
    self.aivar[AIV_DROPDEADANDKILL] = false;
    npc_removeinvitems(hero, ItMi_AttilaPocket, 1);
    AI_StopProcessInfos(self);
    B_Attack(self,hero,AR_NONE,1);
};

func void dia_attila_quest1_end_yes()
{
    AI_Output(other, self, "dia_attila_quest1_end_14");     // Хорошо, вот держи 200 золотых.
    AI_Output(self, other, "dia_attila_quest1_end_13");     // Ты правильно поступил, за ошибки нужно платить.
    MIS_Attilaquest1 = LOG_SUCCESS;
    THIEF_REPUTATION += 1;
    Log_SetTopicStatus(TOPIC_Attila_quest1,LOG_SUCCESS);
    B_LogEntry(TOPIC_Attila_quest1, "Я выполнил задание Аттилы, хоть и с задержкой");
    B_CloseTopic_Now(TOPIC_Attila_quest1,MIS_Attilaquest1,0,2);
    self.aivar[AIV_DROPDEADANDKILL] = true;
    B_GivePlayerXP(200);
    AI_StopProcessInfos(self);
};
--- Добавлено: ---

На первый взгляд он выглядит довольно примитивно(отнеси,передай), но тут будут последствия, если его запороть или сделать не вовремя.
это какой язык? С++? хотя сверху CSS указан. Хотел бы тоже разобраться, чтобы заняться моддингом/программированием
 

tilil2670

Рыцарь
Участник форума
Регистрация
25 Авг 2022
Сообщения
2.566
Реакции
739
Баллы
176
Лучшие ответы
29
#40
Ну, "собрат" это сильно сказано. ГГ там даже не дух, а запах на птичьих правах. Чтобы за него руководство впряглось это ещё надо имя "заработать".
Это проблема готики в целом, гг в любой гильдии кем бы не был, отношение к нему и квесты как у чужака, хоть поднимется в обществе, ничего не меняется. В готике много гильдий, но для них у гг нет ролеплея. То есть как сырая альфа, где не сделаны развилки от статуса гг.

Насчёт этого квеста, если гг совершил ошибку, все из ги воров должны перестать говорить с гг, учить, говорить будут только чтобы он с Кассией поговорил раз виноват, а она скажет штраф плати. Нападение убрать, и развилку что долго нёс тоже, слишком часто игроки спотыкаются на этом, с тем же клыком сколько проблем было.
 
Сверху Снизу