mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
162 lines
6.4 KiB
C++
162 lines
6.4 KiB
C++
#include "ScriptPCH.h"
|
|
|
|
extern CharacterDatabaseWorkerPool CharacterDatabase;
|
|
|
|
#define BROKEN_LEVEL 60
|
|
#define BROKEN_DRAENEIONLY true
|
|
#define BROKEN_PRICE 5000
|
|
#define BROKEN_MOUNT 700
|
|
#define BROKEN_MOUNT_ID 75614
|
|
#define FELORC_LEVEL 60
|
|
#define FELORC_ORCONLY true
|
|
#define FELORC_PRICE 5000
|
|
#define FELORC_MOUNT 700
|
|
#define FELORC_MOUNT_ID 72286
|
|
#define GOBLIN_LEVEL 1
|
|
#define GOBLIN_PRICE 5000
|
|
#define GOBLIN_MOUNT 1000
|
|
#define GOBLIN_MOUNT_ID 71342
|
|
|
|
class racechange_global_teleporter : public CreatureScript
|
|
{
|
|
public:
|
|
racechange_global_teleporter() : CreatureScript("racechange_global_teleporter") { }
|
|
|
|
bool OnGossipHello(Player* player, Creature* pCreature)
|
|
{
|
|
player->ADD_GOSSIP_ITEM(9, "Change Race ->", GOSSIP_SENDER_MAIN, 196);
|
|
player->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
|
|
return true;
|
|
|
|
if (player->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) != 21105 && player->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) && 21267
|
|
&& player->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) != 20582 && player->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) != 20583)
|
|
{
|
|
char broken[255];
|
|
sprintf(broken, "Switch race to Broken for %ug", BROKEN_PRICE);
|
|
|
|
char felorc[255];
|
|
sprintf(felorc, "Switch race to Fel Orc for %ug", FELORC_PRICE);
|
|
|
|
char goblin[255];
|
|
sprintf(goblin, "Switch race to Goblin for %ug", GOBLIN_PRICE);
|
|
|
|
if (BROKEN_DRAENEIONLY)
|
|
{
|
|
if (player->getRace() == RACE_DRAENEI && player->getGender() == GENDER_MALE && player->getLevel() >= BROKEN_LEVEL)
|
|
{
|
|
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(8, GOSSIP_ICON_MONEY_BAG, broken,
|
|
GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (player->getGender() == GENDER_MALE && player->getLevel() >= BROKEN_LEVEL)
|
|
{
|
|
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(8, GOSSIP_ICON_MONEY_BAG, broken,
|
|
GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true);
|
|
}
|
|
}
|
|
|
|
if (FELORC_ORCONLY)
|
|
{
|
|
if (player->getRace() == RACE_ORC && player->getGender() == GENDER_MALE && player->getLevel() >= FELORC_LEVEL)
|
|
{
|
|
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(8, GOSSIP_ICON_MONEY_BAG, felorc,
|
|
GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (player->getGender() == GENDER_MALE && player->getLevel() >= FELORC_LEVEL)
|
|
{
|
|
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(8, GOSSIP_ICON_MONEY_BAG, felorc,
|
|
GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true);
|
|
}
|
|
}
|
|
|
|
if (player->getGender() == GENDER_MALE && player->getLevel() >= GOBLIN_LEVEL)
|
|
{
|
|
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(8, GOSSIP_ICON_MONEY_BAG, goblin,
|
|
GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true);
|
|
}
|
|
else if (player->getGender() == GENDER_FEMALE && player->getLevel() >= GOBLIN_LEVEL)
|
|
{
|
|
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(8, GOSSIP_ICON_MONEY_BAG, goblin,
|
|
GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true);
|
|
}
|
|
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Good bye.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
|
|
player->SEND_GOSSIP_MENU(14, pCreature->GetGUID());
|
|
}
|
|
else
|
|
{
|
|
char brokenm[255];
|
|
sprintf(brokenm, "Buy Broken mount for %ug", BROKEN_MOUNT);
|
|
|
|
char felorcm[255];
|
|
sprintf(felorcm, "Buy Fel Orc mount for %ug", FELORC_MOUNT);
|
|
|
|
char goblinm[255];
|
|
sprintf(goblinm, "Buy Goblin multi-mount for %ug", GOBLIN_MOUNT);
|
|
|
|
QueryResult result = CharacterDatabase.PQuery("SELECT mount FROM character_overrides WHERE guid = %u", player->GetGUIDLow());
|
|
if (!result)
|
|
{
|
|
Field *fields = result->Fetch();
|
|
if (fields[0].GetInt32() == 0)
|
|
{
|
|
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(8, GOSSIP_ICON_MONEY_BAG, "Switch back to my original race",
|
|
GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7,
|
|
"Type in 'SWITCH', to return to your original race. You will get back 1/4 money.", 0, true);
|
|
switch(player->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID))
|
|
{
|
|
case 21105:
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, brokenm, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8);
|
|
break;
|
|
case 21267:
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, felorcm, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
|
|
break;
|
|
case 20582:
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, goblinm, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10);
|
|
break;
|
|
case 20583:
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, goblinm, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10);
|
|
break;
|
|
}
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Good bye.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
|
|
player->SEND_GOSSIP_MENU(15, pCreature->GetGUID());
|
|
}
|
|
else
|
|
{
|
|
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(8, GOSSIP_ICON_MONEY_BAG, "Switch back to my original race",
|
|
GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7,
|
|
"Type in 'SWITCH', to return to your original race. You will get back 1/4 money and your race mount will be removed.", 0, true);
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "Sell mount for 1/4 money.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
|
|
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Good bye.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
|
|
player->SEND_GOSSIP_MENU(16, pCreature->GetGUID());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
|
|
{
|
|
pPlayer->PlayerTalkClass->ClearMenus();
|
|
|
|
if (uiSender != GOSSIP_SENDER_MAIN) { return false; }
|
|
switch (uiAction) {
|
|
case GOSSIP_ACTION_INFO_DEF + 5:
|
|
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Lets talk a bit more...", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12);
|
|
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Good bye.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
|
|
pPlayer->SEND_GOSSIP_MENU(18, pCreature->GetGUID());
|
|
break;
|
|
}
|
|
|
|
pPlayer->CLOSE_GOSSIP_MENU();
|
|
return true;
|
|
}
|
|
};
|
|
|
|
void AddSC_racechange_global_teleporter()
|
|
{
|
|
new racechange_global_teleporter();
|
|
}
|