La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 22:50:35
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
nunch Grand Sage du Conseil Messages: 966 Localisation: Dans la gueule du Lyon |
Salut, j'ai deux questions:
- comment savoir quand un PJ est ressucité afin d'effectuer des actions sur cet événement particulier ? - j'ai le bout de script suivant dans OnClientEnter: Code : object oPlayer = GetEnteringObject(); // Verifie que le client est un MD if(GetIsDM(oPlayer)) { ............. AssignCommand(oPlayer,JumpToLocation(GetLocation(GetObjectByTag("WP_Bureau_MD")))); } en sachant que le waypoint est bon et que GetObjectByTag() retourne un objet valide (j'ai testé), un MD n'est jamais téléporté au waypoint. Dois-je placer ce script ailleurs, utiliser DelayCommand() ou user d'une autre astuce ? Merci pour toute aide. |
Revenir en haut | |
lendraste Grand Maître Chanteur du Conseil Messages: 1403 Localisation: Quelque part ailleurs |
nunch a écrit : - comment savoir quand un PJ est ressucité afin d'effectuer des actions sur cet événement particulier ? Ca dépend un peu de la manièer dont il est ressuscité de la façon dont tu gère les scripts OnPlayerDying, OnPlayerDeath et OnPlayerRespawn. Peux-tu détailler ?
Citation : - j'ai le bout de script suivant dans OnClientEnter:
Le OnClientEnter n'est pas un évènement dans lequel le PJ existe réellement dans le module. Tu peux obtenir une référece au PJ, certes, mais tu ne peux quasiment rien faire avec. La seule solution est de déporter ton script sur les OnEnter de tes Areas. Pour cela, il faut initialiser une variable dans le OnClientEnter pour signaler que le PJ viens de rentrer, afin qu'un code placé dans le OnEnter de toutes tes zones teste cette variable (la réinitialise pour empêcher de faire à nouveau le test) et téléporte le PJ le cas échéant. Note que (et j'ai cherché moi aussi à faire quelque chose de similaire à toi sans succès) le chargement de la dernière zone dans laquelle il était avant de déco (ou la zone de départ si c'est la première connexion au module depuis son lancement) est innévitable. Ce qui provoquera 2 chargements de zone successifs.Code : object oPlayer = GetEnteringObject(); // Verifie que le client est un MD if(GetIsDM(oPlayer)) { ............. AssignCommand(oPlayer,JumpToLocation(GetLocation(GetObjectByTag("WP_Bureau_MD")))); } en sachant que le waypoint est bon et que GetObjectByTag() retourne un objet valide (j'ai testé), un MD n'est jamais téléporté au waypoint. Dois-je placer ce script ailleurs, utiliser DelayCommand() ou user d'une autre astuce ? Merci pour toute aide. _________________ Lendraste de Loreval Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel. La cité des mensonges - 1 |
Revenir en haut | |
nunch Grand Sage du Conseil Messages: 966 Localisation: Dans la gueule du Lyon |
Pour la téléportation, j'ai en effet vu (après) que tu avais déjà posté une réponse similaire dans la discussion "vos scripts". Merci néanmoins de ton complément de réponse.
En ce qui concerne la résurrection, je ne gère pas le OnPlayerDying et le OnPlayerDeath pour l'instant (il y a les scripts par défaut). Après la manière de résurrection peut venir soit d'un sort de clerc, soit d'un parchemin ou d'un objet, soit d'une intervention du MD (à moins que tu connaisses d'autres moyens supplémentaires). Je suis novice dans le domaines de la résurrection. Cependant l'intervention du MD reste assez marginale sur mon module. |
Revenir en haut | |
lendraste Grand Maître Chanteur du Conseil Messages: 1403 Localisation: Quelque part ailleurs |
nunch a écrit : En ce qui concerne la résurrection, je ne gère pas le OnPlayerDying et le OnPlayerDeath pour l'instant (il y a les scripts par défaut). Après la manière de résurrection peut venir soit d'un sort de clerc, soit d'un parchemin ou d'un objet, soit d'une intervention du MD (à moins que tu connaisses d'autres moyens supplémentaires). Je suis novice dans le domaines de la résurrection.
L'intervention du MD ne peut pas être captée par un évènement du jeu. C'est d'ailleurs extrêmement génant pour certains développements (je parle en connaissance de cause). Pour ce qui est des autres résurections (donc par sort, les parchemins utilisant des sorts), clairement, il n'existe pas de moyens standard de détection. En revanche, il existe une solution qui consiste à modifier le script par défaut de ces sorts en particulier afin de signaler l'évènement.
Cependant l'intervention du MD reste assez marginale sur mon module. Il y aurait quelques scripts par défaut à modifier comme nw_s0_raisedead et nw_s0_resserec (il faudrait voir s'il y en a d'autres). Je te propose d'introduire le code suivant juste avant la fin du main dans le corps de la fonction : Code : SetLocalObject(GetModule(), "LASTRESURECTED", GetSpellTargetObject()); //Sauvegarder la cible du sort de résurection SetLocalObject(GetModule(), "LASTRESURECTER", OBJECT_SELF); //Sauvegarder le lanceur de la résurection SignalEvent(GetModule(), EventUserDefined(5000)); //Signaler l'évènement au module Note que la valeur placée dans EventUserDefined est parfaitement arbitraire. Elle permet de numéroter un Evènement personnalisé. Il faudra s'assurer que le reste de ton module n'utilise pas cette valeur. Ensuite dans le OnUserDefined de ton module, tu inserres le code suivant : Code : void main() { int nEventNumber=GetUserDefinedEventNumber(); switch (nEventNumber) { case 5000 : { object oResurected=GetLocalObject(OBJECT_SELF, "LASTRESURECTED"); // Récupération de la cible de la résurection object oResurecter=GetLocalObject(OBJECT_SELF, "LASTRESURECTER"); // récupération du dernier "ressuciteur" // -- mettre ici le code dont on a besoin -- }break; } } Il est important de signaler l'évènement au module à la fin du script du Rappel à la vie ou de la Résurection pour éviter d'intervenir avant que le sort ait fait effet. N'hésite pas à me demander des détails si tu ne comprends pas tout. _________________ Lendraste de Loreval Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel. La cité des mensonges - 1 |
Revenir en haut | |
nunch Grand Sage du Conseil Messages: 966 Localisation: Dans la gueule du Lyon |
J'ai tout compris sauf que je ne sais pas comment accéder aux scripts que tu as nommés. Sinon, une fois de plus ton savoir est une vraie mine d'or. Un grand merci!!
|
Revenir en haut | |
DarkWolf(Pg) Acolyte Messages: 33 |
Les scripts nw_s0_raisedead et nw_s0_resserec sont accessible en cochant le bouton radio : All ressource (au moment d'ouvrir un nscript).
Merci lendraste tu viens par cet exemple de me faire comprendre comment on utiliser les EventUserDefined :>> |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Page 1 sur 1 ¤
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum