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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

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

MaGoth

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

Вложения

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

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.904
Благодарности
538
Баллы
275
Daedalus:
var int TotalSpeedHerbEaten;   // счётчик
    func void Use_Speed_Herb_01 ()                                           
    {                                                                                                                                                    
        if (Npc_IsPlayer (self))
        {
            Mdl_ApplyOverlayMDSTimed    (self, "HUMANS_SPRINT.MDS", Speed_Boost);
            TotalSpeedHerbEaten += 1; // счётчик + 1
            if (TotalSpeedHerbEaten == 50)
            {
                USE_Dex_Herb_01(); // увеличение ловкости через функцию ягоды гоблина
                //TotalSpeedHerbEaten = 0; // обнуление счётчика,  можно использовать, а можно нет
            };
        };
    };
А как прописать дебафф, получаемый аналогичным образом? Например, чтобы за 10 съеденных кусков сырого мяса герой получал "- 1 ед. макс. HP"?
 

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.130
Благодарности
3.224
Баллы
485
А как прописать дебафф, получаемый аналогичным образом? Например, чтобы за 10 съеденных кусков сырого мяса герой получал "- 1 ед. макс. HP"?
Если скрипты неофициального обновления, то:
Daedalus:
B_RaiseAttributeByPermBonus(self,ATR_HITPOINTS_MAX,-1);
Иначе:
Daedalus:
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,-1);
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.945
Благодарности
939
Баллы
275
наверное при отрицательном значение текстовое сообщение на экране будет не очень.

***
Daedalus:
var int TotalRawMeat; // переменная для счётчика
    FUNC VOID Use_RawMeat()
    {
        Npc_ChangeAttribute    (self,    ATR_HITPOINTS,    HP_RawMeat);
        if (Npc_IsPlayer (self))
        {
            TotalRawMeat += 1; // счётчик + 1
            if (TotalRawMeat == 10)
            {
                self.attribute[ATR_HITPOINTS_MAX] -= 1;
                //self.attribute[ATR_HITPOINTS_MAX] = self.attribute[ATR_HITPOINTS_MAX] - 1;
                //Npc_ChangeAttribute    (self,    ATR_HITPOINTS_MAX,    -1);
                //B_RaiseAttribute(self,ATR_HITPOINTS_MAX,-1); // с доп сообщением на экране Г2НВ
                //B_RaiseAttributeByPermBonus(self,ATR_HITPOINTS_MAX,-1);  // с доп сообщением на экране неоф. патч D36
                //TotalRawMeat = 0; // обнуление счётчика,  можно использовать, а можно нет
            };
        };
    };

так же уменьшение жизней можно вынести в отдельную функцию, смотри в качестве примера B_HitpointAngleich
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.904
Благодарности
538
Баллы
275
Приветствую всех. Вопрос по скриптам неоф. обновления для Г2 НВ:
Подскажите, пожалуйста, как и в каком именно файле можно прописать дополнительные условия для смены оверлея боевых анимаций?
Я имею в виду, например, чтобы след-й уровень анимаций владения одноручником запускался НЕ только при достижении уровня соответствующего навыка в 30%/60%, но и при наличии у ГГ достаточных перманентных (т.е. без учёта "снимаемых" бонусов от колец и т.п.) значений силы и ловкости.
Подозреваю, это нужно править в данном файле:
1.png
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.945
Благодарности
939
Баллы
275
в B_RaiseAttribute прописать условия и оттуда вызывать UpdateOverlay. правда тогда придётся в UpdateOverlay добавить доп проверки.
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.904
Благодарности
538
Баллы
275
в B_RaiseAttribute прописать условия и оттуда вызывать UpdateOverlay. правда тогда придётся в UpdateOverlay добавить доп проверки.
Не совсем понял. В B_RaiseAttribute прописано то, что растёт с повышением атрибутов, насколько я могу судить, и ни слова о талантах, кроме акробатики. И UpdateOverlay фигурирует только в B_NewTalentSystem.
Прошу составить пример кода, скажем, для 1Р, при 30%, чтобы смена осуществлялась только при наличии у ГГ 20 ед. перманентных силы и ловкости?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.260
Благодарности
6.258
Баллы
1.595
перманентных силы и ловкости
вряд ли, за силу и ловкость отвечают по одному параметру.
т.е. если одеть кольцо ловкости - то +5 к ловкости, движок будет думать, что это так же будет перманентно
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.904
Благодарности
538
Баллы
275
вряд ли, за силу и ловкость отвечают по одному параметру.
т.е. если одеть кольцо ловкости - то +5 к ловкости, движок будет думать, что это так же будет перманентно
Ладно, опустим только перманентные. Тогда как правильно прописать просто дополнительные требования по силе и ловкости?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.945
Благодарности
939
Баллы
275
KirTheSeeker, видимо я неправильно понял что ты хочешь.

Прошу составить пример кода, скажем, для 1Р, при 30%, чтобы смена осуществлялась только при наличии у ГГ 20 ед. перманентных силы и ловкости?
что такое "перманентная" сила и ловкость? если ты говоришь про код D36 то там такого явления нет. в её коде для главного героя есть:
  • ATR_PermBonus[ATR_STRENGTH]
  • ATR_TempBonus[ATR_STRENGTH]
  • ATR_Training[ATR_STRENGTH]
Пост автоматически объединён:

