Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Téléportation retardée
Téléportation retardée
Par Draconyss le 25/8/2002 Ã 19:08:17 (#2024623)
Klk'un connait un script pour faire téléporté tout un groupe de PC se trouvant dans cette endroit au bon moment après un certain temps d'attente ?
Genre : veuillez patientez ... téléportation ici dans 15 minutes :D
Celà me serait utile pour mon module . Merci :merci:
bonne question
Par Blam le 26/8/2002 Ã 0:06:07 (#2026610)
Par Azharial del'Amrhyn le 26/8/2002 Ã 3:11:12 (#2027329)
- Detection du PC entrant dans la zone : utilise un trigger pour ca.
- Pour chacun des PCs / Compagnons / Invocations (utilise le meme genre de script pour tous les trouver que celui utilisé dans la campagne pour soigner tous les compagnons au Temple).
- Utilise DelayCommand avec comme action un JumpToLocation sur chacune des créatures détectées.
Le gros problème que je vois est que si dans un script ultérieur (entre le moment de l'activation et le moment de la téléportation) tu vides la queue des actions avec un ClearAllActions, et bien ca ne fonctionnera pas... Donc à utiliser très prudemment quand meme.
* Est pas très clair à cette heure-ci * :p.
No problemo
Par Jedaï le 26/8/2002 à 19:55:04 (#2032193)
Par Draconyss le 26/8/2002 Ã 20:32:28 (#2032478)
Par Gargantuel le 26/8/2002 Ã 21:01:23 (#2032686)
On va faire simple : Un trigger téléporte tout personnage (joueur ou pas) qui passe dessus au bout de 15mn.
Tu crées un trigger sur lequel devront marcher tes joueurs puis un waypoint appelé "wt_Target" dans cet exemple.
Sur le OnEnter de ton trigger :
void main()
{
DelayCommand(900, ExecuteScript("teleport", GetEnteringObject()));
}
Et tu crées un script qui s'appelle teleport :
void main()
{
JumpToObject(GetWaypointByTag("wt_Target"));
SpeakString("Vous avez été téléporté !");
}
Et voilà .
Re: No problemo
Par Azharial del'Amrhyn le 26/8/2002 Ã 21:39:12 (#2032998)
Provient du message de Jedaï
Pour éviter le problème tu pourrais tenter de "prendre l'heure actuelle" puis "rajouter le délai" (là faire gaffe au options temporelles du module : peut-être utiliser HoursToSeconds pour changer en fonction de la longueur réelle des heures du jeu) et mettre tout ça dans la variable locale d'un objet invisible dont le OnHeartBeat lancera la téléportation à l'heure dite (test admettant une erreur de 6 secondes réelles).
Ta solution parait interessante mais je vois deux soucis :
- L'utilisation d'OnHeartBeat peut ralentir drastiquement un serveur.
- Si tu colles ca sur un objet invisible situé dans une Area alors il me semble que son OnHeartBeat ne sera pas declenché si le PC est sorti de l'Area où est l'objet, à l'heure dite. Peut-être faudrait-il placer tout ca au niveau du module, d'où a priori encore ralentissement...
Garg, le problème du DelayCommand est que si un ClearAllActions est rencontré, pouf la téléportation est annulée... bref, des solutions existent mais elles semblent avoir quelques defauts.
Re: Re: No problemo
Par Gargantuel le 26/8/2002 Ã 21:44:03 (#2033043)
Provient du message de Azharial del'Amrhyn
Garg, le problème du DelayCommand est que si un ClearAllActions est rencontré, pouf la téléportation est annulée... bref, des solutions existent mais elles semblent avoir quelques defauts.
Je crois que le DelayCommand s'executera dans la queue du trigger et pas du joueur. Du coup, y a quand meme peu de chance qu'un ClearAllActions() soit lancé sur le trigger lui-meme ;)
Mais bon j'ai pas testé, je peux me gourer :confus:
Re: Re: Re: No problemo
Par Azharial del'Amrhyn le 26/8/2002 Ã 21:48:26 (#2033079)
Provient du message de Gargantuel
Je crois que le DelayCommand s'executera dans la queue du trigger et pas du joueur. Du coup, y a quand meme peu de chance qu'un ClearAllActions() soit lancé sur le trigger lui-meme
Oui tu dois avoir raison, mais qu'en est-il si le PC quitte l'Area ? Je ne sais pas du tout si les commandes en attente peuvent s'executer s'il n'y a plus personne dans la zone...
Re: Re: Re: Re: No problemo
Par Gargantuel le 26/8/2002 Ã 21:53:04 (#2033103)
Provient du message de Azharial del'Amrhyn
Oui tu dois avoir raison, mais qu'en est-il si le PC quitte l'Area ? Je ne sais pas du tout si les commandes en attente peuvent s'executer s'il n'y a plus personne dans la zone...
L'eternelle confusion entre la queue des actions et celle des commandes. Pas simple :(
Dans le cas du DelayCommand() je crois que ce sera considéré comme une commande (je n'ai pas utilisé de ActionWait() )
Donc pas de problème avec les histoires de zones et d'actions qui se gelent.
J'ai utilisé un systeme similaire avec des DelayCommand(ExecuteScript()) sur des objets d'une zone externe et ca fonctionnait bien.
Par Azharial del'Amrhyn le 26/8/2002 Ã 21:58:51 (#2033139)
* Revient dans quelques minutes *
...
* Retour *
Quel crétin je fais, j'utilise OnUsed avec GetEnteringObject, ca risquait pas de fonctionner, bon ca va quand même mieux avec GetLastUsedBy :p. Ton script tourne donc très bien et ce quelque soit la zone, bien, c'est une bonne chose à savoir :).
* Se dit que les vacances ont quand même un effet sur l'efficacité * :p.
Par Gargantuel le 26/8/2002 Ã 22:39:21 (#2033515)
Merci pour le retour :)
Heu ...
Par Draconyss le 27/8/2002 Ã 0:59:55 (#2034658)
Parce que là , je suis vraiment perdu ... comme d'autres peut-être d'ailleurs.;)
Une description détaillée s'impose je crois ... (comment faire quoi et ou ?)
Merci
JOL Archives 1.0.1
@ JOL / JeuxOnLine