JeuxOnLineForumsPlusConnectés : 252 (sites) | 460 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Déclencher un script une et une seule fois RSS
   
Répondre
Partager Outils Rechercher
riprip
Roi / Reine
 

Déclencher un script une et une seule fois

Je cherche un moyen pas compliqué et facilement réutilisable pour empêcher qu'un script se déclenche plus d'une fois.

j'avais pensé à =>

if (a==0)

{

//contenu du script...


int a=1;

}


forcément, ça se compile pas, et quand je déclare la variable avant le "if", ça fait pas ce que je cherche, ce qui est logique. Quelqu'un aurait une solution simple ?

Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Reprendre les scripts à la base ?

------>
Code PHP:
void main()
{
objet oKelserapportelescript GetNearestObjectByTag("exemple");
int nAlpha GetLocalInt(oKelserapportelescript,"variableexemple");
if (
nAlpha == 0)
 {
 
//*contenu du script...*//
 
SetLocalInt(oKelserapportelescript,"variableexemple",TRUE);
 }

C'est la base de base, ça... TU peux l'optimiser encore, j'ai vraiment détaillé.
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
Heuuu visiblement, c'est pas ce que je demande (si j'ai bien compris )


exemple tout bête: je veux qu'un son se déclence à l'arrivée d'un PJ sur un trigger. ça pas de problème mais je veux qu'il ne se déclenche qu'une et une seule fois.

Sur le même principe: un PNJ dit un truc dès qu'il voit un PJ, mais là aussi, une seule et unique fois. Il ne recommence pas à chaque fois qu'il voit revenir un PJ.
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
oui. C'est ce que j'ai fait.
Lien direct vers le message - Vieux
JerrySevere
Roi / Reine
 
pour le trig , tu le destroy apres la premiere fois..
plus jamais il se declenchera

pour le deuxieme cas , pj+pnj , il te faut une variable locale sur le pj qui est à 0 au debut et ke tu met à 1 la deuxieme fois
pour ca tu prends comme base , ce qu'a mis ange au dessus
objet oKelserapportelescript = GetNearestObjectByTag("exemple");
sauf que a la place de ca .. soit tu met le tag de ton pnj , si tu veux stocker la variable sur lui , soit tu catch ton joueur si c'est sur lui que tu veux faire le truc..

J'ai eté clair ?? ^^ non ??
c'est normal chuis fatigué
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
Oui, c'est clair^^
ça commence à venir

mais concrètement, ça passe toujours pas... Ange, tu pourrais me montrer ce que ça donne ton scripts pour les deux exemples du trigger et du pnj steuplait ??

merci beaucoup


(ps: c'est quoi la commande pour detruire le trigger après utilisation ?)
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Ok je te donnes cinq minutes de mon temps. Lol

Cas n°1 : tu veux qu'un son apparaisse quand un PJ entre sur un trigger. Oki. La solution de Jerry à cet inconvénient qu'il ne se déclenchera que pour le premier joueur... Et les autres ? La version est plus compliquée. Tu mets ce script dans le OnEnter.
Code PHP:
//sc_soundtrig_oe By Ange Musicien

void main()
{
object oObject GetEnteringObject();
// definit l'objet entrant
int nIsEnter GetLocalInt(oObject,"IsEnter");
// Variable disant si oui ou non, il est deja entre
if( GetIsPC(oObject) && nIsEnter==0)
// Verifie qu'il n'est jamais entre et que l'objet est un PC
 
{
 
PlaySound("SoundUntel");
 
// Joue le son
 
nIsEnter++;
 
// CHange la variable
 
SetLocalInt(oObject,"IsEnter",nIsEnter);
 
// Enregistre la variable
 
}

Cas n°2 : tu mets ce script dans le OnUserDefined du PNJ. Tu débloques la ligne OnPerception du OnSpawn du PNJ (tu enlèves les deux barres devant).
Code PHP:
// sc_pnj_dl By Ange Musicien

int nAP GetUserDefinedEventNumber();
// Definit les Options du OnSpawn Debloquees
void main()
{
switch(
nAP)
// appelle les options
 
{
 case 
1002 :
 
// Appelle OnPercieve
 
object oVu GetLastPerceived();
 
// C'est le dernier objet vu.
 
int nDial GetLocalInt(oVu,"dialogue1");
 
// Definit si oui ou non le dialogue a deja eu lieu
 
if( GetIsPC(oVu) && GetLastPerceptionSeen() && nDial==)
 
// uniquement si l'objet vu est un PC,
 // et si le dialogue n'a pas eu lieu
 // GetLast PerceptionSeen evite au PNJ de dire
 // deux fois sa phrase, une fois pour l'ouie,
 // une fois pour la vue.
  
{
  
ActionSpeakString("Vous habitez chez vos harengs ? C'est Saur dide.");
  
// Dit une phrase.
  
nDial++;
  
// Change la variable.
  
SetLocalInt(oVu,"dialogue1",nDial);
  
// Enregistre la variable
  
}
 break;
 
// arrete le switch et fait reprendre les habitudes du PNJ
 
}

Si tu veux des explications, ce sera demain

PS : la commande de destruction, pas utile ici, est DestroyObject().
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
Me semble que ca sert a rien de decommenter le OP dans le OS si c'est pour mettre le script dans le OS, enfin vu le script je suis sur que t'as voulu dire OnUserDefined
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Exact je corrige.
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
merci,
je vais mettre ça en pratique cet après-midi
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
Bon en tant que cas desespéré je butte sur un détail insignifiant^^

en théorie ça me paraissait vraiment pas important, mais en pratique paff ça marche po :/


en gros, j'ai fait un trigger et j'ai mis dans le OnEnter:

void main

{

object Oson= GetObjectByTag("TagdeMonSonPerso")

PlaySound("Oson");

}

mais rien ne se passe :/

où c'est que ça coince ?
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
No semillicon after expression....
Donne moi le script exact : Ca doit être :

Code PHP:
void main()
{
object oSon GetNearestObjectByTag("tagduson");
PlaySound(oSon);

Tu as fait des tas de fautes.
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
rhoo oui j'ai oublié le point virgule lol^^ (et les () de void main)



void main ()

{

object oSon= GetObjectByTag("TagdeMonSonPerso");

PlaySound("oSon");

}
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
les balise [*php] et [/*php]
autour de tes script quand tu poste sur le forum, sans les * riprip
prend tout de suite les bonnes habitudes
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
oui c'est mieux tiens^^


Code PHP:

void main 
()

{

object oSonGetObjectByTag("TagdeMonSonPerso");

PlaySound("oSon");


pourquoi ça marche pas
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Déclencher un script une et une seule fois
   

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 04h13.
   

© 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