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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

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

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 578
Последнее редактирование модератором:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
вот ты выбегаешь и говоришь это вот так. вот тебе @MEG@VOLT совершенно справедливо поясняет, а в игре оно вот так. выбегаю я из угла и докидываю, что у Доси оно вот так
Ок, остановимся на ATR_PermBonus[ATR_STRENGTH] и ATR_PermBonus[ATR_DEXTERITY], без заморочек.

лучше наверное начать с каких то простых и понятных всем конструкций,
Этот вариант работает, НО есть проблема:
Оверлей корректно переключается только при соблюдении условий по атрибутам И ТОЛЬКО при поднятии навыка. Т.е. можно поднять навык 1Р до 30%, силу и ловкость до необходимых 20, НО оверлей поменяется только при последующем поднятии навыка, хотя бы на 1%, либо надевании оружия с бонусом.
Это можно как-то поправить? Я имею в виду, чтобы овер-лей менялся и при доборе нужного количества силы/ловкости?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Ок, остановимся на ATR_PermBonus[ATR_STRENGTH] и ATR_PermBonus[ATR_DEXTERITY], без заморочек.
судя по куда Доси это только бонусы от еды, эликсиров и прочего.

Это можно как-то поправить? Я имею в виду, чтобы овер-лей менялся и при доборе нужного количества силы/ловкости?
и вот мы вышли на второй круг. смотри пост https://worldofplayers.ru/threads/13039/post-1162092

