[Confirmé] Pnj Changeur (nom/faction/race)
Pnj Changeur

Voici un script d'un Pnj Changeur, il permet de changer votre : nom, faction et race en échange de vos "points" (boutique par exemple); ces points sont situés et liés avec votre compte, dans le base de données : "auth" -> "account" (nom de la colonne : "points" )

/*
 * Copyright © 2013-2014 Molios
 */

#include "ScriptPCH.h"
#include <cstring>

extern LoginDatabaseWorkerPool LoginDatabase;
extern CharacterDatabaseWorkerPool CharacterDatabase;

#define POINTNULL "Vous n'avez pas assez de Points."

#ifdef WIN32
#pragma warning(disable:4305)
#endif

class pnj_changeur : public CreatureScript
{
    public:

        pnj_changeur()
            : CreatureScript("pnj_changeur")
        {
        }

		//MENU GENERAL
        bool OnGossipHello(Player* pPlayer, Creature* pCreature)
        {
          pPlayer->ADD_GOSSIP_ITEM(4, "Changer de nom ->", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
          pPlayer->ADD_GOSSIP_ITEM(4, "Changer de faction ->", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
          pPlayer->ADD_GOSSIP_ITEM(4, "Changer de race ->", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
          pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Quitter", GOSSIP_SENDER_MAIN, 4);
          pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
          return true;
        }

		bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
	    {
          pPlayer->PlayerTalkClass->ClearMenus();
          if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) // Changer de nom
          {
            pPlayer->ADD_GOSSIP_ITEM(4, "Changer de nom [2 Points]->", GOSSIP_SENDER_MAIN, 1);
            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Quitter", GOSSIP_SENDER_MAIN, 4);
            pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
            return true;
          }
          if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) // Changer de faction
          {
            pPlayer->ADD_GOSSIP_ITEM(4, "Changer de faction [3 Points]->", GOSSIP_SENDER_MAIN, 2);
            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Quitter", GOSSIP_SENDER_MAIN, 4);
            pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
            return true;
          }
          if (uiAction == GOSSIP_ACTION_INFO_DEF + 3) // Changer de race
          {
            pPlayer->ADD_GOSSIP_ITEM(4, "Changer de race [5 Points]->", GOSSIP_SENDER_MAIN, 3);
            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Quitter", GOSSIP_SENDER_MAIN, 4);
            pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
            return true;
          }

          switch(uiAction)
		  {
            case 1: // Changer de nom
            {
              QueryResult result;
              result = LoginDatabase.PQuery("SELECT `points` FROM `account` WHERE `id` = %u", pPlayer->GetSession()->GetAccountId());
              uint32 count;
              if (result)
              {
                count = result->Fetch()->GetUInt32();
                if (count >= 2)
                {
                  pPlayer->SetAtLoginFlag(AT_LOGIN_RENAME);
                  pCreature->MonsterWhisper("Merci de vous re-connecter pour pouvoir vous renommez.", pPlayer->GetGUID());
                  LoginDatabase.PExecute("UPDATE `account` SET `points` = `points` - 2 WHERE `id` = %u", pPlayer->GetSession()->GetAccountId());
                  pPlayer->SaveToDB();
                }
                else if (count < 2)
                {
                  pCreature->MonsterWhisper(POINTNULL, pPlayer->GetGUID());
                }
                pPlayer->CLOSE_GOSSIP_MENU();
                break;
              }
            }
            case 2: // Changer de Faction
            {
              QueryResult result;
              result = LoginDatabase.PQuery("SELECT `points` FROM `account` WHERE `id` = %u", pPlayer->GetSession()->GetAccountId());
              uint32 count;
              if (result)
              {
                count = result->Fetch()->GetUInt32();
                if (count >= 3)
                {
                  pPlayer->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION);
                  pCreature->MonsterWhisper("Merci de vous re-connecter pour pouvoir changer de faction.", pPlayer->GetGUID());
                  LoginDatabase.PExecute("UPDATE `account` SET `points` = `points` - 3 WHERE `id` = %u", pPlayer->GetSession()->GetAccountId());
                  pPlayer->SaveToDB();
                }
                else if (count < 3)
                {
                  pCreature->MonsterWhisper(POINTNULL, pPlayer->GetGUID());
                }
                pPlayer->CLOSE_GOSSIP_MENU();
                break;
              }
            }
            case 3: // Changer de race
            {
              QueryResult result;
              result = LoginDatabase.PQuery("SELECT `points` FROM `account` WHERE `id` = %u", pPlayer->GetSession()->GetAccountId());
              uint32 count;
              if (result)
              {
                count = result->Fetch()->GetUInt32();
                if (count >= 5)
                {
                  pPlayer->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE);
                  pCreature->MonsterWhisper("Merci de vous re-connecter pour pouvoir changer de race.", pPlayer->GetGUID());
                  LoginDatabase.PExecute("UPDATE `account` SET `points` = `points` - 5 WHERE `id` = %u", pPlayer->GetSession()->GetAccountId());
                  pPlayer->SaveToDB();
                }
                else if (count < 5)
                {
                  pCreature->MonsterWhisper(POINTNULL, pPlayer->GetGUID());
                }
                pPlayer->CLOSE_GOSSIP_MENU();
                break;
              }
            }
            case 4: //Quitter
            {
              pCreature->MonsterWhisper("Au revoir.", pPlayer->GetGUID());
              pPlayer->CLOSE_GOSSIP_MENU();
              break;
            }
		  }
	      return true;
	    }
};

void AddSC_pnj_changeur()
{
	new pnj_changeur();
}

et voici le script sql à injecter dans votre base de données "auth" :

ALTER TABLE `account` ADD COLUMN `points` int(20) NOT NULL DEFAULT '0' AFTER `online`;

Retourner en haut WoW-Emu