dosinabox / g2nr_unofficial_update

Исходники скриптов, релизы, хотфиксы и тестовые версии неофициального обновления для игры "Готика 2: Ночь Ворона".
https://worldofplayers.ru/threads/36817
The Unlicense
15 stars 1 forks source link

Лотар и Беннет. консультации #165

Closed Kor-Angar closed 3 years ago

Kor-Angar commented 4 years ago

Я тут в своей сборке сделал возможным продлить жизнь Лотара до середине 3 главы(при условие что ГГ не убил Ворона). Правки как ты и предсказывала коснулись ряда НПС. Поэтому я как твой последовательный ученик писал и писал. а ввиду того что я в принципе не пишу код (за исключением Готики), и крайне редко читаю по работе, то мне проще для осмысления условий в некоторых моментах использовать вот такую комбинацию(в коде я её по моему ещё не встречал).

func int DIA_Peck_WEAPON2_Condition()
{
    if((other.guild == GIL_MIL) && (DIA_Peck_WEAPON_perm == TRUE) && (DIA_Peck_WEAPON2_perm == FALSE))
    {
        if((Npc_GetDistToWP(self,"NW_CITY_ARMORY_PECK") <= 1000) || (Npc_GetDistToWP(self,"NW_CITY_BARRACK02_BED_PECK") <= 2000))
        {
            return TRUE;
        };
    }
    else if((other.guild == GIL_MIL)  && (DIA_Peck_WEAPON2_perm == FALSE) && (Kapitel > 2))
    {
        if((Npc_GetDistToWP(self,"NW_CITY_ARMORY_PECK") <= 1000) || (Npc_GetDistToWP(self,"NW_CITY_BARRACK02_BED_PECK") <= 2000))
        {
            return TRUE;
        };
    };
};

я как человек которому приходится периодически сталкиваться(ругаться) по работе с программистами конечно понимаю что правильнее это делать вот так

func int DIA_Peck_WEAPON2_Condition()
{
    if((other.guild == GIL_MIL) && ((DIA_Peck_WEAPON_perm == TRUE)|| (Kapitel > 2)) && (DIA_Peck_WEAPON2_perm == FALSE))
    {
        if((Npc_GetDistToWP(self,"NW_CITY_ARMORY_PECK") <= 1000) || (Npc_GetDistToWP(self,"NW_CITY_BARRACK02_BED_PECK") <= 2000))
        {
            return TRUE;
        };
    };
};

но вот на Ватрасе я споткнулся. и только через else if смог с ним разобраться. так как трёх уровневая логика (немцев(авторов), твоя и моя) перестали у меня помещаться в строчке :-)

Собственно вопрос. А на сколько это "плохо"? или это субъективно "плохо", а на самом деле разницы нет?

Kor-Angar commented 4 years ago

тут я кратко напишу зачем я это сделал и какие "задачи" это решает:-)

таким образом перенос убийства Лотара в 3 главе (при условие что не убит Ворон), элегантно решает вопрос о походе в 3 главе в Ярик: идти придётся, НО не будучи Паладином или ОНД. Пока Беннет не отправился за решётку, ГГ не освободил его и не стал Паладином / ОНД.

Пикантность добавляет тот факт что все знают как стать Паладином и ОНД. а стать не могут(не убив Ворона ), т.к. Лотар жив, а Беннет упорно работает в Кузне. Для большего "накала" я снял для Мента и Наёма ограничение на поход в круг камней и он уходит.. а вот Ксардас не идёт. По понятным причинам и это тоже отлично, так как часто его шикарный диалог пропускается.

мне кажется (возможно субъективно) история получилась шикарная.

в целом если тебе всё это понравится, можно будет внедрить такую штуку опционально.

мне осталось сделать пару правок и я наверное так поиграю в рамках своего прохождения 1H=390 Dmg / Gil = DJG / Gothic II: NotR. я там как раз остановился в 3 главе, поэтому на один сейв откачусь и наконец 3 главы

p.s. по ЛОРу Ищущие подставили Беннета никак суперкузница, который починит Глаз Инноса, который на тот момент ещё не украл Педро, а именно как наёмника для развязывания гражданской войны. Поэтому с точки зрения ЛОРа тоже всё складно: Равена убили, тёмная сторона переходит к плану "б". p.s.s. глаз Инноса тоже у Беннета можно починить. отсюда у меня ещё вот такая мысль появилась, а что если починенный Глаз Инноса будет давать защиту? например от всего по 10? на баланс это никак не повлияет, но в целом как говорится будет приятно:-)

