|
Re: Скриптинг в Готике
Хорошо, вот мануал, полностью (что бы понятно было):
Меч (мануалка для второй Готики)
Шаг 1. В папке Gothic II\_work\data\Scripts\Content\Items создаем файл IT_MyWeapon.d В этом файле мы описываем, как наш меч будет выглядеть. Мы можем использовать модели из самой Готики(как, например, делаю я) либо что-нибудь свое. Вот внутренности моего файла:
INSTANCE ItMw_MySword (C_Item) { name = "Мой меч"; //название меча
mainflag = ITEM_KAT_NF; flags = ITEM_2HD_SWD; material = MAT_METAL;
value = Value_MySword;// стоимость нашего меча
damageTotal = Damage_MySword;// повреждение damagetype = DAM_EDGE; range = Range_MySword; // радиус действия wear = WEAR_EFFECT; effect = "SPELLFX_FIREBOW";//наш меч будет гореть
cond_atr[2] = ATR_STRENGTH;// требуется сила cond_value[2] = Condition_MySword;// сколько требуется силы visual = "ItMw_060_2h_sword_01.3DS";//модель меча
description = name; TEXT[2] = NAME_Damage; COUNT[2] = damageTotal; TEXT[3] = NAME_Str_needed; COUNT[3] = cond_value[2]; TEXT[4] = NAME_TwoHanded; TEXT[5] = NAME_Value; COUNT[5] = value; }; Здесь все понятно. Проблем возникнуть не должно.
Шаг 2. В папке Gothic II\_work\data\Scripts\Content\ находим файл Tuning_Melee_Weapons.d и дописываем следующие строчки:
const int Damage_MySword = 120; const int Condition_MySword = 100; const int Range_MySword = 120; const int Value_MySword = 100000; Что это такое описано выше.
Шаг 3. В папке Gothic II\_work\data\Scripts\Content\Story\B_Content создаем файл B_ScHasMyWeapon.d с такой начинкой:
func int C_ScHasMyWeapon () { if (Npc_HasItems (hero, ItMw_MySword)) { return TRUE; }; return FALSE; //DEFAULT };
func int C_IsItemMyWeapon(var C_ITEM Wea) { if (Hlp_IsItem(Wea, ItMw_MySword) == TRUE) { return TRUE; };
return FALSE; //DEFAULT }; func int C_ScHasReadiedMyWeapon () { var C_ITEM ReadyWea; ReadyWea = Npc_GetReadiedWeapon(hero); if (C_IsItemMyWeapon(ReadyWea)) { return TRUE; }; return FALSE; //DEFAULT };
func int C_ScHasEquippedMyWeapon () { var C_ITEM EquipWea; EquipWea = Npc_GetEquippedMeleeWeapon(hero); if (C_IsItemMyWeapon(EquipWea)) { return TRUE; }; return FALSE; //DEFAULT };
func void B_ClearMyWeapon () { Npc_RemoveInvItems (hero , ItMw_MySword, Npc_HasItems (hero, ItMw_MySword));
};
Что здесь к чему, объяснять не буду. Кому интересно – спрашивайте в личные или сами разбирайтесь. Здесь не так уж и сложно.
Теперь в той же папке создаем файл B_MyWeaponSpecialDamage.d и вписываем в него следующее:
func void B_MyWeaponSpecialDamage (var C_NPC oth, var C_NPC slf) { if (C_ScHasReadiedMyWeapon()) && (Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))//Вот этой строки не хватало! { Wld_PlayEffect("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE ); Npc_ClearAIQueue (self); AI_StartState (self, ZS_MagicFreeze, 0, ""); return; }; }; Строчка Wld_PlayEffect("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE ); означает, что при каждом ударе нашего меча противник будет загораться.
VOB_MAGICBURN – непосредственно эффект горения. Названия других эффектов можно посмотреть в файле VisualFx.dat в папке Gothic II\_work\data\Scripts\_compiled. Для просмотра dat-файлов рекомендую редактор bred.
Далее в файлах B_AssessDamage.d и B_MM_AssessDamage.d после строки B_BeliarsWeaponSpecialDamage (other, self); вставляем: B_MyWeaponSpecialDamage (other, self); Это означает, что наш меч будет поджигать людей и монстров соответственно.
|