Показать сообщение отдельно
Старый 27.08.2005, 23:48   #830
Finsernis

AGFC
Гость
 
Сообщений: n/a

По умолчанию 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. Окомпилируй *и посмотри, что получилось. По идее, должно работать. Сообщи, получилось или нет, и удачи… ;)

Теперь к тебе вопрос: У тебя получилась фишка с регенерацией манны?
Ответить с цитированием