La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 27/11/2024 21:29:47


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
arfost
Acolyte
Inscrit le: 24 Fév 2007
Messages: 20
Répondre en citant
Posté le : 14/07/2007 14:05:15 Sujet du message : [resolu] Recherche du meurtrier (hou le vilain)

Bonjour a tous.

Je travail sur un module persistant pour never 1 avec un ami, et on avance tres bien (on a presque tout mapper, ça devrait plus tarder a voir le jour)
Etant le scripteur en chef (avec 0 personnes sous mes ordres ^^) je m'attaque en ce moment au script de respawn. On a decidé un systeme simple.
La seule chose c'est qu'on veut faire en sorte que si le joueur est tué par un pj il ne soit pas rez dans la salle de respawn, mais sur place. En effet, le rp doit continuer (on considere comme la plus part des serveurs qu'une mort suite a un combat correspond a un KO, le joueur vainqueur choisi ensuite ce qu'il fait. Et un systeme de respawn sur place via script permet d'eviter d'obliger a avoir des parchos de rez pour ça)

Pour ce systeme j'ai fais un truc tout simple de verification de variable sur le pj dans le OnRespawn (qui marche) et dans le OnDeath, je comptais recupere le tueur et tester si il s'agit d'un pj ou non pour attribuer la variable. (Dans un "if")

Sauf que j'arrive pas a recuperer le meurtrier. La police scriptique neveresque semble bien mauvaise, j'ai tenté la fonction "GetLastKiller()", ça donne rien.
Le reste de mon script est bon (j'ai testé avec "1" en condition dans mon If, ça marche.)

Donc s'il vous plait, j'aimerais votre aide. Comment on peut savoir qui a tué un pj.
Dernière édition par arfost le 29/07/2007 20:02:02; édité 2 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
arfost
Acolyte
Inscrit le: 24 Fév 2007
Messages: 20
Répondre en citant
Posté le : 14/07/2007 14:59:09 Sujet du message :

Je rajoute une autre petite question sans rapport. Je suis entrain de faire un script gerant les reactions des animaux de compagnie en fonction de certaines caracteristiques des pjs (etre un maitre bleme c'est mal vu, il vaut mieu le cacher, alors on s'est dit que ce serait cool que les animaux est certaines reaction aleatoire devant certaines race ou classes.)
Bref, je fouille dans les constantes de classe et je trouve
CLASS_TYPE_DRAGON_DISCIPLE
CLASS_TYPE_DRAGONDISCIPLE

Et c'est comme ça pour presque toute les classes en plusieurs mots. Quelqu'un sait pourquoi et laquelle il faut utiliser ?
Parce que pour l'instant je teste les deux, mais a mon avis c'est pas le mieu.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Angel Rots
Novice
Inscrit le: 13 Juil 2007
Messages: 8
Répondre en citant
Posté le : 14/07/2007 15:01:29 Sujet du message :

Salut;

Ca marche pas si tu mets GetLastKiller() ? Je sais que cette fonction existe...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Angel Rots
Novice
Inscrit le: 13 Juil 2007
Messages: 8
Répondre en citant
Posté le : 14/07/2007 15:04:36 Sujet du message :

Pour ta deuxième question, après avoir fait un petit tour sur le nwnexplorer et dans le 2DA classe, je pense qu'il vaut mieux utiliser le fichier avec deux mots (CLASS_TYPE_DRAGON_DISCIPLE).
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
arfost
Acolyte
Inscrit le: 24 Fév 2007
Messages: 20
Répondre en citant
Posté le : 14/07/2007 15:13:36 Sujet du message :

Hum desole, j'avais fais une erreure en tapant. C'était bien "GetLastKiller" que j'avais tenté.

Apres renseignement il semblerait que cette fonction renvois le tueur de l'appelant. Dans le cas des evenements modules l'appelant doit etre le module, ce qui expliquerait pourquoi ça foire. J'arrive pas a trouver de solutions de remplacement.

Et merci pour l'autre reponse.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Angel Rots
Novice
Inscrit le: 13 Juil 2007
Messages: 8
Répondre en citant
Posté le : 14/07/2007 18:17:24 Sujet du message :

Et si tu essaye avec GetLastAttacker ou une fonction du genre ? Ca marche peut être. Sinon poste le script pour voir.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 14/07/2007 18:38:56 Sujet du message :

GetLastDied je crois pour reconnaitre le mort et,
GetLastHostilActor (un truc comme ça, j'ai pas l'éditeur devant les yeux, tape "hostil" dans le filtre) pour le tueur. La t'es sur de tombé sur le joueur Wink
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Angel Rots
Novice
Inscrit le: 13 Juil 2007
Messages: 8
Répondre en citant
Posté le : 14/07/2007 18:51:11 Sujet du message :

C'est GetLastHostileActor

NWScript :
// Get the last object that was sent as a GetLastAttacker(), GetLastDamager(),
// GetLastSpellCaster() (for a hostile spell), or GetLastDisturbed() (when a
// creature is pickpocketed).
// Note: Return values may only ever be:
// 1) A Creature
// 2) Plot Characters will never have this value set
// 3) Area of Effect Objects will return the AOE creator if they are registered
//    as this value, otherwise they will return INVALID_OBJECT_ID
// 4) Traps will not return the creature that set the trap.
// 5) This value will never be overwritten by another non-creature object.
// 6) This value will never be a dead/destroyed creature
object GetLastHostileActor(object oVictim=OBJECT_SELF)
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
arfost
Acolyte
Inscrit le: 24 Fév 2007
Messages: 20
Répondre en citant
Posté le : 14/07/2007 19:56:32 Sujet du message :

Je viens helas de tester cette solution, et ça ne marche pas mieu. Je vous livre mon code. J'espere que vous arriverez a comprendre d'ou viens mon erreur, parce que la je seche.

NWScript :

    object oPlayer = GetLastPlayerDied();
    object oTueur = GetLastHostileActor(oPlayer);
    // * increment global tracking number of times that I died
    SetLocalInt(oPlayer, "NW_L_PLAYER_DIED", GetLocalInt(oPlayer, "NW_L_PLAYER_DIED") + 1);

    // petite modif pour gerer un respawn en cas de mort par pj

    if (GetIsObjectValid(oTueur)) //debug
          FloatingTextStringOnCreature("il est valide",oPlayer); //debug

    if (GetIsPc(oTueur)){
        FloatingTextStringOnCreature("vous avez ete tue par un pj, votre respawn aura lieu hrp de maniere a ce que vous puissiez poursuivre votre rp",oPlayer);
        SetLocalInt(oPlayer,"kill_by_pj",TRUE);
    }
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.


Le "GetIsValidObject" de debug le considere apparement comme invalid (en tout cas, la phrase s'affiche pas)
Et la condition donnant l'item ne passe pas. J'ai fais le test en mettant "1" en condition, la ça passe.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 14/07/2007 20:19:29 Sujet du message :

Ce n'est pas GetIsPc mais GetIsPC. Attention au majuscule, compile tes scripts avec F7, tu aurais eu la remarque.

De plus, pour GetIsObjectValid, tu dis :

Si le tueur est un objet valid, alors on envoit un message au PJ mort "il est valid", ça serait pas plutot :

Si le PJ mort est un objet valid, alors on envoit un message au tueur "Il est valid" ?

Essaie ça :

NWScript :
object oDeath = GetLastPlayerDied();
object oKiller = GetLastHostileActor(oPlayer);
SetLocalInt(oDeath, "NW_L_PLAYER_DIED", GetLocalInt(oDeath, "NW_L_PLAYER_DIED") + 1);

if(GetIsObjectValid(oDeath))
{
FloatingTextStringOnCreature("L'objet en question est VALID",oKiller);
}
if(GetIsPC(oKiller) && GetIsPC(oDeath))
{
FloatingTextStringOnCreature("",oDeath);
SetLocalInt(oDeath,"kill_by_pj",TRUE);
}
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.


J'ai changé les surnoms des variables en oDeath et oKiller pour plus d'eclairecissement et j'ai rajouté la ligne GetIsPC(oDeath) pour confirmé que c'est bien un combat ENTRE deux JOUEURs pour pas que le serveur confonde avec les PNJs.

Voila
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
arfost
Acolyte
Inscrit le: 24 Fév 2007
Messages: 20
Répondre en citant
Posté le : 18/07/2007 20:39:59 Sujet du message :

J'ai enfin pu acceder au forum et tester le script (problemes d'informatique qui m'ont retardés)
La fonction marche finalement, donc je vous remercie tous pour vos reponses. Le module qu'on devellope viens encore de faire une petite avancée, ça fait plaisir.

Donc merci encore a tous ceux qui ont repondu.
 
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 34.145ms