Powtarzalność efektu 2612 2

O temacie

Autor Tasilvar

Zaczęty 17.09.2009 roku

Wyświetleń 2612

Odpowiedzi 2

Tasilvar

Tasilvar

Użytkownicy
zwykły user
posty264
Propsy17
ProfesjaSkrypter
  • Użytkownicy
  • zwykły user

Tasilvar

Powtarzalność efektu
2009-09-17, 16:51(Ostatnia zmiana: 2009-09-17, 16:54)
Mam problem w związku z powtarzaniem wywoływanego efektu.

Oto urywek kodu:

if(Hlp_IsItem(weapon,RuneSwd7)) ///
{
 Wld_PlayEffect("spellFX_Pyrokinesis_target",defender,attacker,0,25,DAM_MAGIC,FALSE);
AI_StartState (defender, ZS_Pyro, 0, "");

B_FullStop (defender);
dodatkoweefekty();
};

Problem jest taki, że atakując npc przy postaci cały czas utrzymuje się efekt pirokinezy, podobny problem mam z zamrożeniem, gdy sie odmrozi postać, efekt natychmiast zostaje powtórzony nie atakując go przedtem
wychodziło by na to że trzeba dać coś do warunki if, może dać zmienną z konkretną wartością, tylko potem trzeba byłoby ją jakoś przywrócić ale dopiero wtedy gdy znowu zaatakujemy daną postać...

Proszę o jakieś wskazówki z waszej stony.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Powtarzalność efektu
#1 2009-09-17, 17:25(Ostatnia zmiana: 2009-09-17, 17:49)
O ile dobrze zrozumiałem, tym problemem zajmowano się już tu: http://themodders.org/index.php?showtopic=3495 Ważne żebyś doczytał do końca.

Chyba musisz najpierw zrobić funkcję sprawdzającą czy właśnie teraz efekt ma zostać wywołany:
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;
};
a efekt czaru wywoływać tylko jeśli
if(CmpNpc(self,other))
{
weaponreaction(self,hero);
};
i pamiętaj o ostrzeżeniu whiteeye'a:
Cytuj
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.

Tasilvar

Tasilvar

Użytkownicy
zwykły user
posty264
Propsy17
ProfesjaSkrypter
  • Użytkownicy
  • zwykły user

Tasilvar

Powtarzalność efektu
#2 2009-09-17, 18:17(Ostatnia zmiana: 2009-09-17, 19:24)
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;
};

Tą funkcję wyżej mam poprawną.
Błąd musiał być w tym:
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.
Sprawdzę i powiem czy problemzostał rowzwiązany..

EDIT: Niby największy problem rozwiązany ale pojawia się kwestia pirokinezy... Podczas ataku postać jest sparaliżowana ale na cały czas... dlaczego? nie wiem jak przedstawić że po trafieniu ZS_PYRO ma byćuakrytniony tylko na 3 sec, tak samo z zamrorzeniem...
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry