Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Passer une porte si tel objet équipé
Passer une porte si tel objet équipé
Par Cassin le 17/7/2002 Ã 19:57:23 (#1818820)
Dans mon module le joueur est dans un monastère, et il commence le jour de son intronisation. Et comme je le vois mal se pointer à la cérémonie avec sa robe violette et jaune :D, je voudrais qu'il ne puisse sortir de ses quartiers que s'il porte la tenue du monastère.
Pour celà j'ai voulu insérer dans le OnAreaTransition des portes des quartiers une petite condition qui vérifie si le joueur possède bien ledit objet dans son inventaire (je n'ai pas trouvé de fonction qui permette de vérifier si l'item est équipé, ça me parait bizarre... :doute:)
Pour l'instant j'ai ça : object oClicker = GetClickingObject();
object oTarget = GetTransitionTarget(OBJECT_SELF);
location lLoc = GetLocation(oTarget);
object oObject1 = RobeMage;
object oObject2 = VetementGuerrier;
void main()
{
if (int GetHasInventory (object oObject1||oObject2))
{
AssignCommand(oClicker,JumpToLocation(lLoc));
}
}
Et j'ai une erreur à la compil : UNKNOWN STATE IN COMPILER sur la ligne du if.
J'ai essayé sans le OU mais ça me fait la même chose, depuis 2 jours je tourne la fonction dans tous les sens, je change des paramètres, ajoute ou supprime des point-virgule ou des parenthèses, mais rien n'y fait, c'est toujours la même chose...
Où est mon erreur ??? :hardos:
Re: Passer une porte si tel objet équipé
Par Amaranthe le 17/7/2002 Ã 20:16:31 (#1818956)
Provient du message de Cassin
Et j'ai une erreur à la compil : UNKNOWN STATE IN COMPILER sur la ligne du if.
Où est mon erreur ??? :hardos:
Tu confonds la definition de la fonction, avec son utilisation...
int GetHasInventory (object oObject1)
est la definition de la fonction GetHasInventory
Pour l'utiliser tu fait simplement GetHasInventory (oObject1).
Cf le premier cours pour les quiches ;)
Eleve Cassin ! Recalé !
Tu retourne a la case depart.
Tu ne touche pas 20.000 Gp.
:mdr:
Amaranthe.
Par Cassin le 18/7/2002 Ã 9:25:40 (#1821309)
Eleve Cassin ! Recalé !
Tu retourne a la case depart.
Tu ne touche pas 20.000 Gp.
:sanglote: :sanglote: :sanglote:
C'est pas juuuuussste !
:mdr: :mdr: :mdr:
Hum... :p
Le hic c'est que j'ai testé aussi sans le int (j'ai VRAIMENT tourné la fonction dans tous les sens ! ;) ), et ça marche pas non plus !
Ca me donne un ERROR: UNKNOWN STATE IN COMPILER !
Bouhouhouuuuu, je vais craquer ! :mdr:
Par Kray le 18/7/2002 Ã 9:35:17 (#1821334)
GetObjectByTag ? ^_^
Par Cassin le 18/7/2002 Ã 9:43:38 (#1821362)
GetObjectByTag, ça permet bien de récupérer un objet par son tag, me trompe-je ? Mais ça ne permet de savoir si le joueur l'a sur lui, si ?
Argh, Ste Loraine, Mère de toutes les Quiches, priez pour moi, pauvre Quicheur...
:mdr:
Par leZilou le 18/7/2002 Ã 11:08:26 (#1821769)
if (int GetHasInventory (object oObject1||oObject2))
As-tu essayé en enlevant le int et le object ?
On peut vraiment faire un OU logique entre 2 objets ?
Ca ne serait pas plutot GetHasInventory (oObject1) || GetHasInventory (oObject2) ?
Par Cassin le 18/7/2002 Ã 11:17:03 (#1821837)
Quant au OU conditionnel, de toutes façons avec ou sans ça marche pas quand même ! ;)
Par Amaranthe le 18/7/2002 Ã 11:38:50 (#1821958)
Même si ca ne fonctionne pas... il FAUT virer ton int et ton object.
Comme le fait remarque Kray, tu dois utiliser le GetObjectByTag !
object objet1 = GetObjectByTag("RobeMago") ;
Et apres, LeZilou a tout a fait raison...
Voila avec tout cela tu devrais t'en sortir...
Je te conseille de regarder les cours de script... le garde qui salue le pc qui a un anneau... ca te rappele quelque chose ?
Amaranthe.
Par Fredegar le 18/7/2002 Ã 11:42:42 (#1821991)
object oClicker = GetClickingObject();
object oTarget = GetTransitionTarget(OBJECT_SELF);
location lLoc = GetLocation(oTarget);
void main()
{
if (GetItemPossessedBy(oClicker,"RobeMage") != OBJECT_INVALID) ||
(GetItemPossessedBy(oClicker,"VetementGuerrier") != OBJECT_INVALID)
{
AssignCommand(oClicker,JumpToLocation(lLoc));
}
}
J'ai pas testé, mais j'aimerais bien savoir si ça marche.
Par Cassin le 18/7/2002 Ã 14:46:24 (#1823126)
En fait le script ne se compile pas avec le OU, j'ai donc dut ruser et j'ai fais ça :object oClicker = GetClickingObject();
object oTarget = GetTransitionTarget(OBJECT_SELF);
location lLoc = GetLocation(oTarget);
void main()
{
if (GetItemPossessedBy(oClicker,"RobeMage") != OBJECT_INVALID)
{
AssignCommand(oClicker,JumpToLocation(lLoc));
}
else
if (GetItemPossessedBy(oClicker,"VetementGuerrier") != OBJECT_INVALID)
{
AssignCommand(oClicker,JumpToLocation(lLoc));
}
else
ActionSpeakString("Je ne peux tout de meme pas sortir sans
mon uniforme le jour de mon intronisation !");
}
Par contre ça marche aussi quand l'object est dans l'inventaire et pas équipé, mais bon, c'est pas grave ;)
EDIT pour le rajout de la ligne qui inscrit la phrase en cas de FALSE (le truc con c'est que ça écrit "[Door] : Je ne peux pas ..." ;) )
Par Amaranthe le 18/7/2002 Ã 15:35:42 (#1823501)
object oClicker = GetClickingObject();
object oTarget = GetTransitionTarget(OBJECT_SELF);
location lLoc = GetLocation(oTarget);
void main()
{
If ( GetItemInSlot(INVENTORY_SLOT_CHEST, oClicker) ==
object GetObjectByTag("RobeMage", 0) ) ||
( GetItemInSlot(INVENTORY_SLOT_CHEST, oClicker) ==
object GetObjectByTag("VetementGuerrier", 0) )
AssignCommand(oClicker,JumpToLocation(lLoc));
else
ActionSpeakString("Je ne peux tout de meme pas sortir sans
mon uniforme le jour de mon intronisation !");
}
Amaranthe.
Sans certitude puisque toujours au bureau ;)
Par Cassin le 18/7/2002 Ã 15:42:33 (#1823545)
Merci !
Par Kemay le 19/7/2002 Ã 1:00:09 (#1825964)
void main()
{
object oClicker = GetClickingObject();
object oTarget = GetTransitionTarget(OBJECT_SELF);
location lLoc = GetLocation(oTarget);
//Si ni "RobeMage" ni "VetementGuerrier" ne sont portes par oClicker
if (GetItemInSlot(INVENTORY_SLOT_CHEST,oClicker)!= GetObjectByTag("RobeMage")
&& GetItemInSlot(INVENTORY_SLOT_CHEST,oClicker)!= GetObjectByTag("VetementGuerrier")){
//Annuler le changement de zone
ClearAllActions();
//Phrase informative
AssignCommand(oClicker,ActionSpeakString("Je ne peux tout de meme pas sortir sans mon
uniforme le jour de mon intronisation !"));}
else
//Sinon effectuer le changement de zone
AssignCommand(oClicker,JumpToLocation(lLoc));
}
JOL Archives 1.0.1
@ JOL / JeuxOnLine