pb avec execute script

Répondre
Partager Rechercher
Voila, je cherche a faire exectuer un script toutes les 12 secondes donc j'utilise un DelayCommand(12.0, ExecuteScript("script", oJoueur))

oJoueur étant un Joueur défini en objet

malheureusement, j'arrive pas a garder mon objet cible.

pourtant en lancant ExecuteScript, je donne bien un objet, mais après pas moyen de le récupérer. j'ai essayer object_self mais ca marche pas

quelqu'un aurais une idée?
Citation :
j'ai essayer object_self mais ca marche pas
Ca marche très bien à priori, je n'ai jamais eu de problème avec ça... Mets donc tes scripts ici qu'on te dise ce qui pose problème.
bon ok voila le 1er:
c'est une partie du on_activate_item:

Citation :
if (GetStringLeft(sItemTag,13) == "bottesdevites")
{
int iPow = StringToInt(GetSubString(sItemTag, 13, GetStringLength(sItemTag)-13));
int iPower = iPow * 2;
object objetpied = GetItemInSlot(INVENTORY_SLOT_BOOTS, oActivator) ;
if (objetpied == oItem)
{
SignalEvent(oActivator, EventSpellCastAt(oActivator, SPELL_HASTE, FALSE));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectHaste(), oActivator, RoundsToSeconds(iPower));
DelayCommand(12.0, ExecuteScript("test_botte", oActivator));
SetLocalInt(oActivator,"tempbotte",iPow);
}
else
{
SignalEvent(oActivator, EventSpellCastAt(oActivator, SPELL_SLOW, FALSE));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSlow(), oActivator, RoundsToSeconds(iPower/2));
}
}
le second qui boucle est le suivant:

Citation :
void main()
{
if (GetIsPC(OBJECT_SELF))
{
if (GetStringLeft(GetTag(GetItemInSlot(INVENTORY_SLOT_BOOTS, OBJECT_SELF)),13) != "bottesdevites")
{
RemoveEffect ( OBJECT_SELF , EffectHaste() );
DeleteLocalInt (OBJECT_SELF,"tempbotte");
}
else
{
int temps = GetLocalInt (OBJECT_SELF,"tempbotte")-1;
if (temps >= 1)
{
SetLocalInt(OBJECT_SELF,"tempbotte",temps);
DelayCommand(12.0, ExecuteScript("test_botte", OBJECT_SELF));
}
else DeleteLocalInt (OBJECT_SELF,"tempbotte");
}
}
}
le principe c'est d'avoir des bottes de vitesse raisonables qui sont tésté toute les 12 secondes si elle sont toujours aux pied.
voila vous avez tout.

pourquoi l'effet part pas quand je retire les bottes
c'est a cause du remove effect : tu doit d'abord identifier un effet pour le retirer.

Il te faut donc faire une boucle GetFisrt/GetNextEffect, et si eFX == EffetHaste, tu remove.



En gros...

Je te laisse taper, on corrige apres ?
C'est à cause du RemoveEffect(), ça se retire pas comme ça un effet, là tu crée un nouvel effet, qui n'as rien à voir avec l'effect haste déjà sur le PJ, donc l'effet sur le PJ n'est pas enlevé (je suis clair là ? ).

Pour retirer un effet, en fait faut faire une boucle parmi les effect actif sur l'objet, vérifier leur type et retirer celui qu'on veut, exemple au hasard :
Code PHP:

void main()
{
   
effect eEffect GetFirstEffect(GetFirstPC());

   while(
GetIsEffectValid(eEffect))
   {
      
      if(
GetEffectType(eEffect) == EFFECT_TYPE_HASTE)
          
RemoveEffectGetFirstPC(), eEffect );  

      
eEffect GetNextEffect(GetFirstPC());
   }


[EDIT] Ah eM avait déjà répondu...
merci merci.
J'aurai du y penser, j 'ai deja manipulé ce type de structure sur les effets

c'est vrai que des fois, je suis pas doué. m'enfin, je fais des effort.

un jour j'y arriverai.
Citation :
J'aurai du y penser, j 'ai deja manipulé ce type de structure sur les effets
Rassure toi, on est tous tombé dans celle la : faut dire que c'est pas 100% intuitif, par rapport au reste de la gestion des objets ^^
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés