dosinabox / g2nr_unofficial_update

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

Консультации у D36 #252

Closed Kor-Angar closed 3 years ago

Kor-Angar commented 4 years ago

Всякие вопросы к D36 в рамках моей сборки Gothic

B_SetFightSkills.d

dosinabox commented 4 years ago

А что, собственно, ты пытаешься сделать?

Kor-Angar commented 4 years ago

это в рамках того момента о котором я периодически говорю: в начале игры у НПС сразу не подключаются humans_1hST2, humans_1hST1, humans_2hST1, humans_2hST2 это происходит в т.ч. и в твоём неоф. обновление. возможно связано с рендером. или возможно как то связано с диалогами.

Kor-Angar commented 4 years ago

то есть продвинутые бойцы имеют самую простую стойку

Kor-Angar commented 4 years ago

а в Готик 1 я полноценно ещё не играл но при тесте это у всех. image image

возможно после каких то диалогов в процессе всё станет норм. поэтому я и пытаюсь их как то в чувства привести :-)

Kor-Angar commented 4 years ago

Вообщем я решил вынести это для Gothic 1 в отдельный файл. Вроде работает. Посмотри своим опытным взглядом код

// *************************************************************************
//                          Gothic 1 NotR
// **************************************************************************

func void B_AddFightSkill(var C_Npc slf,var int Talent,var int Skill)
{
///              Устанавливаем круг Магии :-)
    if(Talent == NPC_TALENT_MAGE) 
    {
        Npc_SetTalentSkill(slf,NPC_TALENT_MAGE,Skill); 
    };

///                 Одноручное
    if(Talent == NPC_TALENT_1H)
    {
        if (Skill == 2)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,2);
            Mdl_ApplyOverlayMds(slf,"humans_1hST2.mds");
        }
        else if (Skill == 1)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,1);
            Mdl_ApplyOverlayMds(slf,"humans_1hST1.mds");

        }
        else if (Skill == 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
            Mdl_RemoveOverlayMds(slf,"humans_1hST1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_1hST2.MDS");
        };
    };

***

};
dosinabox commented 4 years ago

Вроде правильно. Потом ещё в игре посмотрю.

Kor-Angar commented 4 years ago

в игре такого не было :-) это я для Готики 1 писал на движке Готики 2.

dosinabox commented 4 years ago

Так и для г2нв надо так же сделать, нет?

Kor-Angar commented 4 years ago

в НВ он явно прописан вот тут

func void B_AddFightSkill(var C_Npc slf,var int talent,var int percent)
{
    if(talent == NPC_TALENT_1H)
    {
        slf.HitChance[NPC_TALENT_1H] += percent;
        if(slf.HitChance[NPC_TALENT_1H] > 100)
        {
            slf.HitChance[NPC_TALENT_1H] = 100;
        };
        if(slf.HitChance[NPC_TALENT_1H] < 0)
        {
            slf.HitChance[NPC_TALENT_1H] = 0;
        };
        if(slf.HitChance[NPC_TALENT_1H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,2);
            Mdl_ApplyOverlayMds(slf,"humans_1hST2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_1H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,1);
            Mdl_ApplyOverlayMds(slf,"humans_1hST1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
            Mdl_RemoveOverlayMds(slf,"humans_1hST1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_1hST2.MDS");
        };

но в г2НВ много кода, один отправляет к другому. B_SetFightSkills --> B_RaiseFightTalent --> B_AddFightSkill

возможно где то что то теряется или не срабатывает.

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

надо будет мне просто поставить чистый НВ с неоф. обновлением, телепортироваться к андре и ударить его. а потом тоже самое сделать поставив сверху рендер. а потом с каким то настройками, пока баг не появится :-)

Kor-Angar commented 4 years ago

Привет! Мне кажется или первая надпись выглядит интригующей? :-)

image

dosinabox commented 4 years ago

потом всё становится нормально. возможно после того как герой научится чему нибудь.

Скорее всего, после загрузки сохранения.

Kor-Angar commented 4 years ago

привет привет. подскажи https://github.com/Kor-Angar/G1/issues/6

Kor-Angar commented 4 years ago

а NPC может использовать факел?

Kor-Angar commented 4 years ago

что то у меня от удара орка ущерб считается без учёта от оружия. только от силы :-(

dosinabox commented 4 years ago

а NPC может использовать факел?

Может. Но как его заставить - не знаю. Нужно экспериментировать.

что то у меня от удара орка ущерб считается без учёта от оружия. только от силы :-(

Покажи файл проекта _Intern/Constants.d

Kor-Angar commented 4 years ago

Может. Но как его заставить - не знаю. Нужно экспериментировать.

https://github.com/Kor-Angar/G1/issues/7

Kor-Angar commented 4 years ago

Покажи файл проекта _Intern/Constants.d

constants.txt

Kor-Angar commented 4 years ago

что то у меня от удара орка ущерб считается без учёта от оружия. только от силы :-(

добавил гильдию GIL_ORC, поменял разведчика гильдию на GIL_ORC, ущерб стал считать корректно

Kor-Angar commented 4 years ago

Покажи файл проекта _Intern/Constants.d

вот так пока сделал. вроде работает.

//const int GIL_SEPERATOR_ORC   = 58;   // Gothic 2 NotR

//const int GIL_ORC             = 59;   // Gothic 2 NotR
CONST   INT GIL_ORCSCOUT        = 59;   // Gothic 1 NotR        

//const int GIL_FRIENDLY_ORC    = 60;   // Gothic 2 NotR
CONST   INT GIL_ORCSLAVE        = 60;   // Gothic 1 NotR

//const int GIL_UNDEADORC       = 61;

//const int GIL_DRACONIAN       = 62;   // Gothic 2 NotR
CONST   INT GIL_ORCWARRIOR      = 62;   // Gothic 1 NotR

соответсвенно надо по такому же принципу будет проверить еще нежить и гоблинов :-) ну эта когда глубина мысли осознается :_)

Kor-Angar commented 4 years ago

глянь своим глазом алмазом как время будет https://github.com/Kor-Angar/G1/issues/8

Kor-Angar commented 3 years ago

Посмотри плиз https://github.com/Kor-Angar/G2_NotR_Kor_Angar/issues/2

Kor-Angar commented 3 years ago

Инстанции Рода в Минентале добавил обучение с отсылкой на инстанцию Рода в Хориносе. есть в таких случая какие то подводные камни? :-)

instance DIA_RodDJG_Teach(C_Info)
{
    npc = DJG_702_Rod;
    nr = 3;
    condition = DIA_RodDJG_Teach_Condition;
    information = DIA_Rod_Teach_Info;
    permanent = TRUE;
    description = "Я хочу научиться лучше владеть двуручным оружием!";
};

func int DIA_RodDJG_Teach_Condition()
{
    if(Npc_IsDead(SwampDragon))
    {
        return TRUE;
    };
};
dosinabox commented 3 years ago

Вооде норм. Но для новых диалогов нужно начало новой игры.

Kor-Angar commented 3 years ago

Подскажи пожалуйста как можно через Npc_OwnedByNpc(item,self) проверить есть в рюкзаке собственное оружие и если есть то одеть?

dosinabox commented 3 years ago

Вопрос сложный. Для такой проверки нужно перебирать инвентарь, а в скриптах нет циклов. Их добавляет расширитель zParserExtender, в теории можно как-то это сделать с его помощью, но я не копала в его сторону. Вообще все люди автоматически экипируют самое лучшее по урону оружие из того что могут поднять, и из скриптов это не регулируется. Нельзя заставить кого-либо надеть что-то меньшее по урону. Можно проверять наличие определенного оружия перед началом торговли, но когда ГГ уйдет за область отрисовки и вернется, персонаж всё равно опять нацепит самое лучшее оружие по урону. В Г1 я вручную настраивала параметры почти каждого торговца и создавала для них именное оружие - самое лучшее по урону в игре под их установленную силу/ловкость.

Kor-Angar commented 3 years ago

с торговцами я разобрался :-)

https://github.com/Kor-Angar/G2_NotR_Kor_Angar/issues/13

Kor-Angar commented 3 years ago

@dosinabox подскажи, пожалуйста, такой вопрос

  // Владелец     

    var func    owner;                          // Владелец предмета.
    var int     ownerGuild;                     // Какой гильдии принадлежит предмет.
    var int     disguiseGuild;                  // Смена гильдии Npc при экипировке предмета.

owner это func, а ownerGuild int. это же принципиально разные вещи? значит и использовать это можно совсем по разному.. можешь пару примеров привести или ссылку дать где почитать