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

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

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

MaGoth

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

Вложения

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.001
Благодарности
969
Баллы
295
Здесь он в .txt, чтобы я мог отобразить актуальное содержимое.
а файлы *.d у тебя блокнот не хочет открывать?

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.001
Благодарности
969
Баллы
295
KirTheSeeker, напиши сколько формул у тебя будет для одноручного оружия. и сколько ты планируешь использовать классов/"флагов" для одноручного оружия. по возможности дай краткое описание для этих классов/"флагов".
например
  • DMG_ItMw_1h_Dex для оружия требующего ловкость, сила не требуется
  • DMG_ItMw_1h_Str для оружия требующего силу, ловкость не требуется
  • DMG_ItMw_1h_DexStr для оружия требующего и ловкость и силу , требование к ловкости выше чем требования к силе
  • DMG_ItMw_1h_StrDex для оружия требующего и силу и ловкость , требование к силе выше чем требования к ловкости
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
KirTheSeeker, напиши сколько формул у тебя будет для одноручного оружия. и сколько ты планируешь использовать классов/"флагов" для одноручного оружия. по возможности дай краткое описание для этих классов/"флагов".
DMG_ItMw_1h_DAG - кинжалы, имеющие флаг "const int ITEM_DAG = 1 << 13;"
DMG_ItMw_1h_RPR - рапиры/шпаги, имеющие флаг "const int ITEM_RPR = 666;"
DMG_ItMw_1h_SWD - мечи/сабли, имеющие флаг "const int ITEM_SWD = 1 << 14;"
DMG_ItMw_1h_AXE - топоры/булавы, имеющие флаг "const int ITEM_AXE = 1 << 15;"


KirTheSeeker, удали этот файл и файл про оружие паладинов. скачай архив с файлом из моего вчерашнего поста. проверь. после этого начни его дописывать / переписывать. там стоят строчки Hlp_PrintConsole которые будут выводить информацию в окно отладчика. и ты сможешь видеть какая часть скрипта работает, а какая нет.
Попробовал новые файлы:
- Урон светом от паладинского меча проходит.
- Скалирование урона от шпаги бандита остаётся оригинальным.
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Консультация со специалистами по движку состоялась. Подобные флаги использовать нельзя. Например, если представить число 666 в двоичном виде, то там будет аж пять единиц, что равносильно одновременному использованию пяти стандартных флагов.
 

KirTheSeeker

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

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Этот флаг не используется в скриптах. Но не факт, что он не контролируется в движке.

Повторюсь, не стоит "ходить по граблям" с использованием флагов. Для проверок в скриптах есть другие параметры, которые можно использовать. :)
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
Попробовал новые файлы:
- Скалирование урона от шпаги бандита остаётся оригинальным.
Ошибся, плагин конфликтовал с Union_AlterDamage. При удалении последнего, новое скалирование работает.
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
кинжалов будет много ?
Сейчас их 4. Если и будут ещё то немного. Их точно будет не более 6-8.
Повторюсь, не стоит "ходить по граблям" с использованием флагов. Для проверок в скриптах есть другие параметры, которые можно использовать. :)
А что насчёт вполне используемого в игре флага "ITEM_AXE"? Если можно сделать проверку по нему, это было бы просто и прекрасно.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.001
Благодарности
969
Баллы
295
внутри Npc_IsEquippedItMwDAG и Npc_IsEquippedItMwRPR проще сделать проверки по инстанциям, а в Npc_IsEquippedItMwSWD и Npc_IsEquippedItMwAXE сделать уже проверки по флагам. в таком случае проверки по флагу должны идти последними, то есть как то так

Daedalus:
func int OnDamage_Hit(var int damageTotal)
{
    if (Npc_IsEquippedItMwBlessed03(item) == true)  
    {
        Hlp_PrintConsole("PERC_ASSESSDAMAGE --> B_AssessDamage_Blessed_03");
        Npc_PercEnable(victim, PERC_ASSESSDAMAGE, B_AssessDamage_Blessed_03);
    };
   
    if (Npc_IsEquippedItMwDAG(item) == true)    { return  DMG_ItMwDAG(self,victim,item); };
    if (Npc_IsEquippedItMwRPR(item) == true)    { return  DMG_ItMwRPR(self,victim,item); };
    if (Npc_IsEquippedItMwSWD(item) == true)    { return  DMG_ItMwSWD(self,victim,item); };
    if (Npc_IsEquippedItMwAXE(item) == true)    { return  DMG_ItMwAXE(self,victim,item); };
   
    return damageTotal;
};
 

KirTheSeeker

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

