10-09-2008, 07:31 PM
Bonjour,
Je vais te présenter une solution. Voici la situation de départ.
Tu disposes d'une table Personnages (avec des champs id, nom et monnaie), d'une table Objets (avec des champs id et nom) et d'une table Vendeurs (avec des champs id et nom).
Tu disposes également de deux table de relation Objets_Personnages (avec des champs objet_id et personnage_id) et Objets_Vendeurs (avec des champs objet_id, vendeur_id, quantite et prix).
Pour afficher la marchandise d'un vendeur (dont tu connais l'ID, symbolisé par %d1 dans la requête), une simple requête suffit :
Quand le joueur se rend sur cette page, il peut désigner un objet à acheter (l'objet est identifié par son ID). Note que ce système permet aux marchands de proposer les mêmes objets à des prix différents.
Il faut maintenant savoir si le personnage est assez riche (l'argent du joueur est représenté par %d1 dans la requête) pour s'offrir l'objet qu'il a demandé (dont l'ID est représenté par %d2 dans la requête) au prix demandé par le vendeur (dont l'ID est représenté par %d3 dans la requête).
Si le champ objet_correspondant vaut 0, c'est que le joueur n'a pas assez d'argent (ou que le vendeur ou l'objet indiqué n'existe pas). S'il vaut 1, c'est que le joueur à assez d'argent.
Ensuite, le reste est très simple, il suffit de mettre à jour la somme d'argent du personnage, d'insérer une entrée dans la table Objets_Personnages et de mettre à jour une entrée dans Objets_Vendeurs.
Pour mettre à jour la somme d'argent du joueur (dont l'ID est représenté par %d1 dans la requête), on déduit de sa somme d'argent le prix (représenté par %d2 dans la requête) de l'objet.
Pour donner l'objet (dont l'ID est représenté par %d1 dans la requête) au personnage (dont l'ID est représenté par %d2 dans la requête), voici la marche à suivre :
Pour mettre à jour le stock de l'objet (dont l'ID est représenté par %d1 dans la requête) du vendeur (dont l'ID est représenté par %d2 dans la requête) :
Voilà, j'espère que ça pourra t'aider. Si tu as des questions, n'hésite pas.
Je précise qu'il y a moyen de simplifier le code, surtout si tu ne gères pas les stocks de tes marchands.
Sephi-Chan
Je vais te présenter une solution. Voici la situation de départ.
Tu disposes d'une table Personnages (avec des champs id, nom et monnaie), d'une table Objets (avec des champs id et nom) et d'une table Vendeurs (avec des champs id et nom).
Tu disposes également de deux table de relation Objets_Personnages (avec des champs objet_id et personnage_id) et Objets_Vendeurs (avec des champs objet_id, vendeur_id, quantite et prix).
Pour afficher la marchandise d'un vendeur (dont tu connais l'ID, symbolisé par %d1 dans la requête), une simple requête suffit :
Code :
SELECT O.id,
O.nom,
OV.quantite,
OV.prix,
V.nom
FROM Vendeurs V
LEFT
JOIN Objets_Vendeurs OV
ON OV.vendeur_id = V.id
AND OV.quantite > 0
LEFT
JOIN Objets O
ON O.id = OV.objet_id
WHERE V.id = %d1;
Quand le joueur se rend sur cette page, il peut désigner un objet à acheter (l'objet est identifié par son ID). Note que ce système permet aux marchands de proposer les mêmes objets à des prix différents.
Il faut maintenant savoir si le personnage est assez riche (l'argent du joueur est représenté par %d1 dans la requête) pour s'offrir l'objet qu'il a demandé (dont l'ID est représenté par %d2 dans la requête) au prix demandé par le vendeur (dont l'ID est représenté par %d3 dans la requête).
Code :
SELECT COUNT(*) AS objet_correspondant
FROM Objets O
JOIN Objets_Vendeurs OV
ON OV.objet_id = O.id
AND OV.vendeur_id = %d3
AND OV.prix <= %d1
WHERE O.id = %d2
Si le champ objet_correspondant vaut 0, c'est que le joueur n'a pas assez d'argent (ou que le vendeur ou l'objet indiqué n'existe pas). S'il vaut 1, c'est que le joueur à assez d'argent.
Ensuite, le reste est très simple, il suffit de mettre à jour la somme d'argent du personnage, d'insérer une entrée dans la table Objets_Personnages et de mettre à jour une entrée dans Objets_Vendeurs.
Pour mettre à jour la somme d'argent du joueur (dont l'ID est représenté par %d1 dans la requête), on déduit de sa somme d'argent le prix (représenté par %d2 dans la requête) de l'objet.
Code :
UPDATE Personnages
SET monnaie = monnaie - %d2
WHERE id = %d1;
Pour donner l'objet (dont l'ID est représenté par %d1 dans la requête) au personnage (dont l'ID est représenté par %d2 dans la requête), voici la marche à suivre :
Code :
INSERT
INTO Objets_Personnage (objet_id, personnage_id)
VALUES (%d1, %d2);
Pour mettre à jour le stock de l'objet (dont l'ID est représenté par %d1 dans la requête) du vendeur (dont l'ID est représenté par %d2 dans la requête) :
Code :
UPDATE Objets_Vendeurs
SET quantite = (quantite - 1)
WHERE objet_id = %d1
AND vendeur_id = %d2;
Voilà, j'espère que ça pourra t'aider. Si tu as des questions, n'hésite pas.
Je précise qu'il y a moyen de simplifier le code, surtout si tu ne gères pas les stocks de tes marchands.
Sephi-Chan