Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Comment effacer un personnage du serveur
Comment effacer un personnage du serveur
Par Blam le 6/2/2003 à 13:04:48 (#3182952)
Ou tout simplement le rendre injouable meme si il est visible
Ceci a la mort et déconnections du personnage ?
Si vous avez une idée, car j'ai rien trouvé la dessus et je sais que ca marche parfaitement.
(oui ca sent le hardcore)
Par Jedaï le 6/2/2003 à 13:18:17 (#3183064)
et plus concrêtement
Par Blam le 6/2/2003 à 13:21:23 (#3183095)
encore que l'idée que tu m'a donné sur le fait de créer un objet sur le joueur qui sort pour l'identifier en rentrant et l'envoyer sur un waypoint pourrait marcher avec un "paradis"
Par Jedaï le 6/2/2003 à 13:29:46 (#3183169)
Utilise la bibliothèque de flag de Tyn' (disponible dans le persistant sur les scripts) pour mettre une variable sur le joueur quand il meurt et tu retire cette variable quand il ressuscite. Si il déco reco, la variable sera toujours valable et tu le renverras faire joujou au paradis sur le OnClientEnter (je me serai plutôt attendu à l'enfer de ta part mais bon...).:D
Note que tu n'est pas obligé d'utiliser le PWUM avec cette bibliothèque, il te suffit de remplacer tous les "PWUM" par des "Local".:)
Comment ca ? de ma part ?
Par Blam le 6/2/2003 à 13:35:20 (#3183212)
je suis fondamentalement bon, si je veux les envoyer en enfer, faut qu'ils passent par le paradis, pour voir la différence !!!
c'est vrai quoi ! c'est le B A BA du sadique ca,
Des fois je me demande si tu me prendrais pas pour un newbie en tortionnaire de joueurs !!!!
;)
Par contre en scripts, tu as parfaitement raison, je viens de lire le truc de Tyn', c'est de l'hebreu pour moi. Rien compris, mais alors rien de rien.
Peut on m'expliquer cela ?
Par Blam le 6/2/2003 à 19:11:33 (#3184924)
//:: Definition des fonctions
// Fonction Althea
// Recupere le nom d'une variable flaguee sur un joueur
string GetFlagName(object oPlayer, string sFlag);
// Fonction Althea
// Defini le flag sFlag sur le joueur oPlayer a la valeur nValue
void SetFlagInt(object oPlayer, string sFlag, int nValue);
// Fonction Althea
// Defini le flag sFlag sur le joueur oPlayer a la valeur fValue
void SetFlagFloat(object oPlayer, string sFlag, float fValue);
// Fonction Althea
// Defini le flag sFlag sur le joueur oPlayer a la valeur sValue
void SetFlagString(object oPlayer, string sFlag, string sValue);
// Fonction Althea
// Defini le flag sFlag sur le joueur oPlayer a la valeur lValue
void SetFlagLocation(object oPlayer, string sFlag, location lValue);
// Fonction Althea
// Recupere le flag sFlag sur le joueur oPlayer
int GetFlagInt(object oPlayer, string sFlag);
// Fonction Althea
// Recupere le flag sFlag sur le joueur oPlayer
float GetFlagFloat(object oPlayer, string sFlag);
// Fonction Althea
// Recupere le flag sFlag sur le joueur oPlayer
string GetFlagString(object oPlayer, string sFlag);
// Fonction Althea
// Recupere le flag sFlag sur le joueur oPlayer
location GetFlagLocation(object oPlayer, string sFlag);
string GetFlagName(object oPlayer, string sFlag)
{
//Verification des informations fournies
string sReturn;
if(GetIsPC(oPlayer) && sFlag != ")
{ //Execution du script
//Recuperation des informations du joueur
string sPlayerName = GetPCPlayerName(oPlayer);
string sName = GetName(oPlayer);
string sPublicKey = GetPCPublicCDKey(oPlayer);
//Definition de la valeur
sReturn = sPlayerName+sPublicKey+sName+sFlag;
}else{ //Retour d'une erreur
//Definition de la valeur
sReturn = "ERREUR DANS L'APPEL DE LA FONCTION GetFlagName";
}
//Renvoit de la valeur
return sReturn;
}
void SetFlagInt(object oPlayer, string sFlag, int nValue)
{
Debug(oPlayer,"Flag "+sFlag+" du personnage "+GetName(oPlayer)+" defini a "+IntToString(nValue));
SetPWUMInt(GetFlagName(oPlayer,sFlag),nValue); //Enregistrement de la variable
}
void SetFlagFloat(object oPlayer, string sFlag, float fValue)
{
Debug(oPlayer,"Flag "+sFlag+" du personnage "+GetName(oPlayer)+" defini a "+FloatToString(fValue));
SetPWUMFloat(GetFlagName(oPlayer,sFlag),fValue);
}
void SetFlagString(object oPlayer, string sFlag, string sValue)
{
Debug(oPlayer,"Flag "+sFlag+" du personnage "+GetName(oPlayer)+" defini a "+sValue);
SetPWUMString(GetFlagName(oPlayer,sFlag),sValue);
}
void SetFlagLocation(object oPlayer, string sFlag, location lValue)
{
Debug(oPlayer,"Flag "+sFlag+" du personnage "+GetName(oPlayer)+" modifie");
SetPWUMLocationC(GetFlagName(oPlayer,sFlag),lValue);
}
int GetFlagInt(object oPlayer, string sFlag)
{
return GetPWUMInt(GetFlagName(oPlayer,sFlag));
}
float GetFlagFloat(object oPlayer, string sFlag)
{
return GetPWUMFloat(GetFlagName(oPlayer,sFlag));
}
string GetFlagString(object oPlayer, string sFlag)
{
return GetPWUMString(GetFlagName(oPlayer,sFlag));
}
location GetFlagLocation(object oPlayer, string sFlag)
{
return GetPWUMLocation(GetFlagName(oPlayer,sFlag));
}
Car la je n'y comprends absolument rien!
Allo il y a qqn par ici ?
Par Blam le 7/2/2003 à 13:56:06 (#3189876)
Ou tout simplement le rendre injouable même si il est visible
Ceci a la mort et déconnections du personnage ?
Si vous avez une idée, car j'ai rien trouvé la dessus et je sais que ca marche parfaitement.Comment gérer l'effacement d'un personnage mort d'un serveur, ou le déplacer hors du dossier perso du serveur.
excusez moi de me citer et de reposer inlassablement la meme question mais je bute la dessus et cela me taraude l'esprit.
j'ai bien été voir ce qui a été fait mais c'est pas tres explicite
Par eMRaistlin le 7/2/2003 à 14:30:07 (#3190147)
void main()
{
SetLocalInt(GetLastPlayerDied(),"Dead",TRUE);
}
Sur le OnPCRespawn (et sur les sorts de resurection (+onrest, par securite))
void main()
{
SetLocalInt(GetLastRespawnButtonPresser(),"Dead",FALSE); //GetLastPCRested / GetAttemptedSpellTarget
}
Et enfin, dans le OnEnter :
void main()
{
If (GetLocalInt(GetEnteringObject(),"Dead")==TRUE)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),GetEnteringObject());
}
}
Voila : cela ne sert que sur une même cession du serveur.
Si tu veux de la persistance, comme l'as dit Jedaï, tu doit ajouter a cela ton systeme de persistance (par exemple, PUMA en modifiant le SetLocalInt par SetPWUMInt()
Par Jedaï le 7/2/2003 à 16:43:26 (#3191204)
la variable locale sur le PC sera supprimé dès qu'il se déconnectera, donc...:(
C'est pourquoi j'ai conseillé à Blam les flags, puisque ceux-ci ne disparaissent pas avec la déconnexion du joueur.:)
@ Blam > Désolé d'avoir tardé à répondre mais j'ai eu un horaire chargé, je vais mettre ma "réponse" sur un post indépendant puisque celle-ci consistera en une modification de la bibliothèque de Tyn' permettant de l'utiliser dans tous les modules. (avec quelques explications en plus):p
Par eMRaistlin le 7/2/2003 à 16:59:06 (#3191317)
De memoire, la variable etait stockée sur le PJ durant le UP serveur, que celui ci se connecte/deco/reco ou qu'il reste connecte...
Dans le doute, Blam, fais ca :
au lieu de
GetLocalInt(GetEnteringObject(),"Dead")
tu met
GetLocalInt(GetModule,"Dead_"+GetName(GetEnteringObject()))
ca marchera aussi
Oublie pas de modifier les Set aussi ^^
Par Jedaï le 7/2/2003 à 17:25:11 (#3191544)
Mais la solution que tu propose là, eM est une solution non-standardisé qu'on est obligé de remettre en oeuvre et de spécialiser pour chaque variable dont on désire éviter la perte lors d'une déco-reco. :(
Alors que justement la bibliothèque de Tyn' (modifié par mes soins pour ne pas nécessiter le PWUM) fait ça automatiquement, sans qu'on ait à s'en préoccuper et avec une plus grande sureté en plus (puisque deux joueurs peuvent avoir le même nom, la bibliothèque de Tyn' emploie un identifiant plus sûr, combinaison de Player name, nom du PJ et clé publique).:p
Je pense que c'est une très bonne idée que d'utiliser cette bibliothèque, plutôt que de trouver une solution personnelle à chaque fois qu'un problème identique se pose, inutile de réinventer la roue !! :D
Par eMRaistlin le 7/2/2003 à 18:06:22 (#3191886)
Par Jedaï le 7/2/2003 à 18:16:36 (#3191958)
Du coup j'ai dit plein de connerie, la bibliothèque que j'ai posté ne sert à rien, etc...
Ton script marche très bien et la bibliothèque de Tyn' n'as d'intérêt que dans la mesure où l'on utilise le PWUM ou le Puma...:rolleyes:
Par eMRaistlin le 7/2/2003 à 19:47:36 (#3192671)
LoL ^^
bande d'affeux !
Par Blam le 7/2/2003 à 19:59:45 (#3192759)
et qui vois deux toubibs pas daccord
il faut lui enlever la rate cher confrere
mais non cela viens du poumon gauche qui pese trop sur le coeur
pas du tout c'est la rate et il faut aussi l'amputer du pied
ect ect.
(on dit courir comme un dératé, mais avec un pieds en moins ca rééquilibre ;) )
Par Jaha Effect le 7/2/2003 à 20:08:57 (#3192818)
Jaha Effect :D
Par eMRaistlin le 7/2/2003 à 22:54:03 (#3193789)
Sur le OnDeath :
PHP:--------------------------------------------------------------------------------
void main()
{
SetLocalInt(GetLastPlayerDied(),"Dead",TRUE);
}
--------------------------------------------------------------------------------
Sur le OnPCRespawn (et sur les sorts de resurection (+onrest, par securite))
PHP:--------------------------------------------------------------------------------
void main()
{
SetLocalInt(GetLastRespawnButtonPresser(),"Dead",FALSE); //GetLastPCRested / GetAttemptedSpellTarget
}
--------------------------------------------------------------------------------
Et enfin, dans le OnEnter :
PHP:--------------------------------------------------------------------------------
void main()
{
If (GetLocalInt(GetEnteringObject(),"Dead")==TRUE)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),GetEnteringObject());
}
}
--------------------------------------------------------------------------------
Voila : cela ne sert que sur une même cession du serveur.
Si tu veux de la persistance, comme l'as dit Jedaï, tu doit ajouter a cela ton systeme de persistance (par exemple, PUMA en modifiant le SetLocalInt par SetPWUMInt()
Par RAT le 8/2/2003 à 2:32:42 (#3194752)
JOL Archives 1.0.1
@ JOL / JeuxOnLine