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

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

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

MaGoth

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

Вложения

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

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
106
Благодарности
3
Баллы
30
RPD,
Смотри гифку.
AI_FinishingMove - это что? от куда взялося?
Спасибо!
Пост автоматически объединён:

AI_FinishingMove - это что? от куда взялося?
Ну так анимация протыкания оппонента. Не я писал, это же встроенная B_FinishingMove()
 

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
106
Благодарности
3
Баллы
30
В общем я решил совсем оторваться и сделать руну призыва именно НПС, а не монстра. Получилось на половину.
Daedalus:
prototype Nikita_Default(C_NPC)
{
    name[0] = "Никита";
    guild = GIL_NIK;
    voice = 20;
    npcType = npctype_main;
    level = 100;
    aivar[AIV_PARTYMEMBER] = TRUE;
    attribute[ATR_STRENGTH] = 200;
    attribute[ATR_DEXTERITY] = 150;
    attribute[ATR_MANA_MAX] = 300;
    attribute[ATR_MANA] = 300;
    attribute[ATR_HITPOINTS_MAX] = 25000;
    attribute[ATR_HITPOINTS] = 25000;
    fight_tactic = FAI_HUMAN_MASTER;
    Mdl_ApplyOverlayMds(self,"Humans_Mage.mds");
    B_GiveNpcTalents(self);
    Npc_SetTalentSkill(self,NPC_TALENT_MAGE,7);
    B_SetFightSkills(self,70);
    EquipItem(self,itmw_nikita_piercer);
    B_CreateAmbientInv(self);
    B_SetNpcVisual(self,MALE,"Hum_Head_Thief",FACE_N_NIKITA,BodyTex_N,ITAR_Bau_M);
    Mdl_SetModelFatness(self,2);
    fight_tactic = FAI_HUMAN_MASTER;
    senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
    senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
    aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM;
    aivar[AIV_MM_FollowInWater] = true;
};


instance Summoned_Nikita(Nikita_Default)
{
    name[0] = "Вызванный Никита";
    aivar[AIV_PARTYMEMBER] = TRUE;
    B_SetAttitude(self,ATT_FRIENDLY);
    start_aistate = ZS_MM_Rtn_Summoned;
};

instance Nikita_For_Npc(Nikita_Default)
{
    name[0] = "Никита";
    B_SetAttitude(self,ATT_HOSTILE);
};

Не захотел делать НПС как отдельного моба в скриптах MST_ и просто создал в том же файле, где сама инстанция НПС, прототип. Сразу появилась проблема, что непись не кастует теперь заклинания и всегда берет меч, как скелет. (И это при том, что все проверки на инстанцию вызванного НПС в файлах добавил). Также мне ведь еще нужно их разделить, один вариант НПС для кастующего игрока, другой - для кастующего НПС. Я вообще тут поплыл, ничего не понятно. Со скелетом просто - он при вызове для игрока просто помечается как дружелюбный и добавляется partymember (ну это я так понял). А при вызове для другого НПС просто вызывается оригинал, так как они не конфликтуют. Также, если не сложно вам рассказать, хотелось бы узнать, как реализуется добивание и моментальное убийство. Просто у меня непись вообще тупо кладет всех на землю, не добивает и не убивает моментально.
 
Последнее редактирование:

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.574
Благодарности
4.167
Баллы
915
Что за странная гильдия? Её номер - в студию.
Сразу появилась проблема, что непись не кастует теперь заклинания и всегда берет меч, как скелет.
Потому что кастовать могут только определённые гильдии или персонажи, список указан в файле B_SelectSpell.d.
Также, если не сложно вам рассказать, хотелось бы узнать, как реализуется добивание и моментальное убийство.
Моментально убивают только монстры (guild > GIL_SEPERATOR_HUM), орки (guild > GIL_SEPERATOR_ORC), бандиты (guild = GIL_BDT) и те, у кого прописана переменная aivar[AIV_DropDeadAndKill] = TRUE;
Добивают врага те, у кого в функции атаки (B_Attack) прописаны причины, указанные в файле C_NpcHasAttackReasonToKill.d.
 
Последнее редактирование:

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
106
Благодарности
3
Баллы
30
Что за странная гильдия? Её номер - в студию.
Моя гильдия, сам создавал
Потому что кастовать могут только определённые гильдии или персонажи, список указан в файле B_SelectSpell.d.
Я написал, что прописывал для инстанций в этом файле инструкции. Не кастуют именно вызванные экземпляры, хотя и принадлежат одной гильдии
и те, у кого прописана переменная aivar[AIV_DropDeadAndKill] = TRUE;
За это спасибо,

Добивают врага те, у кого в функции атаки (B_Attack) прописаны причины, указанные в файле C_NpcHasAttackReasonToKill.d.
Это понятно, но, опять же, вызванные экземпляры почему то игнорируют эти правила
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.101
Благодарности
5.592
Баллы
910
Моя гильдия, сам создавал
Нельзя создавать свои гильдии, тем самым ломаешь движок. То что разрабы вынесли это в скрипты - ошибка с их стороны.
Движок будет всегда тебе посылать в zspy
Warn: 0 U:GUILDS:Guild-attitude-table size mismatch : Size has to be 66 .... <zError.cpp,#474>
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.840
Благодарности
6.725
Баллы
1.625
Нельзя создавать свои гильдии
Как это низя?
Можно, но для этого нужно определенным навыком обладать...
А судя по вопросам, человек этим навыком пока не владеет...
 

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
106
Благодарности
3
Баллы
30
Как это низя?
Можно, но для этого нужно определенным навыком обладать...
А судя по вопросам, человек этим навыком пока не владеет...
Определенно. не отказался бы от информации по этому поводу. Есть?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.840
Благодарности
6.725
Баллы
1.625

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
106
Благодарности
3
Баллы
30
Да
Но предупреждаю сразу: с первого раза ничего не получится. Пробуй, изменяй код, тестируй. И все придет))
Понятно. Конечно я переделал существующую.
Я это и имел ввиду
Пост автоматически объединён:
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.101
Благодарности
5.592
Баллы
910
Как это низя?
Можно, но для этого нужно определенным навыком обладать...
А судя по вопросам, человек этим навыком пока не владеет...
Использование свободного под гильдию людей поля не значит создать.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.840
Благодарности
6.725
Баллы
1.625
Использование свободного под гильдию людей поля не значит создать.
Я этого не говорил))
Создание, смещение сепараторов, смещение констант и прочее сопутствующее... Я вот про это говорил)
Я это и имел ввиду
Т.е. просто переименовал существующую? А везде переименовал? В текстах? в неписях? в отношениях? в константах?
 

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
106
Благодарности
3
Баллы
30
Да
Но предупреждаю сразу: с первого раза ничего не получится. Пробуй, изменяй код, тестируй. И все придет))
Тебя попрошу ответить на вопросы выше, если не сложно, пожалуйста. вижу, что разбираешься
Пост автоматически объединён:

Я этого не говорил))
Создание, смещение сепараторов, смещение констант и прочее сопутствующее... Я вот про это говорил)

Т.е. просто переименовал существующую? А везде переименовал? В текстах? в неписях? в отношениях? в константах?
да, конечно
Пост автоматически объединён:

Тебя попрошу ответить на вопросы выше, если не сложно, пожалуйста. вижу, что разбираешься
Пост автоматически объединён:


да, конечно. Правда, что именно имеешь ввиду под смещением?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.840
Благодарности
6.725
Баллы
1.625
Тебя попрошу ответить на вопросы выше, если не сложно, пожалуйста. вижу, что разбираешься
Пост автоматически объединён:


да, конечно
Добавление вызова непися - сделать не сложно, у меня даже есть уже прототип заклинания на этот случай, но он дома. Смогу показать только через часов 3-4
 

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
106
Благодарности
3
Баллы
30
Добавление вызова непися - сделать не сложно, у меня даже есть уже прототип заклинания на этот случай, но он дома. Смогу показать только через часов 3-4
хорошо. прямо таки вызова непися, не монстра?
 

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
106
Благодарности
3
Баллы
30
Дело в том, что я, как писал выше, закл сделал. Все вызывается
Пост автоматически объединён:

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

