eluna-scripts-ornfelt/lua/WowEmulationScriptPack/C++/player_mount.cpp
2024-09-23 07:59:23 +02:00

635 lines
No EOL
27 KiB
C++

#include "ArenaTeamMgr.h"
#include "ScriptPCH.h"
#include <cstring>
#include <string.h>
//TODO: Make all these mounts with these ID's
//ITEM ID FOR THE MOUNT 1 2 3 4 5
uint32 PM_MOUNTS_ARR [12] = {0, 65128,65129,65130,65131,65132,93025,93026,93027,93054,93061,93065};
enum PLAYER_MOUNTS
{
PM_MOUNT_ITEM_1 = 65128,
PM_MOUNT_ITEM_2 = 65129,
PM_MOUNT_ITEM_3 = 65130,
PM_MOUNT_ITEM_4 = 65131,
PM_MOUNT_ITEM_5 = 65132,
PM_MOUNT_ITEM_6 = 93025,
PM_MOUNT_ITEM_7 = 93026,
PM_MOUNT_ITEM_8 = 93027,
PM_MOUNT_ITEM_9 = 93054,
PM_MOUNT_ITEM_10 = 93061,
PM_MOUNT_ITEM_11 = 93065,
PVP_TICKET_ID = 19182,
PVP_TICKET_COST = 50,
ARENA_TEAM_COST = 1500,
BROKEN_SOUL_ID = 29438,
BROKEN_SOUL_COST = 1500
};
enum PMGossipMenuOptions
{
OPTION_BUY_1 = GOSSIP_ACTION_INFO_DEF + 22,
OPTION_BUY_2_HK = GOSSIP_ACTION_INFO_DEF + 23,
OPTION_BUY_2_DP = GOSSIP_ACTION_INFO_DEF + 24,
OPTION_BUY_2_VP = GOSSIP_ACTION_INFO_DEF + 25,
OPTION_BUY_3_PVP = GOSSIP_ACTION_INFO_DEF + 26,
OPTION_BUY_3_DP = GOSSIP_ACTION_INFO_DEF + 27,
OPTION_BUY_3_VP = GOSSIP_ACTION_INFO_DEF + 28,
OPTION_BUY_4_HK = GOSSIP_ACTION_INFO_DEF + 29,
OPTION_BUY_4_DP = GOSSIP_ACTION_INFO_DEF + 30,
OPTION_BUY_4_VP = GOSSIP_ACTION_INFO_DEF + 31,
OPTION_BUY_5_ARENA = GOSSIP_ACTION_INFO_DEF + 32,
OPTION_BUY_5_DP = GOSSIP_ACTION_INFO_DEF + 33,
OPTION_BUY_5_VP = GOSSIP_ACTION_INFO_DEF + 34,
OPTION_BUY_6 = GOSSIP_ACTION_INFO_DEF + 35,
OPTION_BUY_6_DP = GOSSIP_ACTION_INFO_DEF + 36,
OPTION_BUY_6_VP = GOSSIP_ACTION_INFO_DEF + 37,
OPTION_BUY_7 = GOSSIP_ACTION_INFO_DEF + 38,
OPTION_BUY_7_DP = GOSSIP_ACTION_INFO_DEF + 39,
OPTION_BUY_7_VP = GOSSIP_ACTION_INFO_DEF + 40,
OPTION_BUY_8 = GOSSIP_ACTION_INFO_DEF + 41,
OPTION_BUY_8_DP = GOSSIP_ACTION_INFO_DEF + 42,
OPTION_BUY_8_VP = GOSSIP_ACTION_INFO_DEF + 43,
OPTION_BUY_9 = GOSSIP_ACTION_INFO_DEF + 44,
OPTION_BUY_9_DP = GOSSIP_ACTION_INFO_DEF + 45,
OPTION_BUY_9_VP = GOSSIP_ACTION_INFO_DEF + 46,
OPTION_BUY_10 = GOSSIP_ACTION_INFO_DEF + 47,
OPTION_BUY_10_DP = GOSSIP_ACTION_INFO_DEF + 48,
OPTION_BUY_10_VP = GOSSIP_ACTION_INFO_DEF + 49,
OPTION_BUY_11 = GOSSIP_ACTION_INFO_DEF + 50,
OPTION_BUY_11_DP = GOSSIP_ACTION_INFO_DEF + 51,
OPTION_BUY_11_VP = GOSSIP_ACTION_INFO_DEF + 52,
OPTION_GOODBYE = GOSSIP_ACTION_INFO_DEF + 100,
};
//GOSSIP TEXT STRING 1 2 3 4 5
std::string PM_MOUNT_TEXT [12] = {"Null(LeaveBlank)", "Ashes of Al'ar", "Argent Hippogryph", "Magnificent Flying Carpet", "Icebound Frostbrood Vanquisher", "Blazing Hippogryph", "Swift Orange Drake", "Swift Purple Drake", "Swift Red Drake", "Blue Cloud Serpent", "Celestial Serpent", "Purple Deepholm Dragon"};
//SPELL ID FOR THE MOUNT 1 2 3 4 5
uint32 PM_MOUNT_SPELL [12] = {0, 40192,63844,61309,72807,74856,93025,93026,93027,93054,93061,93065};
//HK REQUIRED FOR MOUNT 1 2 3 4 5
uint32 PM_MOUNT_COST_HK [8] = {0, 0, 5000, 0, 7500, 0, 10000, 15000};
//DP REQUIRED FOR MOUNT 1 2 3 4 5
uint32 PM_MOUNT_COST_DP [12] = {0, 0, 5, 7, 10, 15, 20, 20, 20, 25, 30, 35};
//VP REQUIRED FOR MOUNT 1 2 3 4 5
uint32 PM_MOUNT_COST_VP [12] = {0, 0, 75, 100, 150, 200, 200, 200, 300, 350, 400, 500};
class npc_player_mount : public CreatureScript
{
public:
npc_player_mount() : CreatureScript("npc_player_mount") { }
bool OnGossipHello(Player* player, Creature* creature)
{
if(!player || player->isInCombat())
return false;
if(!HasMount(player, PM_MOUNTS_ARR[1]))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, PM_MOUNT_TEXT[1]+"[Unlocked]", GOSSIP_SENDER_MAIN, OPTION_BUY_1);
for(uint32 count = 2; count < 12; count++)
{
if(!HasMount(player, PM_MOUNTS_ARR[count]))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, PM_MOUNT_TEXT[count]+"[Locked]", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+count+10);
}
player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
return true;
}
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
{
player->PlayerTalkClass->ClearMenus();
player->PlayerTalkClass->SendCloseGossip();
uint32 HK_Count = player->GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS);
uint32 DP_Count = GetDonationPoints(player->GetSession()->GetAccountId());
uint32 VP_Count = GetVotePoints(player->GetSession()->GetAccountId());
bool PVP_TICKET = GetPvpTicketCount(player, PVP_TICKET_COST);
bool ARENA_RATE = GetArenaTeamRating(player);
switch(uiAction)
{
//PURCHASE 2ND MOUNT
case OPTION_BUY_1:
GiveMountItem(player, PM_MOUNTS_ARR[1], 0, 0);
return true;
case OPTION_BUY_2_HK:
GiveMountItem(player, PM_MOUNTS_ARR[2], 0, 0);
return true;
case OPTION_BUY_2_DP:
GiveMountItem(player, PM_MOUNTS_ARR[2], PM_MOUNT_COST_DP[2], 0);
return true;
case OPTION_BUY_2_VP:
GiveMountItem(player, PM_MOUNTS_ARR[2], 0, PM_MOUNT_COST_VP[2]);
return true;
//PURCHASE 3ND MOUNT
case OPTION_BUY_3_PVP:
GiveMountItem(player, PM_MOUNTS_ARR[3], 0, 0, true);
return true;
case OPTION_BUY_3_DP:
GiveMountItem(player, PM_MOUNTS_ARR[3], PM_MOUNT_COST_DP[3], 0);
return true;
case OPTION_BUY_3_VP:
GiveMountItem(player, PM_MOUNTS_ARR[3], 0, PM_MOUNT_COST_VP[3]);
return true;
//PURCHASE 4TH MOUNT
case OPTION_BUY_4_HK:
GiveMountItem(player, PM_MOUNTS_ARR[4], 0, 0);
return true;
case OPTION_BUY_4_DP:
GiveMountItem(player, PM_MOUNTS_ARR[4], PM_MOUNT_COST_DP[4], 0);
return true;
case OPTION_BUY_4_VP:
GiveMountItem(player, PM_MOUNTS_ARR[4], 0, PM_MOUNT_COST_VP[4]);
return true;
//PURCHASE 5TH MOUNT
case OPTION_BUY_5_ARENA:
if(player->HasItemCount(BROKEN_SOUL_ID, BROKEN_SOUL_COST))
{
player->DestroyItemCount(BROKEN_SOUL_ID, BROKEN_SOUL_COST, true);
GiveMountItem(player, PM_MOUNTS_ARR[5], 0, 0);
}
return true;
case OPTION_BUY_5_DP:
GiveMountItem(player, PM_MOUNTS_ARR[5], PM_MOUNT_COST_DP[5], 0);
return true;
case OPTION_BUY_5_VP:
GiveMountItem(player, PM_MOUNTS_ARR[5], 0, PM_MOUNT_COST_VP[5]);
return true;
//PURCHASE 6TH MOUNT
case OPTION_BUY_6:
if(player->HasItemCount(19182, 125, false) && player->HasItemCount(29438, 1500))
{
player->DestroyItemCount(19182, 125, true);
player->DestroyItemCount(29438, 1500, true);
GiveMountItem(player, PM_MOUNTS_ARR[6], 0, 0);
}
return true;
case OPTION_BUY_6_DP:
GiveMountItem(player, PM_MOUNTS_ARR[6], PM_MOUNT_COST_DP[6], 0);
return true;
case OPTION_BUY_6_VP:
GiveMountItem(player, PM_MOUNTS_ARR[6], 0, PM_MOUNT_COST_VP[6]);
return true;
//PURCHASE 7TH MOUNT
case OPTION_BUY_7:
if(player->HasItemCount(20880, 150, false) && player->HasItemCount(29435, 1250))
{
player->DestroyItemCount(20880, 350, true);
player->DestroyItemCount(29435, 1250, true);
GiveMountItem(player, PM_MOUNTS_ARR[7], 0, 0);
}
return true;
case OPTION_BUY_7_DP:
GiveMountItem(player, PM_MOUNTS_ARR[7], PM_MOUNT_COST_DP[7], 0);
return true;
case OPTION_BUY_7_VP:
GiveMountItem(player, PM_MOUNTS_ARR[7], 0, PM_MOUNT_COST_VP[7]);
return true;
//PURCHASE 8TH MOUNT
case OPTION_BUY_8:
if(HK_Count >= PM_MOUNT_COST_HK[6] && player->HasItemCount(20880, 350))
{
player->DestroyItemCount(20880, 150, true);
GiveMountItem(player, PM_MOUNTS_ARR[8], 0, 0);
}
return true;
case OPTION_BUY_8_DP:
GiveMountItem(player, PM_MOUNTS_ARR[8], PM_MOUNT_COST_DP[8], 0);
return true;
case OPTION_BUY_8_VP:
GiveMountItem(player, PM_MOUNTS_ARR[8], 0, PM_MOUNT_COST_VP[8]);
return true;
//PURCHASE 9TH MOUNT
case OPTION_BUY_9:
if(player->HasItemCount(23247, 750, false) && player->HasItemCount(40752, 500))
{
player->DestroyItemCount(23247, 750, true);
player->DestroyItemCount(40752, 500, true);
GiveMountItem(player, PM_MOUNTS_ARR[8], 0, 0);
}
return true;
case OPTION_BUY_9_DP:
GiveMountItem(player, PM_MOUNTS_ARR[9], PM_MOUNT_COST_DP[9], 0);
return true;
case OPTION_BUY_9_VP:
GiveMountItem(player, PM_MOUNTS_ARR[9], 0, PM_MOUNT_COST_VP[9]);
return true;
//PURCHASE 9TH MOUNT
case OPTION_BUY_10:
if(player->HasItemCount(23247, 2000) && player->HasItemCount(19182, 200))
{
player->DestroyItemCount(23247, 2000, true);
player->DestroyItemCount(19182, 200, true);
GiveMountItem(player, PM_MOUNTS_ARR[10], 0, 0);
}
return true;
case OPTION_BUY_10_DP:
GiveMountItem(player, PM_MOUNTS_ARR[10], PM_MOUNT_COST_DP[10], 0);
return true;
case OPTION_BUY_10_VP:
GiveMountItem(player, PM_MOUNTS_ARR[10], 0, PM_MOUNT_COST_VP[10]);
return true;
//PURCHASE 9TH MOUNT
case OPTION_BUY_11:
if(player->HasItemCount(29438, 1500) && player->HasItemCount(29435, 1500) && player->HasItemCount(29437, 500))
{
player->DestroyItemCount(29438, 1500, true);
player->DestroyItemCount(29435, 1500, true);
player->DestroyItemCount(29437, 500, true);
GiveMountItem(player, PM_MOUNTS_ARR[11], 0, 0);
}
return true;
case OPTION_BUY_11_DP:
GiveMountItem(player, PM_MOUNTS_ARR[11], PM_MOUNT_COST_DP[11], 0);
return true;
case OPTION_BUY_11_VP:
GiveMountItem(player, PM_MOUNTS_ARR[11], 0, PM_MOUNT_COST_VP[11]);
return true;
//END PURCHASE MOUNT
//DISPLAY PURCHASE PRICES 2nd
case GOSSIP_ACTION_INFO_DEF + 12:
if(HK_Count >= PM_MOUNT_COST_HK[2])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_HK[2])+" HK's ["+iToS(HK_Count)+" HK's]", GOSSIP_SENDER_MAIN, OPTION_BUY_2_HK);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_HK[2])+" HK's [You have "+iToS(HK_Count)+" HK's]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(DP_Count >= PM_MOUNT_COST_DP[2])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_DP[2])+" DP ["+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_BUY_2_DP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_DP[2])+" DP [You have "+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(VP_Count >= PM_MOUNT_COST_VP[2])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_VP[2])+" VP ["+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_BUY_2_VP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_VP[2])+" VP [You have "+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
break;
//DISPLAY PURCHASE PRICES 3rd
case GOSSIP_ACTION_INFO_DEF + 13:
if(PVP_TICKET)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PVP_TICKET_COST)+" PVP Ticket's", GOSSIP_SENDER_MAIN, OPTION_BUY_3_PVP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PVP_TICKET_COST)+" PVP Ticket's", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(DP_Count >= PM_MOUNT_COST_DP[3])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_DP[3])+" DP ["+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_BUY_3_DP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_DP[3])+" DP [You have "+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(VP_Count >= PM_MOUNT_COST_VP[3])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_VP[3])+" VP ["+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_BUY_3_VP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_VP[3])+" VP [You have "+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
break;
//DISPLAY PURCHASE PRICES 4th
case GOSSIP_ACTION_INFO_DEF + 14:
if(HK_Count >= PM_MOUNT_COST_HK[4])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_HK[4])+" HK's ["+iToS(HK_Count)+" HK's]", GOSSIP_SENDER_MAIN, OPTION_BUY_4_HK);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_HK[4])+" HK's [You have "+iToS(HK_Count)+" HK's]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(DP_Count >= PM_MOUNT_COST_DP[4])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_DP[4])+" DP ["+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_BUY_4_DP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_DP[4])+" DP [You have "+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(VP_Count >= PM_MOUNT_COST_VP[4])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_VP[4])+" VP ["+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_BUY_4_VP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_VP[4])+" VP [You have "+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
break;
//DISPLAY PURCHASE PRICES 5th
case GOSSIP_ACTION_INFO_DEF + 15:
if(ARENA_RATE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(ARENA_TEAM_COST)+" Arena Rating & 1500 Broken Souls", GOSSIP_SENDER_MAIN, OPTION_BUY_5_ARENA);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(ARENA_TEAM_COST)+" Arena Rating & 1500 Broken Souls", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(DP_Count >= PM_MOUNT_COST_DP[5])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_DP[5])+" DP ["+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_BUY_5_DP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_DP[5])+" DP [You have "+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(VP_Count >= PM_MOUNT_COST_VP[5])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_VP[5])+" VP ["+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_BUY_5_VP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_VP[5])+" VP [You have "+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
break;
//DISPLAY PURCHASE PRICES 6th
case GOSSIP_ACTION_INFO_DEF + 16:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "This mount is a 400% Flying Mount.", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(player->HasItemCount(19182, 125) && player->HasItemCount(29438, 1500))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with 125 PVP Ticket's & 1500 Broken Souls", GOSSIP_SENDER_MAIN, OPTION_BUY_6);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need 125 PVP Ticket's & 1500 Broken Souls", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(DP_Count >= PM_MOUNT_COST_DP[6])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_DP[6])+" DP ["+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_BUY_6_DP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_DP[6])+" DP [You have "+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(VP_Count >= PM_MOUNT_COST_VP[6])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_VP[6])+" VP ["+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_BUY_6_VP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_VP[6])+" VP [You have "+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
break;
//DISPLAY PURCHASE PRICES 7th
case GOSSIP_ACTION_INFO_DEF + 17:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "This mount is a 400% Flying Mount.", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(player->HasItemCount(20880, 150) && player->HasItemCount(29435, 1250))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with 150 Battlemasters Tokens & 1250 Stolen Souls", GOSSIP_SENDER_MAIN, OPTION_BUY_7);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need 150 Battlemasters Tokens & 1250 Stolen Souls", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(DP_Count >= PM_MOUNT_COST_DP[7])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_DP[7])+" DP ["+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_BUY_7_DP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_DP[7])+" DP [You have "+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(VP_Count >= PM_MOUNT_COST_VP[7])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_VP[7])+" VP ["+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_BUY_7_VP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_VP[7])+" VP [You have "+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
break;
//DISPLAY PURCHASE PRICES 8th
case GOSSIP_ACTION_INFO_DEF + 18:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "This mount is a 400% Flying Mount.", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(player->HasItemCount(23247, 750) && player->HasItemCount(40752, 500))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with 750 Event Coins & 500 TD Coins", GOSSIP_SENDER_MAIN, OPTION_BUY_8);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need 750 Event coins & 500 TD Coins", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(DP_Count >= PM_MOUNT_COST_DP[8])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_DP[8])+" DP ["+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_BUY_8_DP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_DP[8])+" DP [You have "+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(VP_Count >= PM_MOUNT_COST_VP[8])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_VP[8])+" VP ["+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_BUY_8_VP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_VP[8])+" VP [You have "+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
break;
case GOSSIP_ACTION_INFO_DEF + 19:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "This mount is a 500% Flying Mount.", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(HK_Count >= PM_MOUNT_COST_HK[6] && player->HasItemCount(20880, 350))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_HK[6])+" HK's ["+iToS(HK_Count)+" HK's] + 350 BM Tokens", GOSSIP_SENDER_MAIN, OPTION_BUY_9);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_HK[6])+" HK's [You have "+iToS(HK_Count)+" HK's] + 350 BM Tokens", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(DP_Count >= PM_MOUNT_COST_DP[9])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_DP[9])+" DP ["+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_BUY_9_DP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_DP[9])+" DP [You have "+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(VP_Count >= PM_MOUNT_COST_VP[9])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_VP[9])+" VP ["+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_BUY_9_VP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_VP[9])+" VP [You have "+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
break;
case GOSSIP_ACTION_INFO_DEF + 20:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "This mount is a 600% Flying Mount.", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(player->HasItemCount(23247, 2000) && player->HasItemCount(19182, 200))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with 2000 Event Coins & 200 PvP Tickets", GOSSIP_SENDER_MAIN, OPTION_BUY_10);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need 2000 Event coins & 200 PvP Tickets", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(DP_Count >= PM_MOUNT_COST_DP[10])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_DP[10])+" DP ["+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_BUY_10_DP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_DP[10])+" DP [You have "+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(VP_Count >= PM_MOUNT_COST_VP[10])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_VP[10])+" VP ["+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_BUY_10_VP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_VP[10])+" VP [You have "+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
break;
case GOSSIP_ACTION_INFO_DEF + 21:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "This mount is a 700% Flying Mount. RAUWR!", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(HK_Count >= PM_MOUNT_COST_HK[7] && player->HasItemCount(29438, 1500) && player->HasItemCount(29435, 1500) && player->HasItemCount(29437, 500))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_HK[7])+" HK's ["+iToS(HK_Count)+" HK's] + 2000 Broken Souls, 2000 Stolen Souls & 500 Pure Souls", GOSSIP_SENDER_MAIN, OPTION_BUY_11);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_HK[7])+" HK's [You have "+iToS(HK_Count)+" HK's] + 2000 Broken Souls, 2000 Stolen Souls & 500 Pure Souls", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(DP_Count >= PM_MOUNT_COST_DP[11])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_DP[11])+" DP ["+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_BUY_11_DP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_DP[11])+" DP [You have "+iToS(DP_Count)+" DP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
if(VP_Count >= PM_MOUNT_COST_VP[11])
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Buy with "+iToS(PM_MOUNT_COST_VP[11])+" VP ["+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_BUY_11_VP);
else
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "You need "+iToS(PM_MOUNT_COST_VP[11])+" VP [You have "+iToS(VP_Count)+" VP]", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
break;
//END DISPLAY PRICES
case OPTION_GOODBYE: return true; break;
default: break;
}
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Goodbye.", GOSSIP_SENDER_MAIN, OPTION_GOODBYE);
player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID());
return true;
}
bool HasMount(Player* player, uint32 ItemId)
{
if(!player || !ItemId)
return false;
if(player->HasItemCount(ItemId, 1))
return true;
return false;
}
bool GiveMountItem(Player* player, uint32 MountItem, uint32 dp, uint32 vp, bool pvpticket = false)
{
if(dp != 0)
{
if(!RemoveDonationPoints(player->GetSession()->GetAccountId(), dp))
return false;
}
if(vp != 0)
{
if(!RemoveVotePoints(player->GetSession()->GetAccountId(), vp))
return false;
}
if(pvpticket)
{
if(!RemovePvpTicket(player, PVP_TICKET_COST))
return false;
}
ItemPosCountVec dest;
if(player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, MountItem, 1) == EQUIP_ERR_OK)
{
if(player->AddItem(MountItem, 1))
{
player->GetSession()->SendAreaTriggerMessage("The mount has been placed in your bag!");
ChatHandler(player->GetSession()).PSendSysMessage("The mount has been placed in your bag!");
return true;
}
}
return false;
}
uint32 GetVotePoints(uint32 PlayerId)
{
uint32 vp;
QueryResult result = LoginDatabase.PQuery("SELECT vp FROM fusion.account_data WHERE id = '%u'", PlayerId);
if(result)
{
vp = (*result)[0].GetUInt32();
if (vp < 0)
return 0;
} else {
return 0;
}
return vp;
}
bool RemoveVotePoints(uint32 PlayerId, uint32 Count)
{
if(Count > 0)
LoginDatabase.PExecute("UPDATE fusion.account_data SET vp = vp - '%u' WHERE id = '%u'", Count, PlayerId);
return true;
}
uint32 GetDonationPoints(uint32 PlayerId)
{
uint32 dp;
QueryResult result = LoginDatabase.PQuery("SELECT dp FROM fusion.account_data WHERE id = '%u'", PlayerId);
if(result)
{
dp = (*result)[0].GetUInt32();
if (dp < 0)
return 0;
} else {
return 0;
}
return dp;
}
bool RemoveDonationPoints(uint32 PlayerId, uint32 Count)
{
if(Count > 0)
LoginDatabase.PExecute("UPDATE fusion.account_data SET dp = dp - '%u' WHERE id = '%u'", Count, PlayerId);
return true;
}
bool GetPvpTicketCount(Player* player, uint32 count)
{
if(!player->HasItemCount(PVP_TICKET_ID, count))
return false;
return true;
}
bool RemovePvpTicket(Player* player, uint32 Count)
{
player->DestroyItemCount(PVP_TICKET_ID, Count, true);
return true;
}
bool GetArenaTeamRating(Player* player)
{
for (uint8 i = 0; i < MAX_ARENA_SLOT; ++i)
{
if (ArenaTeam* at = sArenaTeamMgr->GetArenaTeamById(player->GetArenaTeamId(i)))
{
if(at->GetRating() >= ARENA_TEAM_COST)
return true;
}
}
return false;
}
std::string iToS(uint32 integer)
{
std::stringstream out;
out << integer;
return out.str();
}
};
class item_player_mount_class : public ItemScript
{
public:
item_player_mount_class() : ItemScript("item_player_mount") { }
bool OnUse(Player* player, Item* item, SpellCastTargets const& targets)
{
if(player->isInCombat()){
ChatHandler(player->GetSession()).PSendSysMessage("You can not use this item while in combat!"); return false;
}
if(player->isDead()){
ChatHandler(player->GetSession()).PSendSysMessage("You can not use this item when you're dead!"); return false;
}
if(player->isInFlight() || player->IsFlying() || player->IsFalling()){
ChatHandler(player->GetSession()).PSendSysMessage("You can not use this item while in flight!"); return false;
}
if(player->IsMounted()){
ChatHandler(player->GetSession()).PSendSysMessage("You can not use this item while mounted!"); return false;
}
Map *plrMap = player->GetMap();
if(plrMap->IsBattlegroundOrArena() || plrMap->IsDungeon()){
ChatHandler(player->GetSession()).PSendSysMessage("You can not use this item here!"); return false;
}
switch(item->GetEntry())
{
case PM_MOUNT_ITEM_1: SummonFlyingMount(player, PM_MOUNT_SPELL[1]);break;
case PM_MOUNT_ITEM_2: SummonFlyingMount(player, PM_MOUNT_SPELL[2]);break;
case PM_MOUNT_ITEM_3: SummonFlyingMount(player, PM_MOUNT_SPELL[3]);break;
case PM_MOUNT_ITEM_4: SummonFlyingMount(player, PM_MOUNT_SPELL[4]);break;
case PM_MOUNT_ITEM_5: SummonFlyingMount(player, PM_MOUNT_SPELL[5]);break;
case PM_MOUNT_ITEM_6: SummonFlyingMount(player, PM_MOUNT_SPELL[6]);break;
case PM_MOUNT_ITEM_7: SummonFlyingMount(player, PM_MOUNT_SPELL[7]);break;
case PM_MOUNT_ITEM_8: SummonFlyingMount(player, PM_MOUNT_SPELL[8]);break;
case PM_MOUNT_ITEM_9: SummonFlyingMount(player, PM_MOUNT_SPELL[9]);break;
case PM_MOUNT_ITEM_10: SummonFlyingMount(player, PM_MOUNT_SPELL[10]);break;
case PM_MOUNT_ITEM_11: SummonFlyingMount(player, PM_MOUNT_SPELL[11]);break;
case 65133: SummonFlyingMount(player, 59567);break;
default: break;
}
return true;
}
void SummonFlyingMount(Player* player, uint32 spellID)
{
Pet* plrPet = player->GetPet();
if(plrPet)
plrPet->UnSummon();
player->UnsummonPetTemporaryIfAny();
player->CastSpell(player, spellID, false);
}
};
void AddSC_player_mount()
{
new npc_player_mount();
new item_player_mount_class();
}