Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > portes et leviers
portes et leviers
Par Ryval le 25/7/2002 à 23:19:43 (#1859871)
J'ai 5 portes et trois leviers.
Chaque levier a deux positions (0 et 1) et les leviers ne sont pas dans la même zone que les portes.
Le script doit donc être dans la OnEnter de l'area.
Mes portes ont les tags suivants (001, 010, 011, 100, 110) leurs tags correspondent a leurs positions ouvertes et à la position des leviers. Quand les leviers sont placés différemment la porte est fermée(exemple: position 000 toutes les portes sont férmées).
Quelqu'un a une idée pour un script court?
Par Ryval le 26/7/2002 à 1:14:47 (#1860299)
et j'ai pas envie de faire un script avec 64 possibiltés.
L'idée en nommant mes tags 100001 (en binaire) c'est que je peux les rattraper en faisant des IntToString pour en avoir des nombres:
levier 1 position=1 variable iPos1
levier 2 position=0 variable iPos2
levier 3 position=0 variable iPos3
levier 4 position=0 variable iPos4
levier 5 position=0 variable iPos5
levier 6 position=1 variable iPos6
je fais
ActionOpenDoor(GetObjectByTag(IntToString(iPos1)+IntToString(iPos2)+IntToString(iPos3)+IntToString(iPos4)+IntToString(iPos5)+IntToString(iPos6))
Par Kemay le 26/7/2002 à 2:24:49 (#1860524)
A placer dans l'event onUsed de chaque levier (dont le Tag doit se terminer par un chiffre compris entre 1 et 6)void main()
{
object oModule = GetModule();
string sLeverId = GetStringRight(GetTag(OBJECT_SELF),1);
if ( GetLocalString(oModule,"Lever"+sLeverId)==" || GetLocalString(oQuelconque,"Lever"+sLeverId)=="0" )
{
SetLocalString(oModule,"Lever"+sLeverId,"1");
}
else SetLocalString(oModule,"Lever"+sLeverId,"0");
}
A placer dans l'event onEnter de chaque area possedant une ou plus des portes (dont le Tag est LeverDoorXXXXXX, X étant 0 ou 1) que les leviers permettent d'ouvrir : void main()
void main()
{
object oModule = GetModule();
string sDoorTag = ";
int i = 1;
while(i < 7)
{
sDoorTag += GetLocalString(oModule,"Lever"+IntToString(i));
i++;
}
object oDoor = GetFirstObjectInArea(OBJECT_SELF);
while (oDoor != OBJECT_INVALID )
{
if ( GetObjectType(oDoor)==OBJECT_TYPE_DOOR && GetTag(oDoor)=="LeverDoor"+sDoorTag && GetLocked(oDoor))
{
SetLocked(oDoor,FALSE);
}
else if ( GetObjectType(oDoor)==OBJECT_TYPE_DOOR && GetStringLeft(GetTag(oDoor),9)=="LeverDoor" && GetLocked(oDoor)==FALSE)
{
SetLocked(oDoor,TRUE);
}
GetNextObjectInArea(OBJECT_SELF);
}
}
Voilà... Après si c'est toujours trop long tu peux toujours supprimer tous les espaces et les renvois à la ligne ;)
JOL Archives 1.0.1
@ JOL / JeuxOnLine