La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 09/05/2024 20:55:06


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 12/07/2006 14:07:26 Sujet du message : [Résolu] Script se lançant à la mort du perso

Encore un truc trop dur pour moi Razz !

J'ai supprimé le respawn dans mon module, et il n'y a pas de posibilité de rappel à la vie et autre résurrection. Ce n'est pas un gros problème en solo, il suffit d'avoir le réflexe élémentaire de sauvegarder régulièrement. Par contre pas de respawn en multijoueur, c'est embêtant.
J'ai donc créé un petit objet baptisé "Point de Destin" (pas trés original je vous l'accorde). Un personnage en reçoit un au début du module, puis un à chaque quête accomplie (et pourra en recevoir d'autres en diverses occasions).
Lorsque le personnage meurt, s'il a un point de destin dans son inventaire, celui-ci est détruit, et le perso ressuscite, sans pénalité; l'idéal serait que les adversaires immédiats du personnages lui laissent un court répit pour lui permettre de porter une attaque, ou de boire une potion.

Avec le script ci-dessous, placé dans le OnPlayerDeath du module, les jolis effets sur le perso et sa résurrection fonctionnent, et l'objet "point de destin" est bien détruit.
Par contre, je n'ai pas réussi à faire quoi que ce soit à son adversaire. Je pense que le problème doit venir de la sélection de l'ennemi à affecter. En cherchant sur le forum, j'ai vu que GetLastKiller ne pouvait pas fonctionner dans ce sens; d'aprés la description de l'éditeur de script, GetLastAttacker ne marche pas non plus. J'ai essayé avec GetLastDamager, mais cela n'a aucun effet non plus.
J'en suis finalement arrivé à la version actuelle, et la non plus, rien ne se passe. Qui plus est, je ne vois pas comment faire pour affecter plusieurs adversaires à la fois.

Voilà le morceau de script incriminé (que je rajoute à la fin du OnPlayerDeath):

NWScript :

  object oDestinBenef = GetLastPlayerDied();
  if (GetItemPossessedBy(oDestinBenef,"PointDestin") != OBJECT_INVALID)
  {
        object oDestinCible = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_NOT_PC,OBJECT_SELF,1);
        object oPtDestin = GetItemPossessedBy(oDestinBenef,"PointDestin");
        DestroyObject(oPtDestin,0.0);
        AssignCommand(oDestinCible,ClearAllActions(TRUE));
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_STRIKE_HOLY,FALSE),oDestinBenef,1.0);
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_WAIL_O_BANSHEES,FALSE),oDestinBenef,1.0);
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oDestinBenef,1.0);
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUNBEAM,TRUE),oDestinCible,1.0);
        ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectBlindness(),oDestinCible,5.0);

  }
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Comme, d'aprés ce que j'ai vu sur le forum, le jeu considère que c'est le module qui tue le perso dans le OnPlayerDeath, j'ai essayé de mettre le script dans le OnPlayerDying, en remplaçant GetLAstPlayerDied par GetLastPlayerDying, mais cela ne marche pas non plus.
J'ai essayé de placer les effets affectant l'adversaire dans le OnRespawn, mais je suppose qu'un personnage qui est réssuscité ne doit pas être considéré comme respawn-ant, car ça ne marche pas non plus.

Du coup, je me demande si c'est possible (tout comme je me demande s'il est possible d'affecter plusieurs adversaires).

La seule solution de remplacement assez approchante serait de lancer le script si les points de vie du PJ tombent trés bas, pour juste lui permettre de gagner du temps sans le ressusciter, mais cela pose quelques problèmes:
* d'abord, je sais comment faire ce test pour un PNJ ou un monstre, mais je ne vois pas comment l'appliquer à un PJ (et je crains qu'au final, ce soit un peu lourd);
* et surtout, la solution reste trés approximative car un perso n'est pas à l'abri de recevoir une grosse baffe qui va le tuer sans passer par la case script (mettre le script dans le OnPlayerDying pose d'ailleurs un problème similaire); c'est pourquoi il me semble que le OnPlayerDeath est le meilleur endroit.

Alors, euh, comment dire... Heeeeeelp les gars!!!
Dernière édition par Charietto le 12/07/2006 17:12:23; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 12/07/2006 14:21:00 Sujet du message :

Tu peux ptet rendre le joueur immortel pendant 4-5 secondes le temps qu'il retrouve ses esprits.
Sinon un EffectEthearal() pour pas qu'il se fasse attaquer.

Pour le truc "c'est le module qui tue le joueur" c'est seulement en cas de passage par le OnPlayerDying. Et il y a GetLastHostileActor (ou un truc comme ça je sais plus) pour trouver le tueur facilement ou presque.

Le OnPlayerRespawn c'est uniquement pour ceux qui appuient sur le bouton "Respawn" du GUI quand on est mort, ça n'affecte pas les sorts de resu (tu dois les modifier si tu veux toucher à toutes les resurections)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 12/07/2006 16:26:53 Sujet du message :

Un grand merci!

Je ne devais pas avoir les yeux en face des trous pour être passé à côté du GetLastHostileActor! Enfin, je viens d'essayer en remplaçant

NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


par

NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


et il ne veut toujours pas me trouver l'adversaire. Soit je passe complétement à côté d'un truc, soit une fois le perso mort puis ressuscité, il n'est plus possible de détecter quoi que ce soit aux alentours (il y a peut être un délai nécessaire?). S'il te vient une idée, je suis preneur!

En attendant, je vais essayer les méthodes de substitution que tu me suggères (rendre le perso immortel ou éthéré a en plus l'avantage de l'immuniser aux attaques de plusieurs ennemis s'il y a lieu).

Merci encore!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 12/07/2006 16:30:55 Sujet du message :

Hmm, si c'est dans le OnPlayerDeath que t'as essayé, OBJECT_SELF c'est le module, donc a peu pas marcher, faut que le parametre soit le joueur.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 12/07/2006 17:11:13 Sujet du message :

Ca marche (en remplaçant OBJECT_SELF par oDestinBenef)!
Joie, bonheur, extrême félicité...
Merci beaucoup!
 
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 26.865ms