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

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

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

MaGoth

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

Вложения

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

Oxbow

Участник форума
Регистрация
22 Дек 2017
Сообщения
265
Благодарности
33
Баллы
200
переустанови юнион
Я его еле установил)) Ну, старый доработанный код же работает.
Не подскажете как теперь добавить новые зелья в мир (я их в игре могу только консолью вызывать)? Из-за того, что эти файлы как бы отдельно от проекта, я не могу ни в трейд листы зелья добавить, ни в алхимию их добавить.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.862
Благодарности
6.742
Баллы
1.625
Не подскажете как теперь добавить новые зелья в мир (я их в игре могу только консолью вызывать)? Из-за того, что эти файлы как бы отдельно от проекта, я не могу ни в трейд листы зелья добавить, ни в алхимию их добавить.
ну если старый доработанный код работает - тогда снова в ГС добавляем внешние функции, вставляем код в проект и компилим))
 

Oxbow

Участник форума
Регистрация
22 Дек 2017
Сообщения
265
Благодарности
33
Баллы
200
ну если старый доработанный код работает - тогда снова в ГС добавляем внешние функции, вставляем код в проект и компилим))
Уже попробовал )) Он в авторане работает, а в проекте вырубается игра :confused:
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.862
Благодарности
6.742
Баллы
1.625
Оп... Еще один наткнулся на такое, же как у меня.

Я сие так и не победил. Если в проекте - получаю вылет, если в авторане - вылет не получаю.

Gratt что мы делаем не так?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Уже попробовал )) Он в авторане работает, а в проекте вырубается игра :confused:
Признаюсь честно, не читал внимательно всю вашу без сомнения увлекательную переписку. Что-то, возможно, я понял не так. Заранее извиняюсь.

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

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Оп... Еще один наткнулся на такое, же как у меня.

Я сие так и не победил. Если в проекте - получаю вылет, если в авторане - вылет не получаю.

Gratt что мы делаем не так?
Например используете прокладку в виде сорсера? Без понятия. Будем работать, когда научитесь работать с компилятором движка *gigi*
Сорсер я не осилил. Всё что я надобавлял в движок отказалось работать в сорсере. Ну я и плюнул его поддерживать.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.862
Благодарности
6.742
Баллы
1.625
Oxbow, распакуй вложение в папку autorun
в проекте, включая Externals.d замени AI_StartTriggerScriptEx на Oxbow_Cycle_Func
 

Вложения

  • OxbowPlugin.zip
    170,2 KB · Просмотры: 9

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.862
Благодарности
6.742
Баллы
1.625
Прикольно, работает) Что это?
Все тоже самое что и AI_StartTriggerScriptEx, только отдельно от zParser.
Проверь обязательно сохраняется ли триггер, при сохранении/загрузки.
 

Oxbow

Участник форума
Регистрация
22 Дек 2017
Сообщения
265
Благодарности
33
Баллы
200
Все тоже самое что и AI_StartTriggerScriptEx, только отдельно от zParser.
Проверь обязательно сохраняется ли триггер, при сохранении/загрузки.
Блин, вырубается при сохранении и при загрузке.
 

Oxbow

Участник форума
Регистрация
22 Дек 2017
Сообщения
265
Благодарности
33
Баллы
200
скинь сохранку. посмотрю что не так
Нету: если зелье выпито при сохранении игра вырубается до того как создается файл сохранки, если зелье выпито загрузка любого другого сохранения вырубает игру.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.862
Благодарности
6.742
Баллы
1.625
Нету: если зелье выпито при сохранении игра вырубается до того как создается файл сохранки, если зелье выпито загрузка любого другого сохранения вырубает игру.
Ага, значит возможно не я виноват))
Скинь полный код зелья и триггера
 

Oxbow

Участник форума
Регистрация
22 Дек 2017
Сообщения
265
Благодарности
33
Баллы
200
Ага, значит возможно не я виноват))
Скинь полный код зелья и триггера

Daedalus:
class C_Trigger
{
  var int Delay;
  var int Enabled;
  var int AIVariables[16];
};
   
instance SelfTrigger (C_Trigger) {};

var string Hlp_msg;
const int Attribute_TimeBonus = 0;
var int Protection_TimeBonus;

Daedalus:
func void Start_Trigger_Attribute_TimeBonus(var c_npc slf,var int attribute,var int value,var int time)
{
    SelfTrigger = Oxbow_Cycle_Func("Trigger_Attribute_TimeBonus", 1, slf, null, null);
     SelfTrigger.AIVariables[0] = time;
    SelfTrigger.AIVariables[1] = attribute;
     SelfTrigger.AIVariables[2] = value;
    SelfTrigger.Delay = 0;
   
};


func int Trigger_Attribute_TimeBonus()
{  
    if (SelfTrigger.Delay == 0)
    {
        if (Npc_HasItems(hero,ItPo_Bonus_Active) == true)
        {
            SelfTrigger.Delay = 1000;
            AI_Wait(hero,3);
            AI_PlayAni(self,"S_FIRE_VICTIM");
            Wld_PlayEffect("VOB_MAGICBURN",hero,hero,0,0,0,FALSE);
            B_Say(self,self,"$Dead");
            AI_StopFX(self,"VOB_MAGICBURN");
            Npc_ChangeAttribute(self,ATR_HITPOINTS,-self.attribute[ATR_HITPOINTS_MAX]);
            Npc_StopAni(self,"S_FIRE_VICTIM");
            //return LOOP_END;
        };
        if (Npc_HasItems(hero,ItPo_Bonus_Active) == false)
        {
            SelfTrigger.Delay = 1000;
            B_RaiseAttribute(self,SelfTrigger.AIVariables[1],SelfTrigger.AIVariables[2]);
            CreateInvItem(self,ItPo_Bonus_Active);
        };
    };

    SelfTrigger.AIVariables[0] -= 1;
   
    if (SelfTrigger.AIVariables[0] <= 0)
    {
        B_RaiseAttribute(self,SelfTrigger.AIVariables[1], -SelfTrigger.AIVariables[2]);
        Npc_RemoveInvItems(hero,ItPo_Bonus_Active,1);
        return LOOP_END;
    };  

    return LOOP_CONTINUE;
};

Daedalus:
instance ItPo_WND_WolfSoul(C_Item) //Снадобье духа волка
{
    name = NAME_WND_Drug;
    mainflag = ITEM_KAT_POTIONS;
    flags = ITEM_MULTI;
    value = 120; //цена
    visual = "ItPo_WND_BeastSoul_01.3ds";
    material = MAT_GLAS;
    on_state[0] = UseItPo_WND_WolfSoul;
    scemeName = "POTIONFAST";
    wear = WEAR_EFFECT;
    effect = "SPELLFX_ITEMGLIMMER";
    description = "Снадобье духа волка";
    text[1] = "Бонус к силе";
    count[1] = STR_WolfSoul;
    text[2] = "Бонус к ловкости";
    count[2] = DEX_WolfSoul;
    text[3] = NAME_Sec_Duration;
    count[3] = Time_Bonus/100;
    text[5] = NAME_Value;
    count[5] = value;
};


func void UseItPo_WND_WolfSoul()
{
    Start_Trigger_Attribute_TimeBonus(self, ATR_STRENGTH, STR_WolfSoul,Time_Bonus);
    //Start_Trigger_Attribute_TimeBonus(self, ATR_DEXTERITY, DEX_WolfSoul,Time_Bonus);  
};

Игра почему-то не любит преждевременное окончание тригера.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.862
Благодарности
6.742
Баллы
1.625
Oxbow, замеи вот так:
Daedalus:
class C_Trigger
{
  var int Delay;
  var int Enabled;
  var int AIVariables[16];
};
    
instance SelfTrigger (C_Trigger) {};
var int WolfSoul_Used;
Daedalus:
func void Start_Trigger_Attribute_TimeBonus(var c_npc slf,var int attribute,var int value,var int time)
{
    SelfTrigger = Oxbow_Cycle_Func("Trigger_Attribute_TimeBonus", 1000, slf, null, null);
     SelfTrigger.AIVariables[0] = time;
    SelfTrigger.AIVariables[1] = attribute;
     SelfTrigger.AIVariables[2] = value;
    WolfSoul_Used = false;
    
};


func int Trigger_Attribute_TimeBonus()
{   
    if(WolfSoul_Used == false)
   {
        if (Npc_HasItems(hero,ItPo_Bonus_Active) == true)
        {
            AI_Wait(hero,3);
            AI_PlayAni(self,"S_FIRE_VICTIM");
            Wld_PlayEffect("VOB_MAGICBURN",hero,hero,0,0,0,FALSE);
            B_Say(self,self,"$Dead");
            AI_StopFX(self,"VOB_MAGICBURN");
            Npc_ChangeAttribute(self,ATR_HITPOINTS,-self.attribute[ATR_HITPOINTS_MAX]);
            Npc_StopAni(self,"S_FIRE_VICTIM");
        };
        if (Npc_HasItems(hero,ItPo_Bonus_Active) == false)
        {
            B_RaiseAttribute(self,SelfTrigger.AIVariables[1],SelfTrigger.AIVariables[2]);
            CreateInvItem(self,ItPo_Bonus_Active);
        };
        WolfSoul_Used = true;
    };

    SelfTrigger.AIVariables[0] -= 1;
    
    if (SelfTrigger.AIVariables[0] <= 0)
    {
        B_RaiseAttribute(self,SelfTrigger.AIVariables[1], -SelfTrigger.AIVariables[2]);
        Npc_RemoveInvItems(hero,ItPo_Bonus_Active,1);
        return LOOP_END;
    };   

    return LOOP_CONTINUE;
};
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.003
Благодарности
972
Баллы
295
если вы используете переменную WolfSoul_Used , то пляски с бубнами вокруг ItPo_Bonus_Active не нужны.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.862
Благодарности
6.742
Баллы
1.625
MW 7, Переменная нужна лишь для одноразового запуска эффекта триггера. Так что бутылка нужна)
 
Сверху Снизу