Inventaire

Ackak
Messages : 7348
Inscription : 18 déc. 2005, 19:31

Inventaire

Message par Ackak »

TonyFlow est venu me parler de ce sujet :
http://www.landes-eternelles.com/phpBB/ ... 21&t=15100

Je lui ai dit que je pensais qu'il fallait mieux voir ce changement du côté serveur que du côté client (ce qui nous obligerait à gérer un fichier objet pour le client).

Vous pensez que cela est faisable ?
Celui qui apprend quelque chose de moi enrichit son savoir sans réduire le mien, tout comme celui qui allume sa chandelle à la mienne se donne de la lumière sans me plonger dans l'obscurité.
-- Thomas Jefferson

Avatar de l’utilisateur
TonyFlow
Messages : 985
Inscription : 02 mai 2007, 09:26
Localisation : Normandie / Pierre-Blanche
Contact :

Re: Inventaire

Message par TonyFlow »

L'implémentation côté serveur me parait bien, si vous êtes partants pour vous y coller ;)

Techniquement au niveau du client, envoyer une demande au serveur pour équiper ou déséquiper un item revient toujours à un déplacement d'une case de l'inventaire vers une autre (les cases 36 à 43 correspondant aux objets portés) : MOVE_INVENTORY_ITEM src_pos dst_pos

L'implémentation de cette possibilité d'équipement facile (assistée par le serveur) revient à ne pas avoir à lui spécifier la case de destination : le serveur doit juste savoir que la destination est une case d'équipement, à lui de trouver laquelle et d'éventuellement la libérer.

Je propose donc que ce cas particulier soit traité par le serveur en lui indiquant une destination spéciale : 44 ou -1 (255) par exemple. Ainsi tant que la destination est comprise entre 0 et 43, rien ne change, il continue à traiter la demande comme actuellement. Dans le cas particulier où elle vaut disons 255, alors s'enclenche le nouvel algo à mettre en place pour gérer intelligement l'équipement.
Ceci devrait permettre à la fois de compartimenter facilement le code coté serveur, sans tests superflu, laissant le déplacements classiques en dehors de tout ça. De même côté client celà en fait une requête particulière qui serait envoyée sous condition (possibilité d'en faire une option désactivable).

Voici à quoi pourrait ressembler l'algo du serveur :
  • 1. Déterminer le type de l'équipement désigné comme source
  • 2. Parcourir les 8 cases d'équipement pour trouver ceux qui seraient d'un type similaire. Il peut y en avoir plusieurs (ex: un baton prend la place d'un bouclier et d'une épée). Pour chacun :
    • 2a. Si c'est le premier objet porté incompatible trouvé, mémoriser la case qu'il occupe
    • 2b. Rechercher une case de destination dans l'inventaire pour pouvoir le retirer (case libre ou éventuellement case occupée par le même objet s'il est empillable)
    • 2c. S'il n'y a aucune case dispo pour le déséquiper, alors abandon en retournant un message au client du genre "Il n'y a pas la place nécessaire dans votre inventaire pour échanger les équipements"
    • 2d. Sinon on effectue le déplacement de l'objet équipé, en mémorisant sa case de destination si c'est le 1er traité
  • 3. Déterminer dans quelle case d'équipement placer l'objet source : si un objet a été déséquiper autant prendre sa place (d'où l'intéret de la mémorisation du 2a), sinon rechercher la première case d'équipement libre (à priori y'en a forcément une, si à l'avenir elles pourraient être encore toutes occupées, prévoir d'abandonner en retournant un message au client)
  • 4. Effectuer le déplacement de l'objet source vers la case d'équipement trouvée
  • 5. Cerise sur le gâteau : si pour celà il a fallut déséquiper un objet, il serait agréable de finir en le rangeant dans l'inventaire à l'endroit où se trouvait l'objet source (d'où l'intérêt de la mémorisation du 2d). Attention à cause des objets empillable, cette dernière action se ferait sous condition que la case source est bien devenue libre.
Le dernier point est facultatif mais correspond à l'une des améliorations que j'ai apporté sur la version 1.6.0.2 : avec l'option permettant le changement d'équipement (qui ne marche qu'en lachant un objet sur sa cible contrairement à cette évolution) le client prend la peine de replacer l'objet retirer dans la case de l'objet à présent équipé. Celà permet de garder un inventaire bien rangé, ça ne coute pas grand chose et je pense que c'est appréciable d'obtenir au final un réel échange d'emplacement.


Je reste disponible si vous souhaitez en discuter ainsi que pour mettre en place les modifs nécessaires côté client.
Just in case you never knew I miss you Slim, I love you too Oh! See my heart, it's black and blue When I die I will find you... My lovely man
But when you walk that walk and talk that talk You do it oh so well She's stone cold bush
Let me stand next to your Fire, my Pretty Little Ditty

Répondre