Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...
  • 0

Module ItemShop


Playzer

Question

Bonjour à tous et à toute !

 

En ce moment même, je développe un système d'item-shop (Web).

 

J'ai déjà créer :

 

 

  • - Connexion
  • - Apercu des catégories
  • - Apercu des sous catégorie en ayant sa catégorie parente
  • - Apercu des item de la sous catégorie
  • - Panel Administrateur

 

 

Comme vous pouvez le voir, il me manque la partie pour l'achat d'un item, donc je me pose plusieurs question :

 

 

  • - Quel traitement dois-je faire ?
  • - Comment l'item va se loger directement dans l'inventaire item-shop (In Game) ?
  • - Une base de données existe pour cela ?

 

 

Je vous remercie par avance, de toute aide que vous pourriez me proposer,

Cordialement,

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 15
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans cette question

Meilleurs contributeurs dans cette question

15 réponses à cette question

Messages recommandés

  • 0
  • Robot

Heu... Bon je fais ça de tête pendant que les TPE me soulent :

  • Vérifier si le membre a assez de monnaie
  • Vérifier la place qu'il a dans l'entrepôt de l'IS, voici une fonction simple :

 

function verif_place_is($account_id, $nb_item = 1) {    if (is_numeric($account_id)) {        $donnees = bdd('player')->query("SELECT COUNT(*) AS nb_safebox FROM `safebox` WHERE account_id = '$account_id'")->fetch();        if ($donnees['nb_safebox'] == 1) {//Si l'user a bien un entrepôt            $pos = 0;            $go = false;            while ($go == false) {                $donnees = bdd('player')->query("SELECT COUNT(*) AS nb_pos FROM item WHERE owner_id = '$account_id' AND pos = '$pos' AND window = 'MALL'")->fetch();                if ($donnees['nb_pos'] >= 1) {                    $pos++;                } else {                    $go = true;                }            }                return $pos;            if ($pos > (44 - $nb_item)) {                $erreur = "L'entrepot est plein.";                return $erreur.$pos;            } // Si le MALL est plein            else {                return $pos;            } // On renvoi le numéro de la position libre        } else {            $erreur = "Vous n'avez pas d'entrepot.";                return $erreur;        }    } else {        $erreur = "Une erreur c'est produite.";        return $erreur;    } // Si account n'est pas un chiffre}

J'ai mis des heures à écrire ça avec un portable. Ça répond en même temps à ta question de l'entrepôt etc... (J'ai pas prepare et tout, c'était plus rapide de faire comme ça, surtout avec un portable ^^')

  • Tu débites la monnaie
  • Tu vérifies si l'item peut être groupé ou pas (avec son flag)
  • Tu ajoutes l'item.

Pour ajouter l'item, tu fais un INSERT INTO item et dans window tu mets MALL (je crois... à vérifier).Bon j'ai essayé de t'aider un minimum :o

  • Love 1

french_banner.gif

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Funkiest

Je ne vois pas comment être plus précis, je n'ai pas la bdd sous les yeux, mais dans le menu déroulant il doit y avoir "MALL" et dans l'ID tu mets l'ID du compte, comme ça le joueur pourra le récupérer dans son entrepôt IS

Lien vers le commentaire
Partager sur d’autres sites

  • 0

J'ai donc fait ceci, mais sa me dit tout le temps que je n'ai pas d'entrepôt :

 

 

if (isset($_GET['id']) AND !empty($_GET['id']) AND is_numeric($_GET['id'])) {if (isset($_POST['achat_item_accept'])) {	$erreurs = [];	$succes = [];	// Si le membre a accepté l'achat		// Vérification s'il a assez de monnaie		$infossafe = $pdo1->prepare("SELECT COUNT (* ) AS nb_safebox FROM 'safebox' WHERE account_id = :account_id");		$infossafe->bindParam(':account_id', $_SESSION['id']);		$infos_safebox = $infossafe->fetch();		// Si le joueur possède un entrepôt		if ($infos_safebox->nb_safebox == 1){ //Si l'user a bien un entrepôt			if (!empty($infos_safebox->password) AND $infos_safebox->password != '000000') {				$pos = 0;				$go = false;				while ($go == false) {					$req = $pdo1->prepare("SELECT COUNT(*) AS nb_pos FROM item WHERE owner_id = :owner_id AND pos = :pos AND window = 'MALL'");					$req->bindParam(':owner_id', $_SESSION['id']);					$req->bindParam(':pos', $pos);					$re = $req->fetch();					if ($re->nb_pos >= 1) {						$pos++;						// On débite les monnaies							// On récupère toute les infos de l'objet							$reqitem = $pdo3->prepare("SELECT * FROM items");							$reqitem->bindParam(":id", $_SESSION['id']);							$recup_item = $reqitem->fetch();							// Si le compte possède la valeur en monnaie du prix de l'item ou plus 							if ($_SESSION['coins'] == $recup_item->prix_item AND $_SESSION['coins'] >= $recup_item->prix_item) {								// On crédite Les monnaies du compte - le prix de l'item								$resultat = $_SESSION['coins'] - $recup_item->prix_item;								// On update le nouveau resultat								$req1 = $pdo->prepare("UPDATE account SET coins = :coins WHERE id = :id");								$req1->bindParam(':coins', $resultat);								$req1->bindParam(':id', $_SESSION['id']);								$req1->execute();								$succes[] = "Votre objet a bien été placé dans votre entrepôt spécial !";							}					} else {						$go = true;					}				}				if ($pos >= (44 - $nb_item)) {					$erreurs[] = "Votre entrepôt est plein !";				}			} else {				$erreurs[] = "Vous n'avez pas saisi de mot de passe pour votre entrepôt spécial. Merci d'aller voir le magasinier pour en définir un. (Ceci est pour éviter une erreur de notre part).";			}		} else { // Sinon			$erreurs[] = "Vous ne possédez pas encore d'entrepôt, aller voir le mgasinier en jeu et revenez !";		}}include CHEMIN_VUE. 'achat_item.php';} else {include CHEMIN_VUE. 'erreur_index.php';}

 

Lien vers le commentaire
Partager sur d’autres sites

  • 0

J'avais pensé à une sécurité en plus.

J'ai tout refait, et j'ais fais ca :

 

 

if (isset($_GET['id']) AND !empty($_GET['id']) AND is_numeric($_GET['id'])) {   // On procède à la vérification de la soumission du form   if (!empty($_POST)) {       // On définit les variables dans un tableau pour gérer les evenements d'erreur et de succes       $erreurs = [];       $succes = [];       /*        * 1 - On vérifie si le joueur possède un entrepot en donnant        * comme paramètre la valeur si il existe dans le safebox.        *        * 2 - On vérifie s'il possède assez de monnaie        *        * 3 - On vérifie s'il possède assez de place dans son entrepôt        *        * 4 - Si aucune erreurs est détecté        *        * 5 - On insert l'item dans la table item        */       $sth = $pdo1->prepare("SELECT account_id FROM safebox WHERE account_id = :account_id");       $sth->bindParam(':account_id', $_SESSION['id']);       $result = $sth->rowCount();       // S'il le joueur ne possède pas un entrepôt       if ($result == 0) {           $erreurs[] = "Vous n'avez pas d'entrepôt !";       }       // On vérfieie s'il possède assez de monnaie   }   include CHEMIN_VUE. 'achat_item.php';} else {   include CHEMIN_VUE. 'erreur_index.php';}

 

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Donc, j'ai décider de refaire tout de moi meme.

Voici mon code : (Code fonctionnel)

Mais maintenant je veux vérifier si l'entrepôt possède assez de place, mais malheuresement je ne sait pas trop comment m'y prendre

 

 

// Si la valeur passé par l'url est numericif (isset($_GET['id']) AND !empty($_GET['id']) AND is_numeric($_GET['id'])) {   // On procède à la vérification de la soumission du form   if (isset($_POST['achat_item_accept'])) {       // On définit les variables dans un tableau pour gérer les evenements d'erreur et de succes       $erreurs = [];       $succes = [];       /*        * 1 - On vérifie si le joueur possède un entrepot en donnant        * comme paramètre la valeur si il existe dans le safebox.        *        * 2 - On vérifie s'il possède assez de monnaie        *        * 3 - On vérifie s'il possède assez de place dans son entrepôt        *        * 4 - Si aucune erreurs est détecté        *        * 5 - On insert l'item dans la table item        */       // Vérification de l'existance d'un entrepôt           // On prépare une requete afin de tous selectionner           $requete = $pdo1->prepare("SELECT * FROM safebox WHERE account_id = :account_id");           // On passe en paramètres l'id de la session attribuer lors de la connexion           $requete->bindParam(":account_id", $_SESSION['id']);           // On execute le tout           $requete->execute();           // On compte le nombre de ligne           $recup_entrepot = $requete->rowCount();           // Si les lignes retourne 0 par apport à l'id de la session           if ($recup_entrepot == 0) {               // On lui affiche un jolie message d'erreur               $erreurs[] = "Malheuresement, je ne peux pas donner suite à votre achat, vous n'avez dont pas d'entrepôt où stocker vos achats.";           }           // On fait une requete pour selectionner tous les champs des items de la boutique           $rc = $pdo3->prepare("SELECT * FROM items WHERE id = :id");           // On passe en paramètres l'id passé par l'url qui correspond à l'id de l'item           $rc->bindParam(":id", $_GET['id']);           // On execute le tout           $rc->execute();           // On fetch le tout           $recup_coins = $rc->fetch();           if ($_SESSION['coins'] < $recup_coins->prix_item) {               $erreurs[] = "Malheuresement, vous n'avez pas assez de monnaie pour acheter cette objet";           }           // Si aucune erreurs est détecté           if (empty($erreurs)) {               // Insertion de l'item dans la table item           }   }   include CHEMIN_VUE. 'achat_item.php';} else {   include CHEMIN_VUE. 'erreur_index.php';}

 

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Funkiest

Salut ! C'est pas testé, mais je suppose que tu peux savoir si tu n'as plus de place dans l'entrepôt IS si la valeur "pos" de "MALL" est supérieure à 45 sur un ID donné, qui est le nombre maximal de position dans l'entrepôt IS ! :)

Lien vers le commentaire
Partager sur d’autres sites

  • 0
Salut ! C'est pas testé' date=' mais je suppose que tu peux savoir si tu n'as plus de place dans l'entrepôt IS si la valeur "pos" de "MALL" est supérieure à 45 sur un ID donné, qui est le nombre maximal de position dans l'entrepôt IS ! :)[/quote']Avec cette méthode tu ne pourras pas stocker d'objet si le dernier slot est pris, même si il y a de la place dans les slots précédentstu peux utiliser ceci (à adapter à ton site) :
$entrepot = mysql_query("SELECT pos FROM player.item WHERE owner_id='$account_id' AND window='MALL'");$utilise = array();while ($i = mysql_fetch_assoc($entrepot))	$utilise[] = $i["pos"];$libre = array_diff(range(0, 44), $utilise); if (count($libre) == 0){	?>	Vous n'avez pas assez d'espace dans votre entrepôt item-shop    <?php}else{    $pos = $libre[array_keys($libre)[0]];}

la variable $pos contiendra le premier slot libre dans l'entrepôt

  • Love 1
Lien vers le commentaire
Partager sur d’autres sites

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.


  • brilliantdiscord_widget
  • Flux d'Activité

    1. 2

      Demande d'aide

    2. 2

      Demande d'aide

    3. 2

      Demande d'aide

    4. 161

      VDI - Server Files 2016 - Team FE

    5. 1

      Problème de modification du coffre de l'apprenti

  • En ligne récemment

    • Aucun utilisateur enregistré regarde cette page.

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.