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

1407 lines
No EOL
71 KiB
C++

#include "ScriptPCH.h"
#include "Chat.h"
#include "ObjectMgr.h"
#include "Group.h"
enum eEnums
{
GAMEOBJECT_SPAWN_LIMIT = 20,
NPC_SPAWN_LIMIT = 10,
SAY_NOT_INTERESTED = -1999922,
SAY_WRONG = -1999923,
SAY_CORRECT = -1999924,
ITEM_1 = 183779,
ITEM_2 = 26990,
ITEM_3 = 184140,
ITEM_4 = 181087,
ITEM_5 = 1594,
ITEM_6 = 153584,
ITEM_7 = 176210,
ITEM_8 = 85004,
ITEM_9 = 184284,
ITEM_10 = 182070,
ITEM_11 = 170592,
ITEM_12 = 180376,
ITEM_13 = 180379,
ITEM_14 = 180377,
NPC_1 = 481851,
NPC_2 = 18885,
NPC_3 = 18886,
NPC_4 = 50071,
NPC_5 = 50070,
NPC_6 = 50170,
NPC_7 = 50027,
NPC_8 = 26303,
NPC_9 = 50040,
NPC_10 = 985000,
NPC_11 = 32666,
NPC_12 = 50000,
//PACKAGE 1 GOBJS and NPCs
P1_ITEM_1 = 179481,
P1_ITEM_2 = 179483,
P1_ITEM_3 = 183036,
P1_ITEM_4 = 183516,
P1_ITEM_5 = 184998,
P1_NPC_1 = 50073,
P1_NPC_2 = 1459,
P1_NPC_3 = 24181,
P1_NPC_4 = 985001,
P1_NPC_5 = 70015,
//PACKAGE 2 GOBJS and NPCs
P2_ITEM_1 = 182774,
P2_ITEM_2 = 186729,
P2_ITEM_3 = 187294,
P2_ITEM_4 = 164882,
P2_ITEM_5 = 180876,
P2_NPC_1 = 13,
P2_NPC_2 = 50014,
P2_NPC_3 = 66667,
P2_NPC_4 = 500256,
P2_NPC_5 = 50072,
P2_NPC_6 = 33357,
//PACKAGE 3 GOBJS and NPCs
P3_ITEM_1 = 185547,
P3_ITEM_2 = 181653,
P3_ITEM_3 = 1607,
P3_ITEM_4 = 186682,
P3_ITEM_5 = 181448,
P3_NPC_1 = 12198,
P3_NPC_2 = 20002,
P3_NPC_3 = 51181,
P3_NPC_4 = 20381,
P3_NPC_5 = 19859,
P3_NPC_6 = 49001,
//PACKAGE 4 GOBJS and NPCs
P4_ITEM_1 = 8007658,
P4_ITEM_2 = 8021000,
P4_ITEM_3 = 383771,
P4_ITEM_4 = 21680,
P4_ITEM_5 = 180334,
P4_NPC_1 = 190001,
P4_NPC_2 = 25141,
P4_NPC_3 = 69305,
P4_NPC_4 = 63305,
P4_NPC_5 = 66305,
P4_NPC_6 = 985402,
P4_NPC_7 = 985401
};
#define ITEM_1_TEXT "Chair"
#define ITEM_2_TEXT "Table"
#define ITEM_3_TEXT "Mailbox"
#define ITEM_4_TEXT "Plant"
#define ITEM_5_TEXT "Bookshelf"
#define ITEM_6_TEXT "Campfire"
#define ITEM_7_TEXT "Tent"
#define ITEM_8_TEXT "Emeth the Ancient Portal"
#define ITEM_9_TEXT "Purple Torch"
#define ITEM_10_TEXT "Red Crystal"
#define ITEM_11_TEXT "Throne"
#define ITEM_12_TEXT "Berserk Buff"
#define ITEM_13_TEXT "Speed Buff"
#define ITEM_14_TEXT "Heal Buff"
#define NPC_1_TEXT "Teleporter"
#define NPC_2_TEXT "Arena Vendor"
#define NPC_3_TEXT "Invincible Gear Vendor"
#define NPC_4_TEXT "Donor Vendor"
#define NPC_5_TEXT "Vote Vendor"
#define NPC_6_TEXT "Refund Vendor"
#define NPC_7_TEXT "Honor Vendor"
#define NPC_8_TEXT "Custom Gems"
#define NPC_9_TEXT "Event Vendor"
#define NPC_10_TEXT "God of PvP"
#define NPC_11_TEXT "Training Dummy"
#define NPC_12_TEXT "Battle Maiden"
//PACKAGE 1 GOBJs and NPCs
#define P1_ITEM_1_TEXT "Alliance Banner"
#define P1_ITEM_2_TEXT "Horde Banner"
#define P1_ITEM_3_TEXT "Rune Aura"
#define P1_ITEM_4_TEXT "Purple Aura"
#define P1_ITEM_5_TEXT "Flying Platform"
#define P1_NPC_1_TEXT "Lord Tirion"
#define P1_NPC_2_TEXT "Deluxe Voter"
#define P1_NPC_3_TEXT "Voters Gear"
#define P1_NPC_4_TEXT "Master of Illusions"
#define P1_NPC_5_TEXT "Title Master"
//PACKAGE 2 GOBJs and NPCs
#define P2_ITEM_1_TEXT "Golden Bench"
#define P2_ITEM_2_TEXT "Bush"
#define P2_ITEM_3_TEXT "Guild Vault"
#define P2_ITEM_4_TEXT "Cleansed Songflower"
#define P2_ITEM_5_TEXT "Elune's Blessing"
#define P2_NPC_1_TEXT "Beastermaster Arogon"
#define P2_NPC_2_TEXT "Sylvannas"
#define P2_NPC_3_TEXT "Sharrow"
#define P2_NPC_4_TEXT "Totems and More"
#define P2_NPC_5_TEXT "Token Converter"
#define P2_NPC_6_TEXT "Spectral Tiger"
//PACKAGE 3 GOBJs and NPCs
#define P3_ITEM_1_TEXT "Owl Statue"
#define P3_ITEM_2_TEXT "Man Statue"
#define P3_ITEM_3_TEXT "Little Flame"
#define P3_ITEM_4_TEXT "Beer Tent"
#define P3_ITEM_5_TEXT "Signalling Gem Aura"
#define P3_NPC_1_TEXT "Arathi Basin"
#define P3_NPC_2_TEXT "Warsong Gulch"
#define P3_NPC_3_TEXT "Real Steel"
#define P3_NPC_4_TEXT "Eye of the Storm"
#define P3_NPC_5_TEXT "Arena Battlemaster"
#define P3_NPC_6_TEXT "Arena Organizer"
//PACKAGE 4 GOBJs and NPCs
#define P4_ITEM_1_TEXT "Arena Earth Rune"
#define P4_ITEM_2_TEXT "Gambling Records"
#define P4_ITEM_3_TEXT "Gambling Area"
#define P4_ITEM_4_TEXT "Duel Flag"
#define P4_ITEM_5_TEXT "Stormwind Rug"
#define P4_NPC_1_TEXT "Transmogrification"
#define P4_NPC_2_TEXT "Commander Steele"
#define P4_NPC_3_TEXT "Irelia"
#define P4_NPC_4_TEXT "Bounty Hunter"
#define P4_NPC_5_TEXT "Bounty Bear"
#define P4_NPC_6_TEXT "Gladiators Gear"
#define P4_NPC_7_TEXT "Gladiators Gear"
//gomj cmds
bool spawnGoObject(Player *pPlayer, uint32 itemID);
int getSpawnCount(uint32 plrName);
int getSpawnCountBonus(uint32 plrName);
bool getClosestObjectAndDelete(Player *pPlayer);
bool isPossibleGo(uint32 gobjID);
//char cmds
bool isCharacterInLand(Player *pPlayer);
bool isCharacterLandOwner(Player *pPlayer);
bool hasPackage1(uint32 AccID, uint32 package);
bool summonFriend(Player *pPlayer);
bool teleportToLand(Player *pPlayer);
//npc cmds
bool isPossibleNpc(uint32 npcId);
int getNPCCount(uint32 plrName);
int getNPCCountBonus(uint32 plrName);
bool deleteNPC(Player *pPlayer);
bool spawnNPC(Player *pPlayer, uint32 npcID);
bool isTargetInLand(Player *plrTarget, uint32 ownerName);
float top_x = 0;
float bottom_x;
float left_y = 0;
float right_y;
int mapid;
bool ownsLand = false;
class npc_player_house : public ItemScript
{
public:
npc_player_house() : ItemScript("npc_player_house") { }
bool OnUse(Player* player, Item* item, SpellCastTargets const& targets)
{
uint32 AccID = player->GetGUIDLow();
player->PlayerTalkClass->ClearMenus();
if(player->isInCombat()){
ChatHandler(player->GetSession()).PSendSysMessage("You can not use this item while in combat!");
return false;
}
if(isCharacterLandOwner(player)){
if(isCharacterInLand(player)){
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn GameObjects", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+500);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn NPCs", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+501);
if(hasPackage1(AccID, 1))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn Package #1", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+502);
if(hasPackage1(AccID, 2))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn Package #2", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+503);
if(hasPackage1(AccID, 3))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn Package #3", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+504);
if(hasPackage1(AccID, 4))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn Package #4", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+505);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Delete closest GameObject", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Delete NPC", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, "Summon Friend!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, "Summon Party/Raid!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+7);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, "Scale NPC.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+8);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, "Scale Objects.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+14);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_BATTLE,"Kick Intruder!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
} else {
QueryResult result = CharacterDatabase.PQuery("SELECT zone_name FROM player_house_taken WHERE player_guid=%u", player->GetGUIDLow());
uint32 house_count = 1;
if(result)
{
do{
Field *fields = result->Fetch();
std::string zone_name = fields[0].GetString();
if(zone_name == "")
zone_name = "First House";
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to " + zone_name, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+800+house_count);
house_count++;
} while (result->NextRow());
}
}
} else {
ChatHandler(player->GetSession()).PSendSysMessage("You do not own any land!");
return false;
}
player->PlayerTalkClass->SendGossipMenu(1, item->GetGUID());
return true;
}
bool OnGossipSelect(Player* player, Item* item, uint32 sender , uint32 action)
{
uint32 AccID = player->GetGUIDLow();
switch(action){
//GOBJS
case GOSSIP_ACTION_INFO_DEF +500:
player->PlayerTalkClass->ClearMenus();
char buffer [50];
char buffer2 [50];
sprintf (buffer, "You can spawn %i more items.", GAMEOBJECT_SPAWN_LIMIT + getSpawnCountBonus(player->GetGUIDLow()) - getSpawnCount(player->GetGUIDLow()));
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_1_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+100);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_2_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+110);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_3_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+120);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_4_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+130);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+140);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_6_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+150);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_7_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+160);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_8_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+170);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_9_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+180);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_10_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+190);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_11_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+255);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_12_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+256);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_13_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+257);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ITEM_14_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+258);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, buffer, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+500);
player->PlayerTalkClass->SendGossipMenu(9000, item->GetGUID());
break;
//NPC's
case GOSSIP_ACTION_INFO_DEF +501:
player->PlayerTalkClass->ClearMenus();
sprintf (buffer, "You can spawn %i more nps.", NPC_SPAWN_LIMIT + getNPCCountBonus(player->GetGUIDLow()) - getNPCCount(player->GetGUIDLow()));
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_1_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+200);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_2_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+210);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_3_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+220);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_4_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+230);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+240);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_6_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+250);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_7_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+260);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_8_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+270);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_9_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+280);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_10_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+290);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_11_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+291);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, NPC_12_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+292);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, buffer, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+501);
player->PlayerTalkClass->SendGossipMenu(9000, item->GetGUID());
break;
//spawn package 1
case GOSSIP_ACTION_INFO_DEF +502:
player->PlayerTalkClass->ClearMenus();
sprintf (buffer, "You can spawn %i more nps.", NPC_SPAWN_LIMIT + getNPCCountBonus(player->GetGUIDLow()) - getNPCCount(player->GetGUIDLow()));
sprintf (buffer2, "You can spawn %i more items.", GAMEOBJECT_SPAWN_LIMIT + getSpawnCountBonus(player->GetGUIDLow()) - getSpawnCount(player->GetGUIDLow()));
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "-- OBJECTS --", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+502);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_ITEM_1_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+300);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_ITEM_2_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+310);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_ITEM_3_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+320);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_ITEM_4_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+330);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_ITEM_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+340);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_ITEM_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+340);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "-- NPCS --", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+502);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_NPC_1_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+350);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_NPC_2_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+360);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_NPC_3_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+370);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_NPC_4_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+380);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P1_NPC_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+390);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, buffer, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+502);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, buffer2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+502);
player->PlayerTalkClass->SendGossipMenu(9000, item->GetGUID());
break;
//spawn package 2
case GOSSIP_ACTION_INFO_DEF +503:
player->PlayerTalkClass->ClearMenus();
sprintf (buffer, "You can spawn %i more nps.", NPC_SPAWN_LIMIT + getNPCCountBonus(player->GetGUIDLow()) - getNPCCount(player->GetGUIDLow()));
sprintf (buffer2, "You can spawn %i more items.", GAMEOBJECT_SPAWN_LIMIT + getSpawnCountBonus(player->GetGUIDLow()) - getSpawnCount(player->GetGUIDLow()));
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "-- OBJECTS --", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+503);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_ITEM_1_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+400);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_ITEM_2_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+410);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_ITEM_3_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+420);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_ITEM_4_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+430);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_ITEM_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+440);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "-- NPCS --", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+503);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_NPC_1_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+450);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_NPC_2_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+460);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_NPC_3_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+470);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_NPC_4_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+480);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_NPC_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+490);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P2_NPC_6_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1500);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, buffer, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+503);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, buffer2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+503);
player->PlayerTalkClass->SendGossipMenu(9000, item->GetGUID());
break;
//spawn package 3
case GOSSIP_ACTION_INFO_DEF +504:
player->PlayerTalkClass->ClearMenus();
sprintf (buffer, "You can spawn %i more nps.", NPC_SPAWN_LIMIT + getNPCCountBonus(player->GetGUIDLow()) - getNPCCount(player->GetGUIDLow()));
sprintf (buffer2, "You can spawn %i more items.", GAMEOBJECT_SPAWN_LIMIT + getSpawnCountBonus(player->GetGUIDLow()) - getSpawnCount(player->GetGUIDLow()));
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "-- OBJECTS --", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+504);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_ITEM_1_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+600);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_ITEM_2_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+610);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_ITEM_3_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+620);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_ITEM_4_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+630);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_ITEM_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+640);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "-- NPCS --", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+504);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_NPC_1_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+650);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_NPC_2_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+660);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_NPC_3_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+670);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_NPC_4_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+680);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_NPC_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+690);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P3_NPC_6_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+700);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, buffer, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+504);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, buffer2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+504);
player->PlayerTalkClass->SendGossipMenu(9000, item->GetGUID());
break;
//spawn package 4
case GOSSIP_ACTION_INFO_DEF +505:
player->PlayerTalkClass->ClearMenus();
sprintf (buffer, "You can spawn %i more nps.", NPC_SPAWN_LIMIT + getNPCCountBonus(player->GetGUIDLow()) - getNPCCount(player->GetGUIDLow()));
sprintf (buffer2, "You can spawn %i more items.", GAMEOBJECT_SPAWN_LIMIT + getSpawnCountBonus(player->GetGUIDLow()) - getSpawnCount(player->GetGUIDLow()));
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "-- OBJECTS --", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+505);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_ITEM_1_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+910);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_ITEM_2_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+920);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_ITEM_3_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+930);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_ITEM_4_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+940);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_ITEM_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+950);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "-- NPCS --", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+505);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_NPC_1_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+960);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_NPC_2_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+970);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_NPC_3_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+980);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_NPC_4_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+990);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_NPC_5_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1000);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_NPC_6_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1010);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, P4_NPC_7_TEXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1020);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, buffer, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+505);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, buffer2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+505);
player->PlayerTalkClass->SendGossipMenu(9000, item->GetGUID());
break;
//main menu
case GOSSIP_ACTION_INFO_DEF+999:
player->PlayerTalkClass->ClearMenus();
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn GameObjects", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+500);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn NPCs", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+501);
if(hasPackage1(AccID, 1))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn Package #1", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+502);
if(hasPackage1(AccID, 2))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn Package #2", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+503);
if(hasPackage1(AccID, 3))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn Package #3", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+504);
if(hasPackage1(AccID, 4))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "Spawn Package #4", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+504);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Delete closest GameObject", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "Delete NPC", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, "Summon Friend!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, "Summon Party/Raid!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+7);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_BATTLE,"Kick Intruder!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
player->PlayerTalkClass->SendGossipMenu(1, item->GetGUID());
break;
//delete gobj
case GOSSIP_ACTION_INFO_DEF +2: getClosestObjectAndDelete(player); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+999); break;
//delete NPC
case GOSSIP_ACTION_INFO_DEF +6: deleteNPC(player); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+999); break;
//teleport to house
case GOSSIP_ACTION_INFO_DEF +3:
player->CLOSE_GOSSIP_MENU();
teleportToLand(player);
break;
//summon friend
case GOSSIP_ACTION_INFO_DEF +4: summonFriend(player); player->CLOSE_GOSSIP_MENU(); break;
//kickplr
case GOSSIP_ACTION_INFO_DEF +7:
{
player->PlayerTalkClass->SendCloseGossip();
Group* grp = player->GetGroup();
if(!grp)
break;
GroupReference* grpRef = grp->GetFirstMember();
if(!grpRef)
break;
for (grpRef; grpRef != NULL; grpRef = grpRef->next())
{
Player* groupMember = grpRef->getSource();
ChatHandler(player->GetSession()).PSendSysMessage("Sending summon request to...");
if(!groupMember)
continue;
else
break;
if(groupMember == player)
break;
player->SetSelection(groupMember->GetGUID());
player->CastSpell(groupMember, 7720, true);
ChatHandler(player->GetSession()).PSendSysMessage("%s", groupMember->GetName());
}
}
break;
case GOSSIP_ACTION_INFO_DEF +8:
player->PlayerTalkClass->ClearMenus();
player->ADD_GOSSIP_ITEM( 10, "Set Scale 0.25", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+9);
player->ADD_GOSSIP_ITEM( 10, "Set Scale 0.50", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+10);
player->ADD_GOSSIP_ITEM( 10, "Set Scale 1.00", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+11);
player->ADD_GOSSIP_ITEM( 10, "Set Scale 1.50", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+12);
player->ADD_GOSSIP_ITEM( 10, "Set Scale 1.75", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+13);
player->PlayerTalkClass->SendGossipMenu(1, item->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF +9:
{
if(isCharacterInLand(player)){
Creature* target = ChatHandler(player).getSelectedCreature();
if (!target)
{
ChatHandler(player->GetSession()).PSendSysMessage("Please select a valid creature within your land area.");
player->PlayerTalkClass->SendCloseGossip(); // Rochet's comment: Why close gossip? Why not return to the menu, so its easier to try again?
return false;
}
target->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.25);
target->SaveToDB();
ChatHandler(player->GetSession()).PSendSysMessage("You have modified %s, and changed the size to: 0.25", target->GetName());
player->PlayerTalkClass->SendCloseGossip();
return true;
} else {
teleportToLand(player);
}
} break;
case GOSSIP_ACTION_INFO_DEF +10:
{
if(isCharacterInLand(player)){
Creature* target = ChatHandler(player).getSelectedCreature();
if (!target)
{
ChatHandler(player->GetSession()).PSendSysMessage("Please select a valid creature within your land area.");
player->PlayerTalkClass->SendCloseGossip();
return false;
}
target->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.50);
target->SaveToDB();
ChatHandler(player->GetSession()).PSendSysMessage("You have modified %s, and changed the size to: 0.50", target->GetName());
player->PlayerTalkClass->SendCloseGossip();
return true;
} else {
teleportToLand(player);
}
} break;
case GOSSIP_ACTION_INFO_DEF +11:
{
if(isCharacterInLand(player)){
Creature* target = ChatHandler(player).getSelectedCreature();
if (!target)
{
ChatHandler(player->GetSession()).PSendSysMessage("Please select a valid creature within your land area.");
player->PlayerTalkClass->SendCloseGossip();
return false;
}
target->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.00);
target->SaveToDB();
ChatHandler(player->GetSession()).PSendSysMessage("You have modified %s, and changed the size to: 1.00", target->GetName());
player->PlayerTalkClass->SendCloseGossip();
return true;
} else {
teleportToLand(player);
}
} break;
case GOSSIP_ACTION_INFO_DEF +12:
{
if(isCharacterInLand(player)){
Creature* target = ChatHandler(player).getSelectedCreature();
if (!target)
{
ChatHandler(player->GetSession()).PSendSysMessage("Please select a valid creature within your land area.");
player->PlayerTalkClass->SendCloseGossip();
return false;
}
target->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.50);
target->SaveToDB();
ChatHandler(player->GetSession()).PSendSysMessage("You have modified %s, and changed the size to: 1.50", target->GetName());
player->PlayerTalkClass->SendCloseGossip();
return true;
} else {
teleportToLand(player);
}
} break;
case GOSSIP_ACTION_INFO_DEF +13:
{
if(isCharacterInLand(player)){
Creature* target = ChatHandler(player).getSelectedCreature();
if (!target || !target->GetTypeId() == TYPEID_UNIT || !isPossibleNpc(target->GetEntry()))
{
ChatHandler(player->GetSession()).PSendSysMessage("Please select a valid creature within your land area.");
player->PlayerTalkClass->SendCloseGossip();
return false;
}
target->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.75);
target->SaveToDB();
ChatHandler(player->GetSession()).PSendSysMessage("You have modified %s, and changed the size to: 1.75", target->GetName());
player->PlayerTalkClass->SendCloseGossip();
return true;
} else {
teleportToLand(player);
}
} break;
case GOSSIP_ACTION_INFO_DEF +14:
player->PlayerTalkClass->ClearMenus();
player->ADD_GOSSIP_ITEM( 10, "Set Scale 0.25", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+15);
player->ADD_GOSSIP_ITEM( 10, "Set Scale 0.50", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+16);
player->ADD_GOSSIP_ITEM( 10, "Set Scale 1.00", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+17);
player->ADD_GOSSIP_ITEM( 10, "Set Scale 1.50", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+18);
player->ADD_GOSSIP_ITEM( 10, "Set Scale 1.75", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+19);
player->PlayerTalkClass->SendGossipMenu(1, item->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF +15:
{
if(isCharacterInLand(player)){
GameObject* object = ChatHandler(player).GetNearbyGameObject();
if (!object || !isPossibleGo(object->GetEntry()))
{
ChatHandler(player->GetSession()).PSendSysMessage("No object found. Or the object is not in range of your land.");
player->PlayerTalkClass->SendCloseGossip();
return false;
}
object->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.25);
object->DestroyForNearbyPlayers();
object->UpdateObjectVisibility();
object->SaveToDB();
ChatHandler(player->GetSession()).PSendSysMessage("You have modified %s, and changed the size to: 0.25", object->GetName());
player->PlayerTalkClass->SendCloseGossip();
return true;
} else {
teleportToLand(player);
}
} break;
case GOSSIP_ACTION_INFO_DEF +16:
{
if(isCharacterInLand(player)){
GameObject* object = ChatHandler(player).GetNearbyGameObject();
if (!object || !isPossibleGo(object->GetEntry()))
{
ChatHandler(player->GetSession()).PSendSysMessage("No object found. Or the object is not in range of your land.");
player->PlayerTalkClass->SendCloseGossip();
return false;
}
object->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.50);
object->DestroyForNearbyPlayers();
object->UpdateObjectVisibility();
object->SaveToDB();
ChatHandler(player->GetSession()).PSendSysMessage("You have modified %s, and changed the size to: 0.50", object->GetName());
player->PlayerTalkClass->SendCloseGossip();
return true;
} else {
teleportToLand(player);
}
} break;
case GOSSIP_ACTION_INFO_DEF +17:
{
if(isCharacterInLand(player)){
GameObject* object = ChatHandler(player).GetNearbyGameObject();
if (!object || !isPossibleGo(object->GetEntry()))
{
ChatHandler(player->GetSession()).PSendSysMessage("No object found. Or the object is not in range of your land.");
player->PlayerTalkClass->SendCloseGossip();
return false;
}
object->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.00);
object->DestroyForNearbyPlayers();
object->UpdateObjectVisibility();
object->SaveToDB();
ChatHandler(player->GetSession()).PSendSysMessage("You have modified %s, and changed the size to: 1.00", object->GetName());
player->PlayerTalkClass->SendCloseGossip();
return true;
} else {
teleportToLand(player);
}
} break;
case GOSSIP_ACTION_INFO_DEF +18:
{
if(isCharacterInLand(player)){
GameObject* object = ChatHandler(player).GetNearbyGameObject();
if (!object || !isPossibleGo(object->GetEntry()))
{
ChatHandler(player->GetSession()).PSendSysMessage("No object found. Or the object is not in range of your land.");
player->PlayerTalkClass->SendCloseGossip();
return false;
}
object->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.50);
object->DestroyForNearbyPlayers();
object->UpdateObjectVisibility();
object->SaveToDB();
ChatHandler(player->GetSession()).PSendSysMessage("You have modified %s, and changed the size to: 1.50", object->GetName());
player->PlayerTalkClass->SendCloseGossip();
return true;
} else {
teleportToLand(player);
}
} break;
case GOSSIP_ACTION_INFO_DEF +19:
{
if(isCharacterInLand(player)){
GameObject* object = ChatHandler(player).GetNearbyGameObject();
if (!object || !isPossibleGo(object->GetEntry()))
{
ChatHandler(player->GetSession()).PSendSysMessage("No object found. Or the object is not in range of your land.");
player->PlayerTalkClass->SendCloseGossip();
return false;
}
object->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.75);
object->DestroyForNearbyPlayers();
object->UpdateObjectVisibility();
object->SaveToDB();
ChatHandler(player->GetSession()).PSendSysMessage("You have modified %s, and changed the size to: 1.75", object->GetName());
player->PlayerTalkClass->SendCloseGossip();
return true;
} else {
teleportToLand(player);
}
} break;
//kickplr
case GOSSIP_ACTION_INFO_DEF +5:
{
player->PlayerTalkClass->SendCloseGossip();
Player* selPlr = player->GetSelectedPlayer();
if(!selPlr)
break;
if(selPlr != player){
ChatHandler(selPlr->GetSession()).PSendSysMessage("You have been kicked off %s land!", player->GetName());
isTargetInLand(selPlr, player->GetGUIDLow());
}
}
break;
//ADD ITEMS
case GOSSIP_ACTION_INFO_DEF +100: spawnGoObject(player, ITEM_1) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +110: spawnGoObject(player, ITEM_2) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +120: spawnGoObject(player, ITEM_3) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +130: spawnGoObject(player, ITEM_4) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +140: spawnGoObject(player, ITEM_5) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +150: spawnGoObject(player, ITEM_6) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +160: spawnGoObject(player, ITEM_7) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +170: spawnGoObject(player, ITEM_8) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +180: spawnGoObject(player, ITEM_9) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +190: spawnGoObject(player, ITEM_10); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +255: spawnGoObject(player, ITEM_11); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +256: spawnGoObject(player, ITEM_12); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +257: spawnGoObject(player, ITEM_13); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
case GOSSIP_ACTION_INFO_DEF +258: spawnGoObject(player, ITEM_14); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+500); break;
//ADD NPCS
case GOSSIP_ACTION_INFO_DEF +200: spawnNPC(player, NPC_1) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +210: spawnNPC(player, NPC_2) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +220: spawnNPC(player, NPC_3) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +230: spawnNPC(player, NPC_4) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +240: spawnNPC(player, NPC_5) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +250: spawnNPC(player, NPC_6) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +260: spawnNPC(player, NPC_7) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +270: spawnNPC(player, NPC_8) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +280: spawnNPC(player, NPC_9) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +290: spawnNPC(player, NPC_10); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +291: spawnNPC(player, NPC_11); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
case GOSSIP_ACTION_INFO_DEF +292: spawnNPC(player, NPC_12); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+501); break;
//package 1
case GOSSIP_ACTION_INFO_DEF +300: spawnGoObject(player, P1_ITEM_1) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+502); break;
case GOSSIP_ACTION_INFO_DEF +310: spawnGoObject(player, P1_ITEM_2) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+502); break;
case GOSSIP_ACTION_INFO_DEF +320: spawnGoObject(player, P1_ITEM_3) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+502); break;
case GOSSIP_ACTION_INFO_DEF +330: spawnGoObject(player, P1_ITEM_4) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+502); break;
case GOSSIP_ACTION_INFO_DEF +340: spawnGoObject(player, P1_ITEM_5) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+502); break;
case GOSSIP_ACTION_INFO_DEF +350: spawnNPC(player, P1_NPC_1) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+502); break;
case GOSSIP_ACTION_INFO_DEF +360: spawnNPC(player, P1_NPC_2) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+502); break;
case GOSSIP_ACTION_INFO_DEF +370: spawnNPC(player, P1_NPC_3) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+502); break;
case GOSSIP_ACTION_INFO_DEF +380: spawnNPC(player, P1_NPC_4) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+502); break;
case GOSSIP_ACTION_INFO_DEF +390: spawnNPC(player, P1_NPC_5); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+502); break;
//package 2
case GOSSIP_ACTION_INFO_DEF +400: spawnGoObject(player, P2_ITEM_1) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
case GOSSIP_ACTION_INFO_DEF +410: spawnGoObject(player, P2_ITEM_2) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
case GOSSIP_ACTION_INFO_DEF +420: spawnGoObject(player, P2_ITEM_3) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
case GOSSIP_ACTION_INFO_DEF +430: spawnGoObject(player, P2_ITEM_4) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
case GOSSIP_ACTION_INFO_DEF +440: spawnGoObject(player, P2_ITEM_5) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
case GOSSIP_ACTION_INFO_DEF +450: spawnNPC(player, P2_NPC_1) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
case GOSSIP_ACTION_INFO_DEF +460: spawnNPC(player, P2_NPC_2) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
case GOSSIP_ACTION_INFO_DEF +470: spawnNPC(player, P2_NPC_3) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
case GOSSIP_ACTION_INFO_DEF +480: spawnNPC(player, P2_NPC_4) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
case GOSSIP_ACTION_INFO_DEF +490: spawnNPC(player, P2_NPC_5); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
case GOSSIP_ACTION_INFO_DEF +1500: spawnNPC(player, P2_NPC_6); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+503); break;
//package 3
case GOSSIP_ACTION_INFO_DEF +600: spawnGoObject(player, P3_ITEM_1) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
case GOSSIP_ACTION_INFO_DEF +610: spawnGoObject(player, P3_ITEM_2) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
case GOSSIP_ACTION_INFO_DEF +620: spawnGoObject(player, P3_ITEM_3) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
case GOSSIP_ACTION_INFO_DEF +630: spawnGoObject(player, P3_ITEM_4) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
case GOSSIP_ACTION_INFO_DEF +640: spawnGoObject(player, P3_ITEM_5) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
case GOSSIP_ACTION_INFO_DEF +650: spawnNPC(player, P3_NPC_1) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
case GOSSIP_ACTION_INFO_DEF +660: spawnNPC(player, P3_NPC_2) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
case GOSSIP_ACTION_INFO_DEF +670: spawnNPC(player, P3_NPC_3) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
case GOSSIP_ACTION_INFO_DEF +680: spawnNPC(player, P3_NPC_4) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
case GOSSIP_ACTION_INFO_DEF +690: spawnNPC(player, P3_NPC_5); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
case GOSSIP_ACTION_INFO_DEF +700: spawnNPC(player, P3_NPC_6); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+504); break;
//package 4
case GOSSIP_ACTION_INFO_DEF +910: spawnGoObject(player, P4_ITEM_1) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +920: spawnGoObject(player, P4_ITEM_2) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +930: spawnGoObject(player, P4_ITEM_3) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +940: spawnGoObject(player, P4_ITEM_4) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +950: spawnGoObject(player, P4_ITEM_5) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +960: spawnNPC(player, P4_NPC_1) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +970: spawnNPC(player, P4_NPC_2) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +980: spawnNPC(player, P4_NPC_3) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +990: spawnNPC(player, P4_NPC_4) ; OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +1000: spawnNPC(player, P4_NPC_5); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +1010: spawnNPC(player, P4_NPC_6); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +1020: spawnNPC(player, P4_NPC_7); OnGossipSelect(player, item, item->GetGUID(), GOSSIP_ACTION_INFO_DEF+505); break;
case GOSSIP_ACTION_INFO_DEF +801: teleportToHouse(player, 1); break;
case GOSSIP_ACTION_INFO_DEF +802: teleportToHouse(player, 2); break;
case GOSSIP_ACTION_INFO_DEF +803: teleportToHouse(player, 3); break;
case GOSSIP_ACTION_INFO_DEF +804: teleportToHouse(player, 4); break;
case GOSSIP_ACTION_INFO_DEF +805: teleportToHouse(player, 5); break;
case GOSSIP_ACTION_INFO_DEF +806: teleportToHouse(player, 6); break;
case GOSSIP_ACTION_INFO_DEF +807: teleportToHouse(player, 7); break;
case GOSSIP_ACTION_INFO_DEF +808: teleportToHouse(player, 8); break;
case GOSSIP_ACTION_INFO_DEF +809: teleportToHouse(player, 9); break;
case GOSSIP_ACTION_INFO_DEF +810: teleportToHouse(player, 10); break;
}
return true;
}
bool teleportToHouse(Player* player, uint32 selection)
{
if(player->isInCombat() || player->GetMap()->IsBattlegroundOrArena() || player->GetMap()->IsDungeon()){ return false; }
QueryResult result = CharacterDatabase.PQuery("SELECT map_id, spawn_x, spawn_y, spawn_z, spawn_o FROM player_house_taken WHERE player_guid=%u", player->GetGUIDLow());
uint32 house_count = 1;
do{
if(house_count == selection)
{
Field *fields = result->Fetch();
player->TeleportTo(fields[0].GetUInt32(),fields[1].GetFloat(),fields[2].GetFloat(),fields[3].GetFloat(),fields[4].GetFloat());
ChatHandler(player->GetSession()).SendSysMessage("Welcome Home!");
return true;
}
house_count++;
} while (result->NextRow());
return false;
}
};
bool summonFriend(Player *pPlayer)
{
Player *plrFriend = pPlayer->GetSelectedPlayer();
if(plrFriend){
if(plrFriend->isInCombat()){ ChatHandler(pPlayer->GetSession()).PSendSysMessage("Your friend is in combat!"); return false;}
if(plrFriend->GetMap()->IsBattlegroundOrArena()){ ChatHandler(pPlayer->GetSession()).PSendSysMessage("Your friend is in a battleground!"); return false;}
if(plrFriend->GetMap()->IsDungeon()){ ChatHandler(pPlayer->GetSession()).PSendSysMessage("Your friend is in a dungeon!"); return false;}
if(plrFriend->IsBeingTeleported()) { return false; };
if(plrFriend->isDead()) { return false; };
if(pPlayer->IsInPartyWith(plrFriend) || pPlayer->IsInRaidWith(plrFriend)){
pPlayer->CastSpell(plrFriend, 7720, true);
ChatHandler(pPlayer->GetSession()).PSendSysMessage("Summon request sent!");
return true;
} else {
ChatHandler(pPlayer->GetSession()).PSendSysMessage("You must invite this person to your party first!");
}
} else {
try{
pPlayer->CastSpell(plrFriend, 7720, true);
ChatHandler(pPlayer->GetSession()).PSendSysMessage("Summon request sent!");
} catch(...) {
ChatHandler(pPlayer->GetSession()).PSendSysMessage("You must target the person you want to summon! (Invite to party/raid)");
}
}
return false;
}
bool isCharacterInLand(Player *pPlayer)
{
float playerx = pPlayer->GetPositionX();
float playery = pPlayer->GetPositionY();
uint32 mapid_multi = pPlayer->GetMap()->GetId();
QueryResult result = CharacterDatabase.PQuery("SELECT map_id, bottom_x, top_x, left_y, right_y FROM player_house_taken WHERE player_guid=%u AND map_id=%u", pPlayer->GetGUID(), mapid_multi);
if(!result)
return false;
do{
Field *fields = result->Fetch();
mapid = fields[0].GetInt32();
bottom_x = fields[1].GetFloat();
top_x = fields[2].GetFloat();
left_y = fields[3].GetFloat();
right_y = fields[4].GetFloat();
if(playerx < bottom_x && playerx > top_x && playery < left_y && playery > right_y) { ownsLand = true; return true; }
} while (result->NextRow());
return false;
}
bool isTargetInLand(Player *plrTarget, uint32 ownerName)
{
if(plrTarget)
{
float playerx = plrTarget->GetPositionX();
float playery = plrTarget->GetPositionY();
uint32 mapid_multi = plrTarget->GetMap()->GetId();
QueryResult result = CharacterDatabase.PQuery("SELECT map_id, bottom_x, top_x, left_y, right_y FROM player_house_taken WHERE player_guid=%u AND map_id=%u", ownerName, mapid_multi);
do{
Field *fields = result->Fetch();
mapid = fields[0].GetInt32();
bottom_x = fields[1].GetFloat();
top_x = fields[2].GetFloat();
left_y = fields[3].GetFloat();
right_y = fields[4].GetFloat();
if(playerx < bottom_x && playerx > top_x && playery < left_y && playery > right_y)
{
if(plrTarget)
{
plrTarget->TeleportTo(534, 5541.770020f, -3783.469971f, 1594.910034f, 2.883010f);
}
return true;
} else {
ChatHandler(plrTarget->GetSession()).PSendSysMessage("%s is not located on your land!", plrTarget->GetName());
}
} while (result->NextRow());
}
return false;
}
bool isCharacterLandOwner(Player *pPlayer)
{
QueryResult result;
if(!ownsLand){
result = CharacterDatabase.PQuery("SELECT * FROM player_house_taken WHERE player_guid=%u", pPlayer->GetGUIDLow());
if(result)
{
ownsLand = true;
}
} else {
result = CharacterDatabase.PQuery("SELECT * FROM player_house_taken WHERE player_guid=%u", pPlayer->GetGUIDLow());
if(result) { ownsLand = true; } else { ownsLand = false; }
}
return ownsLand;
}
bool teleportToLand(Player *pPlayer)
{
if(pPlayer->isInCombat() || pPlayer->GetMap()->IsBattlegroundOrArena() || pPlayer->GetMap()->IsDungeon()){ return false; }
QueryResult spawnresult;
spawnresult = CharacterDatabase.PQuery("SELECT map_id, spawn_x, spawn_y, spawn_z, spawn_o FROM player_house_taken WHERE player_guid=%u", pPlayer->GetGUIDLow());
if(spawnresult){
Field *fields = spawnresult->Fetch();
pPlayer->TeleportTo(fields[0].GetUInt32(),fields[1].GetFloat(),fields[2].GetFloat(),fields[3].GetFloat(),fields[4].GetFloat());
ChatHandler(pPlayer->GetSession()).SendSysMessage("Welcome Home!");
pPlayer->CLOSE_GOSSIP_MENU();
return true;
} else {
ChatHandler(pPlayer->GetSession()).PSendSysMessage("Could not locate your spawn! Please contact a GM!");
}
return false;
}
/*
*****
GAMEOBJECT METHODS
*****
*/
bool isPossibleGo(uint32 gobjID)
{
QueryResult result;
result = CharacterDatabase.PQuery("SELECT * FROM player_house_objects where gobjID = %u", gobjID);
if(result)
return true;
return false;
}
bool getClosestObjectAndDelete(Player *pPlayer)
{
if(getSpawnCount(pPlayer->GetGUIDLow()) < 0 || getSpawnCount(pPlayer->GetGUIDLow() > 500))
{
ChatHandler(pPlayer->GetSession()).PSendSysMessage("You land item has been locked, please contact a GM");
return false;
}
if(!isCharacterInLand(pPlayer))
{
teleportToLand(pPlayer);
return false;
}
float distance = 10;
uint32 count = 0;
uint32 gameguid, gameentry;
QueryResult result = WorldDatabase.PQuery("SELECT guid, id, position_x, position_y, position_z, map, "
"(POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ "
"FROM gameobject WHERE map='%u' AND (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) <= '%f' ORDER BY order_ LIMIT 1",
pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ(),
pPlayer->GetMapId(),pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ(),distance*distance);
if (result)
{
Field *fields = result->Fetch();
gameguid = fields[0].GetUInt32();
gameentry = fields[1].GetUInt32();
float x = fields[2].GetFloat();
float y = fields[3].GetFloat();
float z = fields[4].GetFloat();
int mapid = fields[5].GetUInt16();
++count;
}
if(count == 0){
ChatHandler(pPlayer->GetSession()).PSendSysMessage("No items found within 10 yards. Try moving closer to your target");
return true;
}
if(!isPossibleGo(gameentry))
{
ChatHandler(pPlayer->GetSession()).PSendSysMessage("That object is not able to be deleted. Contact an administrator to get it removed.");
return false;
}
if(gameguid) {
GameObject* gObj = NULL;
gObj = pPlayer->GetMap()->GetGameObject(MAKE_NEW_GUID(gameguid, gameentry, HIGHGUID_GAMEOBJECT));
if(!gObj)
{
ChatHandler(pPlayer->GetSession()).PSendSysMessage("Could not find gameobject. Please wait 5-10 seconds to delete a object after you have spawned it.");
return false;
}
ChatHandler(pPlayer->GetSession()).PSendSysMessage("%s was deleted!", gObj->GetName());
gObj->SetRespawnTime(0);
gObj->Delete();
gObj->DeleteFromDB();
CharacterDatabase.PExecute("UPDATE player_house SET items_spawned = items_spawned - 1 WHERE player_guid=%u", pPlayer->GetGUID());
}
return true;
}
bool hasPackage1(uint32 AccID, uint32 package)
{
QueryResult result = CharacterDatabase.PQuery("SELECT * FROM player_house WHERE package%u = 1 AND player_guid = %u", package, AccID);
if(result)
return true;
return false;
}
bool spawnGoObject(Player *pPlayer, uint32 itemID)
{
if(isCharacterInLand(pPlayer)){
if(getSpawnCount(pPlayer->GetGUIDLow() < 0) || getSpawnCount(pPlayer->GetGUIDLow() > 1000))
{
ChatHandler(pPlayer->GetSession()).PSendSysMessage("You land item has been locked, please contact a GM");
return false;
}
int bonus = getSpawnCountBonus(pPlayer->GetGUIDLow());
if(getSpawnCount(pPlayer->GetGUIDLow()) < GAMEOBJECT_SPAWN_LIMIT + bonus)
{
Map *map = pPlayer->GetMap();
GameObject* pGameObj = new GameObject;
uint32 db_lowGUID = sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT);
if (!pGameObj->Create(db_lowGUID, itemID, map, 1, pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ(), pPlayer->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY))
{
delete pGameObj;
return false;
}
pGameObj->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()),pPlayer->GetPhaseMaskForSpawn());
map->AddToMap(pGameObj);
sObjectMgr->AddGameobjectToGrid(db_lowGUID, sObjectMgr->GetGOData(db_lowGUID));
CharacterDatabase.PExecute("UPDATE player_house SET items_spawned = items_spawned + 1 WHERE player_guid=%u", pPlayer->GetGUIDLow());
} else {
ChatHandler(pPlayer->GetSession()).PSendSysMessage("GameObject spawn limit reached!");
}
} else {
teleportToLand(pPlayer);
}
return true;
}
int getSpawnCount(uint32 plrName)
{
uint32 spawn = 0;
QueryResult result = CharacterDatabase.PQuery("SELECT items_spawned FROM player_house WHERE player_guid = %u", plrName);
if(result)
{
spawn = (*result)[0].GetUInt32();
if (spawn <= 0)
return 0;
} else {
return 0;
}
return spawn;
}
int getSpawnCountBonus(uint32 plrName)
{
uint32 spawn = 0;
QueryResult result = CharacterDatabase.PQuery("SELECT items_bonus FROM player_house WHERE player_guid = %u", plrName);
if(result)
{
spawn = (*result)[0].GetUInt32();
if (spawn <= 0)
return 0;
} else {
return 0;
}
return spawn;
}
/*
-------
END GAMEOBJECT METHODS
-----
*/
/*
-----
ADD NPC METHODS
------
*/
bool isPossibleNpc(uint32 npcId)
{
QueryResult result;
result = CharacterDatabase.PQuery("SELECT * FROM player_house_npcs where npcId = %u", npcId);
if(result)
return true;
return false;
}
int getNPCCount(uint32 plrName)
{
uint32 npc = 0;
QueryResult result = CharacterDatabase.PQuery("SELECT npcs_spawned FROM player_house WHERE player_guid = %u", plrName);
if(result)
{
npc = (*result)[0].GetUInt32();
if (npc <= 0)
return 0;
} else {
return 0;
}
return npc;
}
int getNPCCountBonus(uint32 plrName)
{
uint32 npc = 0;
QueryResult result = CharacterDatabase.PQuery("SELECT npcs_bonus FROM player_house WHERE player_guid = %u", plrName);
if(result)
{
npc = (*result)[0].GetUInt32();
if (npc <= 0)
return 0;
} else {
return 0;
}
return npc;
}
bool spawnNPC(Player *pPlayer, uint32 npcID)
{
if(isCharacterInLand(pPlayer)){
if(getNPCCount(pPlayer->GetGUIDLow() < 0) || getNPCCount(pPlayer->GetGUIDLow() > 500))
{
ChatHandler(pPlayer->GetSession()).PSendSysMessage("You land item has been locked, please contact a GM");
return false;
}
int bonus = getNPCCountBonus(pPlayer->GetGUID());
if(getNPCCount(pPlayer->GetGUIDLow()) < NPC_SPAWN_LIMIT + bonus)
{
float player_x = pPlayer->GetPositionX();
float player_y = pPlayer->GetPositionY();
float player_z = pPlayer->GetPositionZ();
float player_o = pPlayer->GetOrientation();
uint32 mapid = pPlayer->GetMapId();
Map *map = pPlayer->GetMap();
Creature* creature = new Creature;
if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, 1, npcID, 0, 1, player_x, player_y, player_z, player_o)){
delete creature;
return false;
}
creature->SaveToDB(mapid, (1 << map->GetSpawnMode()), pPlayer->GetPhaseMaskForSpawn());
uint32 db_guid = creature->GetDBTableGUIDLow();
if (!creature->LoadCreatureFromDB(db_guid, map)){
delete creature;
return false;
}
sObjectMgr->AddCreatureToGrid(db_guid, sObjectMgr->GetCreatureData(db_guid));
CharacterDatabase.PExecute("UPDATE player_house SET npcs_spawned = npcs_spawned + 1 WHERE player_guid=%u", pPlayer->GetGUIDLow());
} else {
ChatHandler(pPlayer->GetSession()).PSendSysMessage("NPC spawn limit reached!");
}
} else {
teleportToLand(pPlayer);
}
return true;
}
bool deleteNPC(Player *pPlayer)
{
Creature *creep = pPlayer->GetMap()->GetCreature(pPlayer->GetSelection());
if(!creep)
return false;
if(creep->isPet() || creep->isHunterPet() || creep->IsControlledByPlayer() || creep->isSpiritHealer() || creep->isSummon())
return false;
if(getNPCCount(pPlayer->GetGUIDLow()) < 0)
{
ChatHandler(pPlayer->GetSession()).PSendSysMessage("You land item has been locked, please contact a GM");
return false;
}
if(!isPossibleNpc(creep->GetEntry()))
{
ChatHandler(pPlayer->GetSession()).PSendSysMessage("Your not allowed to delete that creature.");
return false;
}
float playerx = creep->GetPositionX();
float playery = creep->GetPositionY();
uint32 mapid_multi = pPlayer->GetMap()->GetId();
QueryResult result = CharacterDatabase.PQuery("SELECT map_id, bottom_x, top_x, left_y, right_y FROM player_house_taken WHERE player_guid=%u AND map_id=%u", pPlayer->GetGUIDLow(), mapid_multi);
do{
Field *fields = result->Fetch();
mapid = fields[0].GetInt32();
bottom_x = fields[1].GetFloat();
top_x = fields[2].GetFloat();
left_y = fields[3].GetFloat();
right_y = fields[4].GetFloat();
if(playerx < bottom_x && playerx > top_x && playery < left_y && playery > right_y)
{
creep->CombatStop();
creep->DeleteFromDB();
creep->AddObjectToRemoveList();
CharacterDatabase.PExecute("UPDATE player_house SET npcs_spawned = npcs_spawned - 1 WHERE player_guid=%u", pPlayer->GetGUIDLow());
ChatHandler(pPlayer->GetSession()).PSendSysMessage("%s has been deleted!", creep->GetName());
return true;
}
} while (result->NextRow());
ChatHandler(pPlayer->GetSession()).PSendSysMessage("%s is not located on your land!", creep->GetName());
return false;
}
class playerhouse_commandscript : public CommandScript
{
public:
playerhouse_commandscript() : CommandScript("playerhouse_commandscript") { }
ChatCommand* GetCommands() const
{
static ChatCommand playerhouseCommandTable[] =
{
{ "add", SEC_GAMEMASTER, false, &HandleAddPlayerHouse, "", NULL },
{ "fix", SEC_ADMINISTRATOR, false, &HandleFixPlayerHouse, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "house", SEC_GAMEMASTER, false, NULL, "", playerhouseCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
static bool HandleFixPlayerHouse(ChatHandler* handler, const char* /*args*/)
{
Player* player = handler->GetSession()->GetPlayer();
if(player->GetSession()->GetSecurity() == 10)
{
CharacterDatabase.PExecute("ALTER TABLE player_house_available DROP id");
CharacterDatabase.PExecute("ALTER TABLE player_house_available AUTO_INCREMENT = 1");
CharacterDatabase.PExecute("ALTER TABLE player_house_available ADD id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST");
handler->PSendSysMessage("Houses are now set in order!");
} else {
handler->PSendSysMessage("Only rank 10 people can use this command.");
return false; }
return true;
}
static bool HandleAddPlayerHouse(ChatHandler* handler, char const* args)
{
if (!*args)
return false;
char* nameStr = strtok((char*)args, " ");
if (!nameStr)
return false;
char* _price = strtok(NULL, " ");
uint32 price;
if (!_price)
price = 10;
else
price = atoi(_price);
if (!price || price == NULL || price <= 0)
price = 10;
//Check to see how many locations are in the DB (10max)
QueryResult result = CharacterDatabase.PQuery("SELECT * FROM player_house_available");
if(result){
if(result->GetRowCount() >= 20)
{
handler->PSendSysMessage("You can only have 20 active locations at a time!");
return true;
}
}
//Cordinates for available house
float top_x = 0;
float bottom_x = 0;
float left_y = 0;
float right_y = 0;
//Varibles used throughout code
Player *player = handler->GetSession()->GetPlayer();
float player_x = player->GetPositionX();
float player_y = player->GetPositionY();
uint32 mapid = player->GetMapId();
Map *map = player->GetMap();
//Check to see if you are to close to avliable players land
result = CharacterDatabase.PQuery("SELECT bottom_x, top_x, left_y, right_y FROM player_house_available WHERE map_id= '%u'", mapid);
if(result)
{
do{
Field *fields = result->Fetch();
bottom_x = fields[0].GetFloat() - 40.0;
top_x = fields[1].GetFloat() + 40.0;
left_y = fields[2].GetFloat() - 40.0;
right_y = fields[3].GetFloat() + 40.0;
if(player_x > bottom_x && player_x < top_x && player_y > left_y && player_y < right_y){
handler->PSendSysMessage("You are to close to another players land! Please move further away and try again.");
return false;
}
} while (result->NextRow());
}
//Check to see if occupied land is close to where youre located.
result = CharacterDatabase.PQuery("SELECT bottom_x, top_x, left_y, right_y FROM player_house_taken WHERE map_id= '%u'", mapid);
if(result)
{
do{
Field *fields = result->Fetch();
bottom_x = fields[0].GetFloat() - 40.0;
top_x = fields[1].GetFloat() + 40.0;
left_y = fields[2].GetFloat() - 40.0;
right_y = fields[3].GetFloat() + 40.0;
if(player_x > bottom_x && player_x < top_x && player_y > left_y && player_y < right_y){
handler->PSendSysMessage("You are to close to another players land! Please move further away and try again.");
return false;
}
} while (result->NextRow());
}
//Set bottom_x, left_y as highest value
if((player_x - 23) > (player_x + 23)){
bottom_x = player_x - 23; top_x = player_x + 23; }
else{
bottom_x = player_x + 23; top_x = player_x - 23; }
if((player_y + 23) > (player_y - 23)) {
left_y = player_y + 23; right_y = player_y - 23; }
else{
left_y = player_y - 23; right_y = player_y + 23; }
//Spawn creature to assist with purchase of land.
Creature* creature = new Creature;
if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, player->GetPhaseMaskForSpawn(), 594, 0, 1, player_x+1, player_y+1, player->GetPositionZ(), player->GetOrientation()))
delete creature;
creature->SaveToDB(mapid, (1 << map->GetSpawnMode()), player->GetPhaseMaskForSpawn());
uint32 db_guid = creature->GetDBTableGUIDLow();
if (!creature->LoadCreatureFromDB(db_guid, map))
delete creature;
sObjectMgr->AddCreatureToGrid(db_guid, sObjectMgr->GetCreatureData(db_guid));
//Insert data into available houses
CharacterDatabase.PExecute("INSERT INTO player_house_available (zone_name, price, map_id, bottom_x, top_x, left_y, right_y, spawn_x, spawn_y, spawn_z, spawn_o, c_guid) VALUES (\"%s\", %u, %u, %f, %f, %f, %f, %f, %f, %f, %f, %u)",
nameStr, price, mapid, bottom_x, top_x,
left_y, right_y, player_x, player_y,
player->GetPositionZ(), player->GetOrientation(), db_guid);
handler->PSendSysMessage("Success! %s has been added for %u DP to the database as possible land!", nameStr, price);
return true;
}
};
/*
-----
END NPC METHODS
---
*/
void AddSC_npc_player_house()
{
new npc_player_house();
new playerhouse_commandscript();
}