может так
Daedalus:
func void B_RaiseAttribute(var C_Npc oth,var int attrib,var int points)
{
    UpdateTalent(oth,NPC_TALENT_1H,0);
    UpdateTalent(oth,NPC_TALENT_2H,0);
    UpdateTalent(oth,NPC_TALENT_BOW,0);
    UpdateTalent(oth,NPC_TALENT_CROSSBOW,0);
...
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
Нет, ему снова не нравится. Пишет:
Ошибка: Ожидается ';' после UpdateTalent(oth,NPC_TALENT_2H,0)
Daedalus:
func void B_RaiseAttribute(var C_Npc oth,var int attrib,var int points)
{
    var string concatText;
    if(attrib == ATR_STRENGTH)
    {
        oth.attribute[ATR_STRENGTH] += points;
        oth.attribute[ATR_HITPOINTS_MAX] += points * 2;
        oth.attribute[ATR_HITPOINTS] += points * 2;
        concatText = ConcatStrings(PRINT_LearnSTR,IntToString(points));
        PrintScreen(concatText,-1,-1,FONT_Screen,2);
       
        UpdateTalent(oth,NPC_TALENT_1H,0)
        UpdateTalent(oth,NPC_TALENT_2H,0)
        UpdateTalent(oth,NPC_TALENT_BOW,0)
        UpdateTalent(oth,NPC_TALENT_CROSSBOW,0)
    }
    else if(attrib == ATR_DEXTERITY)
    {
        oth.attribute[ATR_DEXTERITY] += points;
        oth.attribute[ATR_HITPOINTS_MAX] += points;
        oth.attribute[ATR_HITPOINTS] += points;
        if((oth.attribute[ATR_DEXTERITY] >= 90) && !Npc_GetTalentSkill(oth,NPC_TALENT_ACROBAT))
        {
            Npc_SetTalentSkill(oth,NPC_TALENT_ACROBAT,1);
            PrintScreen(PRINT_Addon_AcrobatBonus,-1,53,FONT_Screen,2);
            Snd_Play("LEVELUP");
        };
        concatText = ConcatStrings(PRINT_LearnDEX,IntToString(points));
        PrintScreen(concatText,-1,-1,FONT_Screen,2);
       
        UpdateTalent(oth,NPC_TALENT_1H,0)
        UpdateTalent(oth,NPC_TALENT_2H,0)
        UpdateTalent(oth,NPC_TALENT_BOW,0)
        UpdateTalent(oth,NPC_TALENT_CROSSBOW,0)
    }
    else if(attrib == ATR_MANA_MAX)
    {
        oth.attribute[ATR_MANA_MAX] += points;
        oth.attribute[ATR_MANA] += points;
        concatText = ConcatStrings(PRINT_LearnMANA_MAX,IntToString(points));
        PrintScreen(concatText,-1,-1,FONT_Screen,2);
    }
    else if(attrib == ATR_HITPOINTS_MAX)
    {
        oth.attribute[ATR_HITPOINTS_MAX] += points;
        oth.attribute[ATR_HITPOINTS] += points;
        concatText = ConcatStrings(PRINT_LearnHP_MAX,IntToString(points));
        PrintScreen(concatText,-1,-1,FONT_Screen,2);
    }
    else if(attrib == ATR_REGENERATEHP)
    {
        if(ATR_Training[ATR_REGENERATEHP] == 0)
        {
            if(HpRegenAmuletEquipped == FALSE)
            {
                oth.attribute[ATR_REGENERATEHP] = 30;
            };
            Npc_SetTalentSkill(oth,NPC_TALENT_REGENERATE,1);
            PrintScreen(PRINT_LearnRegenerateHP,-1,-1,FONT_Screen,2);
        }
        else if(ATR_Training[ATR_REGENERATEHP] > 1)
        {
            if(HpRegenAmuletEquipped == FALSE)
            {
                oth.attribute[ATR_REGENERATEHP] -= points;
            };
            PrintScreen(PRINT_UpgradeRegenerateHP,-1,-1,FONT_Screen,2);
        }
        else
        {
            PrintScreen(PRINT_NoLearnOverMAX,-1,-1,FONT_Screen,2);
        };
    }
    else if(attrib == ATR_REGENERATEMANA)
    {
        if(ATR_Training[ATR_REGENERATEMANA] == 0)
        {
            if(ManaRegenAmuletEquipped == FALSE)
            {
                oth.attribute[ATR_REGENERATEMANA] = 30;
            };
            Npc_SetTalentSkill(oth,NPC_TALENT_REGENERATE,1);
            PrintScreen(PRINT_LearnRegenerateMana,-1,-1,FONT_Screen,2);
        }
        else if(ATR_Training[ATR_REGENERATEMANA] > 1)
        {
            if(ManaRegenAmuletEquipped == FALSE)
            {
                oth.attribute[ATR_REGENERATEMANA] -= points;
            };
            PrintScreen(PRINT_UpgradeRegenerateMana,-1,-1,FONT_Screen,2);
        }
        else
        {
            PrintScreen(PRINT_NoLearnOverMAX,-1,-1,FONT_Screen,2);
        };
    };
};
Проставление ';' ошибку устраняет, вроде бы.

Нет, теперь, при прокачке силы/ловкости, навыки просто сбрасываются до 0%.
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Нет, теперь, при прокачке силы/ловкости, навыки просто сбрасываются до 0%.

так попробуй
Daedalus:
func void B_RaiseAttribute(var C_Npc oth,var int attrib,var int points)
{
    UpdateTalent(oth,NPC_TALENT_1H,oth.HitChance[NPC_TALENT_1H]);
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
так попробуй
Daedalus:
func void B_RaiseAttribute(var C_Npc oth,var int attrib,var int points)
{
    UpdateTalent(oth,NPC_TALENT_1H,oth.HitChance[NPC_TALENT_1H]);
Так, навыки теперь не сбрасываются, но овер-лей всё ещё отказывается меняться при повышении силы/ловкости - ТОЛЬКО при прокачке самого навыка, даже если он поднят на 45%.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
KirTheSeeker, наверное у Доси стоит дополнительная "защита от дураков", то есть проверка старого и нового значение процента у талант , что было бы вполне логично. а сам талант меняется? то есть слово новичок на боец изменяется?
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
сам талант меняется? то есть слово новичок на боец изменяется?
Слово и оверлей меняются корректно, но только при прокачке навыка, если сила и ловкость уже соответствуют прописанному минимуму.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
овер-лей всё ещё отказывается меняться при повышении силы/ловкости - ТОЛЬКО при прокачке самого навыка, даже если он поднят на 45%.
в этом случае уровень таланта меняется? в меню у героя изменяется надпись с "новичок" на "боец"?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
это хорошо. покажи какой у тебя итоговый код получился в функции UpdateTalent
Пост автоматически объединён:

@KirTheSeeker,ты не думал просто сделать доп требования у учителей к атрибуту героя как это сделано например у ElderGamer . в таком случае учитель не будет тренировать героя пока у него будет необходимого кол-ва силы / ловкости. оно как то и ближе к ЛОРу игры и понятнее.
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
это хорошо. покажи какой у тебя итоговый код получился в функции UpdateTalent
Не понял вопроса. Если речь о B_RaiseAttribute, то там сейчас вот так:
Daedalus:
func void B_RaiseAttribute(var C_Npc oth,var int attrib,var int points)
{
    UpdateTalent(oth,NPC_TALENT_1H,oth.HitChance[NPC_TALENT_1H]);
    UpdateTalent(oth,NPC_TALENT_2H,oth.HitChance[NPC_TALENT_2H]);
    UpdateTalent(oth,NPC_TALENT_BOW,oth.HitChance[NPC_TALENT_BOW]);
    UpdateTalent(oth,NPC_TALENT_CROSSBOW,oth.HitChance[NPC_TALENT_CROSSBOW]);
    
    var string concatText;
    if(attrib == ATR_STRENGTH)
    {
        oth.attribute[ATR_STRENGTH] += points;
        oth.attribute[ATR_HITPOINTS_MAX] += points * 2;
        oth.attribute[ATR_HITPOINTS] += points * 2;
        concatText = ConcatStrings(PRINT_LearnSTR,IntToString(points));
        PrintScreen(concatText,-1,-1,FONT_Screen,2);
    }
    else if(attrib == ATR_DEXTERITY)
    {
        oth.attribute[ATR_DEXTERITY] += points;
        oth.attribute[ATR_HITPOINTS_MAX] += points;
        oth.attribute[ATR_HITPOINTS] += points;
        if((oth.attribute[ATR_DEXTERITY] >= 90) && !Npc_GetTalentSkill(oth,NPC_TALENT_ACROBAT))
        {
            Npc_SetTalentSkill(oth,NPC_TALENT_ACROBAT,1);
            PrintScreen(PRINT_Addon_AcrobatBonus,-1,53,FONT_Screen,2);
            Snd_Play("LEVELUP");
        };
        concatText = ConcatStrings(PRINT_LearnDEX,IntToString(points));
        PrintScreen(concatText,-1,-1,FONT_Screen,2);
    }
    else if(attrib == ATR_MANA_MAX)
    {
        oth.attribute[ATR_MANA_MAX] += points;
        oth.attribute[ATR_MANA] += points;
        concatText = ConcatStrings(PRINT_LearnMANA_MAX,IntToString(points));
        PrintScreen(concatText,-1,-1,FONT_Screen,2);
    }
    else if(attrib == ATR_HITPOINTS_MAX)
    {
        oth.attribute[ATR_HITPOINTS_MAX] += points;
        oth.attribute[ATR_HITPOINTS] += points;
        concatText = ConcatStrings(PRINT_LearnHP_MAX,IntToString(points));
        PrintScreen(concatText,-1,-1,FONT_Screen,2);
    }
    else if(attrib == ATR_REGENERATEHP)
    {
        if(ATR_Training[ATR_REGENERATEHP] == 0)
        {
            if(HpRegenAmuletEquipped == FALSE)
            {
                oth.attribute[ATR_REGENERATEHP] = 30;
            };
            Npc_SetTalentSkill(oth,NPC_TALENT_REGENERATE,1);
            PrintScreen(PRINT_LearnRegenerateHP,-1,-1,FONT_Screen,2);
        }
        else if(ATR_Training[ATR_REGENERATEHP] > 1)
        {
            if(HpRegenAmuletEquipped == FALSE)
            {
                oth.attribute[ATR_REGENERATEHP] -= points;
            };
            PrintScreen(PRINT_UpgradeRegenerateHP,-1,-1,FONT_Screen,2);
        }
        else
        {
            PrintScreen(PRINT_NoLearnOverMAX,-1,-1,FONT_Screen,2);
        };
    }
    else if(attrib == ATR_REGENERATEMANA)
    {
        if(ATR_Training[ATR_REGENERATEMANA] == 0)
        {
            if(ManaRegenAmuletEquipped == FALSE)
            {
                oth.attribute[ATR_REGENERATEMANA] = 30;
            };
            Npc_SetTalentSkill(oth,NPC_TALENT_REGENERATE,1);
            PrintScreen(PRINT_LearnRegenerateMana,-1,-1,FONT_Screen,2);
        }
        else if(ATR_Training[ATR_REGENERATEMANA] > 1)
        {
            if(ManaRegenAmuletEquipped == FALSE)
            {
                oth.attribute[ATR_REGENERATEMANA] -= points;
            };
            PrintScreen(PRINT_UpgradeRegenerateMana,-1,-1,FONT_Screen,2);
        }
        else
        {
            PrintScreen(PRINT_NoLearnOverMAX,-1,-1,FONT_Screen,2);
        };
    };
};
Пост автоматически объединён:

ты не думал просто сделать доп требования у учителей к атрибуту героя
Думал, но герой может добить необходимый навык книгами/скрижалями/кольцами. Если при этом не будет меняться овер-лей, то главный плюс этих бонусов нивелируется.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
@KirTheSeeker,код ставь в спойлер пожалуйста.

Не понял вопроса. Если речь о B_RaiseAttribute, то там сейчас вот так:
речь идёт про UpdateTalent из файла B_NewTalentSystem.d



Думал, но герой может добить необходимый навык книгами/скрижалями/кольцами. Если при этом не будет меняться овер-лей, то главный плюс этих бонусов нивелируется.
так и реализуй как это у ElderGamer . отличное хорошее решение. те же требования что будут у учителя добавь и на скрижали книги. будет единообразие и всё лаконично. а так у тебя учитель учить, а талант не меняется. и не понятно чему учитель то учит? и почему талант не переключается? я бы решил что это баг. а вот у ElderGamer всё понятно. мне может такая система и не нравится, но она при это понятна и не вызывает вопросов. у тебя же будет просто казаться багом.

Daedalus:
func int sPerm_Attr_KTS_Hero(var int talent)
{
    var int sPerm_STR_KTS;
    var int sPerm_DEX_KTS;

    sPerm_STR_KTS = hero.attribute[ATR_STRENGTH];
    sPerm_STR_KTS -= ATR_TempBonus[ATR_STRENGTH];

    sPerm_DEX_KTS = hero.attribute[ATR_DEXTERITY];
    sPerm_DEX_KTS -= ATR_TempBonus[ATR_DEXTERITY];

    if (sPerm_STR_KTS >= 60)
    && (sPerm_DEX_KTS >= 60)
    {
        // нпс настоящий джигит
        return true;
    };

    if (Npc_GetTalentSkill(hero,talent) ==  0)
    && (sPerm_STR_KTS >= 30)
    && (sPerm_DEX_KTS >= 30)
    {
        // нпс вылазит из под нар
        return true;
    };

    return false;
};


// функция из файла B_TeachFightTalentPercent.d
// добавить проверку перед строчкой     oth.lp -= cost;
func int B_TeachFightTalentPercent (var C_Npc slf,var C_Npc oth,var int talent,var int percent,var int teacherMAX)
{
    ....
    ....
    ....
 
    if(sPerm_Attr_KTS_Hero(talent) == false)
    {
        concatText = "бла бла ты слишком слаб, потренируй что нибудь бла бла";
        B_PrintPlayerMiddle(oth,concatText);
        return FALSE;
    };
    oth.lp -= cost;
    B_ChangeTalent(oth,talent,percent,TS_Training);
    ....
    ....
    ....

};
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
те же требования что будут у учителя добавь и на скрижали книги.
С этой стороны не смотрел. Да, звучит хорошо. Но как в данной схеме грамотно ограничить "снимаемые" бонусы навыка от колец/оружия? Я имею в виду следующую ситуацию:
- Допустим, переключение оверлея с "Новичка" на "Бойца" для 1Р трубет по 20 силы и ловкости;
- ГГ прокачивает навык 1Р до 25%;
- ГГ прокачивает силу, скажем, до 40, получая возможность поднять меч с бонусом к навыку 1Р в 5%;
- При этом ГГ НЕ качает ловкость выше 19;
- ГГ надевает меч, видит 1Р = 30%, но НЕ видит слова "Боец" и соответствующего оверлея.
Как игроку здесь получить уведомление о недостаточном количестве ловкости?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
KirTheSeeker, не очень понятно зачем тебе ограничивать снимаемые бонусы от артефактов? опиши все условия, сведи их в таблицу и 95% вопрос отпадут, а ответы на оставшиеся 5% будет логично вытекать из общей логики самой таблицы. конечно если она будет логична :)
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
KirTheSeeker, не очень понятно зачем тебе ограничивать снимаемые бонусы от артефактов?
Чтобы не было "ощущения бага", о котором ты писал ранее.
Эти бонусы (от оружия/колец) никак не связаны с учителями, и применяются зачастую именно для того, чтобы догнать навык до нужного порога. Если человек видит, что порог навыка достигнут, НО овер-лей НЕ переключается, то как он поймёт, что ГГ уне хватает силы/ловкости для перехода на новый уровень владения?
При текущей реализации, если ГГ таскает, например, меч с бонусом к навыку, который суммарно даёт ему необходимые 30% владения, то даже когда он поднимет силу и ловкость до нужных значений, оверлей переключится только если снять/надеть оружие с бонусом. Разве это не будет казаться багом?
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
KirTheSeeker, всё равно не понятно. ты хочешь ограничить бонус от оружия если герой слабый?
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
KirTheSeeker, всё равно не понятно. ты хочешь ограничить бонус от оружия если герой слабый?
Наверное, только такой вариант и остаётся, если не получается организовать смену оверлея при увеличении не только навыка, но также и силы/ловкости.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
у кого то получится, у кого то не получится. в твоём случае это будет зависит напрямую от того кто тебе будет код писать :)
Пост автоматически объединён:


вот цепочки. смотри думай, где врезаться и кого как и чем ограничивать
  • инстанция диалога учителя НПС --> B_TeachFightTalentPercent --> B_ChangeTalent
  • бонусы оружия Equip_1H --> B_ChangeTalent
  • таблички B_RaiseTalentByStonePlate --> B_ChangeTalent
  • прочие бонусы B_RaiseTalentByPermBonus --> B_ChangeTalent
... B_ChangeTalent --> ChangeTalent_Hero --> UpdateTalent_Hero --> UpdateTalent --> UpdateOverlay
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
речь идёт про UpdateTalent из файла B_NewTalentSystem.d
Daedalus:
func void UpdateTalent(var C_Npc npc,var int talent,var int value)
{
    var int oldSkill;
    var int newSkill;
    var int ATR_sPerm_KirTheSeeker;
    
    ATR_sPerm_KirTheSeeker = 0;
    ATR_sPerm_KirTheSeeker += ATR_PermBonus[ATR_STRENGTH];
    ATR_sPerm_KirTheSeeker += ATR_PermBonus[ATR_DEXTERITY];
    ATR_sPerm_KirTheSeeker += ATR_Training[ATR_STRENGTH];
    ATR_sPerm_KirTheSeeker += ATR_Training[ATR_DEXTERITY];
    
    if(talent == NPC_TALENT_1H)
    {
        npc.HitChance[NPC_TALENT_1H] = value;
        oldSkill = Npc_GetTalentSkill(npc,NPC_TALENT_1H);
        newSkill = GetMin(npc.HitChance[NPC_TALENT_1H] / 30, 2);
        if ((npc.attribute[ATR_STRENGTH] >= 40) && (npc.attribute[ATR_DEXTERITY] >= 40))
        || ((oldSkill == 0) && (npc.attribute[ATR_STRENGTH] >= 20) && (npc.attribute[ATR_DEXTERITY] >= 20))
        {
            Npc_SetTalentSkill(npc,talent,newSkill);
            UpdateOverlay(npc,oldSkill,newSkill,"humans_1hST1.MDS","humans_1hST2.MDS");
        };
    }
    else if(talent == NPC_TALENT_2H)
    {
        npc.HitChance[NPC_TALENT_2H] = value;
        oldSkill = Npc_GetTalentSkill(npc,NPC_TALENT_2H);
        newSkill = GetMin(npc.HitChance[NPC_TALENT_2H] / 30, 2);
        Npc_SetTalentSkill(npc,talent,newSkill);
        UpdateOverlay(npc,oldSkill,newSkill,"humans_2hST1.MDS","humans_2hST2.MDS");
    }
    else if(talent == NPC_TALENT_BOW)
    {
        npc.HitChance[NPC_TALENT_BOW] = value;
        oldSkill = Npc_GetTalentSkill(npc,NPC_TALENT_BOW);
        newSkill = GetMin(npc.HitChance[NPC_TALENT_BOW] / 30, 2);
        Npc_SetTalentSkill(npc,talent,newSkill);
        UpdateOverlay(npc,oldSkill,newSkill,"humans_bowT1.MDS","humans_bowT2.MDS");
    }
    else if(talent == NPC_TALENT_CROSSBOW)
    {
        npc.HitChance[NPC_TALENT_CROSSBOW] = value;
        oldSkill = Npc_GetTalentSkill(npc,NPC_TALENT_CROSSBOW);
        newSkill = GetMin(npc.HitChance[NPC_TALENT_CROSSBOW] / 30, 2);
        Npc_SetTalentSkill(npc,talent,newSkill);
        UpdateOverlay(npc,oldSkill,newSkill,"humans_cbowT1.MDS","humans_cbowT2.MDS");
    }
    else
    {
        Print(PRINT_WrongParameter);
    };
};

// updates talent's in-game value
func void UpdateTalent_Hero(var int talent)
{
    UpdateTalent(RealHero,talent,GetTalentPart_Game_Hero(talent));
};
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
Сверху Снизу