Advertisement
Rochet2

customizer npc

Aug 20th, 2012
784
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.37 KB | None | 0 0
  1. #include "ScriptPCH.h"
  2.  
  3. #define TOKEN 123123 // token entry here
  4.  
  5. class CUSTOMIZE_NPC : public CreatureScript
  6. {
  7. public:
  8.     CUSTOMIZE_NPC() : CreatureScript("CUSTOMIZE_NPC") { }
  9.  
  10.     bool OnGossipHello(Player* player, Creature* creature)
  11.     {
  12.         player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Rename 1500 tokens", GOSSIP_SENDER_MAIN, RENAME );
  13.         player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Change appearance 1500 tokens", GOSSIP_SENDER_MAIN, APPEARANCE );
  14.         player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Change race 1000 tokens", GOSSIP_SENDER_MAIN, RACE );
  15.         player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Change faction 1000 tokens", GOSSIP_SENDER_MAIN, FACTION );
  16.         player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
  17.         return true;
  18.     }
  19.  
  20.     bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)
  21.     {
  22.         player->PlayerTalkClass->ClearMenus();
  23.         if(sender == GOSSIP_SENDER_MAIN)
  24.         {
  25.             switch(action)
  26.             {
  27.             case RACE:
  28.                 if(!player->HasItemCount(TOKEN, 1500))
  29.                     player->GetSession()->SendNotification("Not enough tokens");
  30.                 else
  31.                 {
  32.                     player->DestroyItemCount(TOKEN, 1500, true);
  33.                     PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
  34.                     stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_RACE));
  35.                     player->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE);
  36.                     stmt->setUInt32(1, player->GetGUIDLow());
  37.                     CharacterDatabase.Execute(stmt);
  38.                     player->GetSession()->SendAreaTriggerMessage("Relog to change race");
  39.                     ChatHandler(player).PSendSysMessage("Relog to change race");
  40.                 }
  41.                 break;
  42.             case FACTION:
  43.                 if(!player->HasItemCount(TOKEN, 1500))
  44.                     player->GetSession()->SendNotification("Not enough tokens");
  45.                 else
  46.                 {
  47.                     player->DestroyItemCount(TOKEN, 1500, true);
  48.                     PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
  49.                     stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_FACTION));
  50.                     player->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION);
  51.                     stmt->setUInt32(1, player->GetGUIDLow());
  52.                     CharacterDatabase.Execute(stmt);
  53.                     player->GetSession()->SendAreaTriggerMessage("Relog to change faction");
  54.                     ChatHandler(player).PSendSysMessage("Relog to change faction");
  55.                 }
  56.                 break;
  57.             case APPEARANCE:
  58.                 if(!player->HasItemCount(TOKEN, 1000))
  59.                     player->GetSession()->SendNotification("Not enough tokens");
  60.                 else
  61.                 {
  62.                     player->DestroyItemCount(TOKEN, 1000, true);
  63.                     PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
  64.                     stmt->setUInt16(0, uint16(AT_LOGIN_CUSTOMIZE));
  65.                     player->SetAtLoginFlag(AT_LOGIN_CUSTOMIZE);
  66.                     stmt->setUInt32(1, player->GetGUIDLow());
  67.                     CharacterDatabase.Execute(stmt);
  68.                     player->GetSession()->SendAreaTriggerMessage("Relog to change appearance");
  69.                     ChatHandler(player).PSendSysMessage("Relog to change appearance");
  70.                 }
  71.                 break;
  72.             case RENAME:
  73.                 if(!player->HasItemCount(TOKEN, 1000))
  74.                     player->GetSession()->SendNotification("Not enough tokens");
  75.                 else
  76.                 {
  77.                     player->DestroyItemCount(TOKEN, 1000, true);
  78.                     player->SetAtLoginFlag(AT_LOGIN_RENAME);
  79.                     player->GetSession()->SendAreaTriggerMessage("Relog to change name");
  80.                     ChatHandler(player).PSendSysMessage("Relog to change name");
  81.                 }
  82.                 break;
  83.             }
  84.         }
  85.         OnGossipHello(player, creature);
  86.         return true;
  87.     }
  88.  
  89. private:
  90.  
  91.     enum actions
  92.     {
  93.         RENAME,
  94.         APPEARANCE,
  95.         RACE,
  96.         FACTION,
  97.     };
  98. };
  99.  
  100. void AddSC_CUSTOMIZE_NPC()
  101. {
  102.     new CUSTOMIZE_NPC();
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement