• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык

Готика 2: НВ Неофициальное обновление для Г2 НВ

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.124
Благодарности
3.215
Баллы
485
  • Первое сообщение
  • #1
Неофициальное обновление для игры "Готика 2: Ночь Ворона" представляет собой модификацию, направленную на исправление многочисленных ошибок и недоработок игры различной степени критичности. Данное обновление не включает новые квесты или глобальные изменения баланса и рекомендуется всем, кто хочет играть в Г2НВ без багов.
Разработка обновления ведется с 2005 года и по сегодняшний день. Камрад Efectivo (aka Нефариус) русифицировал патч от Fizzban и внес несколько дополнительных исправлений (так что получилась не русификация, а самостоятельный продукт на его основе).
В неофициальном обновлении камрад Dimus значительно расширил список исправлений и добавил некоторые улучшения. Дальнейшая работа над обновлением продолжена силами D36.
Также в данную сборку включены исправленные миры от Kvincius (Рудниковая долина, Яркендар, Хоринис и Ирдорат), исправленные шрифты от N1kX, неофициальное исправление русской озвучки от Dimus и полезные плагины для Union от Slavemaster (zBugFixes, zMiscUtils, zPicklockAnis, zTorchControl и другие).

Текущая версия:
29 от 14.08.2023

Ссылки:
Установщик модификации (76.5 МБ);
Версия для Мастерской Steam;
Исходники скриптов и архив релизов.

Установка:
Запустить установщик обновления, указать каталог с установленной игрой и выбрать набор устанавливаемых компонентов.
Внимание: Для того, чтобы все изменения вступили в силу, после установки обновления нужно начать новую игру!

Загрузка текста...

Удаление:
Удалить данное обновление можно через раздел "Программы и компоненты" в панели управления или запустив исполняемый файл G2a_NR_ScriptPatch_v29_uninstall.exe в каталоге с установленной игрой.

Примечания:
1. Для предотвращения возможных конфликтов с различными модами обновление устанавливается в формате модификации, поэтому для её работы необходимо наличие мод-стартера Player Kit. Также настоятельно рекомендуется установить последнюю версию Union;
2. Каждая версия неофициального обновления запускается через GothicStarter.exe отдельно и использует собственные папки сохранений. Удаление разных версий из панели управления также происходит раздельно;
3. Начало новой игры обязательно. Не поддерживаются сохранения, сделанные в оригинале, в любом другом моде или в любой предшествующей версии неофициального обновления.
Игнорирование данного предупреждения может привести к непредсказуемым последствиям: от невозможности продвижения по сюжету до вылетов.
Для тестирования доступна предварительная сборка 30 версии неофициального обновления. Подробности здесь.
 
Последнее редактирование:

Phil_Gaba

Участник форума
Регистрация
24 Апр 2016
Сообщения
56
Благодарности
35
Баллы
180
Тут у меня остались некоторые скриншоты с прохождения, кое-какие моменты хотелось бы исправить
1. Вечером на ферме наемники с крестьянином не могут разобраться кто с кем разговаривает, имхо нужно подправить распорядки
1.jpg
2. Торбен и Элврих не могут разобраться кто сидит на скамейке после возвращения последнего. То же самое касается работы с пилой и молотком, часто перекрывают друг друга.
2.jpg

4.jpg
3. Имхо Фестера после окончания квеста с полевыми жуками отправить сидеть с Сентензой, ну или еще как-то его занять. Зачем ему продолжать тренироваться если жуки убиты? Ну или зачем ему по-прежнему тренироваться на дороге перед их логовом?
3.jpg
5. Неправильный субтитр для данной фразы. Вопрос задает и произносит ГГ, а субтитр как будто Диего говорит.
5.jpg
6. Видимо у меня бзик по поводу распорядков, но уж извиняйте. Билгот и Диего не могут поделить место где кому сидеть перед Проходом.
6.jpg
7. Какое-то неправильное освещение сзади сарая на ферме Онара
7.jpg
8. Если в лагере бандитов отправить Финна работать в шахту, Фортуно становится не с кем говорить
8.jpg
Дополнено: И ещё. Знаю, что орка в каньоне Яркендара перед библиотекой Ученых, который застревает в текстурах, уже правили, но можно ли его еще раз проверить? У меня в это прохождение случилась престранная ситуация - когда с пиратами зачищал каньон, этот орк вылез по пояс из текстур так что его пираты не могли в фокус взять и просто бегали вокруг него. Орк зарубил Скипа. Пришлось его марвином воскрешать, и у меня пропал из дневника невыполненный квест "Скипа мучает жажда" на 20 бутылок грога. В итоге квест я так и не выполнил. Хотя возможно я что-то путаю и квест пропал из дневника по другой причине, но орка все же лучше проверить.:)
 
Последнее редактирование:

wizmet1_2

Участник форума
Регистрация
17 Янв 2019
Сообщения
24
Благодарности
4
Баллы
155
В четвертой главе Сильвио берет Безымянного на понт, что тот не сможет убить ледяных големов, а ГГ этих големов давно убил в третьей главе. Подхожу к пустому месту где были големы, там валяются мертвые онды. Может имеет смысл здесь сделать проверку, типа если големы не зачищены - всё ОК, если мертвы - заспонить хотя бы одного нового, чтоб ГГ мог выполнить задание Сильвио, а то как-то глупо получается.
 

Мастер Готики

Почетный форумчанин
Регистрация
16 Сен 2006
Сообщения
5.762
Благодарности
5.488
Баллы
730
wizmet1_2, кстати, в Г1 этот момент предусмотрен для тролля, которого помогает завалить Диего.
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.153
Баллы
915
5. Неправильный субтитр для данной фразы. Вопрос задает и произносит ГГ, а субтитр как будто Диего говорит.
В этой фразе перепутаны местами указатели self и other:
Daedalus:
        if(Npc_KnowsInfo(other,DIA_Parcival_Diego))
        {
            AI_Output(self,other,"DIA_DiegoOw_Garond_11_03");    //Конечно, что ты хочешь знать?
            AI_Output(self,other,"DIA_DiegoOw_Silvestro_15_00");    //Что ты знаешь о руде Сильвестро?
        };
В четвертой главе Сильвио берет Безымянного на понт, что тот не сможет убить ледяных големов, а ГГ этих големов давно убил в третьей главе. Подхожу к пустому месту где были големы, там валяются мертвые онды. Может имеет смысл здесь сделать проверку, типа если големы не зачищены - всё ОК, если мертвы - заспонить хотя бы одного нового, чтоб ГГ мог выполнить задание Сильвио, а то как-то глупо получается.
Опять эти старые проблемы! Когда-то я решил их установкой временного бессмертия охраняющим вход в НЛ квестовым големам, но D36 зачем-то отменила это решение и их стало возможно завалить в предыдущих главах.
 

Мастер Готики

Почетный форумчанин
Регистрация
16 Сен 2006
Сообщения
5.762
Благодарности
5.488
Баллы
730
Когда-то я решил их установкой временного бессмертия охраняющим вход в НЛ квестовым големам
А почему просто не включить в респаун 4-й главы одного ледового голема на входе в НЛ и добавить его в список тех, которых считает Сильвио?
 

Коляныч

Участник форума
Регистрация
4 Янв 2018
Сообщения
379
Благодарности
116
Баллы
210
Опять эти старые проблемы! Когда-то я решил их установкой временного бессмертия охраняющим вход в НЛ квестовым големам, но D36 зачем-то отменила это решение и их стало возможно завалить в предыдущих главах.
Там с големами тупиковая ситуация. Все почему то пытаются их "завалить" ещё при первом посещении Миненталя... но, напарываются на их бессмертие и получают хорошего пенделя, в итоге. А если сделать их уязвимыми, то потом плачутся, что упустили кучу опыта и диалоги с Сильвио во время охоты на драконов.
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.153
Баллы
915
А почему просто не включить в респаун 4-й главы одного ледового голема на входе в НЛ и добавить его в список тех, которых считает Сильвио?
Одного маловато будет, потому что Сильвио говорит о ледяных гигантах, так что спаунить придётся обоих.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.331
Благодарности
3.178
Баллы
525
А почему просто не включить в респаун 4-й главы одного ледового голема на входе в НЛ и добавить его в список тех, которых считает Сильвио?
Можно вообще не вставлять конкретно этих големов в игровой мир до 4-й главы. Однако полностью логику диалога с Сильвио это не восстанавливает, поскольку ГГ может сперва разделаться с големами, а потом подойти для разговора к Сильвио. Возможно, после убиения этих ледяных големов до разговора с Сильвио, у него автоматом должен изменяться распорядок на распорядок ожидания у ворот бывшего НЛ. Также должен быть заблокирован диалог у костра о живых големах. :oops:
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.843
Благодарности
5.268
Баллы
910
Хорошее решение предложил ElderGamer
Надо добавить в zs_dead
Daedalus:
 if(Kapitel == 4 && MIS_DJG_Sylvio_KillIceGolem != LOG_Running)
    {
        if((Hlp_GetInstanceID(self) == Hlp_GetInstanceID(IceGolem_Sylvio1)) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(IceGolem_Sylvio2)))
        {
            B_StartOtherRoutine(DJG_Bullco,"IceWait1");
            B_StartOtherRoutine(DJG_Sylvio,"IceWait1");
            MIS_DJG_Sylvio_KillIceGolem = LOG_SUCCESS;
            DJG_Sylvio_ende1 = FALSE;
        };
    };
Переделанный диалог под все это. Изменены условия, добавлен смешанный диалог, если ГГ убил раньше големов
Daedalus:
instance DIA_SylvioDJG_EXIT(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 999;
    condition = DIA_SylvioDJG_EXIT_Condition;
    information = DIA_SylvioDJG_EXIT_Info;
    important = FALSE;
    permanent = TRUE;
    description = Dialog_Ende;
};


func int DIA_SylvioDJG_EXIT_Condition()
{
    return TRUE;
};

func void DIA_SylvioDJG_EXIT_Info()
{
    AI_StopProcessInfos(self);
};


instance DIA_SylvioDJG_HelloAgain(C_Info)
{
    npc = DJG_700_Sylvio;
    condition = DIA_SylvioDJG_HelloAgain_Condition;
    information = DIA_SylvioDJG_HelloAgain_Info;
    important = TRUE;
};


func int DIA_SylvioDJG_HelloAgain_Condition()
{
    if(!Npc_IsDead(IceDragon) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE))
    {
        return TRUE;
    };
};

func void DIA_SylvioDJG_HelloAgain_Info()
{
    if((other.guild == GIL_SLD) || (other.guild == GIL_DJG))
    {
        AI_Output(self,other,"DIA_SylvioDJG_HelloAgain_09_00");    //Ох, будь я проклят! Ты тоже решил подзаработать, ха? Я знал это! У тебя душа наемника.
        AI_Output(self,other,"DIA_SylvioDJG_HelloAgain_09_01");    //Послушай, если ты думаешь, что загребешь здесь кучу золота, ты жестоко ошибаешься. Я был здесь первым.
    }
    else if(other.guild == GIL_KDF)
    {
        AI_Output(self,other,"DIA_SylvioDJG_HelloAgain_09_02");    //Эй, ты! Меня тошнит от магов! Иди куда-нибудь еще! Здесь для тебя ничего нет.
    }
    else
    {
        AI_Output(self,other,"DIA_SylvioDJG_HelloAgain_09_03");    //Эй ты, паладин! Возвращайся в свою шахту. Здесь для тебя ничего нет.
    };
    AI_Output(other,self,"DIA_SylvioDJG_HelloAgain_15_04");    //Понял. Никто не хочет расставаться с награбленным.
    AI_Output(self,other,"DIA_SylvioDJG_HelloAgain_09_05");    //Ты сам сказал это. Исчезни.
};


instance DIA_Sylvio_VERSAGER(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 6;
    condition = DIA_Sylvio_VERSAGER_Condition;
    information = DIA_Sylvio_VERSAGER_Info;
    description = "А что, если я не исчезну?";
};


func int DIA_Sylvio_VERSAGER_Condition()
{
    if(Npc_KnowsInfo(other,DIA_SylvioDJG_HelloAgain) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE))
    {
        return TRUE;
    };
};

func void DIA_Sylvio_VERSAGER_Info()
{
    AI_Output(other,self,"DIA_Sylvio_VERSAGER_15_00");    //А что, если я не исчезну?
    AI_Output(self,other,"DIA_Sylvio_VERSAGER_09_01");    //Не строй из себя крутого, выскочка, иначе тебя ждет такой же конец, как вот тех неудачников, лежащих в снегу.
};

var int DJG_Sylvio_ende1;

instance DIA_Sylvio_DEINELEUTE(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 7;
    condition = DIA_Sylvio_DEINELEUTE_Condition;
    information = DIA_Sylvio_DEINELEUTE_Info;
    description = "Это твои люди?";
};


func int DIA_Sylvio_DEINELEUTE_Condition()
{
    if(Npc_KnowsInfo(other,DIA_Sylvio_VERSAGER) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE) && (MIS_DJG_Sylvio_KillIceGolem != LOG_SUCCESS))
    {
        return TRUE;
    };
};

func void DIA_Sylvio_DEINELEUTE_Info()
{
    AI_Output(other,self,"DIA_Sylvio_DEINELEUTE_15_00");    //Это твои люди?
    AI_Output(self,other,"DIA_Sylvio_DEINELEUTE_09_01");    //Больше нет. Не такая уж большая потеря. Эти идиоты все равно мало что стоили.
    //новое
    DJG_Sylvio_ende1 = TRUE;
};


instance DIA_Sylvio_WASISTPASSIERT(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 8;
    condition = DIA_Sylvio_WASISTPASSIERT_Condition;
    information = DIA_Sylvio_WASISTPASSIERT_Info;
    description = "Что случилось с ними?";
};


func int DIA_Sylvio_WASISTPASSIERT_Condition()
{
    //if(Npc_KnowsInfo(other,DIA_Sylvio_VERSAGER) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE))
    if(Npc_KnowsInfo(other,DIA_Sylvio_VERSAGER) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE) && !Npc_IsDead(IceGolem_Sylvio1) && !Npc_IsDead(IceGolem_Sylvio2))
    {
        return TRUE;
    };
};

func void DIA_Sylvio_WASISTPASSIERT_Info()
{
    AI_Output(other,self,"DIA_Sylvio_WASISTPASSIERT_15_00");    //Что случилось с ними?
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_09_01");    //Они не смогли пройти мимо этих ледяных гигантов. Те затоптали их.
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_09_02");    //Если ты такой крутой, может, ты попробуешь?
    Info_AddChoice(DIA_Sylvio_WASISTPASSIERT,"Хорошо. Почему бы и нет?",DIA_Sylvio_WASISTPASSIERT_ok);
    Info_AddChoice(DIA_Sylvio_WASISTPASSIERT,"Чем это тебе поможет, если я сделаю это?",DIA_Sylvio_WASISTPASSIERT_washastdudavon);
    Info_AddChoice(DIA_Sylvio_WASISTPASSIERT,"Что я за это получу?",DIA_Sylvio_WASISTPASSIERT_warum);
    Info_AddChoice(DIA_Sylvio_WASISTPASSIERT,"Почему ты не расправишься с ними сам?",DIA_Sylvio_WASISTPASSIERT_selbst);
    Log_CreateTopic(TOPIC_SylvioKillIceGolem,LOG_MISSION);
    Log_SetTopicStatus(TOPIC_SylvioKillIceGolem,LOG_Running);
    B_LogEntry(TOPIC_SylvioKillIceGolem,"Сильвио испугался двух ледяных големов у входа в заснеженный район Долины Рудников.");
    MIS_DJG_Sylvio_KillIceGolem = LOG_Running;
//    IceGolem_Sylvio1.flags = 0;
//    IceGolem_Sylvio2.flags = 0;
};

func void DIA_Sylvio_WASISTPASSIERT_selbst()
{
    AI_Output(other,self,"DIA_Sylvio_WASISTPASSIERT_selbst_15_00");    //Почему ты не расправишься с ними сам?
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_selbst_09_01");    //Давай, давай. Не мели чепухи.
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_selbst_09_02");    //По-моему, у тебя дрожат коленки.
    Info_AddChoice(DIA_Sylvio_WASISTPASSIERT,"Я не играю в твои игры.",DIA_Sylvio_WASISTPASSIERT_keinInteresse);
};


var int DJG_Sylvio_PromisedMoney;

func void DIA_Sylvio_WASISTPASSIERT_warum()
{
    AI_Output(other,self,"DIA_Sylvio_WASISTPASSIERT_warum_15_00");    //Что я за это получу?
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_warum_09_01");    //Не знаю. Ну, скажем... 1000 золотых монет. Как тебе это?
    DJG_Sylvio_PromisedMoney = TRUE;
};

func void DIA_Sylvio_WASISTPASSIERT_washastdudavon()
{
    AI_Output(other,self,"DIA_Sylvio_WASISTPASSIERT_washastdudavon_15_00");    //Чем это тебе поможет, если я сделаю это?
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_washastdudavon_09_01");    //Тебе это все равно. Но, отвечая на твой вопрос, скажу: я хочу попасть в этот ледяной район.
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_washastdudavon_09_02");    //К сожалению, на моем пути стоят эти чертовы твари.
    Info_AddChoice(DIA_Sylvio_WASISTPASSIERT,"Что тебе делать в этом ледяном районе?",DIA_Sylvio_WASISTPASSIERT_Eisregion);
};

func void DIA_Sylvio_WASISTPASSIERT_keinInteresse()
{
    AI_Output(other,self,"DIA_Sylvio_WASISTPASSIERT_keinInteresse_NEIN_15_00");    //Я не играю в твои игры.
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_keinInteresse_NEIN_09_01");    //Ах-х. Тогда убирайся отсюда, трус.
    AI_StopProcessInfos(self);
};

func void DIA_Sylvio_WASISTPASSIERT_Eisregion()
{
    AI_Output(other,self,"DIA_Sylvio_WASISTPASSIERT_keinInteresse_15_00");    //Что тебе делать в этом ледяном районе?
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_keinInteresse_09_01");    //Ты когда-нибудь перестанешь задавать вопросы, а? Хорошо, я скажу тебе.
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_keinInteresse_09_02");    //Там, за этими утесами, находится ледяная долина. Ты такой никогда раньше не видел.
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_keinInteresse_09_03");    //Там скрывается ледяной дракон вместе со своей ордой.
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_keinInteresse_09_04");    //Мне нужно это. Так как? Да или нет?
};

func void DIA_Sylvio_WASISTPASSIERT_ok()
{
    AI_Output(other,self,"DIA_Sylvio_WASISTPASSIERT_ok_15_00");    //Хорошо. Почему бы и нет?
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_ok_09_01");    //Тогда поторопись. Я не могу долго ждать.
    AI_StopProcessInfos(self);
};


instance DIA_Sylvio_ICEGOLEMSKILLED(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 9;
    condition = DIA_Sylvio_ICEGOLEMSKILLED_Condition;
    information = DIA_Sylvio_ICEGOLEMSKILLED_Info;
    description = "Твой путь чист! Ледяных гигантов больше нет.";
};


func int DIA_Sylvio_ICEGOLEMSKILLED_Condition()
{
    //if(Npc_IsDead(IceGolem_Sylvio1) && Npc_IsDead(IceGolem_Sylvio2) && (MIS_DJG_Sylvio_KillIceGolem == LOG_Running) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE))
    if(Npc_IsDead(IceGolem_Sylvio1) && Npc_IsDead(IceGolem_Sylvio2) && (MIS_DJG_Sylvio_KillIceGolem == LOG_Running) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE) && (DJG_Sylvio_ende1 == TRUE))
    {
        return TRUE;
    };
};

func void DIA_Sylvio_ICEGOLEMSKILLED_Info()
{
    AI_Output(other,self,"DIA_Sylvio_ICEGOLEMSKILLED_15_00");    //Твой путь чист! Ледяных гигантов больше нет.
    AI_Output(self,other,"DIA_Sylvio_ICEGOLEMSKILLED_09_01");    //Отличная работа. Посмотрим, что там у нас есть.
    if(DJG_Sylvio_PromisedMoney == TRUE)
    {
        AI_Output(other,self,"DIA_Sylvio_ICEGOLEMSKILLED_15_02");    //Минуточку. А как мои деньги?
        AI_Output(self,other,"DIA_Sylvio_ICEGOLEMSKILLED_09_03");    //Всему свое время.
    };
    if(C_BodyStateContains(self,BS_SIT))
    {
        AI_Standup(self);
        B_TurnToNpc(self,other);
    };
    AI_StopProcessInfos(self);
    MIS_DJG_Sylvio_KillIceGolem = LOG_SUCCESS;
    B_GivePlayerXP(XP_SylvioDJGIceGolemDead);
    Npc_ExchangeRoutine(self,"IceWait1");
    if(!Npc_IsDead(DJG_Bullco))
    {
        if(C_BodyStateContains(DJG_Bullco,BS_SIT))
        {
            AI_Standup(DJG_Bullco);
        };
        B_StartOtherRoutine(DJG_Bullco,"IceWait1");
    };
};


instance DIA_Sylvio_WASJETZT(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 10;
    condition = DIA_Sylvio_WASJETZT_Condition;
    information = DIA_Sylvio_WASJETZT_Info;
    description = "Что еще?";
};


func int DIA_Sylvio_WASJETZT_Condition()
{
    //if((MIS_DJG_Sylvio_KillIceGolem == LOG_SUCCESS) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE))
    if((MIS_DJG_Sylvio_KillIceGolem == LOG_SUCCESS) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE) && (DJG_Sylvio_ende1 == TRUE))
    {
        return TRUE;
    };
};

func void DIA_Sylvio_WASJETZT_Info()
{
    AI_Output(other,self,"DIA_Sylvio_WASJETZT_15_00");    //Что еще?
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_09_01");    //Ну. Мне что-то обстановка там не очень нравится.
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_09_02");    //Будет лучше всего, если ты пойдешь вперед, а я пойду за тобой.
//    Info_AddChoice(DIA_Sylvio_WASJETZT,"Хорошо, пошли.",DIA_Sylvio_WASJETZT_ok);
    Info_AddChoice(DIA_Sylvio_WASJETZT,"Я, пожалуй, пойду.",DIA_Sylvio_WASJETZT_ok);
    Info_AddChoice(DIA_Sylvio_WASJETZT,"Ты боишься?",DIA_Sylvio_WASJETZT_trennen);
    Info_AddChoice(DIA_Sylvio_WASJETZT,"Я не собираюсь делать всю грязную работу за тебя.",DIA_Sylvio_WASJETZT_nein);
    if(DJG_Sylvio_PromisedMoney == TRUE)
    {
        Info_AddChoice(DIA_Sylvio_WASJETZT,"Сначала я хочу увидеть свои деньги.",DIA_Sylvio_WASJETZT_Geld);
    };
};

func void DIA_Sylvio_WASJETZT_trennen()
{
    AI_Output(other,self,"DIA_Sylvio_WASJETZT_trennen_15_00");    //Ты боишься?
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_trennen_09_01");    //Чушь, хватит болтать. Иди вперед.
};

func void DIA_Sylvio_WASJETZT_ok()
{
//    AI_Output(other,self,"DIA_Sylvio_WASJETZT_ok_15_00");    //Хорошо, пошли.
    AI_Output(other,self,"DIA_Attila_Hallo_Ende_15_00");    //Я, пожалуй, пойду.
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_ok_09_01");    //Давай, быстрее!
    AI_StopProcessInfos(self);
};

func void DIA_Sylvio_WASJETZT_nein()
{
    AI_Output(other,self,"DIA_Sylvio_WASJETZT_nein_15_00");    //Я не собираюсь делать всю грязную работу за тебя.
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_nein_09_01");    //Трус!
    AI_StopProcessInfos(self);
};

func void DIA_Sylvio_WASJETZT_Geld()
{
    AI_Output(other,self,"DIA_Sylvio_WASJETZT_Geld_15_00");    //Сначала я хочу увидеть свои деньги.
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_Geld_09_01");    //Когда мы завалим дракона, у тебя будет столько денег, что не сможешь унести.
    Info_AddChoice(DIA_Sylvio_WASJETZT,"Я хочу получить свои деньги сейчас.",DIA_Sylvio_WASJETZT_jetztGeld);
};

func void DIA_Sylvio_WASJETZT_jetztGeld()
{
    AI_Output(other,self,"DIA_Sylvio_WASJETZT_jetztGeld_15_00");    //Я хочу получить свои деньги сейчас.
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_jetztGeld_09_01");    //Либо ты пойдешь впереди меня, либо мне придется разобраться с тобой.
};


//новое
instance DIA_Sylvio_WASJETZT2(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 10;
    condition = DIA_Sylvio_WASJETZT2_Condition;
    information = DIA_Sylvio_WASJETZT2_Info;
    description = "А что ты делаешь здесь?";
};


func int DIA_Sylvio_WASJETZT2_Condition()
{
    if((MIS_DJG_Sylvio_KillIceGolem == LOG_SUCCESS) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE) && (DJG_Sylvio_ende1 == FALSE))
    {
        return TRUE;
    };
};

func void DIA_Sylvio_WASJETZT2_Info()
{
    AI_Output(other,self,"DIA_Gestath_HALLO_was_15_00");    //А что ты делаешь здесь?
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_keinInteresse_09_02");    //Там, за этими утесами, находится ледяная долина. Ты такой никогда раньше не видел.
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_keinInteresse_09_03");    //Там скрывается ледяной дракон вместе со своей ордой.
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_09_01");    //Ну. Мне что-то обстановка там не очень нравится.
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_09_02");    //Будет лучше всего, если ты пойдешь вперед, а я пойду за тобой.
    Info_AddChoice(DIA_Sylvio_WASJETZT2,"Что я за это получу?",DIA_Sylvio_WASJETZT2_warum);
    Info_AddChoice(DIA_Sylvio_WASJETZT2,"Ты боишься?",DIA_Sylvio_WASJETZT2_trennen);
    Info_AddChoice(DIA_Sylvio_WASJETZT2,"Я, пожалуй, пойду.",DIA_Sylvio2_WASJETZT_ok);
    Info_AddChoice(DIA_Sylvio_WASJETZT2,"Я не собираюсь делать всю грязную работу за тебя.",DIA_Sylvio_WASJETZT2_nein);
};

func void DIA_Sylvio_WASJETZT2_warum()
{
    AI_Output(other,self,"DIA_Sylvio_WASISTPASSIERT_warum_15_00");    //Что я за это получу?
    AI_Output(self,other,"DIA_Sylvio_WASISTPASSIERT_warum_09_01");    //Не знаю. Ну, скажем... 1000 золотых монет. Как тебе это?
};


func void DIA_Sylvio_WASJETZT2_trennen()
{
    AI_Output(other,self,"DIA_Sylvio_WASJETZT_trennen_15_00");    //Ты боишься?
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_trennen_09_01");    //Чушь, хватит болтать. Иди вперед.
};

func void DIA_Sylvio_WASJETZT2_nein()
{
    AI_Output(other,self,"DIA_Sylvio_WASJETZT_nein_15_00");    //Я не собираюсь делать всю грязную работу за тебя.
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_nein_09_01");    //Трус!
    AI_StopProcessInfos(self);
};

func void DIA_Sylvio_WASJETZT2_ok()
{
    AI_Output(other,self,"DIA_Attila_Hallo_Ende_15_00");    //Я, пожалуй, пойду.
    AI_Output(self,other,"DIA_Sylvio_WASJETZT_ok_09_01");    //Давай, быстрее!
    AI_StopProcessInfos(self);
};
//-------------------

instance DIA_Sylvio_KOMMSTDU(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 11;
    condition = DIA_Sylvio_KOMMSTDU_Condition;
    information = DIA_Sylvio_KOMMSTDU_Info;
    permanent = TRUE;
    description = "Я думал, ты направляешься в ледяной район.";
};


