[Question] Save des pv's : sur quel évènement ?

Répondre
Partager Rechercher
Bonjour à tous ,

J'ai lu plusieurs fils traitant de la sauvegarde des points de vie des joueurs. Cependant je reste dans le flou.

Notamment : j'ai lu plusieurs exemples de script se lançant lors de l'évènement "OnClientLeave"...
Pourtant il me semblait bien avoir lu ailleurs que cet évènement n'était pas au point quant à la sauvegarde de données.
Après vérification, en effet il était précisé dans divers posts épars que le "client" sortant était en fait considéré comme déjà sorti. Ce qui empêche de récupérer/stocker sur lui, ou un item de son inventaire, ou encore dans la BDD, une quelconque valeur... Cette méthode est donc à proscrire... (vraiment dommage ).

Ce qui m'amène à me poser la question suivante :

Quel peut être le moyen de sauvegarder les Pv's du joueur si le OnClientLeave ne nous le permet pas ?
Le OnHeartBeat du module ou d'un plaçable, ai je vu sur d'autre posts... Mais cette méthode ne serait elle pas un peu gourmande en terme de ressource ? Ou est ce une légende "urbaine" ?


Toute novice que je suis je n'y vois pas bien clair. Mais vous sans doute que si ! Le cas échéant quel(s) conseil(s) pourriez vous me donner ?
Désolée de rebattre un sujet déjà maintes fois évoqués, mais j'avoue que ce que j'ai pu lire m'a laissée fort perplexe ^^.

Merci par avance pour vos éclaircissements .
La meme réponse vient souvent a ce genre de question : Fait ce qui te semble le mieux pour ton module.
En gros les options :
- Régulièrement avec un script qui démarre sur le OnModuleLoad et fait des boucle avec ExecuteScript (en se rappelant lui meme)
- Sur un objet activable par les persos.
- Sur le OnRest des PJ (donc mod)
- Sur certains placable, a la façon "borne de sauvegarde".
- Sur le OnEnter de certaines zones.
etc.

En fait tu peux sûrement trouver bcp de possibilités.

Moi je sauve les PV et la Loc régulièrement pour le moment en démarrant sur le OnModuleLoad, et je combine avec un objet à activer par les PJ pour sauver leur personnage. Mais je ne suis pas sur de garder cela comme ça.


Citation :
Pourtant il me semblait bien avoir lu ailleurs que cet évènement n'était pas au point quant à la sauvegarde de données.
Après vérification, en effet il était précisé dans divers posts épars que le "client" sortant était en fait considéré comme déjà sorti. Ce qui empêche de récupérer/stocker sur lui, ou un item de son inventaire, ou encore dans la BDD, une quelconque valeur... Cette méthode est donc à proscrire... (vraiment dommage ).
Moi je sauvegarde les données dans l'évènement OnClientLeave et cela fonctionne parfaitement. Il faut bien comprendre un point très important à mon sens.

Si le script qui est dans cet évènement du OnClientLeave interroge le client, c'est clair qu'il ne va rien récupérer du tout, car le personnage n'existera plus.

Cependant, si Bioware a créé cet évènement, ce n'est pas juste pour le "fun" !

Un système qui enregistrerait certaines variables autre part que sur le PJ ou sur un item indroppable, pourrait utiliser correctement cet évènement et enregistrerait dès lors parfaitement les variables liées au personnage sorti. D'autre part, c'est dans cet évènement que l'on doit procéder au nettoyage de l'ensemble des variables liés au personnage sortant.
@Morethil

J'ai opté pour la persistance via item indroppable, la majeure partie du temps.
Pour la sauvegarde du perso et de sa position, pas de soucis, j'avais trouvé ici toutes les réponses à mes questions et ai pu mettre un place ce qui me paraissait adéquat .

En revanche pour la save des PV's, j'ai bien pensé à boucler via le OnMouleLoad, mais je restais perplexe quant à ce fameux "OnClientLeave" ... C'est à dire :


@Mickey974

Je me suis bien sûr dit que cet évènement n'était pas là juste pour faire joli dans le décor C'est ce qui m'a amenée d'ailleurs à ouvrir ce sujet, les divers posts sur la question semblant contradictoires à mes yeux.

Et là, dans ta réponse, il y a quelque chose que je ne saisit pas Je fonctionne via un item indroppable (voir plus haut ^^ ), et mon idée préalable était de récupérer les PV et des les stocker sur cet item... seulement :

Citation :
Moi je sauvegarde les données dans l'évènement OnClientLeave et cela fonctionne parfaitement. [...]

Si le script qui est dans cet évènement du OnClientLeave interroge le client, c'est clair qu'il ne va rien récupérer du tout, car le personnage n'existera plus.
Pour récupérer les PV's du joueur à sa déco, il faut bien que j'interroge le client (le joueur donc) non ? Si ce n'est pas faisable, du même coup c'est impossible de stocker les-dites données sur l'item possédé par le PJ, puisqu'il n'est plus là, le PJ ...
Dans ce cas comment serait il possible que :

Citation :
Un système qui enregistrerait certaines variables autre part que sur le PJ ou sur un item indroppable, pourrait utiliser correctement cet évènement et enregistrerait dès lors parfaitement les variables liées au personnage sorti.


En fait j'avais quand même essayé de stocker les PV sur l'item indroppable lors de la sortie... Au cas où ... Et ça n'a pas fonctionné... Ce qui tend à prouver, une fois de plus, que la récupération de données sur le PJ sortant est vouée à l'échec (ou alors que je suis vraiment une supra quiche... remarque euhh.... oui c'est pas exclu ).

J'ai dû rater un wagon ou me méprendre sur le sens de ton explication . Pourrais tu m'expliciter ça de nouveau s'il te plait ? : ))
Ce qui revient au même. Que ce soit sur le PJ ou sur autre chose, quand le joueur déconnecte, on n'a plus accès aux infos. Donc, il faut les sauvegarder cycliquement ou de façon événementielle avant la déconnexion.

(Edit : réponse destinée à Mickey )

@Altariel :
"Save des pv's : sur quel évènement ?"

Sur tout évènement susceptible de les changer (notamment à la mort ou dans les combats etc...), ou alors de façon cyclique (ce qui reste le plus simple car le moins prise de tête).
@Azmathiel

Ok, donc on en revient bien (par exemple) à une boucle sur le OnUserDefined, appelée par le OnModuleLoad etc...
Tes précisions confirment mon point de vue sur la question du OnClientLeave.

Merci beaucoup


Mais quand même je suis curieuse de lire la réponse de Mickey ^^ Elle m'intrigue

Citation :
Ce qui revient au même. Que ce soit sur le PJ ou sur autre chose, quand le joueur déconnecte, on n'a plus accès aux infos. Donc, il faut les sauvegarder cycliquement ou de façon événementielle avant la déconnexion.
Ce n'est pas tout à fait pareil. Car si on stocke les variables sur le PJ lui même, là on y a plus accès du tout lorsqu'il déconnecte. Mais si ces variables sont stockés ailleurs, là par contre ont y a toujours accès. Moi je peux récupérer les PV d'un personnage qui a déconnecté. Effectivement, il faut faire une sauvegarde cyclique au préalable dans ces variables. Mon système fonctionne comme ca.
@mickey



Euhh ... Je reprends :

Dans le but avoué de sauvegarder les point de vie du joueur à sa déco je soulignais (et accessoirement cherchais confirmation auprès de vous tous) l'inefficacité d'un script de récupération/stockage d'une valeur positionné sur l'évènement OnClientLeave...

En résumé un :

SetLocalInt(oJoueur, "PVsave", nPV_à_la_déco)

Ne récupère pas l'entier "nPV_à_la_déco", car oJoueur est considéré comme déjà partit. Par conséquent le "SetLocalInt" ne "set" rien du tout...


A cela tu as répondu :

Citation :
Moi je sauvegarde les données dans l'évènement OnClientLeave et cela fonctionne parfaitement.
Ce que j'ai voulu savoir en lisant ça, c'est comment diantre tu parvenais à récupérer les données à la déco, lors de ce fameux OnClientLeave? (cf. mon second post pour l'intégralité, je ne vais pas tout recommencer ici )

Là, tu dis que :

Citation :
si on stocke les variables sur le PJ lui même, là on y a plus accès du tout lorsqu'il déconnecte.

Mais si ces variables sont stockés ailleurs, là par contre ont y a toujours accès. Moi je peux récupérer les PV d'un personnage qui a déconnecté. Effectivement, il faut faire une sauvegarde cyclique au préalable dans ces variables.
C'est bien ce que je disais : Récupération et stockage des points de vie (par exemple hein ) est impossible sur cet évènement.

Finalement tu ne récupères ni ne sauves rien en passant par le OnClientLeave.

Tu passes toi aussi par une boucle (je présume ^^ ) appelée dans un autre évènement que le sus-nommé, et ce de façon régulière...

Méthode qui s'avère bien être la seule envisageable...
Mickey essaie de nous enfumer !!! Mais ça ne prend pas !

En fait, ce qu'il essaie d'expliquer, c'est qu'il stocke toutes les données relatives aux personnages ailleurs que sur eux-même. De cette façon, il peut y accéder même une fois que le joueur a déconnecté. C'est élégant et ça a un côté pratique.
A toi de voir si ça en vaut la peine. Pour ce qui est de la sauvegarde elle-même, il n'y a pas d'autre façon de procéder que celles citées ci-dessus quel que soit le système utilisé (base de données, item etc...).
(Edit/Rajout : ) Par contre, les techniques pour y arriver sont, elles, innombrables.
@Azmathiel

lol

Oui c'est en effet la seule autre alternative que je voyais à son explication. Ca revient sensiblement au même que stocker la valeur sur le PJ, après en effet c'est une question de choix

Tes réponses m'ont permis de mettre un point final au chapitre OnClientLeave qui restait pour moi vaseux, ainsi que de m'aiguiller sur la manière de gérer la seule autre option.


Merci : ))


