Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

déclaration variable affectée à un objet

Par Alustriel_LZ le 14/9/2002 à 22:55:57 (#2158030)

Bonsoir.

Dans le cadre d'une quête, j'aimerai qu'une porte de mon module, après avoir été ouverte crée une variable "nSlaveDoorOpened" ayant la valeur 1. Si j'ai bien compris je dois la créer dans le ONOPEN de la porte, mais je n'arrive pas à déclarer la variable.
J'arrive à le faire dans le cadre d'une discussion mais pas dans ce cas précis.

Re: déclaration variable affectée à un objet

Par Darkmore le 14/9/2002 à 23:06:33 (#2158101)

Provient du message de Alustriel_LZ
Dans le cadre d'une quête, j'aimerai qu'une porte de mon module, après avoir été ouverte crée une variable "nSlaveDoorOpened" ayant la valeur 1. Si j'ai bien compris je dois la créer dans le ONOPEN de la porte, mais je n'arrive pas à déclarer la variable.
Il suffit de poser dans ton OnOpen la fonction : SetLocalInt.
Par contre la fonction marche par pointeur de type string.
Dans ton cas tu utilises dans OnOpen de ta porte oDoor:
SetLocalInt(oDoor, "slave_door_open", 1);


Et après pour récupérer ta variable tu fais

int nSlaveDoorOpened=GetLocalInt(oDoor, "slave_door_open");
Je sais pas si c'est claire ?

Par Alustriel_LZ le 15/9/2002 à 10:13:54 (#2159780)

Merci, mais il faut que je déclare oDoor non ?
Car en le compilant tel quel, j'ai une erreur : VARIABLE DEFINED WITHOUT TYPE.

Par Kemay le 15/9/2002 à 11:58:27 (#2160285)

Provient du message de Alustriel_LZ
Merci, mais il faut que je déclare oDoor non ?
Oui :)
Le plus simple ce serait de cmmencer par là peut être : Stocker des variables de David Gaider traduit par Théranthil :)

Oui mais ...

Par Alustriel_LZ le 15/9/2002 à 13:18:11 (#2160733)

... ce tutorial est très bien fait mais il n'explique que comment gérér des variables dans le cas d'une discussion.
Dans mon cas précis, il faut que ce soit le fait d'ouvrir une porte précise qui donne la valeur 1 a la variable que j'ai appelé
"nDoorOpened".

Re: Oui mais ...

Par Darkmore le 15/9/2002 à 16:20:50 (#2161796)

Provient du message de Alustriel_LZ
... ce tutorial est très bien fait mais il n'explique que comment gérér des variables dans le cas d'une discussion.
Dans mon cas précis, il faut que ce soit le fait d'ouvrir une porte précise qui donne la valeur 1 a la variable que j'ai appelé
"nDoorOpened".
Ben je te renvois vers mon précedent post. .. ou si tu préfère pour "LA" porte un script OnOpen du type
void main()
{
//récupere la variable 'porte ouverte'
int nDoorOpened =GetLocalString(OBJECT_SELF, "door_opened");
//Par defaut la variable est à 0
//Donc ta porte doit être fermé dans le toolset
//(sinon change la suite du script)

if (nDoorOpened=0);//La porte n'a jamais été ouverte ou est fermée
{
SpeakString("Porte Fermé");
SetLocalInt(OBJECT_SELF, "door_opened",1);//la porte est désormais ouverte
}
else
{
SpeakString("Porte Ouverte")
SetLoacalInt(OBJECT_SELF, "door_opened", 0);//La porte est desormais fermé
}
}
Ensuite dans ta conversation il suffit de refaire un GetLocalInt et de voire si door_opened est à 0 ou 1.

Par Alustriel_LZ le 15/9/2002 à 18:51:27 (#2162648)

Merci Darkmoore mais je n'arrive pas à compiler ton script :
" IF condition can't be followed by a null statement."

Par Darkmore le 15/9/2002 à 19:10:26 (#2162756)

Oups boulette :D
Il y a un point virgule apres le If qui n'a rien a faire ici :merci:

Oula oula !

Par Kemay le 15/9/2002 à 19:18:16 (#2162822)

pour ton histoire de porte et de discussion:
Dans l'event onOpen des propriétés de ta porte:

SetLocalInt(OBJECT_SELF,"nDoorOpened",1);

Dans l'event onClose des propriétés de ta porte:
DeleteLocalInt(OBJECT_SELF,"nDoorOpened");

Dans ta conversation, tu accèdes à la variables en utilisant:
GetLocalInt(GetObjectByTag("TagDeLaPorte"),"nDoorOpened");
Dans le dernier, il faut bien sûr remplacer "TagDeLaPorte" par le tag de ta porte.

Pour le script ci-dessus, les erreur qui l'empêchent de compiler:
int nDoorOpened =GetLocalString(OBJECT_SELF, "door_opened");
GetLocalString retourne une string que tu essaies d'assigner à un int :eek: Il faut ici utiliser GetLocalInt à la place de GetLocaString.
if (nDoorOpened=0);
le if statement ne doit pas être suivi d'un point virgule. De plus il faudrait replacer "= 0" par "== 0" ou la condition testé dans le if ne sera jamais vraie.

Une faute de frappe dans la ligne:
SetLoacalInt(OBJECT_SELF, "door_opened", 0);
Il faut remplacer SetLoacalInt par SetLocalInt

De plus même une fois le script corrigé, il ne fera pas exactement l'effet demandé. La première fois que la porte serait ouverte la variable serait passée à 1 puis laissée à 1 jusqu'à ce que la porte soit à nouveau ouverte (il faut qu'elle ait été fermé entre temps) auquel cas la variable sera passée à 0. Pour que ce script fasse quelquechose de plus proche de ce qui est demandé il faudrait le mettre dans l'event onUsed mais là la variable serait changée à chaque fois que le joueur clique dessus, ce qui ne signifie pas qu'il arrive à l'ouvrir, par exemple si elle est fermée à clé.

Par Alustriel_LZ le 15/9/2002 à 20:12:45 (#2163276)

Merci de votre aide.

Une autre question : J'aimerai qu'une fois la quête terminée(elle consiste à liberer des esclaves), les esclaves soit :
- se dirigent vers la sortie puis dépoppent
- se mettent à marcher sur une courte distance et dépoppent
- ou dépoppent tout simplement.



/emote : la prochaine fois que je monte une quête compliquée je me flagelle.

Oula oula aussi ...

Par Darkmore le 15/9/2002 à 23:07:53 (#2164639)

Comme j'ai dit sur un autre post je me contente pas de copier/coller du script prédigéré :p
Donc oui il y a des fautes de frappes et oui j'ai gauler entre int et string a un moment.
Je me contente d'essayer de répondre le mieux que je peux à un problème posé et avec les nombreux problème de connexion que j'ai c'est pas évident :(

Du coup je n'estime pas poster un truc parfait juste une idée de départ qui doit être retravaillé.
Enlevé un point virgule c'est assez facile, rajouter un '=' c'est du sens commun ;)

Par contre dire que le fait de TOUT placer en OnOpened n'est pas la bonne solution ça c'est du concret au moins :p

JOL Archives 1.0.1
@ JOL / JeuxOnLine