JeuxOnLineForumsPlusConnectés : 721 (sites) | 1244 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Prob de Script : Téléportation RSS
   
Répondre
Partager Outils Rechercher
Avatar de Manshoon_Zhent
Manshoon_Zhent
Roi
 
Avatar de Manshoon_Zhent
 

Prob de Script : Téléportation

Salut

Voila, petit problême de script : Le PJ est dans un labyrinthe remplis de salle contenant chacune un portail.

A chaque fois que le PJ clic sur un portail il se retrouve dans une autre salle, de façon aléatoire.

Le script ci-dessous ne fonctionne pas, car le PJ est téléporté à tous les WP, les uns apres les autres :

Code PHP:
object oPC=GetLastUsedBy();
object oStart;
int oChiffre;

void main()
{
 for(
oChiffre 1oChiffre 43oChiffre++)
 {
  if((
oStart GetObjectByTag("WP_LAB_"IntToString(oChiffre))) != OBJECT_INVALID)
   {
    
AssignCommand(oPC,ActionJumpToObject(oStart));
   }
 }

C'est mon premier script et je comprends pas
Lien direct vers le message - Vieux
Avatar de Dolanor
Dolanor
Alpha & Oméga
 
Avatar de Dolanor
 
C'est normal
Tu as utilisé un FOR(oChiffre = 1; oChiffre < 43; oChiffre++)
cela veut dire que une fois qu'il clickera sur un portail, il passera par tous les portails les uns apres les autres dans l'ordre de oChiffre, cad wp 1, wp 2, wp 3...wp 42, wp 43
pauvre testeur j'imagine etre teleporté 43 x ca doit pas etre la joie ^^
a la place du for (que tu vas enlever tout de suite !! ^^)
met plutot :
Code PHP:
object oPC=GetLastUsedBy();
object oStart;
int oChiffre;

void main()
{
  
oChiffre Random(43);
  while((
oStart GetObjectByTag("WP_LAB_"IntToString(oChiffre))) != OBJECT_INVALID)
   {
    
AssignCommand(oPC,ActionJumpToObject(oStart));
    
oChiffre Random(43);
   }
 }

Le random(43) va generer un entier aleatoire entre 0 et 43, si tu n'as pas de waypoint 0, ca peut faire planter mais c geré par le test
Code PHP:
("WP_LAB_"IntToString(oChiffre))) != OBJECT_INVALID
Mais toi tu l'utilisais avec un IF, cad que si jamais le waypoint n'etait pas valide, alors il ne serait pas teleporté, mais tu veux qu'il soit teleporté a un autre endroit si le waypoint initial n'etait pas valide.
Donc au lieu d'un if, tu utilise un while qui va refaire un nombre aleatoire puis retester si ce coup ci le waypoint est valide et relancer la procedure jusqu'a ce qu'il trouve un waypoint valide.
Normalement, ca ne devrait pas foirer
Lien direct vers le message - Vieux
Avatar de Manshoon_Zhent
Manshoon_Zhent
Roi
 
Avatar de Manshoon_Zhent
 
Heu...

Ca fait un effet bizarre :

- Si je met un waypoint nommé : WP_LAB_0 dans la zone, la téléportation se fait comme je le souhaite à deux détails pres :

1er : des que l on clic sur un téléporteur, le jeu bloque de facon anormale avant que la téléportation ne s'effectue.
2eme : ca marque une erreur

Script lab_portal_jump, OID:80001657, Tag:Portal, ERREUR:TOO MANY INSTRUCTIONS

- Si je ne met pas de waypoint nommé : WP_LAB_0 dans la zone, la téléportation se fait, mais pas comme souhaité.

C'est a dire que le PJ est téléporté sur plusieurs Waypoint a la fois avant de s'arréter (que ce soit un jump ou 30 jumps)

Le truc que je veux faire est un seul jump aléatoire
Lien direct vers le message - Vieux
Avatar de Slay
Slay
Dauphin
 
Avatar de Slay
 
Moi je suis étonné que tu sois téléporté avec ce script : Le jump s'effectue uniquement dans le cas d'un waypoint invalide, tel que c'est fait...
Essayes plutôt ceci, ça devrait aller mieux :

Code PHP:
object oPC=GetLastUsedBy();
object oStart=OBJECT_INVALID;
int oChiffre;

void main()
{
  do
   {
    
oChiffre Random(43);
    
oStart GetObjectByTag("WP_LAB_"IntToString(oChiffre));
   }while(
oStart == OBJECT_INVALID)
  
AssignCommand(oPC,ActionJumpToObject(oStart));
 }

[Edité pour une meilleure version ^^]
Lien direct vers le message - Vieux
Mercius
Roi
 
Pour des ça moi je verrai plutôt un switch()
Lien direct vers le message - Vieux
Avatar de Slay
Slay
Dauphin
 
Avatar de Slay
 
Pourquoi faire court quand on peut faire long ?
Non, sérieusement, un switch() dans ce cas précis possède 2 défauts :
- comme le if, ça ne passe qu'une fois avant de sortir... donc pas de gestion des waypoints invalides... a moins de coller le switch dans une boucle while mais la je vois plus trop l'intérêt a partir de ce moment la
- Ca t'oblige a écrire une ligne pour chaque waypoint... pourquoi s'embêter a faire en 43 lignes ce que tu peux faire en 4 lignes ? Sans compter que c'est plus léger en terme de temps de traitement...
Lien direct vers le message - Vieux
Mercius
Roi
 
Oui, mais j'aime bien les switch
Lien direct vers le message - Vieux
Avatar de Dolanor
Dolanor
Alpha & Oméga
 
Avatar de Dolanor
 
Citation:
Provient du message de Manshoon_Zhent
Heu...

Ca fait un effet bizarre :

- Si je met un waypoint nommé : WP_LAB_0 dans la zone, la téléportation se fait comme je le souhaite à deux détails pres :

1er : des que l on clic sur un téléporteur, le jeu bloque de facon anormale avant que la téléportation ne s'effectue.
2eme : ca marque une erreur

Script lab_portal_jump, OID:80001657, Tag:Portal, ERREUR:TOO MANY INSTRUCTIONS

- Si je ne met pas de waypoint nommé : WP_LAB_0 dans la zone, la téléportation se fait, mais pas comme souhaité.

C'est a dire que le PJ est téléporté sur plusieurs Waypoint a la fois avant de s'arréter (que ce soit un jump ou 30 jumps)

Le truc que je veux faire est un seul jump aléatoire
erf lol quelle merde je fait, j'ai fait la teleportation illimité sauf en rajoutant un bug dedans lol.
Il etait tard...

(je suis credible ?? )
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Prob de Script : Téléportation
   

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 15h17.
   

© 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