func int DIA_Sylvio_KOMMSTDU_Condition()
{
    if(Npc_KnowsInfo(other,DIA_Sylvio_WASJETZT) && (IceDragon.aivar[AIV_TalkedToPlayer] == FALSE))
    {
        return TRUE;
    };
};

func void DIA_Sylvio_KOMMSTDU_Info()
{
    AI_Output(other,self,"DIA_Sylvio_KOMMSTDU_15_00");    //Я думал, ты направляешься в ледяной район.
    AI_Output(self,other,"DIA_Sylvio_KOMMSTDU_09_01");    //Иди вперед. А я пойду сзади.
    AI_StopProcessInfos(self);
};


instance DIA_Sylvio_DUHIER(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 11;
    condition = DIA_Sylvio_DUHIER_Condition;
    information = DIA_Sylvio_DUHIER_Info;
    permanent = TRUE;
    description = "Мне не помешала бы твоя помощь.";
};


func int DIA_Sylvio_DUHIER_Condition()
{
    if(!Npc_IsDead(IceDragon) && (IceDragon.aivar[AIV_TalkedToPlayer] == TRUE))
    {
        return TRUE;
    };
};

func void DIA_Sylvio_DUHIER_Info()
{
    AI_Output(other,self,"DIA_Sylvio_DUHIER_15_00");    //Мне не помешала бы твоя помощь.
    AI_Output(self,other,"DIA_Sylvio_DUHIER_09_01");    //Чушь. Ты и так великолепно справляешься.
    AI_StopProcessInfos(self);
};


instance DIA_SylvioDJG_WHATNEXT(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 12;
    condition = DIA_SylvioDJG_WHATNEXT_Condition;
    information = DIA_SylvioDJG_WHATNEXT_Info;
    important = TRUE;
};


func int DIA_SylvioDJG_WHATNEXT_Condition()
{
    if(Npc_IsDead(IceDragon))
    {
        return TRUE;
    };
};

func void DIA_SylvioDJG_WHATNEXT_Info()
{
    AI_Output(self,other,"DIA_SylvioDJG_WHATNEXT_09_00");    //Ледяной дракон мертв! А теперь ты отдашь мне все, что у тебя есть!
    AI_Output(other,self,"DIA_SylvioDJG_WHATNEXT_15_01");    //Ни за что!
    AI_Output(self,other,"DIA_SylvioDJG_WHATNEXT_09_02");    //Это я получу всю славу за убийство ледяного дракона.
    AI_Output(self,other,"DIA_SylvioDJG_WHATNEXT_09_03");    //А твоя маленькая роль в этом деле окончена!
    TOPIC_END_SylvioKillIceGolem = TRUE;
    B_GivePlayerXP(XP_Ambient);
    Info_ClearChoices(DIA_SylvioDJG_WHATNEXT);
    Info_AddChoice(DIA_SylvioDJG_WHATNEXT,Dialog_Ende,DIA_SylvioDJG_WHATNEXT_ATTACK);
};

func void DIA_SylvioDJG_WHATNEXT_ATTACK()
{
    AI_StopProcessInfos(self);
    Npc_SetRefuseTalk(self,60);
    Npc_ExchangeRoutine(self,"Start");
    B_StartOtherRoutine(DJG_Bullco,"Start");
    B_LogEntry(TOPIC_Dragonhunter,"Эта грязная свинья Сильвио собирался присвоить себе мою победу над ледяным драконом. Мы немного повздорили.");
    B_Attack(self,other,AR_KILL,1);
    B_Attack(DJG_Bullco,other,AR_NONE,1);
    if(Biff.aivar[AIV_PARTYMEMBER] == TRUE)
    {
//        B_Attack(Biff,DJG_Sylvio,AR_KILL,1);
        B_Attack(Biff,DJG_Bullco,AR_GuardStopsFight,1);
    };
};


instance DIA_SylvioDJG_BUTNOW(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 13;
    condition = DIA_SylvioDJG_BUTNOW_Condition;
    information = DIA_SylvioDJG_BUTNOW_Info;
    important = TRUE;
    permanent = TRUE;
};


func int DIA_SylvioDJG_BUTNOW_Condition()
{
    if(Npc_IsDead(IceDragon) && !Npc_RefuseTalk(self) && Npc_KnowsInfo(other,DIA_SylvioDJG_WHATNEXT))
    {
        return TRUE;
    };
};

func void DIA_SylvioDJG_BUTNOW_Info()
{
    AI_Output(self,other,"DIA_SylvioDJG_BUTNOW_09_00");    //Пришло время расплаты.
    AI_StopProcessInfos(self);
    Npc_SetRefuseTalk(self,60);
    B_Attack(self,other,AR_KILL,1);
    B_Attack(DJG_Bullco,other,AR_NONE,1);
    if(Biff.aivar[AIV_PARTYMEMBER] == TRUE)
    {
//        B_Attack(Biff,DJG_Sylvio,AR_KILL,1);
        B_Attack(Biff,DJG_Bullco,AR_GuardStopsFight,1);
    };
};


instance DIA_Sylvio_PICKPOCKET(C_Info)
{
    npc = DJG_700_Sylvio;
    nr = 900;
    condition = DIA_Sylvio_PICKPOCKET_Condition;
    information = DIA_Sylvio_PICKPOCKET_Info;
    permanent = TRUE;
    description = Pickpocket_80;
};


func int DIA_Sylvio_PICKPOCKET_Condition()
{
    return C_Beklauen(78,560);
};

func void DIA_Sylvio_PICKPOCKET_Info()
{
    Info_ClearChoices(DIA_Sylvio_PICKPOCKET);
    Info_AddChoice(DIA_Sylvio_PICKPOCKET,Dialog_Back,DIA_Sylvio_PICKPOCKET_BACK);
    Info_AddChoice(DIA_Sylvio_PICKPOCKET,DIALOG_PICKPOCKET,DIA_Sylvio_PICKPOCKET_DoIt);
};

func void DIA_Sylvio_PICKPOCKET_DoIt()
{
    B_Beklauen();
    Info_ClearChoices(DIA_Sylvio_PICKPOCKET);
};

func void DIA_Sylvio_PICKPOCKET_BACK()
{
    Info_ClearChoices(DIA_Sylvio_PICKPOCKET);
};
Возможно есть косяки, но думаю, что примерно так

Стоит ли награждать героя, если он несется, сквозь паровоз? Не думаю. Убил раньше = -опыт и диалоги.
Не убил раньше = молодец
 

heckler

Участник форума
Регистрация
25 Апр 2017
Сообщения
413
Благодарности
109
Баллы
210
Когда-то я решил их установкой временного бессмертия
Тогда игрока смутит что только недавно эти големы были бессмертны, а теперь вдруг нет. Да и вообще делать кого-то иммортал это крайняя мера должна быть, например, для очень-очень важных сюжетных персонажей гибель которых сделает игру непроходимой, но об этом уже побеспокоились
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.153
Баллы
915
Дело в том, что когда я взялся за дальнейшее улучшение скриптпатча для НВ, то старался не использовать в нём новые инстанции персонажей и монстров, предметов и диалогов, которые требуют начала новой игры. К сожалению, часть проблем оказалась не решаемой без введения в игру новых инстанций, например, особого ищущего, который мешает вернуться на ферму Бенгара работникам, которые ушли оттуда вместе с Малаком.
 

IAmError

Участник форума
Регистрация
16 Мар 2019
Сообщения
17
Благодарности
6
Баллы
105
-Болотный голем у разрушенного моста в Яркендаре может бегать только между мостом и ступеньками в храм.
-Каменные стражи в последних (боковых перед входом к Ворону) комнатах храма Аданоса не могут уйти дальше входа в эти комнаты.
-Крыша дома Лемара под определённым углом выдаёт интересный баг.
-Эдгору можно сказать "Я нашёл каменную табличку!" до того, как спросил про неё. После получения квеста от Франко ему сразу можно сообщить о нахождении таблички, но я думаю, что это по сути правильно (если он сообщает о том, как выглядит эта табличка, но я не помню), а вот насчёт Эдгора не уверен.
-Сейчас играл за мага огня. Я не требовал награду ("Не так быстро, мой друг!") после очистки дома Секоба от ищущих. Я увидел, что в магическом письме Пирокара появилось его имя. В диалоге с ним была только та самая фраза, а вот после неё наконец появился стандартный для одержимых вопрос типа "Всё в порядке?". Мне кажется, что появление этой фразы не должно зависеть от требования награды.
Отдельное спасибо за "Телепорт зодчих". Очень уж не хотелось мне загружать предыдущий сейв и бежать покупать свиток превращения в снеппера :)
 
Последнее редактирование:

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.153
Баллы
915
Заметил несколько проблем во входящем в состав обновления моде "Wasteland":
1. Невозможно добраться до пары сундуков на входе в затопленную башню - мешает ведущий внутрь башни затопленный туннель.
2. Висят в воздухе пять деревьев поблизости от башни Ксардаса. Насколько я понял, они были на месте заделанного в G2 старого прохода к башне.
3. Отсутствует лестница в подвал под домом баронов, что превращает это место в ловушку для обитателей замка. Например, у меня там застряли пара рыцарей.
Сэйвы во вложении.
 

Вложения

  • Wasteland_bugs.rar
    5 MB · Просмотры: 19
  • Wastelands_bugs_2.rar
    2,5 MB · Просмотры: 17
Последнее редактирование:

Phil_Gaba

Участник форума
Регистрация
24 Апр 2016
Сообщения
56
Благодарности
35
Баллы
180
1. При включенном игнорировании бонусов при прокачке бонусы от молитв Инносу по-прежнему двигают порог прокачки.
2. Про огненных големов уже писали, но я еще раз отмечу что они поломанные. Подойти к ним для ближнего боя довольно сложно. Такое чувство что бьет он вообще без анимации.
3. У меня никак не получилось незаметно открыть дверь в замке Старого лагеря, которая ведет к помещению с зомби (не знаю Гомез это или кто-то другой). Постоянно агрились либо Парсиваль, Орик и паладины с 1-го этажа если днем пытался, либо оруженосцы и паладины со двора если ночью. Я включил Марвин и прошел эту дверь на К и все равно кто-то всегда агрился. Надо имхо проверить проницаемость стен/пола или что-то еще.
4. Из разряда пожеланий: нельзя ли сделать что если хватает ингредиентов, гг сразу мог по несколько зелий варить? по 5/10, например? И чтоб окно взаимодействия не сразу закрывалось по окончании приготовления, а только по выбору варианта "конец"? Очень просто задалбывает по 1 зелью варить, а потом еще и снова окно взаимодействия открывать:(
Дополнено:
5. После того как выучишь все зелья у Константино все равно остается строчка диалога "каким зельям ты меня можешь научить?".
6. То же самое у Скатти - при навыке добыче золота 100, строка об обучении все равно есть. Имхо лучше убрать.
7. Мне кажется логичным было бы удалять из инвентаря каменное кольцо, которое маги воды собирают из осколков орнамента. Нефариус говорит, что его нужно вставить в углубление для открытия портала в Яркендар. Мне кажется там оно и должно остаться:)
 
Последнее редактирование:

Ксардас 2000

Участник форума
Регистрация
24 Фев 2018
Сообщения
508
Благодарности
205
Баллы
205
1. При включенном игнорировании бонусов при прокачке бонусы от молитв Инносу по-прежнему двигают порог прокачки.
Только что ещё раз проверил на тестовой версии 21. Там всё в порядке, все бонусы которые набрал за игру никак не повлияли на пороги прокачки, включая бонусы от молитв.
Пост автоматически объединён:

Нет, в моих расчётах всё-таки ошибка. Какие-то 3 единицы бонусов двигают порог. Небольшой тест показал что действительно алтари работают некорректно.
 
Последнее редактирование:

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.843
Благодарности
5.268
Баллы
910
Автор забыл про B_BlessAttribute.d
Добавить новый скрипт B_BlessRealAttribute.d, в котором используются реальные значения
Изменить в PrayShrine.d и будет работать
 

Диккен

Участник форума
Регистрация
12 Июн 2004
Сообщения
470
Благодарности
127
Баллы
210
Вопрос к D36: почему в обновлении можно пожарить на плите или сковороде только всё сырое мясо? Почему игрок не может выбрать жарку одного куска или всего мяса?
Я бы рекомендовал сделать поджарку по 10 кусков мяса за раз, тогда сам процесс не будет таким скоротечным, но и не таким медленным. Меня этот расклад вполне устраивает сейчас. В большинстве случаев к плите подходят с 200+ кусками мяса и жарить по одной за раз очень утомляет, а так всего 20 кликов и всё прожарено. *barbecue*
 

heckler

Участник форума
Регистрация
25 Апр 2017
Сообщения
413
Благодарности
109
Баллы
210
Отдельное спасибо за "Телепорт зодчих". Очень уж не хотелось мне загружать предыдущий сейв и бежать покупать свиток превращения в снеппера
А что если вместо нового свитка просто добавить обычный с превращением?
 

Диккен

Участник форума
Регистрация
12 Июн 2004
Сообщения
470
Благодарности
127
Баллы
210
В четвертой главе Сильвио берет Безымянного на понт, что тот не сможет убить ледяных големов, а ГГ этих големов давно убил в третьей главе. Подхожу к пустому месту где были големы, там валяются мертвые онды. Может имеет смысл здесь сделать проверку, типа если големы не зачищены - всё ОК, если мертвы - заспонить хотя бы одного нового, чтоб ГГ мог выполнить задание Сильвио, а то как-то глупо получается.
В этот случае не нужно ничего делать , кроме ввода новой переменной и дополнением диалога, про то что уже всё, завалил их вчера и делов-то, а то какие то костыли опять придумываете)) Как с жуками в пещере около Онара.
 

Phil_Gaba

Участник форума
Регистрация
24 Апр 2016
Сообщения
56
Благодарности
35
Баллы
180
1. При переходе из 2 главы в 3 у меня пропал из дневника квест "Доказательство"
2. В 3 главе Малак и крестьяне с фермы Бенгара сидят в ущелье под лагерем Декстера. Малак говорит, что здесь проблемы ему доставляют только бандиты. Я бандитов вырезал там еще в 1 главе. Нужно как-то фразу поправить наверное.
3. Малак сам говорит, что ферма Бенгара чисто мужская. Но имхо здесь не подразумевалось, что крестьяне-мужики даже спят вместе:eek: Мб все же изменить расположение кроватей в доме? Сделать как у Акила или Лобарта.
Screenshot-0.jpg
4. Мб изменить распорядки Пардосу и Гаану на то время, что ферма покинута большинством крестьян? А то глупо смотрится, что в округе гуляют драконие снепперы и ищущие, а Гаан как ни в чем ни бывало идет спокойно на охоту, а Пардос пашет на дальнем конце поля.
5. В 3 главе когда Бальтазар возвращается на ферму Секоба (если до этого был выполнен квест "Запретное пастбище") его овцы остаются по-прежнему возле полей Бенгара.
6. Как всё-таки правильно - Буллко или Булко? Возможно ошибаюсь, но кажется в диалогах и в дневнике видел разное написание имени этого дуболома. Скриншотов, увы, нет. Можно проверить на всякий случай и привести к единообразию?
7. Не должен ли Удар по квесту "Арбалет Сенграта" забрать сам арбалет, когда рассказываешь ему о смерти паладина?
8. Не уверен, что это правится на уровне скриптов, но все же напишу. Если зайти в ледяную область бывшего НЛ, там может пойти снег. После этого телепортируемся в другую точку Миненталя и, вуаля, снег идет и там тоже. Не должен ли этот эффект оставаться только для ледяной зоны НЛ?

- Марио и Гирион больше не влияют на количество NPC, которых можно взять в команду корабля.
Сколько в итоге точно попутчиков можно взять с собой? И влияет ли капитан на это число?
- ГГ может сообщить Гарвеллу о смерти орка-разведчика в лесу около города.
При каких условиях можно это сделать? И есть ли доп. опыт за это? У меня почему-то не получилось:(
В этот случае не нужно ничего делать , кроме ввода новой переменной и дополнением диалога, про то что уже всё, завалил их вчера и делов-то, а то какие то костыли опять придумываете)) Как с жуками в пещере около Онара.
Тут загвоздка в том, что как тогда объяснить трупы охотников на драконов перед входом в НЛ в 4 главе, если големы были уже давно убиты.
Дополнено:
И ещё, сколько играю в Г2, никак не могу понять зачем в последнем зале на Ирдорате с Драконом-нежитью еще нужны три камеры по одному орку-нежити в каждой? Они еще и заканчиваются странными тупиками. Эти орки должны как-то выбегать, чтобы усложнить финальный бой? Но нет, они этого не делают. Более того, их вообще пропустить можно. Я их далеко не в 1-ом и не во 2-ом прохождении обнаружил. Объясните, плез:confused:
 
Последнее редактирование:
Сверху Снизу