Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Fermer une porte à distance?

Par Kray le 9/7/2002 à 8:19:33 (#1779617)

Bon, voici mon problème.

J'ai un NPC, un garde, qui ouvre une porte sur commande d'un PC. C'est la porte qui se trouve sur un mur type 1 dans le tlideset rural, une grande porte à deux batants, qui ne cache pas une transition.
Voici mon script qui lui fait ouvrir la porte.

void main()
{
object oDoor = GetNearestObjectByTag("oPorteBoisNoye");
if (GetIsOpen(oDoor)==0)
{
ActionMoveToObject(GetObjectByTag("WP_OPEN_DOOR_GARDE"));
ActionOpenDoor(oDoor);
ActionMoveToObject(GetObjectByTag("WP_OPEN_DOOR_GARDE"));
ActionWait(15.0);
ActionMoveToObject(GetObjectByTag("WP_OPEN_DOOR_GARDE"));
ActionCloseDoor(oDoor);
ActionLockObject(oDoor);
ActionMoveToObject(GetObjectByTag("WP_INIT_GARDE"));
}
}
J'ai deux problèmes sur ce script. Premièrement, la porte est fermée par une clé, clé que le NPC possède dans son inventaire. Malheureusement, la commande ActionLockObject semble ne pas fonctionner, car la porte est parfaitement ouvrable et fermable par le PC après une ouverture par le garde.
Deuxièmement, au moment de ActionCloseDoor, le garde s'avance de trois pas, et referme la porte en se retrouvant piégé derrière celle-ci! Comme la commande ActionMoveToObject l'emmène vers un WP sité l'autre coté de la porte, il réouvre celle-ci pour retourner à sa place... Et la laisse béante.

Mes questions sont donc les suivantes :*Peut-on refermer une porte à l'aide d'une clé? Si oui, comment? Car la fonction ActionLockObject ne semble pas fonctionner dans mon cas.*Peut-on fermer une porte à distance? Cela me permettrait d'"émuler" une fermeture par le garde sans que celui-ci passe du mauvais coté.
Merci d'avance pour vos réponses :)

Par Gargantuel le 9/7/2002 à 8:53:16 (#1779659)

Plusieurs solutions possibles mais que je ne peux pas tester au boulot :
- Utilise SetLocked(object oTarget, int bLocked) à la place de ActionLockObject(). Pour l'avoir utilisé, je sais que cela fonctionne bien.
- Je crois qu'il existe une option à cocher sur la porte pour qu'elle reste vérouillée après usage mais je n'ai jamais testé
- Pour que ton NPC ne soit pas du mauvais coté, as tu essayé de changer la porte de sens ? (sens de la fleche)
- Sinon il existe une solution toute bete :
Sur le OnOpen de ta porte :


ActionWait(15.0);
ActionCloseDoor(OBJECT_SELF);
SetLocked(OBJECT_SELF, TRUE);

Comme cela, ton garde ouvrira bien la porte et celle ci se refermera et se verouillera 15 sec. après (à tester bien sur)

(Je ne sais plus s'il faut faire un actionwait ou un delaycommand mais je regarderais ce soir).

J'espère t'avoir aider.

Par Kray le 9/7/2002 à 9:04:03 (#1779686)

ActionWait ;)

Merci beaucoup, ca marche comme ça. Autre question, est-il possible d'empecher un PC de parler à un NPC à travers un mur...?

Par Gargantuel le 9/7/2002 à 9:19:15 (#1779723)

Bah a vue de nez, je mettrais un script comme ca sur le OnPerception de ton NPC :


object oPC = GetLastPerceived();
if (GetIsPC(oPC) && GetLocalInt(oPC, "OnSight") == 0)
SetLocalInt(oPC, "OnSight", 1);


Et tu conditionnes le lancement de ta conversation sur onsight == 1

mais pareil, je peux pas tester :(

Par Kray le 9/7/2002 à 9:22:36 (#1779727)

Mais quel génie :p

Merci beaucoup :)

JOL Archives 1.0.1
@ JOL / JeuxOnLine