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`;