Bah , vous savez je sors de la plage et le soleil m'a un peu défoncé la "cabeza" . Donc mille excuses si j'ai un peu de mal à exprimer mes pensées sur ce clavier. Heureusement qu'Azmathiel est là et il a parfaitement expliqué ma manière de procéder.

C'est effectivement par le biais d'un script récursif que je sauvegarde toutes les variables liés au personnage sur l'objet module (et non sur l'objet personnage lui-même), pendant son temps de jeu et donc à intervalle régulier. Lorsque le personnage quitte le monde, il m'est alors parfaitement possible de connaître avec exactitude n'importe quel paramètre. Et donc c'est bien dans l'évènement OnClientLeave que je pratique ma dernière sauvegarde des paramètres du personnage et qu'ensuite je détruis toutes les variables propres au personnage qui vient de quitter le module.

*espère être clair - relis 3 fois*
Pour les histoires de variables stoquées dans l'inventaire des PJ, sur le onClientLeave elle sont effectivement accessibles, mais en lecture seul. Impossible de modifier ou de détruire une variable dans cet évenement.... sans détruire l'objet lui meme.
Ainsi, une solution possible est d'enregistrer tes données autre part (sur des petits drapeaux qui auraient le nom de ton joueur par exemple, ou bien en BD si tu les veux persistants).... pour les récupérer éventuellement sur le onEnter...
D'accord ^^


Merci pour toutes ces précisions Soyez sûr que je ne manquerais pas de venir vous enquiquiner la prochaine fois je me heurterais à une incompréhension "scriptienne"
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés