Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > déclaration variable affectée à un objet
déclaration variable affectée à un objet
Par Alustriel_LZ le 14/9/2002 Ã 22:55:57 (#2158030)
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
Il suffit de poser dans ton OnOpen la fonction : SetLocalInt.
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.
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
Je sais pas si c'est claire ?
int nSlaveDoorOpened=GetLocalInt(oDoor, "slave_door_open");
Par Alustriel_LZ le 15/9/2002 Ã 10:13:54 (#2159780)
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
Oui :)
Merci, mais il faut que je déclare oDoor non ?
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)
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
Ben je te renvois vers mon précedent post. .. ou si tu préfère pour "LA" porte un script OnOpen du type
... 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".
void main()
Ensuite dans ta conversation il suffit de refaire un GetLocalInt et de voire si door_opened est à 0 ou 1.
{
//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é
}
}
Par Alustriel_LZ le 15/9/2002 Ã 18:51:27 (#2162648)
" IF condition can't be followed by a null statement."
Par Darkmore le 15/9/2002 Ã 19:10:26 (#2162756)
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)
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)
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)
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