Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Comment effacer un personnage du serveur

Par Blam le 6/2/2003 à 13:04:48 (#3182952)

Comment gérer l'effacement d'un personnage mort d'un serveur, ou le déplacer hors du dossier perso du serveur.
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)

Ben suffit de créer une banque d'identifiant de joueurs morts, ensuite sur le OnEnter tu vérifie si le PJ entrant correspond à l'une des entrées et tu le banit si oui.:o

et plus concrêtement

Par Blam le 6/2/2003 à 13:21:23 (#3183095)

tu fais ça comment ?
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)

Plus concrètement ?

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)

Ben voila tu me rends service en me renseignant puis tu me fait une sale réputation !!!!
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)

Est il possible de m'expliquer cela clairement SVP car je n'y comprends rien e rien


//:: 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)

Comment gérer l'effacement d'un personnage mort d'un serveur, ou le déplacer hors du dossier perso du serveur.
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)

Sur le OnDeath :


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)

Désolé eMRaistlin, mais ton script ne va pas marcher :
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)

euh, jedaï... tu es sur, la ?

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)

Presque sûr...:)

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)

100% d'accords : les fonction de styn' sont parfaites, mais je voulais impro un truc pour blam en attendant que je teste un truc ce soir (car je suis quand meme etonné par ton affirmation sur les variables... je te crois, mais j'ai besoin que mes yeux le voient ^^)

Par Jedaï le 7/2/2003 à 18:16:36 (#3191958)

Inutile, tes yeux ne le verront pas : je me suis effectivement planté :D
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)

mouarfff, tu m'as mis 3 de tension, la...


LoL ^^

bande d'affeux !

Par Blam le 7/2/2003 à 19:59:45 (#3192759)

j'ai l'impression d'etre un malade qui sait pas ce qu'il a
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)

Moi je propose la trépanation, comme ça si il a mal quelque pars, ben il le saura pas :)

Jaha Effect :D

un seul mot

Par Blam le 7/2/2003 à 20:23:24 (#3192915)

SA-DI-QUE !

Par eMRaistlin le 7/2/2003 à 22:54:03 (#3193789)

en gros, ca suffit amplement pour un non persistant :

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)

oui et je trouve même que cela ne sert pas à grand chose de le mettre en flag si certains voudraient quand même le faire, car si on peut éviter de remplir les logs de 20000 sauvegardes :).

JOL Archives 1.0.1
@ JOL / JeuxOnLine