эх.. открыл готик соурс - декомпиляция готикдат - копирование из возвращение в г2 доспех - затем вставление . спросил у админов/людей которые разбираются в скриптах, сказали все правильно, но надо куда то КАКОЙ то ФАЙЛ кинуть, а я вот без понятия .Для начала стоит подробно описать то, что ты делал, а потом уже будет видно, где совершил ошибку.
ага, очень приятноНа неконкретно заданный вопрос можно получить только неконкретный ответ:изучить язык Daedalus, получить исходники скриптов мода, разобраться с механизмом выдачи героических бонусов и списком существ, за которые даются эти бонусы, и включить босса в этот список.
я разве могу по другому спросить? мне сказали за это отвечает строчка aivar , но там их 4 я не знаюНа неконкретно заданный вопрос можно получить только неконкретный ответ:изучить язык Daedalus, получить исходники скриптов мода, разобраться с механизмом выдачи героических бонусов и списком существ, за которые даются эти бонусы, и включить босса в этот список.
const int AIV_BONUSLP = 94;
const int AIV_BONUSLPGIVEN = 95;
instance BDT_1090_Addon_Raven(Npc_Default)
{
name[0] = "Равен";
guild = GIL_BDT;
id = 1090;
voice = 10;
flags = 0;
npcType = npctype_main;
level = 100;
attribute[ATR_STRENGTH] = 150;
attribute[ATR_DEXTERITY] = 200;
attribute[ATR_MANA] = 1000;
attribute[ATR_MANA_MAX] = 666666;
attribute[ATR_HITPOINTS] = 1500;
attribute[ATR_HITPOINTS_MAX] = 1500;
aivar[AIV_IgnoresArmor] = TRUE;
aivar[AIV_EnemyOverride] = TRUE;
aivar[AIV_BONUSLP] = TRUE;
fight_tactic = FAI_HUMAN_MASTER;
EquipItem(self,ItMw_BeliarWeapon_Raven);
B_CreateAmbientInv(self);
CreateInvItems(self,ItMi_Addon_Stone_01,1);
CreateInvItems(self,ItMi_Addon_Stone_02,1);
CreateInvItems(self,ItMi_Addon_Stone_03,1);
CreateInvItems(self,ItMi_Addon_Stone_04,1);
CreateInvItems(self,ItMi_Addon_Stone_05,1);
CreateInvItems(self,itmi_goldringraven,1);
CreateInvItems(self,ItRi_Dex_Strg_01,1);
B_SetNpcVisual(self,MALE,"Hum_Head_Thief",Face_N_Raven,BodyTex_N,itar_ravenarmor_addon);
Mdl_SetModelFatness(self,0);
Mdl_ApplyOverlayMds(self,"Humans_Arrogance.mds");
B_GiveNpcTalents(self);
B_SetFightSkills(self,100);
daily_routine = Rtn_Start_1090;
};
я точно не понял, как сделать, что бы силу/жизнь/ловку/ману дали?Вот теперь появилась конкретика:в "Возвращении" и модах на его основе используются 2 переменных из массива aivar[]:
Как видно из названия, первая переменная служит для включения существа в список бонусных, например, бандита Ворона:Код:const int AIV_BONUSLP = 94; const int AIV_BONUSLPGIVEN = 95;
а вторая используется в функциях обработки героических бонусов и указывает, получен ли этот бонус. Если ты хочешь сделать свой мод на основе "Возвращения", то этой информации будет достаточно.Код:instance BDT_1090_Addon_Raven(Npc_Default) { name[0] = "Равен"; guild = GIL_BDT; id = 1090; voice = 10; flags = 0; npcType = npctype_main; level = 100; attribute[ATR_STRENGTH] = 150; attribute[ATR_DEXTERITY] = 200; attribute[ATR_MANA] = 1000; attribute[ATR_MANA_MAX] = 666666; attribute[ATR_HITPOINTS] = 1500; attribute[ATR_HITPOINTS_MAX] = 1500; aivar[AIV_IgnoresArmor] = TRUE; aivar[AIV_EnemyOverride] = TRUE; aivar[AIV_BONUSLP] = TRUE; fight_tactic = FAI_HUMAN_MASTER; EquipItem(self,ItMw_BeliarWeapon_Raven); B_CreateAmbientInv(self); CreateInvItems(self,ItMi_Addon_Stone_01,1); CreateInvItems(self,ItMi_Addon_Stone_02,1); CreateInvItems(self,ItMi_Addon_Stone_03,1); CreateInvItems(self,ItMi_Addon_Stone_04,1); CreateInvItems(self,ItMi_Addon_Stone_05,1); CreateInvItems(self,itmi_goldringraven,1); CreateInvItems(self,ItRi_Dex_Strg_01,1); B_SetNpcVisual(self,MALE,"Hum_Head_Thief",Face_N_Raven,BodyTex_N,itar_ravenarmor_addon); Mdl_SetModelFatness(self,0); Mdl_ApplyOverlayMds(self,"Humans_Arrogance.mds"); B_GiveNpcTalents(self); B_SetFightSkills(self,100); daily_routine = Rtn_Start_1090; };
у меня gothic mods , но там нету ничего из возвращения или ребаланса, но запускаются возвращение и ребаланс@Михаил Карсаков:
Если не понял, тогда изучи алгоритмы работы функций, отвечающих за выдачу героических бонусов. Если есть декомпилированные скрипты "Возвращения", то можно без проблем найти эти функции, запустив поиск по обращению к переменным aivar[94] и aivar[95], т.к. при декомпиляции GothicSourcer распознаёт имена только стандартных элементов массива aivar[], входящего в состав класса C_Npc.
Вопрос к скриптерам: кто-нибудь пробовал добавлять в файлы NamesGothic1.dsc и NamesGothic2.dsc имена используемых в модах нестандартных элементов массива aivar[]?
нашел только aivar[100]у меня gothic mods , но там нету ничего из возвращения или ребаланса, но запускаются возвращение и ребаланс
Добавляй сколько угодно.@Михаил Карсаков:
Если не понял, тогда изучи алгоритмы работы функций, отвечающих за выдачу героических бонусов. Если есть декомпилированные скрипты "Возвращения", то можно без проблем найти эти функции, запустив поиск по обращению к переменным aivar[94] и aivar[95], т.к. при декомпиляции GothicSourcer распознаёт имена только стандартных элементов массива aivar[], входящего в состав класса C_Npc.
Вопрос к скриптерам: кто-нибудь пробовал добавлять в файлы NamesGothic1.dsc и NamesGothic2.dsc имена используемых в модах нестандартных элементов массива aivar[]?
Может стоит тогда поискать среди vdfs томов?у меня gothic mods , но там нету ничего из возвращения или ребаланса, но запускаются возвращение и ребаланс
func void UseItPo_REGEN_HP()
{
if(self.attribute[ATR_HITPOINTS] < self.attribute[ATR_HITPOINTS_MAX] / 2)
{
self.attribute[ATR_REGENERATEHP] = 1;
}
else if(self.attribute[ATR_HITPOINTS] > self.attribute[ATR_HITPOINTS_MAX] / 2)
{
self.attribute[ATR_REGENERATEHP] = 0;
};
};
а как он остановится то? Игра вызывает функцию один раз, и срабатывает первое условие, а когда нужно выполнить другое условия эта функция уже не выполняется, ибо в цикл вешать нужно.Снова всем привет
До сих пор мучает вопрос регенерации хп (таймер уже не принципиален). И вроде бы тут всё правильно, но по факту нет. Реген продолжает бесконечно работать, хотя должен останавливаться, восстановив ровно половину хп. Что тут не так, подскажите, пожалуйста.
Код:func void UseItPo_REGEN_HP() { if(self.attribute[ATR_HITPOINTS] < self.attribute[ATR_HITPOINTS_MAX] / 2) { self.attribute[ATR_REGENERATEHP] = 1; } else if(self.attribute[ATR_HITPOINTS] > self.attribute[ATR_HITPOINTS_MAX] / 2) { self.attribute[ATR_REGENERATEHP] = 0; }; };
func void UseItPo_REGEN_HP()
{
self.aivar[90] = 1;
};
func void GLOBAL_CYCLE()
{
if(self.attribute[ATR_HITPOINTS] < self.attribute[ATR_HITPOINTS_MAX] / 2 && self.aivar[90])
{
self.attribute[ATR_HITPOINTS] += 1;
}
else if(self.attribute[ATR_HITPOINTS] > self.attribute[ATR_HITPOINTS_MAX] / 2 && self.aivar[90])
{
self.aivar[90] = 0;
};
};
а как он остановится то? Игра вызывает функцию один раз, и срабатывает первое условие, а когда нужно выполнить другое условия эта функция уже не выполняется, ибо в цикл вешать нужно.
Вот пример тебе, аивар юзай который свободный, если 90й занят.
PHP:func void UseItPo_REGEN_HP() { self.aivar[90] = 1; }; func void GLOBAL_CYCLE() { if(self.attribute[ATR_HITPOINTS] < self.attribute[ATR_HITPOINTS_MAX] / 2 && self.aivar[90]) { self.attribute[ATR_HITPOINTS] += 1; } else if(self.attribute[ATR_HITPOINTS] > self.attribute[ATR_HITPOINTS_MAX] / 2 && self.aivar[90]) { self.aivar[90] = 0; }; };
Только тут наверное будут непонятки когда будут другие нпс пить этой зелье, и self я бы поменял на hero, а лучше на var C_NPC her; her = Hlp_GetNpc(PC_Hero);
хы.. а я даж не знаю, что такое gothicvdfs.А теперь максимально подробно описывай свои действия: c помощью GothicVDFS распаковал скрипты из тома мода (название тома - в студию), с помощью GothicSourcer декомпилировал их, затем внёс в них свои изменения (названия скриптов и код изменений - в студию), скомпилировал скрипты, с помощью GothicVDFS запаковал изменённые скрипты в том мода, удалил dmp файл (если не установлен SystemPack) и запустил мод.
что именно там читать?