JeuWeb - Crée ton jeu par navigateur
Changement de table - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Changement de table (/showthread.php?tid=2970)



Changement de table - phenix - 27-08-2008

Bonjour à tous,

Voila j'explique mon problème:

Je possède une table "serviteur_inventaire" qui contient l'id d'un serviteur, sont quartier, sa ville, sa position et l'id d'un objet (Un serviteur étant une créature que le joueur traîne derrière lui) .
Quand un serviteur meurt, les objets qu'il porte doivent tomber sur le sol donc, je dois passer, l'id de l'objet, le quartier, la ville, la position et l'id des objet qu'il porte dans la table objet_sol.

Je voudrais savoir si la seul solution est de faire un SELECT, une boucle pour les insérer dans objet_sol et ensuite les DELETE de l'inventaire. Sa me parait lourd et je suspect une astuce.

Amicalement


RE: Changement de table - Kassak - 27-08-2008

Pour mon jeu, j'ai une table inventaire, et une table objet_sol.

Quand je souhaite transférer des objets du joueur par terre, après quelques vérifications comme par exemple s'il choisit de déposer tout ce qu'il a => delete de la ligne de l'inventaire, s'il n'y en a pas déjà au sol => insert, sinon un update de chaque coté.


Je ne pense pas que se soit une solution lourde, il y a juste 2 requêtes à chaque fois.


RE: Changement de table - phenix - 28-08-2008

Citation :Quand je souhaite transférer des objets du joueur par terre, après quelques vérifications comme par exemple s'il choisit de déposer tout ce qu'il a => delete de la ligne de l'inventaire, s'il n'y en a pas déjà au sol => insert, sinon un update de chaque coté.

Oui, mais dans le cas ou j'ai 10 objets a changer de table d'un coup ?

Citation :Je pense que le plus adapté c'est d'avoir tout dans la même table.
Avec un statut qui dit si il appartient à un joueur où si il est au sol.

Je suis pas vraiment chaud pour sa étant donnée que mon jeu contient beaucoup d'objet et que les inventaires sont grand, j'ai préférer les séparer.

Y a vraiment pas une requête/instruction prévue pour les transferts entre 2 tables ? C'est quand même dommage Sad


RE: Changement de table - keke - 28-08-2008

Oxman +1.

Ta notion de "beaucoup d'objets" est très faible face à un moteur de BDD. Lui gère plusieurs millions de champs sans que ca lui pose de problème.

Sur magdales, j'ai une règle qui dit qu'un objet est soit dans un équipement (id_equipement != 0) soit qu'il est rattaché à une position (id_position != 0). Tout autre cas serait dans mon jeu une abhération ... Les joueurs, monstres, pnj, ville, coffre fort, batiment sont des conteneurs à équipement.

Je t'encourage à faire un système en accord avec ta SGBD ... Je suis en train de revoir un point délicat car j'avais mal pensé mon schéma ... Bilan, ca va être au moins une 40 heures de "je détruits et je reconstruit mon code". Mon erreur (qui peut servir aux autres) est d'avoir considéré les joueurs et les monstres dans 2 tables différentes ... là j'essaye d'en faire 3 :
Information propre aux joueurs
Information propre à l'IA du monstre
Information propre au personnage (joueur ou monstre)

Kéké


RE: Changement de table - Ter Rowan - 28-08-2008

+1 aussi

la position des objets (j entends 1 objet = 1 épée dans le jeu pas un type d objet : les épées en général) est identifiée par les champs d'une même table


id lieu (donc "au sol" si rempli)
id personnage ( donc "pas au sol" si rempli)
id conteneur (dans quel sac/coffre, qu'il soit au sol ou sur un personnage)

la seule nuance, c'est que je ne sais pas encore si je continue sur ce point pour l'équipement : ce que le personnage utilise le pull qu'il porte, pas la chemise qui est dans le sac à dos)

en effet ce qu'on équipe permet d'obtenir des bonus (armure, résistance, ...) , c'est toute cette mécaniquesur laquelle je ne me suis pas encore penchée qui ne me permet pas de conclure définitivement, même si sur ce point aussi, je pense dans la même table a priori


RE: Changement de table - Kassak - 28-08-2008

Ter Rowan, tu rajoutes simplement un champ port (1=port, 0="pas port")


RE: Changement de table - Anthor - 28-08-2008

Pour transférer, tu peux utiliser une requête de ce style :
Code PHP :
<?php 
$query
= "INSERT INTO table_dest('champs2','champs3','champs4','etc..') SELECT champs2,champs3,champs4,etc.. FROM table_src WHERE genre LIKE 'exemple'";

Le delete doit fonctionner en l'ajoutant à la suite.
Code PHP :
<?php 
$query
= "INSERT INTO table_dest('champs2','champs3') SELECT champs2,champs3 FROM table_src WHERE genre LIKE 'exemple', DELETE FROM table_src WHERE genre LIKE 'exemple'";

Ce qui ne te donnera qu'une requête à envoyer.

Je n'ai pas restesté, mais j'en avais déjà écrite.


RE: Changement de table - Ludvig - 29-08-2008

Ah, c'est comme ça qu'on fais le "bug qui duplique les objets" ^^

moi j'ai une table "objets" et si "pos" vaut quelque chose c'est que c'est l'ID du personnage qui le porte, sinon il est au sol (x,y,...)
comme ça il n'y a pas d'états non valides, ce qui fais qu'il peut y avoir bug mais pas un gros bug (duplication).


RE: Changement de table - Ter Rowan - 29-08-2008

Kassak a écrit :Ter Rowan, tu rajoutes simplement un champ port (1=port, 0="pas port")

merci kassak mais ce n'était pas ma difficulté ^^, je pourrais même mettre cette information dans le champ conteneur directement (genre 0 = porté car mes id conteneurs sont > 0)

ma réflexion porte plutôt sur les requêtes qui utiliseront l'équipement porté

comme je n'ai pas encore réfléchi à ce sujet je ne peux pas l'exposer Smile