A wiec zajmiemy się tworzeniem czaru bojowego. Jest to nieco podobne do tworzenia czarów teleportacji, które opisał sawik. A więc do dzieła - najpierw trzeba napisać skrypt zaklęcia w AI\Magic\Spells. Naszym czarem będzie Błękitny płomień.
// ************
// SPL_BlueFlame
// ************
const int SPL_Cost_BlueFlame = 5;
const int SPL_Damage_BlueFlame = 25;
INSTANCE Spell_BlueFlame (C_Spell_Proto)
{
time_per_mana = 0;
damage_per_level = SPL_Damage_BlueFlame;
damageType = DAM_MAGIC;
};
func int Spell_Logic_BlueFlame (var int manaInvested)
{
if (Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
{
return SPL_SENDCAST;
}
else if (self.attribute[ATR_MANA] >= SPL_Cost_BlueFlame)
{
return SPL_SENDCAST;
}
else //nicht genug Mana
{
return SPL_SENDSTOP;
};
};
func void Spell_Cast_BlueFlame()
{
if (Npc_GetActiveSpellIsScroll(self))
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll;
}
else
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_BlueFlame;
};
self.aivar[AIV_SelectSpell] += 1;
};
W instance czaru można dopisać coś dodatkowego, np.
targetCollectType = TARGET_TYPE_UNDEAD;
sprawi, ze czar będzie działał tylko na nieumarłych. Wszystkie te linijki są w pliku C_Spell_Proto.d
Następnie trzeba czar dopisać do pliku Spell_ProcessMana.d w ten sposób:
if (activeSpell == SPL_BlueFlame ) { return Spell_Logic_BlueFlame (manaInvested); };
Teraz trzeba zająć się plikiem Constants.d, a mianowicie są tam do dopisania 3 rzeczy (z czego bez dwóch czar może działać):
W linijkach 510-646 są id zaklęć. Teraz trzeba wstawić nasze zaklęcie do jednego z nieużywanych slotów. Po zamianie wygląda to tak:
const int SPL_BlueFlame = 90;
Niżej (linijki 654-791) są określone nazwy spellFx dla zaklęć. Można zdefiniować je samemu w plikach PfxInstMagic.d i VisualFxInst.d, ale my damy naszemu czarowi efekt kuli ognia. W tym celu wpisujemy
"InstantFireball", // 90 SPL_BlueFlame
w odpowiedniej linijce.
Jeszcze niżej jest część odpowiadająca za animacje. Aby nasze zaklęcie miało animację ognistego pocisku, wpisujemy
"FBT", // 90 SPL_BlueFlame
Na koniec w Text.d należy dopisać nazwę zaklęcia:
const string NAME_SPL_BlueFlame = "Błękitny płomień";
Żeby użyć zaklęcia trzeba oczywiście stworzyć zwój albo runę, ale ich tworzenie to akurat oczywistość ;p .
I na tym kończę tutorial. mam nadzieję że się komuś przyda.