Correction d'un script besoin d'aide svp

Répondre
Partager Rechercher
Voila, item activated :

Code PHP:

void main()
{
 
object oJoueur GetItemActivator();
 
object oObjet GetItemActivated();
 
object oPotion GetObjectByTag("potiondebelladon");
 
object oSang GetObjectByTag("Fioledesang");
 
int iInfecte GetLocalInt(oJoueur"mort");
 
effect eMort EffectPolymorph(POLYMORPH_TYPE_ZOMBIE);
 
effect eLoup EffectPolymorph(POLYMORPH_TYPE_WEREWOLF);
 
effect eMouru EffectDeath();
 
int iEtat GetLocalInt(oJoueur"etat");

 if(
oObjet==oPotion)
 {

   
AssignCommand(oJoueurSpeakString("La belladonne vous appaise, mais cela ne change rien au fait que vous etes mort!"));
   
AssignCommand(oJoueurApplyEffectToObject(DURATION_TYPE_PERMANENTeLoupoJoueur));
   
SetLocalInt(oJoueur"mort"1);
  }
   if(
iInfecte==2)
  {
   
AssignCommand(oJoueurSpeakString("La belladonne vous appaise, mais cela ne change rien au fait que vous etes mort!"));
   
AssignCommand(oJoueurApplyEffectToObject(DURATION_TYPE_PERMANENTeLoupoJoueur));
   
SetLocalInt(oJoueur"mort"1);
  }
  else
  {
   if(
iInfecte==3)
   {
    
AssignCommand(oJoueurSpeakString("La belladone vous apaise."));
    
SetLocalInt(oJoueur"mort"0);
    
RemoveEffect(oJoueureLoup);
   }
   else
   {
    
AssignCommand(oJoueurSpeakString("La belladone vous empoisonne!!!"));
    
ApplyEffectToObject(DURATION_TYPE_INSTANT eMouruoJoueur);
   }
 }

 if(
oObjet==oSang)
 {
  
SetLocalInt(oJoueur"mort"1);
  
int iEtat2 iEtat 150;
  
AssignCommand(oJoueurSpeakString("*Se delecte du sang qui traverse tout son corps*"));
  
SetLocalInt(oJoueur"etat"iEtat2);
 }

le probleme est; que lorqu'on active n'importe kel autre objet que l'un de ces 2, ca fai l'effet de la potion.... qu'est ce qui foire svp ???
Edite ton message pour mettre des balises [ PHP ] et [ /PHP ] (sans les espaces) autour de ton code, tu auras dix fois plus de chance que quelqu'un te réponde.

(Mercius, tu es de trop bonne volonté ! De toutes façons ce code est horrible, regarde moi ça, il compare des objets !!! )

[Edit] Pour t'aider, je te poste ici un modèle pour tes scripts OnActivateItem, si tu le suis, tu rendras ton script à la fois plus lisible, plus efficient et plus sûr, ce n'est pas le meilleur, mais il marche parfaitement !
Code PHP:

//OnActivatedItem, Template (modèle si vous préférez)

void main()
{
  
object oPC GetItemActivator();
  
object oItem GetItemActivated();

  if( ! 
GetIsObjectValidoItem ) )
      return;

  
string sTagItem GetTagoItem );
 
  if( 
sTagItem == "Tag_de_l'item_1" )
  {
      
//code pour l'item 1
  
}

  else if( 
sTagItem == "Tag_de_l'item_2" )
  {
      
//code pour l'item 2
  
}

  else if( 
sTagItem == "Tag_de_l'item_3" )
  {
      
//code pour l'item 3
  
}

  else if( 
sTagItem == "Tag_de_l'item_4" )
  {
      
//code pour l'item 4
  
}
 
  else if( 
sTagItem == "Tag_de_l'item_5" )
  {
      
//code pour l'item 5
  
}
 
  
//éventuellement autre cas AVEC LA MEME STRUCTURE


(Note : si tu veux voir comment on utilise les balises PHP, essaie de citer mon message pour voir comment j'ai fait)
Ouais, chacun son truc sauf que là, comparer les objets n'est la bonne solution que si l'objet est unique, s'il n'est pas unique, je rappelle que deux objets ne sont pas identiques si ils sont du même type, mais uniquement s'il s'agit vraiment du même objet, autrement dit, l'épée longue que j'ai dans mon sac n'est pas 'égale' à l'épée longue qui est par terre, même si elle sont strictement 'identique'....

Autrement dit, même si la structure de son script était correcte (j'en sais rien, j'attends qu'il mette les balises pour vérifier), il ne marcherait jamais que pour un seul objet dans tout le module.
C'est surtout la seule solution
Comparer des objets, c'est tellement tordu que je doute qu'il y ait une quelconque utilité

Quoiqu'il en soit, ce script devrait être assez facile à débugger mais il faudrait au moins que tu le post de façon lisible (tabulation après les if, balises php) et si possible que tu nous explique précisément comment tu interprète les variables locales "mort" et "état" (puisqu'apparemment elles interviennent dans d'autres scripts).
ben en fai c un script pour les polymorphes, mort c quand tu meurs lol; puis etat c le niveau de soif d'un vampire....

c assez chiant paskeu le script c un pote ki la fai et g plu de nouvelles, donc jessai de corriger moi meme, mais jy arrive pas, c que quand on active un item, n'importe lekel, ca fai l'effet belladone, ca tue le joueur, mais le reste ca marche, c juste ca; c kil diferenceie pas l'item et jarive aps a le regler..
Citation :
Provient du message de Taern
Comparer des objets, c'est tellement tordu que je doute qu'il y ait une quelconque utilité
ba si, au contraire c'est genial, ca permet de vérifier que c'est bien le même objet et pas un objet qui y ressemble comment tu veux faire sinon
bon ok je sors

pour le script, j'ai l'impression qu'il y a une parenthèse foireuse :
tu verifie que l'objet c'est de la belladone et la ca tue, puis tu arrête ton test là, et tu en refait un autre : si infect == 2 etc.

donc dans le cas très improbable ou l'objet déclenché serait la premier Belladone trouvé (pb de la comparaison des objet => compare les tags) ca tue, sinon, quelque soit l'objet utilisé, si t'es infecté 2 ba ca soigne etc.

donc en gros :
Code PHP:

if(sTag == "TAG DE LA BELLADONE")
   {
    if(
infect == 1)
       {
        }
 
    if(
infect == 2)
       {
        }
    if(
infect == 3)
       {
        }
    if(
infect == -8000)
       {
        }
//etc.
    
}//et la 'arrête ton test sur la belladone, enfin ce qui se déclanche si 
en gros, c'est ca la structure, parce qu'il faut pas oublier que dès qu'un objet avec pouvoir unique est déclenché ba le script se lance . . .

fin j'ai p-e rien compris à ce que tu voulais faire . . .
Moi je connais une utilisation pratique de la comparaison d'objet, c'est quand tu veux avoir un objet vraiment unique sur un module et que tu veux pas qu'un guignol quelconque qui a déjà fait cette aventure par exemple revienne avec l'objetUniqueQueL'OnNeTrouveQu'àLaFinDeL'Aventure et foute la quête en l'air en se marrant. Ou que tu veux qu'un seul joueur puisse invoquer les pouvoirs spéciaux de cet objet, uniquement celui qui a réussi cette quête en dernier (dans le cas d'une quête qui se répète tous les mois par exemple). Dans ce cas, puisque tu sais où se trouve l'objet 'authentique' au départ, tu le mets dans un LocalObject sur le module et hop Ensuite tu compares au Local Object pour savoir si cet objet est le 'bon'.

Enfin on peut imaginer un tas d'autre utilisation, toujours avec un LocalObject, l'idée étant qu'un objet exactement semblable à d'autres est le seul qui soit le vrai....
Oh désolé, j'ai un peu oublié , en fait je crains que le module ne puisse rien écouter, je t'oriente comme même vers ce post, où il y a un objet invisible qui écoute :
http://www.hellfire.firstream.net/ph...pic.php?t=1311


Mais je ne pense pas que des créatures invisibles de Skanzo soit une mauvaise solution, ni trop couteuse... Tu peux aussi essayer de mesurer les distances exactes sur lesquelles la voix porte lorsque qu'on 'parle' dans le jeu, puis créer des 'sentinelles' disposées régulièrement pour intercepter toutes paroles dans les zones où se trouvent au moins 1 PJ/DM, tu réduirais peut-être un peu tes besoin en temps CPU pour un système plus fiable en plus.
Répondre

Connectés sur ce fil

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