JeuxOnLineForumsPlusConnectés : 760 (sites) | 1346 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Correction d'un script besoin d'aide svp RSS
   
Répondre
Partager Outils Rechercher
Avatar de Noss
Noss
Roi
 
Avatar de Noss
 

Correction d'un script besoin d'aide svp

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 ???
Lien direct vers le message - Vieux
Mercius
Roi
 
Les "if" doivent être placés avant les "else"
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
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)
Lien direct vers le message - Vieux
Mercius
Roi
 
Bah, chacun son truc
Mais moi j'aurais plutôt comparé les tags (string), c'est plus souple
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
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.
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar de Taern
 
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).
Lien direct vers le message - Vieux
Avatar de Noss
Noss
Roi
 
Avatar de Noss
 
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..
Lien direct vers le message - Vieux
Mercius
Roi
 
C'est pour ça que j'utilise les string moa
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
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 . . .
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
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....
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Euh Jedaï tu réponds pas à mes MPs ?
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
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.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Correction d'un script besoin d'aide svp
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 19h24.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite