La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 22:50:35


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
nunch
Grand Sage du Conseil
Inscrit le: 23 Mai 2003
Messages: 966
Localisation: Dans la gueule du Lyon
Répondre en citant
Posté le : 25/08/2003 22:22:20 Sujet du message : Résurrection et AssignCommand

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 25/08/2003 22:41:45 Sujet du message : Re: Résurrection et AssignCommand


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:

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.
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.
_________________
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 Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
nunch
Grand Sage du Conseil
Inscrit le: 23 Mai 2003
Messages: 966
Localisation: Dans la gueule du Lyon
Répondre en citant
Posté le : 26/08/2003 09:05:40 Sujet du message :

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. Smile
Cependant l'intervention du MD reste assez marginale sur mon module.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 26/08/2003 09:37:43 Sujet du message :


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. Smile
Cependant l'intervention du MD reste assez marginale sur mon module.
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.
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 Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
nunch
Grand Sage du Conseil
Inscrit le: 23 Mai 2003
Messages: 966
Localisation: Dans la gueule du Lyon
Répondre en citant
Posté le : 26/08/2003 14:09:51 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
DarkWolf(Pg)
Acolyte
Inscrit le: 20 Aoû 2003
Messages: 33
Répondre en citant
Posté le : 26/08/2003 14:56:26 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
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


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 43.763ms