View difference between Paste ID: XSBNKNgN and q0fM4ktR
SHOW: | | - or go back to the newest paste.
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 );
12+
        player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Rename 1500 tokens",            1500, AT_LOGIN_RENAME           );
13-
        player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Change appearance 1500 tokens", GOSSIP_SENDER_MAIN, APPEARANCE );
13+
        player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Change appearance 1500 tokens", 1500, AT_LOGIN_CUSTOMIZE        );
14-
        player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Change race 1000 tokens", GOSSIP_SENDER_MAIN, RACE );
14+
        player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Change race 1000 tokens",       1000, AT_LOGIN_CHANGE_RACE      );
15-
        player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Change faction 1000 tokens", GOSSIP_SENDER_MAIN, FACTION );
15+
        player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, "Change faction 1000 tokens",    1000, AT_LOGIN_CHANGE_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)
20+
    bool OnGossipSelect(Player* player, Creature* creature, uint32 tokens, uint32 action)
21
    {
22
        player->PlayerTalkClass->ClearMenus();
23-
        if(sender == GOSSIP_SENDER_MAIN)
23+
        AtLoginFlags flag = (AtLoginFlags)action;
24
25-
            switch(action)
25+
        if(player->HasAtLoginFlag(flag))
26
            player->GetSession()->SendNotification("Already bought! Relog to use");
27-
            case RACE:
27+
        else if(!player->HasItemCount(TOKEN, tokens))
28-
                if(!player->HasItemCount(TOKEN, 1500))
28+
            player->GetSession()->SendNotification("Not enough tokens");
29-
                    player->GetSession()->SendNotification("Not enough tokens");
29+
        else
30-
                else
30+
31-
                {
31+
            player->DestroyItemCount(TOKEN, tokens, true);
32-
                    player->DestroyItemCount(TOKEN, 1500, true);
32+
            if(flag == AT_LOGIN_RENAME)
33-
                    PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
33+
                player->SetAtLoginFlag(AT_LOGIN_RENAME);
34-
                    stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_RACE));
34+
            else
35-
                    player->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE);
35+
36-
                    stmt->setUInt32(1, player->GetGUIDLow());
36+
                PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
37-
                    CharacterDatabase.Execute(stmt);
37+
                stmt->setUInt16(0, uint16(flag));
38-
                    player->GetSession()->SendAreaTriggerMessage("Relog to change race");
38+
                player->SetAtLoginFlag(flag);
39-
                    ChatHandler(player).PSendSysMessage("Relog to change race");
39+
                stmt->setUInt32(1, player->GetGUIDLow());
40-
                }
40+
                CharacterDatabase.Execute(stmt);
41-
                break;
41+
42-
            case FACTION:
42+
            char* msg = "";
43-
                if(!player->HasItemCount(TOKEN, 1500))
43+
            switch(flag)
44-
                    player->GetSession()->SendNotification("Not enough tokens");
44+
45-
                else
45+
            case AT_LOGIN_RENAME:           msg = "Relog to change name";           break;
46-
                {
46+
            case AT_LOGIN_CUSTOMIZE:        msg = "Relog to change appearance";     break;
47-
                    player->DestroyItemCount(TOKEN, 1500, true);
47+
            case AT_LOGIN_CHANGE_RACE:      msg = "Relog to change race";           break;
48-
                    PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
48+
            case AT_LOGIN_CHANGE_FACTION:   msg = "Relog to change faction";        break;
49-
                    stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_FACTION));
49+
50-
                    player->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION);
50+
            player->GetSession()->SendAreaTriggerMessage(msg);
51-
                    stmt->setUInt32(1, player->GetGUIDLow());
51+
            ChatHandler(player).PSendSysMessage(msg);
52-
                    CharacterDatabase.Execute(stmt);
52+
53-
                    player->GetSession()->SendAreaTriggerMessage("Relog to change faction");
53+
54-
                    ChatHandler(player).PSendSysMessage("Relog to change faction");
54+
55-
                }
55+
56-
                break;
56+
57-
            case APPEARANCE:
57+
58-
                if(!player->HasItemCount(TOKEN, 1000))
58+
59-
                    player->GetSession()->SendNotification("Not enough tokens");
59+
60-
                else
60+
61-
                {
61+