Erreur script SQL site > serveur jeu
Bonsoir,

Je rencontre un problème avec un script boutique récupérer du sitewoo qui fonctionne très très bien en V3.3.5, bref bossant actuellement sur un petit projet 2.4.3 j'ai essayais d'adapter le script à ma base de donnée 2.4.3 (mangos-one) characters mais rien ne change Triste

Voici le script :

Ma modification : (ré-adapter par rapport à la table mail 2.4.3 dans characters)
Code :
mysql_query("INSERT INTO mail (id, messageType, stationery, mailTemplateId, sender, receiver, subject, itemTextId, has_items, expire_time, deliver_time, money, cod, checked) VALUES ('".$mail."',  '0', '61',  '0', '".$character."', '".$character."', 'SHOP',  '0',  '1', '1288037787', '1285445787',  '0',  '0',  '0')");

Résulta : je reçois bien mon message par la poste de la part de l'assistance clientèle aliace blibli, mais sans le colissimo (item) que je me suis envoyer depuis le site Triste

Le script d'origine :
Code :
mysql_query("INSERT INTO mail (id, stationery, sender, receiver, subject, body, has_items, expire_time, deliver_time) VALUES ('".$mail."', '61', '".$character."', '".$character."', 'Boutique Vaillance', 'Voici votre achat', '1', '1288037787', '1285445787')");

Merci de votre lumière chers confrères :'D

Cordialement,
Les boutiques par "mail en jeu" directement inséré dans la DB sont FOIREUX.

Tout simplement car les items sont générés par toi et non par le core.

Je ne sais plus très bien pourquoi mais de toutes les boutiques que j'ai faites , la solution d'envoi ingame via la poste "blibli" ou par insertion dans l'inventaire posait TOUJOURS des soucis : disparition d'items, perso qui crash.

