|
Re: Скриптинг в Готике
2TSYLin: Меч не будет наносить повреждения от магии и от огня. Этот меч наносит повреждение только от оружия. Я привел тебе пример, как визуально отобразить повреждение от магии и от огня. Это просто болванка. ::) Далее, чтобы наносился урон от огня, магии и оружия в инстанции твоего меча должно быть вот что: * * * * * *damagetype = DAM_MAGIC | DAM_FIRE | DAM_EDGE; * * *damage[DAM_INDEX_MAGIC] = damage_magic_FireMagicSword; * * *damage[DAM_INDEX_FIRE] = damage_fire_FireMagicSword; * * *damage[DAM_INDEX_EDGE] = damage_edge_FireMagicSword;
Поясняю:
damagetype = DAM_MAGIC | DAM_FIRE | DAM_EDGE; - это означает, что твой меч будет наносить уроны магией, огнем и просто острием.
damage[DAM_INDEX_MAGIC] = damage_magic_FireMagicSword; – показывает, сколько будет наноситься урона магией, естественно, что константа damage_magic_FireMagicSword должна быть описана заранее.
damage[DAM_INDEX_FIRE] = damage_fire_FireMagicSword; damage[DAM_INDEX_EDGE] = damage_edge_FireMagicSword; – соответственно урон огнем и "ребром", т.е. острием (так дословно будет EDGE).
Далее, помогу тебе создать твой меч: ;D 1. В файле Items\IT_Melee_weapons.d напиши вот что:
Const int damage_magic_FireMagicSword = 130; Const int damage_fire_FireMagicSword = 130; Const int damage_edge_FireMagicSword = 30; Const int value_ FireMagicSword = 5000; Const int Condition_ FireMagicSword = 100; Const int Range_ FireMagicSword = 120;
instance ITMW_Fire_Magic_Sword(C_Item) { * * *name = "Огненно - магический меч"; * * *mainflag = ITEM_KAT_NF; * * *flags = ITEM_2HD_SWD; * * *material = MAT_METAL; * * *value = value_ FireMagicSword; * * *wear = WEAR_EFFECT; * * *effect = "SPELLFX_FIREARROW"; * * *damagetype = DAM_MAGIC | DAM_FIRE | DAM_EDGE; * * *damage[DAM_INDEX_MAGIC] = damage_magic_FireMagicSword; * * *damage[DAM_INDEX_FIRE] = damage_fire_FireMagicSword; * * *damage[DAM_INDEX_EDGE] = damage_edge_FireMagicSword; * * *range = Range_ FireMagicSword; * * *cond_atr[2] = ATR_STRENGTH; * * *cond_value[2] = Condition_ FireMagicSword; * * *visual = "ItMw_025_2h_Sword_old_01.3DS"; * * *description = name; * * *text[1] = "Повреждение огнем"; * * *count[1] = damage_fire_FireMagicSword; * * *text[2] = "Повреждение магией"; * * *count[2] = damage_magic_FireMagicSword; * * *text[3] = "Требуемая сила"; * * *count[3] = Condition_ FireMagicSword; * * *text[5] = NAME_Value; * * *count[5] = value; };
2. Все, теперь твой меч действительно будет наносить урон магией, огнем и острием. Жертва будет загораться в любом случае. Но теперь нам надо показать, что урон наносится также и магией. Для этого пишем вот какую функцию: Создаем файл Story\B_Content\ B_FireMagicSwordSpecialDamage.d со следующим содержанием:
func void B_FireMagicSwordSpecialDamage(var C_Npc oth,var C_Npc slf) { * * *var C_Item ReadyWeap; //переменная типа C_Item для получения текущего оружия * * *ReadyWeap = Npc_GetReadiedWeapon (oth); // присваиваем переменной ReadyWeap значение текущего оружия, находящегося в состоянии боевой готовности, т.е. ГГ держит его в руке * * *var int hlp_haotic_damage; // переменная для определения "случайного случая" * * *// Если предмет ReadyWeap это наш меч то if (Hlp_IsItem (ReadyWeap, ITMW_Fire_Magic_Sword) == TRUE) * * *{ * * * * * *hlp_haotic_damage = *Hlp_Random (100); // генерируем псевдослучайное число // если число меньше 50 то * * * * * *if (hlp_haotic_damage < 50) * * * * * *{ * * * * * * * * *Wld_PlayEffect ("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE); // проиграть эффект горения на жертве * * * * * *} // Иначе * * * * * *else if (hlp_haotic_damage >= 50) * * * * * *{ * * * * * * * * *Wld_PlayEffect ("spellFX_BELIARSRAGE", self, self, 0, 0, 0, FALSE); // Эффект повреждения магией * * * * * *}; * * * * * * * * * * * *}; };
3. Далее нам нужно, чтобы при каждом ударе по человеку или животному запускался наш спецэффект, для этого *в файлах AI\Human\B_Human\B_AssessDamage.d AI\Monster\B_Monster\B_MM_AssessDamage.d после B_BeliarsWeaponSpecialDamage (other, self); напиши B_FireMagicSwordSpecialDamage(other, self);
4. В файле gothic.src после строки Story\B_Content\C_ArtefaktValues.d напиши вот что Story\B_Content\ B_FireMagicSwordSpecialDamage.d .
5. Окомпилируй *и посмотри, что получилось. По идее, должно работать. Сообщи, получилось или нет, и удачи… ;)
Теперь к тебе вопрос: У тебя получилась фишка с регенерацией манны?
|