View difference between Paste ID: pRS2nF1p and tUrCYMNQ
SHOW: | | - or go back to the newest paste.
1-
/*
1+
2-
    AYE
2+
3-
    
3+
4-
    Tommy
4+
5-
*/
5+
6
};
7
8
// {icon, "title name", honored_kills, titleID}
9-
    uint32 menu_id;
9+
10
{
11
    {9, "Private", 1, 1 },
12
    {9, "Corporal", 100, 2 },
13
    {9, "Sergeant", 250, 3 },
14
    {9, "Master Sergeant", 500, 4 },
15
    {9, "Sergeant Major", 750, 5 },
16
    {9, "Knight", 1000, 6 },
17
    {9, "Knight-Lieutenant", 1500, 7 },
18-
    {1, 9, "Private", 1, 1 },
18+
    {9, "Knight-Captain", 2000, 8 },
19-
    {2, 9, "Corporal", 100, 2 },
19+
    {9, "Knight-Champion", 2500, 9 },
20-
    {3, 9, "Sergeant", 250, 3 },
20+
    {9, "Lieutenant Commander", 3000, 10 },
21-
    {4, 9, "Master Sergeant", 500, 4 },
21+
    {9, "Commander", 3500, 11 },
22-
    {5, 9, "Sergeant Major", 750, 5 },
22+
    {9, "Marshal", 4000, 12 },
23-
    {6, 9, "Knight", 1000, 6 },
23+
    {9, "Field Marshal", 4500, 13 },
24-
    {7, 9, "Knight-Lieutenant", 1500, 7 },
24+
    {9, "Grand Marshal", 5000, 14 },
25-
    {8, 9, "Knight-Captain", 2000, 8 },
25+
26-
    {9, 9, "Knight-Champion", 2500, 9 },
26+
    {9, "Scout", 1, 15 },
27-
    {10, 9, "Lieutenant Commander", 3000, 10 },
27+
    {9, "Grunt", 100, 16 },
28-
    {11, 9, "Commander", 3500, 11 },
28+
    {9, "Sergeant", 250, 17 },
29-
    {12, 9, "Marshal", 4000, 12 },
29+
    {9, "Senior Sergeant", 500, 18 },
30-
    {13, 9, "Field Marshal", 4500, 13 },
30+
    {9, "First Sergeant", 750, 19 },
31-
    {14, 9, "Grand Marshal", 5000, 14 },
31+
    {9, "Stone Guard", 1000, 20 },
32
    {9, "Blood Guard", 1500, 21 },
33-
    {15, 9, "Scout", 1, 15 },
33+
    {9, "Legionnaire", 2000, 22 },
34-
    {16, 9, "Grunt", 100, 16 },
34+
    {9, "Centurion", 2500, 23 },
35-
    {17, 9, "Sergeant", 250, 17 },
35+
    {9, "Champion", 3000, 24 },
36-
    {18, 9, "Senior Sergeant", 500, 18 },
36+
    {9, "Lieutenant General", 3500, 25 },
37-
    {19, 9, "First Sergeant", 750, 19 },
37+
    {9, "General", 4000, 26 },
38-
    {20, 9, "Stone Guard", 1000, 20 },
38+
    {9, "Warlord", 4500, 27 },
39-
    {21, 9, "Blood Guard", 1500, 21 },
39+
    {9, "High Warlord", 5000, 28 },
40-
    {22, 9, "Legionnaire", 2000, 22 },
40+
41-
    {23, 9, "Centurion", 2500, 23 },
41+
static const uint32 TITLES_SIZE = (sizeof(Titles) / sizeof(*Titles)); // NOTE, this was wrong. it was uint32 instead of *Titles or HonorGossip in the sizeof.
42-
    {24, 9, "Champion", 3000, 24 },
42+
43-
    {25, 9, "Lieutenant General", 3500, 25 },
43+
44-
    {26, 9, "General", 4000, 26 },
44+
45-
    {27, 9, "Warlord", 4500, 27 },
45+
46-
    {28, 9, "High Warlord", 5000, 28 },
46+
47
48
    bool OnGossipHello(Player* player, Creature* creature)
49
    {
50
        player->ADD_GOSSIP_ITEM(0, "|TInterface\\icons\\INV_Misc_QuestionMark:30|tHow does this npc work?|r", GOSSIP_SENDER_MAIN, 100);
51
        player->ADD_GOSSIP_ITEM(4, "|TInterface\\icons\\Achievement_PVP_H_15:30|tHonorable Kills Titles|r", GOSSIP_SENDER_MAIN, 101);
52
        player->ADD_GOSSIP_ITEM(7, "|TInterface\\icons\\Ability_Spy:30|tNevermind|r", GOSSIP_SENDER_MAIN, 102);
53
        player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
54
        return true;
55
    }
56-
		player->ADD_GOSSIP_ITEM(0, "|TInterface\\icons\\INV_Misc_QuestionMark:30|tHow does this npc work?|r", GOSSIP_SENDER_MAIN, 100);
56+
57-
		player->ADD_GOSSIP_ITEM(4, "|TInterface\\icons\\Achievement_PVP_H_15:30|tHonorable Kills Titles|r", GOSSIP_SENDER_MAIN, 101);
57+
58-
		player->ADD_GOSSIP_ITEM(7, "|TInterface\\icons\\Ability_Spy:30|tNevermind|r", GOSSIP_SENDER_MAIN, 102);
58+
59-
        player->SEND_GOSSIP_MENU(1, creature->GetGUID());
59+
60
        if (actions == 100)
61
        {
62
            ChatHandler(player->GetSession()).SendSysMessage("|cffff6060[Information]:|r This npc show you 2 different options,Honorable Kills Titles costed on LifeTime Kills,Devium WoW Titles show you our own titles |cffff0000[Patch Required]|r,and costed on [Devium Title Token].");
63
            OnGossipHello(player, creature);
64
        }
65
        else if(actions == 101)
66
        {
67
            if (player->GetTeamId() == ALLIANCE)
68-
		return false;
68+
                for (int i = 0; i < TITLES_SIZE/2; ++i)
69-
	}
69+
                    player->ADD_GOSSIP_ITEM(Titles[i].icon, Titles[i].name.c_str(), GOSSIP_SENDER_MAIN, i);
70
            else
71
                for (int i = TITLES_SIZE/2; i < TITLES_SIZE; ++i)
72-
            if (player->GetTeam() == ALLIANCE)
72+
                    player->ADD_GOSSIP_ITEM(Titles[i].icon, Titles[i].name.c_str(), GOSSIP_SENDER_MAIN, i);
73-
                for (int i = 0; i < 14; i++)
73+
            player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT, "<- Back", GOSSIP_SENDER_MAIN, 999);
74-
                    player->ADD_GOSSIP_ITEM(Titles[i].icon, Titles[i].name.c_str(), GOSSIP_SENDER_MAIN, Titles[i].menu_id);
74+
            player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
75
        }
76-
                for (int i = 14; i < 28; i++)
76+
77-
                    player->ADD_GOSSIP_ITEM(Titles[i].icon, Titles[i].name.c_str(), GOSSIP_SENDER_MAIN, Titles[i].menu_id);
77+
78-
						player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT, "<- Back", GOSSIP_SENDER_MAIN, 999);
78+
        else if (actions == 999) // NOTE main menu, no need to write the options twice, use the function like this.
79-
                        player->SEND_GOSSIP_MENU(1, creature->GetGUID());
79+
            OnGossipHello(player, creature);
80
        else if (actions < TITLES_SIZE) // must check so we wont accidently go overboard
81
        {
82
            if (player->HasTitle(Titles[actions].titleID))
83
                player->GetSession()->SendNotification("You already have this title!");
84-
		else if (actions == 999)
84+
            else if (player->GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS) < Titles[actions].HK)
85
                player->GetSession()->SendNotification("You don't have enough kills!");
86-
		player->ADD_GOSSIP_ITEM(0, "|TInterface\\icons\\INV_Misc_QuestionMark:30|tHow does this npc work?|r", GOSSIP_SENDER_MAIN, 100);
86+
            else if (CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(Titles[actions].titleID))
87-
		player->ADD_GOSSIP_ITEM(4, "|TInterface\\icons\\Achievement_PVP_H_15:30|tHonorable Kills Titles|r", GOSSIP_SENDER_MAIN, 101);
87+
88-
		player->ADD_GOSSIP_ITEM(7, "|TInterface\\icons\\Ability_Spy:30|tNevermind|r", GOSSIP_SENDER_MAIN, 102);
88+
                player->SetTitle(titleEntry);
89-
        player->SEND_GOSSIP_MENU(1, creature->GetGUID());
89+
                player->GetSession()->SendAreaTriggerMessage("Title granted!");
90
            }
91
            OnGossipHello(player, creature);
92-
        for (int i = 0; i < sizeof(Titles) / sizeof(uint32); i++)
92+
93
        return true; // NOTE always return true, unless you want to send the default gossip menu from DB
94-
            if (actions == Titles[i].menu_id)
94+
95
};
96-
                if (player->HasTitle(Titles[i].titleID))
96+
97-
                {
97+
98-
                    player->GetSession()->SendNotification("You already have this title!");
98+
99-
                    return false;
99+
100-
                }
100+