JeuxOnLineForumsPlusConnectés : 741 (sites) | 1357 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Récuperer une variable d'un autre objet ? RSS
   
Répondre
Partager Outils Rechercher
riprip
Roi / Reine
 

Récuperer une variable d'un autre script ?

Est-il possible de se servir d'une variable créée dans le script d'un PNJ dans un script de zone ou inversement ?

Je m'explique:

J'ai créé une variable "Var1" dans le OnEnter d'une zone :

(int Var1=2);

Dans cette même zone, j'ai mis une condition dans le script d'un PNJ à partir de cette variable :

if ("Var1"==2) {fait ci, fait ça}; ...

Evidemment ça marche pas

Les variables ne sont-elles valables qu'à l'intérieur des scripts où elles sont créées ?
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Tout a fait : un variable est declarée pour un script, et n'existe que le temp de son execution.

Si tu veux utiliser une variable d'un script a l'autre (ou sur une periode de temps plus important qu'une micro-seconde ^^), alors tu utilise SetLocalInt / SetLocalLocation / SetLocalObject / SetLocalFloat, et tu recupere ces variable avec GetLocal***

Tout simple non ?
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
Merci beaucoup


edit:

voilà j'ai mis ça dans le OnEnter de la zone==>

SetLocalInt (OBJECT_SELF,"Var1",1);


Et ça dans le Onspawn du PNJ===>

SetLocalInt Var2=(GetLocalInt("Var1"));

(et après: if var2==1 ... etc etc )

le deuxième veut pas se compiler, je comprend pas pourquoi...
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Parceque tu met GetLocalInt("ref") au lieu de mettre GetLocalInt(object,"ref");

Il faut que tu precise ou tu veux aller recuperer cette variable.
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
Concrétement, si le tag de la zone est: "pouetpouet", je devrais écrire:

SetLocalInt Var2=(GetLocalInt(pouetpouet,"Var1"));

c'est ça?
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
C'est un peu plus compliqué que cela (pas beaucoup, mais quand meme )

Tu devrai vraiment faire les tutoriaux : la demi-journée que tu perdrai a les lire, et la journée suivante que tu perdrais a les comprendre sont TRES TRES vite rentabilisées, en général

Ceci etant, il te faut declarer les objet, avant de les utiliser.

Quand tu ecrit OBJECT_SELF, il faut savoir qu'en fait, le moteur comprend "Rammene moi l'objet qui a lancé le script"

C'est un peu comme si OBJECT_SELF etait une fonction
Code PHP:
object OBJECT_SELF(){GetObjectRunnningScritp();} 
en gros... (bien entendu, ce n'est qu'une hyperbole...)

donc, en fait, ton script ci-dessus fonctionne pour le set, car tu affecte la local Int sur un Objet

Code PHP:
SetLocalInt(OBJECT_SELF,"var",1) == SetLocalInt(GetArea(GetEnteringObject()),"var",1
car tu utilise un on enter. OBJECT_SELF est un raccourci, si tu veux.

HELAS, TU NE PEUX PAS TOUT RACCOURCIR COMME CA

Tu ne peux pas utiliser un tag a la place d'un objet, plus particulierement.

Donc, dans ton Get, tu dois recuperer l'area sur laquelle tu a stockée la variable.

Pour cela, soit tu recupere l'objet qui a declanché le script2 (en l'occurence, le PNJ) soit tu essaye de retrouver cette variable en essayant de retrouver l'area ou se trouve le PC qui parle (c'est tordu, mais ca fonctionneri aussi, normalement...)

Donc, en l'occurence,

Code PHP:
GetLocalInt(GetArea(OBJECT_SELF),"var"); 
Car object_self designe ici le PNJ, vu que c'est lui qui lance le script 2

Ok ?

PS : je t'assure, les tuto sont vraiment bien fait
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
Lol, j'ai rien compris, mais c'est pas grave^^

(je ne suis pas informaticien moi )

Sinon, il y a un tutorial sur les variables ? Parce que ceux de bioware, je veux bien mais pfiu je rame et je suis pas sûr d'avoir mes réponses

Merci à toi en tout cas

Edit: je m'accroche et je commence à comprendre ^^
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Ceux de bioware, je sait pas, mais ceux de Celowind (qui sont dans le persistant de Lumina) oui : je dirait meme plus : ils commencent par ca (c'est un peu la base, en fait ^^)


Sinon, pour lexplication, je suis desole, mais je n'ai pas le temps de clarifier plus : je suis au boulot :/
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
Celowind ?? désolé je les trouve pas
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Arff : je viens de regarder, ce sont les cours de Celowind, TRADUIT PAR AMARANTHE ^^

Desolé
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
Bon après avoir potasser les tut, j'ai tenté de faire mon truc.

But de l'opération: faire qu'un PNJ se déplace et suive ses waypoints dès qu'un PJ entre dans la zone (et surtout pas avant).

L'idée c'est:
- Quand on entre dans la zone, la variable "Entre" devient égale à 1.
- Dans le OnSpawn du PNJ, le script vérifie la valeur de "Entre" et si elle est égale à 1, alors hop le PNJ commence à déambuler.



J'ai donc mis ceci dans Onenter de la zone :

void main()
{

SetLocalInt (OBJECT_SELF,"Entre",1);


}



Dans le onspawn du PNJ:

void main()
{



//récupère la variable de la zone

int test2=GetLocalInt(GetArea(OBJECT_SELF), "Entre");

/marche si un PNJ entre dans la zone:
if (test2==1)WalkWayPoints();



// ça on s'en fiche
GenerateNPCTreasure();
SetListeningPatterns();

}


Si ça marchait, ce serait trop beau... Je vais vraiment plus quoi faire pour arriver à ce que je veux



(Tant que j'y suis, comment faire en sorte qu'un PNJ suivent ses waypoints puis s'arrête et se poste au dernier sans recommencer eternellement sa ronde ? )

Merci d'avance
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
bein, a priori, pas de raiso que ca marche pas ^^

(PS : si ca marche opas, verifie les tags de tes WP et de PNJ, et si c'est OK, alors essaye de nous decrire tres precisement la ou le bas blesse.)

PS : pour qu'il s'arrete, met le dernier en POST_*** ca devrait marcher.
Lien direct vers le message - Vieux
riprip
Roi / Reine
 
Le problème, c'est que le PNJ démarre dès le début du module, sans attendre qu'un PJ entre dans la zone...
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Ah oui, bien entendu : le PNJ declare le OnEnter de la Zone ^^

Met ca, dans le OnEnter

Code PHP:
void main()
{

if (
GetIsPC(GetEnteringObject()))
    {
    (
SetLocalInt (OBJECT_SELF,"Entre",1);
    }

Lien direct vers le message - Vieux
riprip
Roi / Reine
 
Heuu.. problème il compile pas et me met:

ERREUR : NO LEFT BRACKET ON ARG LIST


pour la ligne

if (GetIsPC(GetEnteringObject))
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Récuperer une variable d'un autre objet ?
   

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 13h29.
   

© 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