Новости Большое интервью с HotA Crew - часть 2
  • 1.091
  • 0
HotA Crew о Кронверке и будущих обновлениях (часть 2) Какие герои будут вести армии Кронверка? Герои-воины зовутся Вожди, маги — Старейшины. Их параметры и способности подчеркнут сильные стороны...
Новости Большое интервью с HotA Crew - часть 1
  • 920
  • 0
HotA Crew о Кронверке и будущих обновлениях Важно: весь контент по Кронверку и системе событий находится в разработке, и может ещё поменяться. Итак, следующим городом будет Кронверк. Почему...
С Новым 2025 годом!
  • 2.590
  • 18
Вот и завершается этот год - местами странный, местами крутой, но точно запоминающийся, полный неожиданностей и ярких моментов. Мы благодарны вам за то, что вы были рядом, за все наши совместные...
Новости В Heroes of Might and Magic 3 теперь можно поиграть в веб-браузере
  • 1.367
  • 3
Совсем недавно энтузиасты из России смогли портировать игру HoMM3 в браузер. Причем веб-версия позволяет пройти все сюжетные компании и даже поиграть по сети. Чтобы сыграть в классику необходимо...

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

TraZag

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

Divik

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

osipov_jenya

Наемник
Участник форума
Регистрация
27 Окт 2018
Сообщения
659
Реакции
553
Баллы
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.181
Реакции
564
Баллы
171
Лучшие ответы
6
#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
Сообщения
3.804
Реакции
942
Баллы
198
Лучшие ответы
11
#35
На первый взгляд - ГГ не мир спасает, а подрядился в воровскую гильдию мальчиком на побегушках, хоть и с последствиями за то, что побегушник он медлительный или, наоборот, очень резво взялся за поручение. Ладно бы последствия были и у другой гильдии, среди наемников например. Аттила может Дару пожаловался, что вот поручал одному тормозу принести тебе подарок, а он заватил, с него спроси. И вдруг ты пришел на ферму Онара, а тут Дар в хлам обкуренный вдруг на тебя нападает, типа "я слышал, что ты задерживаешь товары от нашего общего друга, а я между тем очень в них нуждался, а ты...ты! Сейчас я тебя накажу!" вытаскивает меч и ...анимация пьяного Дара, пытается тебя ударить, ты его бьешь, лутаешь.

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

osipov_jenya

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

~𝔻𝕒𝕣𝕜𝕊𝕚𝕕𝕖~

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

osipov_jenya

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

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

deadcorpseeat

Труженик
Участник форума
Регистрация
27 Май 2020
Сообщения
278
Реакции
23
Баллы
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.181
Реакции
564
Баллы
171
Лучшие ответы
6
#40
Ну, "собрат" это сильно сказано. ГГ там даже не дух, а запах на птичьих правах. Чтобы за него руководство впряглось это ещё надо имя "заработать".
Это проблема готики в целом, гг в любой гильдии кем бы не был, отношение к нему и квесты как у чужака, хоть поднимется в обществе, ничего не меняется. В готике много гильдий, но для них у гг нет ролеплея. То есть как сырая альфа, где не сделаны развилки от статуса гг.

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