Я надеялся всё провернуть таким незатейливым образом, но не прокатило *nice meeting* .
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.001
Благодарности
969
Баллы
295
используй 0,1 или 2, так как массив ограничивается тремя, а начинается а нуля.
Код:
cond_atr[0]
cond_atr[1]
cond_atr[2]
из скриптов ElderGamer
Daedalus:
    name = "Легкий арбалет";
    mainflag = ITEM_KAT_FF;
    flags = ITEM_CROSSBOW | ITEM_MULTI;
    material = MAT_WOOD;
    value = 200;
    damageTotal = 50;
    damagetype = DAM_POINT;
    munition = ItAmBolt;
    cond_atr[1] = ATR_STRENGTH;
    cond_value[1] = 30;
    cond_atr[2] = ATR_DEXTERITY;
    cond_value[2] = 30;
    visual = "ItRwCrossbow1.mms";
    description = name;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Str_needed;
    count[3] = cond_value[1];
    text[4] = NAME_Dex_needed;
    count[4] = cond_value[2];
    text[5] = NAME_Value;
    count[5] = value;

Пост автоматически объединён:

для damagetype используй то что уже есть.
Код:
//
//    DAMAGE TYPES v2.0
//
CONST INT DAM_INVALID                                    = 0                        ;       //      0 - 0x00 - nur der Vollstandigkeit und Transparenz wegen hier definiert ( _NICHT_ verwenden )
CONST INT DAM_BARRIER                                    = 1                        ;          //      1 - 0x01 - nur der Vollstandigkeit und Transparenz wegen hier definiert ( _NICHT_ verwenden )
CONST INT DAM_BLUNT                                        = DAM_BARRIER    << 1    ;          //      2 - 0x02 - blunt ist das bit links von barrier
CONST INT DAM_EDGE                                        = DAM_BLUNT        << 1    ;        //      4 - 0x04 - edge     ist das bit links von blunt
CONST INT DAM_FIRE                                        = DAM_EDGE        << 1    ;          //      8 - 0x08 - fire     ist das bit links von edge
CONST INT DAM_FLY                                        = DAM_FIRE        << 1    ;        //     16 - 0x10 - fly     ist das bit links von fire
CONST INT DAM_MAGIC                                        = DAM_FLY        << 1    ;          //     32 - 0x20 - magic    ist das bit links von fly
CONST INT DAM_POINT                                        = DAM_MAGIC        << 1    ;          //     64 - 0x40 - point    ist das bit links von magic
CONST INT DAM_FALL                                        = DAM_POINT        << 1    ;          //    128 - 0x80 - nur der Vollstandigkeit und Transparenz wegen hier definiert ( _NICHT_ verwenden )
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
Приветствую всех.
Подскажите, пожалуйста, каким образом можно вписать в строку [count] несколько чисел (просто для отображения в описании)?
Например, 15/20/0, или 15, 20, 0 или ещё как-нибудь.
 

Вложения

  • 2.png
    2.png
    15,3 KB · Просмотры: 22

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
Приветствую всех.
Как и где правильно создавать Story_Globals из данного примера?
1.png

Если конкретнее, мой вопрос заключается в том, как по аналогии с чёрными грибами организовать подобный бонус для травы снеппера, чтобы за 50 травок добавлялась 1 ед. ловкости. С "MushroomsNeededForBonus", "MushroomManaBonus", "ATR_MANA_MAX" понятно, но как именно нужно редактировать эти "TotalMushroomsEaten" и "Dunkelpilz_Bonus"?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.001
Благодарности
969
Баллы
295
KirTheSeeker, за каждые 50 трав? :)
Пост автоматически объединён:

Это максимально простой пример. соответственно если тебе нужно там еще что, то то этот пример надо доработать
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; // обнуление счётчика,  можно использовать, а можно нет
            };
        };
    };
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
//TotalSpeedHerbEaten = 0; // обнуление счётчика, можно использовать, а можно нет
Я правильно понимаю, что если данную функцию не активировать, то бонус будет даваться лишь один раз, т.е. только за первые съеденные Х растений и всё?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.001
Благодарности
969
Баллы
295
KirTheSeeker, да. если счётчик не сбросить то он продолжит расти и таким образом будет равен условию один раз.

***
таких растений ни так много, как грибов. ты можешь вполне увеличить бонус за них например до 3 единиц, но давать его только один раз.
***
или можно давать бонус например три раза

Код:
if (TotalSpeedHerbEaten == 10)
|| (TotalSpeedHerbEaten == 30)
|| (TotalSpeedHerbEaten == 60)
{
            USE_Dex_Herb_01(); // увеличение ловкости через функцию ягоды гоблина
            //TotalSpeedHerbEaten = 0; // обнуление счётчика,  можно использовать, а можно нет
};
 
Сверху Снизу