mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
136 lines
4.8 KiB
C++
136 lines
4.8 KiB
C++
|
|
#include "ScriptMgr.h"
|
||
|
|
#include "Player.h"
|
||
|
|
#include "Creature.h"
|
||
|
|
#include "ScriptedGossip.h"
|
||
|
|
#include "Config.h"
|
||
|
|
#include "Chat.h"
|
||
|
|
|
||
|
|
using namespace std;
|
||
|
|
|
||
|
|
#define DEFAULT_MESSAGE 907
|
||
|
|
|
||
|
|
struct TitleData
|
||
|
|
{
|
||
|
|
uint32 Menu;
|
||
|
|
uint32 Submenu;
|
||
|
|
uint32 Icon;
|
||
|
|
uint32 Id;
|
||
|
|
string Name;
|
||
|
|
};
|
||
|
|
|
||
|
|
TitleData tData[] =
|
||
|
|
{
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 78, "The Explorer" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 84, "Chef" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 83, "Salty" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 125, "Loremaster" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 81, "The Seeker" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 172, "the Patient" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 74, "Elder" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 135, "The Love Fool" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 155, "The Noble" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 133, "Brewmaster" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 124, "The Hallowed" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 168, "Pilgrim" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 134, "Merrymaker" },
|
||
|
|
{ 1, 0, GOSSIP_ICON_BATTLE, 143, "Jenkins" },
|
||
|
|
{ 1, 2, GOSSIP_ICON_TALK, 0, "Next.." },
|
||
|
|
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 46, "Scarab Lord" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 129, "Champion of the Frozen Wastes" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 142, "The Undying" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 141, "The Immortal" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 140, "of the Nightfall" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 121, "Twilight Vanquisher" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 164, "Starcaller" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 165, "The Astral Walker" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 166, "Herald of the Titans" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 161, "Champion of Ulduar" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 160, "Conqueror of Ulduar" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 174, "Bane of the Fallen King" },
|
||
|
|
{ 2, 0, GOSSIP_ICON_BATTLE, 173, "The Light of Dawn" },
|
||
|
|
{ 2, 3, GOSSIP_ICON_TALK, 0, "Next.." },
|
||
|
|
{ 2, 1, GOSSIP_ICON_TALK, 0, "..Back" },
|
||
|
|
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 175, "The Kingslayer" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 63, "of the Shattered Sun" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 130, "Ambassador" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 144, "Bloodsail Admiral" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 79, "The Diplomat" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 132, "Guardian of Cenarius" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 131, "The Argent Champion" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 176, "of the Ashen Verdict" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 77, "The Exalted" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 145, "The Insane" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 72, "Battlemaster" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 82, "Arena Master" },
|
||
|
|
{ 3, 0, GOSSIP_ICON_BATTLE, 43, "Duelist" },
|
||
|
|
{ 3, 4, GOSSIP_ICON_TALK, 0, "Next.." },
|
||
|
|
{ 3, 2, GOSSIP_ICON_TALK, 0, "..Back" },
|
||
|
|
|
||
|
|
{ 4, 0, GOSSIP_ICON_BATTLE, 44, "Rival" },
|
||
|
|
{ 4, 0, GOSSIP_ICON_BATTLE, 45, "Challenger" },
|
||
|
|
{ 4, 0, GOSSIP_ICON_BATTLE, 163, "Vanquisher" },
|
||
|
|
{ 4, 0, GOSSIP_ICON_BATTLE, 156, "Crusader" },
|
||
|
|
{ 4, 0, GOSSIP_ICON_BATTLE, 93, "Archmage" },
|
||
|
|
{ 4, 0, GOSSIP_ICON_BATTLE, 53, "Champion of the Naaru" },
|
||
|
|
{ 4, 0, GOSSIP_ICON_BATTLE, 64, "Hand of A'dal" },
|
||
|
|
{ 4, 0, GOSSIP_ICON_BATTLE, 128, "Flawless Victor" },
|
||
|
|
{ 4, 3, GOSSIP_ICON_TALK, 0, "..Back" },
|
||
|
|
};
|
||
|
|
|
||
|
|
class NPC_Title : public CreatureScript
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
NPC_Title() : CreatureScript("NPC_Title") { }
|
||
|
|
|
||
|
|
void GetMenu(Player* player, Creature* creature, uint32 menuId)
|
||
|
|
{
|
||
|
|
for (uint8 i = 0; i < (sizeof(tData) / sizeof(*tData)); i++)
|
||
|
|
{
|
||
|
|
if (tData[i].Menu == menuId)
|
||
|
|
AddGossipItemFor(player, tData[i].Icon, tData[i].Name, GOSSIP_SENDER_MAIN, i);
|
||
|
|
}
|
||
|
|
|
||
|
|
SendGossipMenuFor(player, DEFAULT_MESSAGE, creature->GetGUID());
|
||
|
|
}
|
||
|
|
|
||
|
|
bool OnGossipHello(Player* player, Creature* creature)
|
||
|
|
{
|
||
|
|
GetMenu(player, creature, 1);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)
|
||
|
|
{
|
||
|
|
player->PlayerTalkClass->ClearMenus();
|
||
|
|
|
||
|
|
uint32 token = sConfigMgr->GetIntDefault("NT.Token", 0);
|
||
|
|
uint32 count = sConfigMgr->GetIntDefault("NT.Count", 0);
|
||
|
|
|
||
|
|
uint8 menuData = tData[action].Submenu;
|
||
|
|
|
||
|
|
if (menuData == 0)
|
||
|
|
{
|
||
|
|
if (!player->HasItemCount(token, count, false))
|
||
|
|
{
|
||
|
|
ChatHandler(player->GetSession()).PSendSysMessage("Failure! You not have the token.");
|
||
|
|
CloseGossipMenuFor(player);
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
player->SetTitle(sCharTitlesStore.LookupEntry(tData[action].Id));
|
||
|
|
player->DestroyItemCount(token, count, true, false);
|
||
|
|
ChatHandler(player->GetSession()).PSendSysMessage("Success! Title added.");
|
||
|
|
menuData = tData[action].Menu;
|
||
|
|
}
|
||
|
|
|
||
|
|
GetMenu(player, creature, menuData);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
void AddSC_NPC_Title()
|
||
|
|
{
|
||
|
|
new NPC_Title;
|
||
|
|
}
|