Là tu n'envoie que le mail mais AUcun item ce qui est normal (donc pas d'item) il faut aussi ajouter une autre entrée dans une autre table ( et pour trouver ca c bidon.. tu fais un send item en mode MJ en ligne de commande avec un item et tu vas en DB voir le mail concerné et tu parcours les différentes tables liées aux emails en jeu et tu cherche là ou est ton item.

Bref le Meilleure méthode pour n'avoir AUCUN souci reste un etable temporaire ou sont les "commandes" en attente, et le player fait une commande en jeu genre ".livraison" et là c’est le core qui gère l'envoi/l'ajout des items sur le joueur (via un Additem détourné dans une fonction spécifique). Une fois la commande ajoutée tu delete la commande en attente dans la table concernée. AVec ce système 0 soucis ( tu ajoutes aussi un log dans ton site pour le suivi des commandes et tout est ok)
Merci pour ta réponse Elmsroth,

J'ai essayais avec un send items en jeu puis look dans la DB characters table mail > mail_items comment que c'était foutu bref on vois bien l'objet IG idem l'objet et bien reçu dans le colis "blibli" j'ai remanier mon script l'objet et bien dans la db mail_items mais ig j'ai un mail de l'assistance vide sans le colis (la poste ils perdent toujours tout) Hihi

Bref si cela peut vous éclairez un peu plus je me le script complet de validation, si on arrive à le repa ensemble je le mettrai à dispo dans la catégorie web du fofow :

Code :
//-----------------------------valide_items----------------------------------------
case "valide_item":
$id = $_SESSION['id'];

mysql_select_db($realmd,$connexion);
$datas2 = mysql_query("SELECT * FROM account WHERE id= '$id'");
$donnees3 = mysql_fetch_array($datas2);

if ($donnees1['online'] == 1)
{
?>
<strong>Achat d'Item :</strong>
<hr size="1" noshade="noshade" />
<center><p><h3>Vous &ecirc;tes actuelement connect&eacute; en jeu.<h3><h4> merci de vous d&eacute;connecter.</h4></p></center>
    <meta http-equiv="refresh" content="5;url=membre.php" />
    <center>Vous allez &ecirc;tre redirig&eacute; dans 5 secondes !</center>
<?php
}
else
{
    $id_item = $_POST['add_item'];
    mysql_select_db($sitewoo,$connexion);
    $donnees_item2 = mysql_query("SELECT * FROM boutique_item WHERE id = '$id_item'");
    $donnees_item = mysql_fetch_assoc($donnees_item2);
    
    $prix = $donnees_item['prix'];
    $iditem = $donnees_item['id_item'];
    $nombre = $donnees_item['nombre'];
    $character = $_POST['perso'];
    $itemid = rand(1, 600000);
    $db = $characters;
    $nbr_vote = $donnees_item['prix'];
    $new_vote = ($nbr_vote - 1);
    $mail = rand(6000, 600000);
    
    mysql_select_db($characters,$connexion);
    $donnees_perso2 = mysql_query("SELECT * FROM characters WHERE guid = '$character'");
    $donnees_perso = mysql_fetch_assoc($donnees_perso2);
    
    
    $nbr_vote = $donnees1['vote'];
    $new_vote = ($nbr_vote - $prix);
    
    
    if ($donnees1['vote'] < $prix)
    {
    ?>
    <strong>Achat d'Item :</strong>
    <hr size="1" noshade="noshade" />
    <center><h3>Vous n'avez pas assez de Points de Vote !<h3><h3>Le prix de cet Item est de <u><?php echo $prix; ?> Points de Vote.</u><h3><h3>Vous avez <u><?php echo $nbr_vote; ?>Points de Vote .</u><h3></center>
    <meta http-equiv="refresh" content="5;url=membre.php" />
    <center>Vous allez &ecirc;tre redirig&eacute; dans 5 secondes !</center>
    <?php
    }
    else
    {
    mysql_select_db($characters,$connexion);
    mysql_query("INSERT INTO item_instance (guid,owner_guid,data) VALUES ('".$itemid."','".$character."','".$itemid." 1073741936 3 ".$iditem." 1065353216 0 ".$character." 0 ".$character." 0 0 0 0 0 ".$nombre." 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0')");
    mysql_query("INSERT INTO mail (id, stationery, sender, receiver, subject, body, has_items, expire_time, deliver_time) VALUES ('".$mail."', '61', '".$character."', '".$character."', 'Boutique Vaillance', 'Voici votre achat', '1', '1288037787', '1285445787')");
    mysql_query("INSERT INTO mail_items (mail_id, item_guid, item_template, receiver) VALUES ('".$mail."', '".$itemid."', '".$iditem."', '".$character."')");
    
    $username_account = $donnees1['username'];
    mysql_select_db($realmd,$connexion);
    mysql_query("UPDATE account SET vote='$new_vote' WHERE username='$username_account'");
    ?>
    <strong>Achat d'Item :</strong>
    <hr size="1" noshade="noshade" />
    <h3><center><b>L'object a bien &eacute;t&eacute; ajout&eacute; &agrave; '<a href="armurerie-select.php?perso=<?php echo $donnees_perso['name']; ?>"><font color="red"><b><?php echo $donnees_perso['name']; ?></b></font></a>'.</b></center></h3>
    <h3><center><b><?php echo $prix; ?> Points de Vote vous ont &eacute;t&eacute; enlev&eacute; !</b></center></h3>
    <h3><center><b>Merci de votre achat et continuez &agrave; voter pour plus de bonus !</b></center></h3>
    <meta http-equiv="refresh" content="5;url=membre.php" />
    <center>Vous allez &ecirc;tre redirig&eacute; dans 5 secondes !</center>
    <?php
    }
    }
break;

Merci encore, Huh')
Édition :
Je pense qu'il y a moyen de le faire fonctionner, de toute façon je ne compte pas faire dans le pro c'est juste pour une communauté de 10/15 joueurs donc il n'y aura pas de soucis de sur-utilisation de la boutique avec des objet qui ce perdent en chemin, car j'utilisais cette boutique sur mon serveur wotlk elle fonctionnait très très bien !

J'ai trouvé des tutos pour expliquer comment créer une autre base de donnée qui est "prise" en compte par le core, mais rien qui m'explique concrètement comment mettre en oeuvre une boutique en c++ de a à z, sachant que j'ai aucune notion ni le temps d'apprendre le C++ donc pas la peine de m'indiquez le site du zéro que je connais très bien et que j'utilise :')

Là je suis à un chouillia de la réussite car je reçois la lettre de la part de blizzard avec le titre et le message souhaiter mais vide sans l'objet Erf Help me please :'D
Le core doit chargement charger le mail_item avant Clin donc a toi de te débrouiller pour le recharger ou faire une fonction dnas le core que tu peux appeler du web SOAP ?
Merci totomakers pour ta réponse !

Comment faire charger la base mail_item ?? avant quoi ?

Il faut que je met un refresh dans mon script php/sql du site ?

Cordialement,
En gros quand tu lance le core, il ne fait qu'une fois la requete SQL et le stocke dans une map (en gros dans ta ram). Quand tu envoie un email en jeux , il ajoute juste une entrée a la map(dans la ram) et une dans la base SQL.

Cependant avec ton script php/SQL il l'insère juste dans la table SQL. Il faut donc aussi l'ajouter a la map et pour ça c'est une interaction Web->Core. Il faut donc ce qu'on appelle un SOAP(c++) pour l'insérer aussi dans la map.

Active les logs SQl et essaye de voir les requêtes lors de l'envoie de l'email. Modifie ta requete et execute là le core lancée. Va en jeux voir si il y a ton email.
• Si oui tu a deux options, c'est chargée a la connexion du perso, il te faut un SOAP aussi OU revoie ta requête SQL de ton web il doit y avoir un probleme.
• Si non , il charge la table comme je t'est décris au dessus il faut donc que tu fasse un SOAP aussi Smile

Retourner en haut Accueil