Kor-Angar commented 4 years ago

Лотару сделал расписание для 3 главы. Тайминг выверил поминутно, путем перепроверок. в результате Лотар "идёт" по заданному маршруту почти без остановок на чекпойнтах: -)

может пригодится когда нибудь для каких нибудь НПС

        TA_Stand_ArmsCrossed(6,50,7,02,"NW_CITY_LOTHAR"); // Верхний квартал    
    TA_Stand_Guarding(7,02,7,15,"NW_CITY_MAINSTREET_07");  // Башня возле Нижнего квартала  +13 минут
    TA_Stand_Guarding(7,15,7,28,"NW_CITY_BEER_05");     //  Площадь Правосудия +13 минут
    TA_Stand_Guarding(7,28,7,35,"NW_CITY_MERCHANT_PATH_29_B");  //  Рынок +7 минут
    TA_Stand_ArmsCrossed(7,35,8,00,"NW_CITY_MERCHANT_PATH_29_B"); // Рынок, НПС стоит скрестив руки 
    TA_Smalltalk (8,00,11,35,"NW_CITY_MERCHANT_PATH_29_B"); // Разговаривает с Дароном
    TA_Stand_Guarding(11,35,11,42,"NW_CITY_BEER_05");   // Площадь Правосудия  +7 минут
    TA_Stand_Guarding(11,42,11,55,"NW_CITY_MAINSTREET_07");     // Башня возле Нижнего квартала +13 минут
    TA_Stand_Guarding(11,55,12,55,"NW_CITY_MAINSTREET_01_B");    // Вход в верхний квартал
    TA_Stand_ArmsCrossed(12,55,13,27,"NW_CITY_LOTHAR"); // Верхний квартал  
    TA_Stand_Guarding(13,27,13,40,"NW_CITY_MAINSTREET_07");  // Башня возле Нижнего квартала  + 13 минут
    TA_Stand_Guarding(13,40,13,53,"NW_CITY_BEER_05");   // Площадь Правосудия  +13 минут
    TA_Stand_Guarding(13,53,14,00,"NW_CITY_MERCHANT_PATH_29_B");    // Рынок + 7 минут
    TA_Smalltalk (14,00,18,5,"NW_CITY_MERCHANT_PATH_29_B"); // Рынок. Разговаривает с Дароном
    TA_Stand_Guarding(18,5,18,12,"NW_CITY_BEER_05");    // Площадь Правосудия.  7 минут от рынка
    TA_Stand_Guarding (18,12,18,20,"NW_CITY_ANDRE"); // Казармы Ополчения, приёмная Лорда Андре
    TA_Smalltalk (18,20,19,20,"NW_CITY_ANDRE"); // разговаривает с Андре
    TA_Stand_Guarding(19,20,19,27,"NW_CITY_BEER_05");   // Площадь Правосудия.  7 минут
    TA_Stand_Guarding(19,27,19,40,"NW_CITY_MAINSTREET_07");     // Башня возле Нижнего квартала = 13 минут
    TA_Stand_Guarding(19,40,23,45,"NW_CITY_MAINSTREET_01_B");    // Вход в верхний квартал
    TA_Practice_Sword(23,45,6,50,"NW_CITY_TRAIN_01"); // Тренировка

а вот то что съедает скрипт при в расписание, такой информации не нашёл на форумах

func void Rtn_Tot_203()
{
B_SetAttributesToChapter(self,5);
EquipItem(self,ItMw_2H_Blessed_02);
B_CreateAmbientInv(self);    
B_SetNpcVisual(self,MALE,"Hum_Head_Psionic",Face_P_NormalBart_Nefarius,BodyTex_P,ITAR_PAL_M);
Mdl_SetModelFatness(self,1);
Mdl_ApplyOverlayMds(self,"Humans_Militia.mds");
B_GiveNpcTalents(self);
B_SetFightSkills(self,80);

TA_Sleep(8,0,23,0,"TOT");
TA_Sleep(23,0,8,0,"TOT");
};

теоритически НПС могут становится / слабее. визуально меняться (набить тату или потолстеть). единственное что я не понял как менять оружие им. так как при использование EquipItem(self,ItMw_2H_Blessed_02); НПС умудряется одеть два оружия и старое и новое, при этом у него отображается старое.