Не захотел делать НПС как отдельного моба в скриптах MST_ и просто создал в том же файле, где сама инстанция НПС, прототип. Сразу появилась проблема, что непись не кастует теперь заклинания и всегда берет меч, как скелет. (И это при том, что все проверки на инстанцию вызванного НПС в файлах добавил). Также мне ведь еще нужно их разделить, один вариант НПС для кастующего игрока, другой - для кастующего НПС. Я вообще тут поплыл, ничего не понятно. Со скелетом просто - он при вызове для игрока просто помечается как дружелюбный и добавляется partymember (ну это я так понял). А при вызове для другого НПС просто вызывается оригинал, так как они не конфликтуют. Также, если не сложно вам рассказать, хотелось бы узнать, как реализуется добивание и моментальное убийство. Просто у меня непись вообще тупо кладет всех на землю, не добивает и не убивает моментально.
Daedalus:
prototype Nikita_Default(C_NPC)
{
    name[0] = "Никита";
    guild = GIL_NIK;
    voice = 20;
    npcType = npctype_main;
    level = 100;
    aivar[AIV_PARTYMEMBER] = TRUE;
    attribute[ATR_STRENGTH] = 200;
    attribute[ATR_DEXTERITY] = 150;
    attribute[ATR_MANA_MAX] = 300;
    attribute[ATR_MANA] = 300;
    attribute[ATR_HITPOINTS_MAX] = 25000;
    attribute[ATR_HITPOINTS] = 25000;
    fight_tactic = FAI_HUMAN_MASTER;
    Mdl_ApplyOverlayMds(self,"Humans_Mage.mds");
    B_GiveNpcTalents(self);
    Npc_SetTalentSkill(self,NPC_TALENT_MAGE,7);
    B_SetFightSkills(self,70);
    EquipItem(self,itmw_nikita_piercer);
    B_CreateAmbientInv(self);
    B_SetNpcVisual(self,MALE,"Hum_Head_Thief",FACE_N_NIKITA,BodyTex_N,ITAR_Bau_M);
    Mdl_SetModelFatness(self,2);
    fight_tactic = FAI_HUMAN_MASTER;
    senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
    senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
    aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM;
    aivar[AIV_MM_FollowInWater] = true;
};


instance Summoned_Nikita(Nikita_Default)
{
    name[0] = "Вызванный Никита";
    aivar[AIV_PARTYMEMBER] = TRUE;
    B_SetAttitude(self,ATT_FRIENDLY);
    start_aistate = ZS_MM_Rtn_Summoned;
};

instance Nikita_For_Npc(Nikita_Default)
{
    name[0] = "Никита";
    B_SetAttitude(self,ATT_HOSTILE);
};

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

Вот в чем проблемы то
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.101
Благодарности
5.592
Баллы
910
Надо показывать как написал в B_SelectSpell
Сами NPC вообще не имеют значения.
 

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
106
Благодарности
3
Баллы
30
Надо показывать как написал в B_SelectSpell
Сами NPC вообще не имеют значения.
Daedalus:
    if((Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(nikita)) || (Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Summoned_Nikita)) || (Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Nikita_For_Npc)))
    {
        var int rand; rand = Hlp_Random(4);
        
        if(!Npc_GetInvItem(slf,ItRu_FullHeal))
        {
            CreateInvItem(slf,ItRu_FullHeal);
        };
        if(Npc_GetDistToNpc(slf,oth) <= FIGHT_DIST_MELEE)
        {
            return FALSE;
        };
        
        return B_ReadyRune(slf,ItRu_SumNik);
    };
Пост автоматически объединён:

Daedalus:
    if((Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(nikita)) || (Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Summoned_Nikita)) || (Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Nikita_For_Npc)))
    {
        var int rand; rand = Hlp_Random(4);
       
        if(!Npc_GetInvItem(slf,ItRu_FullHeal))
        {
            CreateInvItem(slf,ItRu_FullHeal);
        };
        if(Npc_GetDistToNpc(slf,oth) <= FIGHT_DIST_MELEE)
        {
            return FALSE;
        };
       
        return B_ReadyRune(slf,ItRu_SumNik);
    };
весь мой код в b_selectSpell()
 
Сверху Снизу