****
возможно так
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 (C_NpcIsHero(npc) == false)    // нпс не герой
        || (C_NpcIsHero(npc) && (ATR_sPerm_KirTheSeeker >= 120)) // герой настоящий джигит
        || (C_NpcIsHero(npc) && (oldSkill == 0) && ATR_sPerm_KirTheSeeker >= 40) // герой вылазит из под нар
            Npc_SetTalentSkill(npc,talent,newSkill);
            UpdateOverlay(npc,oldSkill,newSkill,"humans_1hST1.MDS","humans_1hST2.MDS");
        };
    }
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.260
Благодарности
6.258
Баллы
1.595
наркоман *lol*
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.945
Благодарности
939
Баллы
275

Вложения

  • B_NewTalentSystem.zip
    3,7 KB · Просмотры: 5

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.340
Благодарности
3.187
Баллы
525
if(условие)
{
действие 1;
действие 2;
...
};
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.945
Благодарности
939
Баллы
275
Код:
        if (C_NpcIsHero(npc) == false)    // нпс не герой
        || (C_NpcIsHero(npc) && (ATR_sPerm_KirTheSeeker >= 120)) // герой настоящий джигит
        || (C_NpcIsHero(npc) && (oldSkill == 0) && ATR_sPerm_KirTheSeeker >= 40) // герой вылазит из под нар
        {
            Npc_SetTalentSkill(npc,talent,newSkill);
            UpdateOverlay(npc,oldSkill,newSkill,"humans_1hST1.MDS","humans_1hST2.MDS");
        };
Пост автоматически объединён:

KirTheSeeker, не надо слать картинки. шли код.
Пост автоматически объединён:

и вообще лучше наверное начать с каких то простых и понятных всем конструкций, а потом уже пытаться их усложнять вводя понятия "перманентный параметр" :)
Daedalus:
if ((npc.attribute[ATR_STRENGTH] >= 60) && (npc.attribute[ATR_DEXTERITY] >= 60)) // нпс настоящий джигит
|| ((oldSkill == 0) && (npc.attribute[ATR_STRENGTH] >= 30) && (npc.attribute[ATR_DEXTERITY] >= 30)) // нпс вылазит из под нар
{
    Npc_SetTalentSkill(npc,talent,newSkill);
    UpdateOverlay(npc,oldSkill,newSkill,"humans_1hST1.MDS","humans_1hST2.MDS");
};
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.260
Благодарности
6.258
Баллы
1.595
Да и необдуманный копипаст - это злая штука.
А под конец рабочего дня - настроение поднялось))
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.904
Благодарности
538
Баллы
275
что такое "перманентная" сила и ловкость?
Это просто атрибуты, которые ГГ прокачал всеми возможными способами (тренировки/зелья/еда), и теперь их значение постоянно. Т.е. это сила/ловкость БЕЗ учёта снимаемых бонусов от колец/поясов и т.п.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.945
Благодарности
939
Баллы
275
Т.е. это сила/ловкость БЕЗ учёта снимаемых бонусов от колец/поясов и т.п.
вот ты выбегаешь и говоришь это вот так. вот тебе MEG@VOLT совершенно справедливо поясняет, а в игре оно вот так. выбегаю я из угла и докидываю, что у Доси оно вот так для героя. и заметь что "героя" я выделяю жирным. то есть на выходе у тебя получается что уже есть герой и не герой и их как то надо по разному считать. имея на руках какие то переменные которые есть в скриптах.. а ты всё равно продолжаешь оперировать понятия "кольца и чего то там", а не переменными. ну вот кольца и чего то там наверное(я предполагаю) в коде Доси это массив ATR_TempBonus и это то, что в данный момент наверное надето на герое. именно на герое. то есть и использовать тогда это можно для проверок относительно героя. а что с другими НПС? функция то у Доси общая и работает как с героем так и не с героем :) На других твои правила "перманентных" атрибутов распространяются? а другие нпс носят обвесы? :) у них вообще может быть атрибут "неперманентный"?
эти все вопросы я ставлю не с целью получить на них ответы, а с целью направить рассуждения по логической цепочке. и описать это всё в целом ;-)
Пост автоматически объединён:

***
может быть тогда так:
в начале кода вводятся понятия "перманентные параметры" и назначаются для НПС с доп проверкой на героя. если НПС герой, то вычитается обвес.
Daedalus:
var int sPerm_STR_KTS;
var int sPerm_DEX_KTS;

sPerm_STR_KTS = npc.attribute[ATR_STRENGTH]
sPerm_DEX_KTS = npc.attribute[ATR_DEXTERITY]
if (C_NpcIsHero(npc) == TRUE)
{
    sPerm_STR_KTS -= ATR_TempBonus[ATR_STRENGTH];
    sPerm_DEX_KTS -= ATR_TempBonus[ATR_DEXTERITY];
};


в самом коде перед сменой таланта и оверлеев идёт доп проверка на значение текущего таланта и "перманентных параметров"
Daedalus:
if ((sPerm_STR_KTS >= 60) && (sPerm_DEX_KTS >= 60)) // нпс настоящий джигит
|| ((oldSkill == 0) && (sPerm_STR_KTS >= 30) && (sPerm_DEX_KTS >= 30)) // нпс вылазит из под нар
{
    Npc_SetTalentSkill(npc,talent,newSkill);
    UpdateOverlay(npc,oldSkill,newSkill,"humans_1hST1.MDS","humans_1hST2.MDS");
};
 
Последнее редактирование:
Сверху Снизу