Mangos Vote System // MaNGOS
Il est vrai que cela peut être difficile pour quelqu'un qui ne connais pas le php. Malgré que ce servir de sa logique sa fonctionne tout de même bien.

Je vais faire un petit tutoriel 101 vite fais.

1. Vous avez besoin d'activer la "Remote acces".

Rendez-vous dans votre mangosd.conf et normalement vous aurez quelque chose du genre au bas complètement. Sinon chercher.

Code :
Console.Enable = 1
Ra.Enable = 1
Ra.IP = 0.0.0.0
Ra.Port = 3443
Ra.MinLevel = 3
Ra.Secure = 1
Ra.Stricted = 1

Configurer le comme moi j'ai fais. Dans Ra.IP remarquer que j'ai laisser le 0.0.0.0. Cela signifie que vous pouvez utiliser n'importe quelle ip ou adresse.


2. Configurer le Remote Acces dans le config.php

Rendez-vous sur le fichier racine de votre site web et ouvrer le ficher de configuration "config.php".

Configurer le comme n'importe quel script. Rendu au coin de la remote acces.

Code PHP :
=> array("localhost""3443""Votrenomdecompte""votremotdepass"), 


Vous devez mettre votre compte administrateur. Il faut que celui-ci soit rang 3.


3. Ajouter des récompenses.

Le fichier de configuration n'est pas très clair. J'ai donc décidé de le modifier. Il est important de savoir que ceci s'applique uniquement pour la version française.

PS: J'ai ajouter des données exemples dans ce script. À vous de les supprimées si vous ne les désirez pas.

Code PHP :
<?php
$tab_rewards 
= array(
    
1    => array(0,100000,2,-1),
    
2    => array(0,500000,5,-1),
    
3    => array(0,1000000,10,-1),
    
4   => array(41508,1,10,4),
        
5   => array(44413,1,10,4),
    
6   => array(19902,1,5,4),
    
7   => array(23572,1,3,3),
    
8   => array(32458,1,8,4),
);

$reward_texts[6] = array(
    
1    => "10 pièces d'or",
    
2    => "50 pièces d'or",
    
3    => "100 pièces d'or",
    
4   => "Mécabécane (H)"
    
5   => "Bécane de mekgénieur (A)",
    
6   => "Tigre zulien rapide",
    
7   => "Néant primordial",
    
8   => "Cendres d'Al'ar",
);
?>

Ok en premier il faut savoir comment ajouter un objet.

Voici dans quel ordre vous devez les configurer.


L'id de l'objet(Dans le cas de pièce d'or mettre "o")

Quantité (Combien vous désirez en donner. Il est à noter que pour les pièces d'or, il faut compter en pièce de cuivre. Donc 10 000 = 1 pièce d'or)

Prix(Le nombre de point requis pour l'achat de ce cadeau de vote)

Qualité:
-1 (Utiliser cette qualité pour les pièces d'or)
2 (Vert)
3 (Bleu)
4 (Mauve)

Exemple:
Code PHP :
    1   => array(19902,1,5,4), 

19902 = L'id du tigre zulien rapide.
1 = La quantité de tigre zulien rapide que la personne aura à l'achat.
5 = Le nombre de point que coûte le tigre zulien rapide.
4 = La qualité de l'objet, dans le cas du tigre zulien rapide, mauve.

Maintenant, pour le nom de l'objet rien de plus simple.

Code PHP :
    1   => "Tigre zulien rapide"

Voila le tour est joué ! Smile

(Merci de ne pas modifier le copyright de ce script. L'auteur travail très fort pour la conception de ce genre de script et il vous fourni cela gratuitement. Je ne vise certainement pas Mr. Bloodsun.)
Bonjour,

Tout d'abord, je souhaitais féliciter le créateur de cette boutique, je compte bien m'en servir pour mon site. Elle est complète et fonctionnelle.
Enfin... je rencontre un soucis. Malgré mon activation du Ra dans le mangosd.conf, lorsque je clique sur un objet dans les récompenses pour me l'attribuer, la page charge indéfiniment pour me sortir l'erreur : "Remote Access Error : Wrong Pass"
C'est bien le nom de compte et le mot de passe d'un compte Mj > 3 qu'il faut renseigner dans le fichier de de configuration, non ?

De plus, en passant par soap, mangosd me renvoie la même erreur : invalid password.
Est-ce que quelqu'un a déjà réussi à obtenir une récompense via ce système ?
Est-ce que ça peut avoir un lien avec un fichier core mal configuré ?

Que faire pour régler ce problème.
D'où vient il ?
L'idée est bonne mais une vrai boutique ne marche pas comme cela.

Au delà du fait que la solution montrée par wazurius peut bien servir temporairement pour faire des tests.

D'un point de vue sécuritaire et transactionnel c'est 0. (Insertion qui foire en DB généralement ou conflit de mails lors des envois par le système mail par un script PHP...)

Brièvement un vrai système boutique doit comporter les composants suivants :

- Table listant les catégories/sous catégories d'objets (en mode récursif avec parentRootID).
- Table listant les ID des objets, leur catégorie (cf table précédente) et leur prix en points (les informations relatives à l'objet seront récupérées au moment de l'affichage pour le client, ça sert a à rien de faire des doublons de strings inutiles...).
- Table où les commandes sont enregistrées de manière définitive (log d'achats).
- Table de bufferisation pour le core (GUID perso - IDaccount (optionnel) - TypeAchat - ID Item - Qté )
- Script C++ qui implémente une commande de livraison d'achat ingame (Fonctionnement très simpel se basant sur la table de bufferisation).

Processus :
(méthode sans paniers d'achat, car si on fait un panier d'achat là faut une classe de gestion de cookie un peu compliquée mais c’est faisable c'est ce qu'on utilisait sur killingspree).

- Le client accède à la page PHP qui liste les catégorie (navigation laissée au choix), il clique sur une catégorie voulue (traiter cas GOLD ou LEVEL à part)
- Il accède à la page qui liste les objets de la catégorie voulue (ou choix de gold/levels) et clique sur acheter et on lui demande de sélectionner le personnage cible.
- Si il n'a pas assez de points = il se fait gentiment rembarrer,
- sinon les points sont débités,
- sa commande enregistré dans la table des logs d'achats boutique
- une commande en attente de livraison est insérée dans la table de bufferisation pour le GUID de perso correspondant.

A ce moment précis en jeu faite la commande associée à la livraison (celle que vous aurez définit ex: .livraison) , le script fonctionne comme cela :
- Il parcours la table de bufferisation à la recherche de commande en attente
- SI il n'y en a pas il retourne une erreur
Sinon pour chaque entrée il effectue l'action associée à chaque type d'item (switch...) et pour la quantité donnée. Pour les objets, si il n'y a plus de place , utilisez un appel contextuel à la commande sendMail du jeu dans votre script afin d'envoyer l’excédent par la poste du jeu et notifiez-le au joueur.
Lorsque une ligne a été correctement traitée elle est supprimée de la table de bufferisation.

En cas de souci il y a le log persistant côté site dans la table des logs.

Cette solution est la meilleure et la plus robuste à ce jour et c'est celle que tous les gros serveurs utilisent plus ou moins de la même faon ( le processus peut changer mais l'idée de conception reste la même).

Il y a un partage sur le forum qui reprends un peu cette solution en C++ simplement mais dont l'implémentation comporte des lacunes.

Remarque : On n'utilise pas UNE table pour stocker les commandes avec un flag "livré" = 0 ou 1 selon l'état pour des raisons évidentes d'accès concurrentiels site/core à cette base.
de plus il est mieux de séparer les logs d'archive des bases utilisées dynamiquement pour le fonctionnement journalier.
Pour la livraison, livre par courrier InGame en envoyant une commande via SOAP (implémenté dans MaNGOS).
Sinon Elmsroth, on peut faire des lock (des lock à chaud avec mysql, why not).
Mouais vu la stabilité de certains ému quand aux prises de verrous en base... je me méfierais Clin

Retourner en haut Accueil