bon, en vela un, plus ou moins qui marche, selon la réponse a ma question
ps : j'aurais besoin d'une info :
while(GetIsObjectValid(oTruc))
{
otruc = nexttruc;
}
amintenant, otruc est valide ou pas ?
je part du principe qu'après la boucle, ba il n'est pas valid, c'est pour ca qu'elle s'est arrêtée d'ailleurs
donc, je propose ca : ca compil, c gros, fait plus ou moins au feeling ^_~ donc surement y a mieux a faire, mais j'espère que ca marche (mais g trop la flemme de tester, dsl
donc je prie, c'est déjà pas mal
)
bon, alors pour l'utiliser, tu rentre les info ds la "zone a changer"
et tu fais très attention a metre TOUJOURS un wp devant et un derrire la porte, de tag respectif "gnagnagna_0x1" et "gnagnagna_0x2" où gnagnagna est entré ds le script là où il faut
alors en theorie, tu peu mettre des wp entre les porte, a savoir des "gnagnagna_0x3", "gnagnagna_0x4" ... "gnagnagna_0x9"STOP, pas plus
t'as droit a 9 portes (ou bien 99, chais plus) donc t'as de quoi venir voir
les wp entre les portes ne sont pas obligatoires, et chuis même pas sure que ca marche, teste, et dit moi, chuis tt impatient là ^_^
void main()
{
//essai d'un truc que y pas besoin de se taper tt le script a refaire chaque fois
//----------------zone a changer-----------------
string sTagDoor = "PORTES_";
//debut du tag des portes (sans les chiffres)
string sTagWp = "WP_VALET_";
//debut du tag des wp (sans les chiffres)
string sTagWpRobert = "WP_VALET_ROBERT";
//tag du maitre
string sTagRobert = "TAG_DE_ROBERT";
//tag du WP qui se trouve prs du maitre, d'ou le valet doit causer
//----------------zone a changer-----------------
object oPC = GetLastSpeaker();
//forme du tag "CEQUONVEUT_011"
//on bloque tt les PJ
//maintenant, la ballade
object oPJ = GetFirstPC();
while(GetIsObjectValid(oPJ))
{
SetCommandable(FALSE, oPJ);
DelayCommand(5.0 ,SetCommandable(TRUE, oPJ));
//on enleve le controle et on attend 5 sec avant de le redonner
oPJ = GetNextPC();
}
//et maintenant on balade paul
object oWp = GetObjectByTag(sTagWp+"011");
while(GetIsObjectValid(oWp))
{
ActionMoveToObject(oWp);
//on va au wp devant la porte ( les 0X1 )
//jeu sur le tag du Wp pour recupere le nb :
string sWp = GetTag(oWp);
string sWpNb = GetStringRight(sWp, 3);
//numero du wp : style 0XX, pour le premier : 011
string sDoorNb = GetStringLeft(sWpNb, 2);
//numero de la porte : style 0X , pour le premier : 01
string sDoor = sTagDoor+sDoorNb;
//tag de la porte : PORTES_01 (par exemple)
object oDoor = GetObjectByTag(sDoor);
ActionMoveToObject(oDoor);
if(GetIsDoorActionPossible(oDoor, DOOR_ACTION_UNLOCK))
ActionUnlockObject(oDoor);//si elle sont fermee a clee on ouvre
if(GetIsDoorActionPossible(oDoor, DOOR_ACTION_OPEN))
ActionOpenDoor(oDoor);//si elle est ferme on ouvre
int nWpNb = StringToInt(sWpNb);
nWpNb++;
object oWp2 = GetObjectByTag(sTagWp+IntToString(nWpNb));
ActionMoveToObject(oWp2);
//on va au wp derrire la porte (les 0X2 )
//et on ferme la porte
ActionCloseDoor(oDoor);
ActionLockObject(oDoor);//si elle sont a fermee et si le PNJ a au moins 1 en crochetage
int nDoorNb = StringToInt(sDoorNb);
nDoorNb++;
oWp = GetObjectByTag(sTagWp+IntToString(nDoorNb)+"1");
SetLocalObject(OBJECT_SELF, "WP_VALID", oWp);
//on recupere le wp suivant, a savoir un 0X1 avec le X qui a pris ++ ^_^ c clair la ? ou ...
//et on le stock pour le retour
//les Wproute sont les wp entre le WP_VALET_0x2 et le WP_VALET_0(x+1)1,
//ceux qui mennent a la porte suivante quoi
int nWpRoute = nWpNb;
object oWpRoute = GetObjectByTag(sTagWp+IntToString(nWpRoute));
while(GetIsObjectValid(oWpRoute))
{
if(nWpRoute < 9)
{
ActionMoveToObject(oWpRoute);
nWpRoute++;
oWpRoute = GetObjectByTag(sTagWp+IntToString(nWpRoute));
}
//juqu'au pire 0X9
}
}
//bon, la en tehorie il est rendu WP_VALET_0XX, le dernier
ActionMoveToObject(GetObjectByTag(sTagWpRobert));
string sNamePC = GetName(oPC);
string sNameValet = GetName(OBJECT_SELF);
object oRobert = GetObjectByTag(sTagRobert);
string sNameRobert = GetName(oRobert);
AssignCommand(OBJECT_SELF, ActionDoCommand(SpeakString("Sir "+sNameRobert+", voila le valeureux "+sNamePC+", aventurier de profession, qui demande a vous parler.")));
ActionDoCommand(AssignCommand(oRobert, SpeakString("Bien "+sNameValet+", faites entrez.")));
//boucle de retour, qui reprend le dernier oWp valid
oWp = GetLocalObject(OBJECT_SELF, "WP_VALID");
while(GetIsObjectValid(oWp))
{
//jeu sur le tag du Wp pour recupere le nb :
string sWp = GetTag(oWp);
string sWpNb = GetStringRight(sWp, 3);
//numero du wp : style 0XX, pour le denier : 0X2
string sDoorNb = GetStringLeft(sWpNb, 2);
//numero de la porte : style 0X
string sDoor = sTagDoor+sDoorNb;
//tag de la porte : PORTES_0X (par exemple)
object oDoor = GetObjectByTag(sDoor);
int nWpNb = StringToInt(sWpNb);
//les Wproute sont les wp entre le WP_VALET_0x2 et le WP_VALET_0(x+1)1,
//ceux qui mennent a la porte suivante quoi
int nWpRoute = nWpNb; // un 0X2
nWpRoute++; //premier : 0X3
object oWpRoute = GetObjectByTag(sTagWp+IntToString(nWpRoute));
while(GetIsObjectValid(oWpRoute))
{
if(nWpRoute < 10)
{
nWpRoute++;
oWpRoute = GetObjectByTag(sTagWp+IntToString(nWpRoute));
//on cherche le dernier wp valid, jusqu'a 0X9 max, ou X est le chiffer du dernier 0X2
}
}
while(GetIsObjectValid(oWpRoute))
{
nWpRoute--;
//la c si jamais la dernier valeur de nWpRoute correspond a un WP invalid : a verifier
//on suit les wp route jusqu'a 02
if(nWpRoute > 3)
{
oWpRoute = GetObjectByTag(sTagWp+IntToString(nWpRoute));
ActionMoveToObject(oWpRoute);
//on recupere le wp avec le dernier chiffre qui correspond un wp valid (a verifier)
nWpRoute--;
oWpRoute = GetObjectByTag(sTagWp+IntToString(nWpRoute));
}
ActionMoveToObject(oWp);
//on va au wp deriere la porte ( les 0X2 )
ActionMoveToObject(oDoor);
if(GetIsDoorActionPossible(oDoor, DOOR_ACTION_UNLOCK))
ActionUnlockObject(oDoor);//si elle sont fermee a clee on ouvre
if(GetIsDoorActionPossible(oDoor, DOOR_ACTION_OPEN))
ActionOpenDoor(oDoor);//si elle est ferme on ouvre
nWpNb--;
object oWp2 = GetObjectByTag(sTagWp+IntToString(nWpNb));
ActionMoveToObject(oWp2);
//on va au wp derrire la porte (les 0X1 )
//et on ferme la porte
ActionCloseDoor(oDoor);//on ferme
ActionLockObject(oDoor);// on lockifie
int nDoorNb = StringToInt(sDoorNb);
nDoorNb--;
oWp = GetObjectByTag(sTagWp+IntToString(nDoorNb)+"2");
//on recupere le wp suivant, a savoir un 0X2 avec le X qui a pris -- ^_^ c clair la ? ou ...
}
//en theorie il est rendu a son pt de depart, a savoir "WP_VALET_011"
//donc la tu lui fait faire ce que tu veux
}
tu peu rajouter ttes les actions que tu veux après
ouala, hop zis will dou its job