JeuxOnLineForumsPlusConnectés : 760 (sites) | 1603 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Un Valet intelligent ? RSS
   
Répondre
Partager Outils Rechercher
Avatar de Hiztaar
Hiztaar
Roi
 
Avatar de Hiztaar
 
Smile

Un Valet intelligent ?

Et bien voilà, j'ai créé une petite maison dans laquelle se trouve un Valet... Maintenant le valet a pars dire oui non quand on lui parle, il ne sait rien faire... Se serait cool que quelqu'un arrive a faire en sorte que le pnj soit capable de "s'occuper de l'habitation" je voie par là, fermer les portes ouvertes ramasser et "ranger" les objets qui sont laissés au sol et surtout être capable "d'annoncer" la venue de quelqu'un au propriétaire de la maison et par conséquent de toujours revenir à un même WP en attendant les PJ qui pourraient venir.
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
hum
bon, alors ca m'a pas l'air bien compliqué dans l'ensemble, mais sans éléments, c dur de sortir un truc de rien

Citation:
fermer les portes ouvertes
un script dans le onopen de la porte, ou bien tu remplace le script de fermeture automatique par un script qui appelé ton serviteur et le charge de fermer (et d'ouvrir ? ) les portes
si tu vois pas du tt, ca seras pas trop long à faire

Citation:
et "ranger" les objets qui sont laissés au sol
hum, déjà plus compliqué ...
j'ai p-e une idée :
tu fais faire un tour à ton gus, et dans son onperception tu fais un truc du style :
Code PHP:
void main()
{
object oObj GetLastPerceived();
int nType GetObjectType(oObj);
if(
nType == OBJECT_TYPE_ITEM)
{
object oContenant GetNearestObjectByTag("TAGDUCONTENANT");
//ainsi tu peux mettre plusieurs contenant dans la maison ^_^
ActionMoveToObject(oObj);
//animation du gars qui se baisse que je me rappel plus
string sResref GetResRef(oObj);
CreateItemOnObject(sResref);
DestroyObject(oObj);
}
//tant qu'on y est
if(nType == OBJECT_TYPE_DOOR)
{
if(
GetIsDoorActionPossible(oObjACTION_CLOSEDOOR))
ActionCloseDoor(oObj);
}

bon, c pas assuré que ca marche, mais c un premier jet

Citation:
toujours revenir à un même WP
tu fais un "WalkWayPoints" (include : NW_I0_GENERIC je crois) et il revient automatiquement au POST_TAGDUNPC
donc il faut en mettre au endroits stratégiques, qd il a finit l'inspection, ou bien a la fin des script sur les portes

Citation:
surtout être capable "d'annoncer" la venue de quelqu'un au propriétaire
tu met un trigger à l'entrée avec l'instruction au NPC d'annoncer la venu de clui qui entre ... alors si le NPC n'a pas besoin de bouger :
Code PHP:
object oPC GetEnteringObject();
if(
GetIsPC(oPC))
{
string sName GetName(oPC);
object oNPC GetObjectByTag("TAGDUNPC");
AssignCommand(oNPCSpeakString("Voila le valeureux "+sName+", aventurier de profession."));
//là je recommande la bibliotheque de string de jedai pour qq chose de plus rp ^_^

la aussi c incomlet, met l'idée y est, si tu vois pas, demande
alors perso, ca me parait un peu ... bancale p-e .. et sujet à de multiples bug, en tout cas si on demande aux portes de l'apeller ...
dans un cas dans ce genre, j'ai fais une mini "scenette", ou les PJ se retrouvent bloqués et assiste en spectateur au truc (un lancement de quete ) donc si c ce que tu cher à faire ... faut utiliser le
Code PHP:
void SetCommandable(int bCommandableobject oTarget=OBJECT_SELF
y a un topic où c'est traité en long et en large et aussi en travers pour bien faire
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
non ton truc pour ranger ne va pas marcher, avec un getlastperseive tu va pas passer en revue tout les objets

il vaut mieux mettre le code dans le OnHeartBeat, et passer en revue tout les objets qui sont visible par le npc jusqu'a ce qu'on trouve un item qui se range ou une porte a fermer, puis un test au début qui vérifie si y'a un joueur dans la zone pour lancer le script , pour alléger les ressources.

pour le script..... j'ai la flemme, j'ai fait du script toute la journée... désolé ^_^
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
me disais aussi, c t trop beau
va pas falloir faire un :
Code PHP:
objet oBj GetObjectInArea();
while(
GetIsObjectValid(oObj))
{
if(
GetObjectSeen(oObj)
{
int nType GetObjectType(oObj);
if(
nType == OBJECT_TYPE_ITEM)
{
object oContenant GetNearestObjectByTag("TAGDUCONTENANT");
//ainsi tu peux mettre plusieurs contenant dans la maison ^_^
ActionMoveToObject(oObj);
//animation du gars qui se baisse que je me rappel plus
string sResref GetResRef(oObj);
CreateItemOnObject(sResref);
DestroyObject(oObj);
}
//tant qu'on y est
if(nType == OBJECT_TYPE_DOOR)
{
if(
GetIsDoorActionPossible(oObjACTION_CLOSEDOOR))
ActionCloseDoor(oObj);

si ??
parce que là ... ca va être un peu lourd nan ?
même avec un localint avé le nb de joueur dedans pour pas bosser qd c pas la peine ... non ?
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
incrémentation d'une variable dans le OnEnter, décrémentation dans le OnExit, puis test sur le OnHeatBeat si la variable n'est pas a zero.
C'est juste un petit test de base, plus une récupération de variable, vraiment pas lourd du tout
Lien direct vers le message - Vieux
Avatar de Hiztaar
Hiztaar
Roi
 
Avatar de Hiztaar
 
Uhu... Ouai j'ai pas tout suivi mais le truc pour le valet qui prévient c'est plutôt du style : Paul entre chez Robert, Paul parle au Valet et lui demander d'aller prévenir Robert de son arrivée. Alors notre bon Valet avec ses papattes va chercher Robert ( et ouvre les portes si besoin est... ) et lui dire que Paul veut lui parler et va ensuite attendre quelques secondes et retourner à l'entrée... ( en fermant tout ce qu'il faut fermer... )
Sa m'a pas l'air fastoche tout sa surtout pour la quiche nationale que je suis
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
ma crainte, c sur le "while" sur tt les objet du module, si y a un pj ca va en faire des boucles nan ?
je propose ca :

Code PHP:
//onenter de l'area
int nNbPC GetlocalInt(OBJECT_SELF"NBPC");//ca marcheOBJECT_SELF sur une area ?
object oPC GetEnteringObject();
if(
GetIsPC(oPC))//utile ca ?
{
nNbPC++;
SetLocalInt(OBJECT_SELF"NBPC"nNbPC);

Code PHP:
//onexit de l'area
int nNbPC GetlocalInt(OBJECT_SELF"NBPC");//ca marcheOBJECT_SELF sur une area ?
object oPC GetEnteringObject();
if(
GetIsPC(oPC))//utile ca ?
{
nNbPC--;
SetLocalInt(OBJECT_SELF"NBPC"nNbPC);

pis sur le PNJ

Code PHP:

void main
()
{
int nNbPC GetLocalInt(GetArea(OBJECT_SELF), "NBPC");
if(
nNbPC == ) return; //zou, retour case depart


object oObj GetFirstObjectInArea(GetArea(OBJECT_SELF));
while(
GetIsObjectValid(oObj))
 {
  if(
GetObjectSeen(oObj))
     {
     
int nType GetObjectType(oObj);
     if(
nType == OBJECT_TYPE_ITEM)
        {
        
object oContenant GetNearestObjectByTag("TAGDUCONTENANT");
         
//ainsi tu peux mettre plusieurs contenant dans la maison ^_^
         
ActionMoveToObject(oObj);
        
//animation du gars qui se baisse que je me rappel plus
        
string sResref GetResRef(oObj);
        
CreateItemOnObject(sResref);
        
DestroyObject(oObj);
        }
     
//tant qu'on y est
    
if(nType == OBJECT_TYPE_DOOR)
       {
       if(
GetIsDoorActionPossible(oObjACTION_CLOSEDOOR))
       
ActionCloseDoor(oObj);
       }
   
oObj GetNextObjectInArea(GetArea(OBJECT_SELF));
   }
}

(les autres scripts étaient pas terribles, celui la compile )
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
Citation:
Uhu... Ouai j'ai pas tout suivi mais le truc pour le valet qui prévient c'est plutôt du style : Paul entre chez Robert, Paul parle au Valet et lui demander d'aller prévenir Robert de son arrivée. Alors notre bon Valet avec ses papattes va chercher Robert ( et ouvre les portes si besoin est... ) et lui dire que Paul veut lui parler et va ensuite attendre quelques secondes et retourner à l'entrée... ( en fermant tout ce qu'il faut fermer... )
oki doki
alors pour ca, pour plus de sureté, je rte conseille de définir un chemin de WP, de renommé tes portes (leur tag) de facon a ce qu'il soit unique, et c parti : en "action conséquente de la réplique qui fait bien :
Code PHP:
void main()
{
object oPCGetLastSpeaker();

//tt les WP
object oWp01 GetObjectByTag("TAGDUWP01");
object oWp02 GetObjectByTag("TAGDUWP02");
object oWp03 GetObjectByTag("TAGDUWP03");
object oWp04 GetObjectByTag("TAGDUWP04");
object oWp05 GetObjectByTag("TAGDUWP05");

//tt les portes
object oDoor01 GetObjectByTag("TAGDELAPORTE01");
object oDoor02 GetObjectByTag("TAGDELAPORTE02");
object oDoor03 GetObjectByTag("TAGDELAPORTE03");
object oDoor04 GetObjectByTag("TAGDELAPORTE04");

//maintenant, la ballade
ActionMoveToObject(oWp01);
ActionMoveToObject(oDoor01);
ActionUnlockObject(oDoor01);//si elle sont fermee
ActionOpenDoor(oDoor01);

ActionMoveToObject(oWp02);

ActionMoveToObject(oDoor02);
ActionUnlockObject(oDoor02);//si elle sont fermee
ActionOpenDoor(oDoor02);

ActionMoveToObject(oWp03);

ActionMoveToObject(oDoor03);
ActionUnlockObject(oDoor03);//si elle sont fermee
ActionOpenDoor(oDoor03);

ActionMoveToObject(oWp04);

ActionMoveToObject(oDoor04);
ActionUnlockObject(oDoor04);//si elle sont fermee
ActionOpenDoor(oDoor04);

ActionMoveToObject(oWp05);

//etc.
//maintenant, la discut avec ton potes robert
string sName GetName(oPC);
object oNPC GetObjectByTag("TAGDUNPC");
AssignCommand(oNPCActionDoCommand(SpeakString("Voila le valeureux "+sName+", aventurier de profession.")));
//là je recommande la bibliotheque de string de jedai pour qq chose de plus rp ^_^

//chemin inverse :
ActionMoveToObject(oWp05);

ActionMoveToObject(oDoor04);
ActionCloseDoor(oDoor04);
ActionLockObject(oDoor04);//si elle sont fermee, necesite au moins un point en crochetage pour le NPC

ActionMoveToObject(oWp04);

ActionMoveToObject(oDoor03);
ActionCloseDoor(oDoor03);
ActionLockObject(oDoor03);//si elle sont fermee, necesite au moins un point en crochetage pour le NPC

ActionMoveToObject(oWp03);

ActionMoveToObject(oDoor02);
ActionCloseDoor(oDoor02);
ActionLockObject(oDoor02);//si elle sont fermee, necesite au moins un point en crochetage pour le NPC

ActionMoveToObject(oWp02);

ActionMoveToObject(oDoor01);
ActionCloseDoor(oDoor01);
ActionLockObject(oDoor01);//si elle sont fermee, necesite au moins un point en crochetage pour le NPC

ActionMoveToObject(oWp01);

//ce que tu veux : se replacer, lancer un dialogue avec les PJ etc.

voilivoilou
bon, si tu veux que tes pc ne suivent pas, tu peu refermer les portes à chaque fois, ou bien leur interdire le controle des PJ pdt que tu coze avec robert
au coix
je recommanderasi la plus grande prudence sachant que si la suite d'action est interrompue, ba ca fou tt en l'air, et les portes restent fermée/ouvertes ... donc peut être que faut penser à refermer au mois la première porte
genre :
Code PHP:
ActionMoveToObject(oWp01);
ActionMoveToObject(oDoor01);
ActionUnlockObject(oDoor01);//si elle sont fermee
ActionOpenDoor(oDoor01);

ActionMoveToObject(oWp02);

ActionMoveToObject(oDoor01);
ActionCloseDoor(oDoor01);
ActionLockObject(oDoor01);

ActionMoveToObject(oWp03); 
en mettant WP02 derrière la premier porte (faudras l'ouvrir
et voir carrément même

Code PHP:
object oPJ GetFirstPC();
while(
GetIsValidObject(oPJ))
{
SetCommandable(FALSEoPJ);
DelayCommand(5.0 ,SetCommandable(TRUEoPJ));
//on enleve le controle et on attend 5 sec avant de le redonner
oPJ GetNextPC();
}

ActionMoveToObject(oWp01);
//etc.. 
pour être bien sur que notre NPC soit tranquil

bon, le gros script est bon, mais ^pour plus de sureyé, tu peu remplacer certain morceau par les pitits

edit : euh, je viens de penser a un truc : vu comme c mis, il vas se fermer les portes sous le nez ...
voila ce que je te propose ===> cf gros script ou j'aurais tt mis ds 5 min
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
Ben j'ai jamais prétendu passer en revue tout les objets du module. Bien sur que c'est que les objets de la zone (passer en revue tout les objets du module o_o pas fous non !!!)

Euh oui un OBJECT_SELF ca marche sur une zone, encore heureux, sinon on aurait vraiment du mal pour certain script, imagine le cirque, on met un script qui cible une zone on ne sais même pas laquelle il s'agit...

Citation:
if(GetIsPC(oPC))//utile ca ?
pas con je me suis jamais posé la question, mais si un npc ou un objet arrive dans une zone, le OnEnter se déclanche ? Se serais bon a savoir.
Ta ligne permet de mettre de coté tout les doutes

Pour le dernier script... j'ai pas lut c'est trop long ^_^
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
on est d'accord, mais c'est pas déjà bcp ? avec tt les placeable, tt les PNJ etc. tiens, vais faire un topic la dessus ...

et pour le script, de tt facon c pas interessant ^_^ c juste une lonnnnge suite d'actions

je met un corrigé ici,
dans ton dialogue, à la ligne "actionconséquente"
Code PHP:
void main()
{
object oPCGetLastSpeaker();

//tt les WP
object oWp011 GetObjectByTag("TAGDUWP011");
object oWp012 GetObjectByTag("TAGDUWP012");
object oWp021 GetObjectByTag("TAGDUWP021");
object oWp022 GetObjectByTag("TAGDUWP022");
object oWp031 GetObjectByTag("TAGDUWP031");
object oWp032 GetObjectByTag("TAGDUWP032");
object oWp041 GetObjectByTag("TAGDUWP041");
object oWp042 GetObjectByTag("TAGDUWP042");
object oWp05  GetObjectByTag("TAGDUWP05");

//tt les portes
object oDoor01 GetObjectByTag("TAGDELAPORTE01");
object oDoor02 GetObjectByTag("TAGDELAPORTE02");
object oDoor03 GetObjectByTag("TAGDELAPORTE03");
object oDoor04 GetObjectByTag("TAGDELAPORTE04");

//maintenant, la ballade
object oPJ GetFirstPC();
while(
GetIsObjectValid(oPJ))
{
SetCommandable(FALSEoPJ);
DelayCommand(5.0 ,SetCommandable(TRUEoPJ));
//on enleve le controle et on attend 5 sec avant de le redonner
oPJ GetNextPC();
}

ActionMoveToObject(oWp011);

ActionMoveToObject(oDoor01);
ActionUnlockObject(oDoor01);//si elle sont fermee
ActionOpenDoor(oDoor01);

ActionMoveToObject(oWp012);

ActionMoveToObject(oDoor01);
ActionCloseDoor(oDoor01);
ActionLockObject(oDoor01);

ActionMoveToObject(oWp021);

ActionMoveToObject(oDoor02);
ActionUnlockObject(oDoor02);//si elle sont fermee
ActionOpenDoor(oDoor02);

ActionMoveToObject(oWp022);

ActionMoveToObject(oWp031);

ActionMoveToObject(oDoor03);
ActionUnlockObject(oDoor03);//si elle sont fermee
ActionOpenDoor(oDoor03);

ActionMoveToObject(oWp032);

ActionMoveToObject(oWp041);

ActionMoveToObject(oDoor04);
ActionUnlockObject(oDoor04);//si elle sont fermee
ActionOpenDoor(oDoor04);

ActionMoveToObject(oWp042);

ActionMoveToObject(oWp05);   //pres de robert

//etc.
//maintenant, la discut avec ton potes robert
string sName GetName(oPC);
object oNPC GetObjectByTag("TAGDUNPC");
AssignCommand(oNPCActionDoCommand(SpeakString("Voila le valeureux "+sName+", aventurier de profession.")));
//là je recommande la bibliotheque de string de jedai pour qq chose de plus rp ^_^

//chemin inverse :
ActionMoveToObject(oWp05);

ActionMoveToObject(oWp042);

ActionMoveToObject(oDoor04);
ActionCloseDoor(oDoor04);
ActionLockObject(oDoor04);//si elle sont fermee, necesite au moins un point en crochetage pour le NPC

ActionMoveToObject(oWp041);

ActionMoveToObject(oWp032);

ActionMoveToObject(oDoor03);
ActionCloseDoor(oDoor03);
ActionLockObject(oDoor03);//si elle sont fermee, necesite au moins un point en crochetage pour le NPC

ActionMoveToObject(oWp031);

ActionMoveToObject(oWp022);

ActionMoveToObject(oDoor02);
ActionCloseDoor(oDoor02);
ActionLockObject(oDoor02);//si elle sont fermee, necesite au moins un point en crochetage pour le NPC

ActionMoveToObject(oWp021);

ActionMoveToObject(oWp012);

ActionMoveToObject(oDoor01);
ActionCloseDoor(oDoor01);
ActionLockObject(oDoor01);//si elle sont fermee, necesite au moins un point en crochetage pour le NPC

ActionMoveToObject(oWp011);

//ce que tu veux : se replacer, lancer un dialogue avec les PJ etc.

il faut bien changer les tag de WP est des portes, en mettant WP011 devant la porte 1 et WP012 deriere, et ainsi de suite
alors tu peux assez facilement je pense rajouter des portes, en créant bien les WP avant et après, je peux faire une routine pour qu'il n'y est pas a modifier le script même si on rajoute des WP (tiens pas con ca ... ca seras la dernière version ^_^)
j'essai un truc et je le post )

pour l'instant, tt est compilé mais pas testé
donc c p-e truffé de "bug" que j'aurais pas pensé dit le si t'as des pbs ^_^

ps : j'aurais besoin d'une info :

Code PHP:
while(GetIsObjectValid(oTruc))
{
otruc nexttruc;

aintenant, otruc est valide ou pas ?
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
bon, en vela un, plus ou moins qui marche, selon la réponse a ma question
Citation:
ps : j'aurais besoin d'une info :


Code PHP:
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à ^_^

Code PHP:
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(FALSEoPJ);
DelayCommand(5.0 ,SetCommandable(TRUEoPJ));
//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(sWp3);
   
//numero du wp : style 0XX, pour le premier : 011
   
string sDoorNb GetStringLeft(sWpNb2);
   
//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(oDoorDOOR_ACTION_UNLOCK))
   
ActionUnlockObject(oDoor);//si elle sont fermee a clee on ouvre
   
if(GetIsDoorActionPossible(oDoorDOOR_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_SELFActionDoCommand(SpeakString("Sir "+sNameRobert+", voila le valeureux "+sNamePC+", aventurier de profession, qui demande a vous parler.")));
ActionDoCommand(AssignCommand(oRobertSpeakString("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(sWp3);
   
//numero du wp : style 0XX, pour le denier : 0X2
   
string sDoorNb GetStringLeft(sWpNb2);
   
//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(oDoorDOOR_ACTION_UNLOCK))
   
ActionUnlockObject(oDoor);//si elle sont fermee a clee on ouvre
   
if(GetIsDoorActionPossible(oDoorDOOR_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
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Un Valet intelligent ?
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 19h21.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite