Po wielu zmaganiach z tym...ekhem...skryptem
, udało mi się w końcu dojść do efektu jaki chciałem - mianowicie, efekt magii jest wyzwalany za każdym trafieniem broni białej, tylko raz, bez żadnych pętli i innych takich tam, oto gotowy skrypt:
func int CmpNpc(var c_npc p1,var c_npc p2)
{
var int old1;
var int old2;
var int result;
old1=p1.aivar[0];
old2=p2.aivar[0];
p1.aivar[0]=0;
p2.aivar[0]=1;
result=p1.aivar[0];
p1.aivar[0]=old1;p2.aivar[0]=old2;
return result;
};
func void weaponreaction(var c_npc Hero,var c_npc Self)
{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
{
return;
};
var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,ItMw_Blade_Blessed_01))
{
Wld_PlayEffect("SPELLFX_ICEWAVE",self,self,0,50,DAM_MAGIC,FALSE);
}
else if (Hlp_IsItem(eqweapon,ItMw_Blade_Blessed_01))
{
Wld_SendTrigger("weaponreaction");
};
};
func void Sbd_is_damaged()
{
if (self==other&&hero==victim)
{
if(Npc_IsPlayer(victim)&&CmpNpc(self,other))
{
weaponreaction(self,hero);
};
};
};
!!!UWAGA!!!
W "Wld_PlayEffect("SPELLFX_ICEWAVE",
self,
self,0,50,DAM_MAGIC,FALSE);" trzeba pamiętać żeby ZAWSZE obydwie pogrubione wartości były "self", jeżeli zostanie wstawione "hero" albo "other" w dowolnie jakim innym miejscu utworzy się znowu nieskończona pętla. Starałem się jak najbardziej, ale zabrakło mi już sił i pomysłów więc zostało tak....
!!!JESZCZE JEDNO!!!
Jako że obydwie wartości są "self" zaklęcie "zaczyna się" i "kończy" W PRZECIWNIKU, więc jeśli użyjemy tak jak powyżej SPELLFX_ICEWAVE, fala lodu będzie się rozchodzić OD przeciwnika zadając mu obrażenia zdefiniowane przez nas w funkcji i zamrażając (bez obaw, nas nie zamrozi i nie zrani, ale innych NPC-ów w zasięgu już raczej tak, nie wiem dokładnie, nie sprawdzałem
)
Jeśli natomiast użyjemy SPELLFX_ICECUBE albo SPELLFX_FIRESTORM, nie będzie wybuchu czy efektu zamrożenia tylko w momencie trafienia bronią utworzy się w przeciwniku "kula" zaklęcia (wszyscy wiedzą o co chodzi) a nie efekt kolizji, więc efekty uderzenia trzeba będzie znaleźć samemu w "Visualfxinst" - więc zamiast SPELLFX_FIRESTORM będzie SPELLFX_FIRESTORM_SPREAD, a zamiast SPELLFX_ICECUBE będzie SPELLFX_ICECUBE_COLLIDE (chyba)....
Mam nadzieję że to innym ułatwi jakoś modowanie, a tobie Adanos dziękuję za pomoc i motywację do pracy
(jeśli ma ktoś pytanie co do tego, to piszcie na PM, jeżeli zdołam odpowiedzieć i będę miał czas, to odpowiem)