Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- House System v4.17
- Made by Nathan
- Updated and edited by Loud21
- */
- #include "ScriptPCH.h"
- #include "ObjectMgr.h"
- uint32 GetOwnerLandCount(uint32 playerguid)
- {
- QueryResult result = CharacterDatabase.PQuery("SELECT * FROM player_house_taken WHERE player_guid = %u", playerguid);
- uint32 house_count = 0;
- if (result)
- house_count = result->GetRowCount();
- return house_count;
- }
- enum eEnums
- {
- SAY_NOT_INTERESTED = -1999922,
- SAY_WRONG = -1999923,
- SAY_CORRECT = -1999924,
- PRICE_FOR_LAND = 15,
- LAND_ITEM_ID = 351270,
- HOUSE_TOKEN = 351290,
- PRICE_FOR_P1 = 15,
- PRICE_FOR_P2 = 15,
- PRICE_FOR_P3 = 15,
- PRICE_FOR_P4 = 15,
- MAX_UPGRADES = 5, // If you want to allow your players to upgrade their land more than x times this is where you'd change the value
- HOUSE_UPGRADE_PRICE = 30,
- };
- int count = 0;
- int selection;
- #define PACKAGE_1 "Profession Expansion"
- #define PACKAGE_2 "Comming Soon"
- #define PACKAGE_3 "Comming Soon"
- #define PACKAGE_4 "Comming Soon"
- bool buyLand(Player* player, Creature* creature, uint32 selection);
- bool isLandOwner(uint64 plrName);
- uint32 getGoBonus(uint64 plrName);
- uint32 getNPCBonus(uint64 plrName);
- bool updatePlayerPackage(uint32 AccID, uint32 package);
- bool hasPackage(uint32 AccID, uint32 package);
- uint32 getLandPrice(uint32 selection);
- std::string UInt32ToString2(uint32 integer)
- {
- std::stringstream out;
- out << integer;
- return out.str();
- }
- uint32 Upgrades(uint64 player_guid)
- {
- uint32 upgrades;
- QueryResult result = CharacterDatabase.PQuery("SELECT upgrades FROM player_house_taken WHERE player_guid=%u", player_guid);
- if (result)
- {
- upgrades = (*result)[0].GetUInt64();
- if (upgrades < 0)
- upgrades = 0;
- }
- else {
- return 0;
- }
- return upgrades;
- }
- class player_housing_npc : public CreatureScript
- {
- public:
- player_housing_npc()
- : CreatureScript("player_housing_npc")
- {
- }
- bool OnGossipHello(Player* player, Creature* creature)
- {
- QueryResult result = CharacterDatabase.PQuery("SELECT id, zone_name, price FROM player_house_available");
- if (result)
- {
- std::string item;
- int idStr[150];
- count = 1;
- selection = 0;
- player->PlayerTalkClass->ClearMenus();
- do
- {
- Field* fields = result->Fetch();
- idStr[count] = fields[0].GetInt64();
- item = fields[1].GetString();
- uint32 price = fields[2].GetUInt32();
- AddGossipItemFor(player, GOSSIP_ICON_TAXI, item + " Price: " + UInt32ToString2(price) + " Tokens", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + count);
- count++;
- } while (result->NextRow());
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("No land is available at this time!");
- player->PlayerTalkClass->SendCloseGossip();
- }
- if (!player->HasItemCount(LAND_ITEM_ID, 1, true))
- {
- if (isLandOwner(player->GetSession()->GetGUIDLow()))
- {
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Give me a replacement land item!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 777);
- }
- }
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Purchase Tokens", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14);
- AddGossipItemFor(player, GOSSIP_ICON_TAXI, "Not interested.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10000);
- player->SaveRecallPosition();
- player->PlayerTalkClass->SendGossipMenu(11110, creature->GetGUID());
- return true;
- }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
- {
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 901)
- {
- player->PlayerTalkClass->SendCloseGossip();
- OnGossipHello(player, creature);
- }
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 10000)
- {
- player->PlayerTalkClass->SendCloseGossip();
- }
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 777)
- {
- ItemPosCountVec dest;
- if (player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, LAND_ITEM_ID, 1) == EQUIP_ERR_OK)
- {
- if (player->AddItem(LAND_ITEM_ID, 1))
- {
- ChatHandler(player->GetSession()).PSendSysMessage("Don't lose it this time!");
- }
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("Bag is full or other issue!");
- }
- }
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 14)
- {
- player->GetSession()->SendListInventory(creature->GetGUID());
- }
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 902)
- {
- QueryResult spawnresult;
- spawnresult = CharacterDatabase.PQuery("SELECT map_id, spawn_x, spawn_y, spawn_z, spawn_o FROM player_house_available WHERE id=%u", selection);
- if (spawnresult)
- {
- Field* fields = spawnresult->Fetch();
- player->TeleportTo(fields[0].GetUInt32(), fields[1].GetFloat(), fields[2].GetFloat(), fields[3].GetFloat(), fields[4].GetFloat());
- return true;
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("Could not locate your spawn! Please contact a GM!");
- }
- }
- for (int i = 1; i <= count; i++)
- {
- if (uiAction == GOSSIP_ACTION_INFO_DEF + i)
- {
- selection = i;
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_TAXI, "Preview (Teleport to location)", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 902);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Go back to other loactions.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 901);
- player->PlayerTalkClass->SendGossipMenu(3, creature->GetGUID());
- }
- }
- return true;
- }
- };
- class player_housing_npc_guide : public CreatureScript
- {
- public:
- player_housing_npc_guide()
- : CreatureScript("player_housing_npc_guide")
- {
- }
- bool OnGossipHello(Player* player, Creature* creature)
- {
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Buy this land!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- AddGossipItemFor(player, GOSSIP_ICON_TAXI, "Take me back!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- player->PlayerTalkClass->SendGossipMenu(4, creature->GetGUID());
- return true;
- }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
- {
- player->PlayerTalkClass->SendCloseGossip();
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 1)
- {
- if (player->IsBeingTeleported() || player->IsInCombat())
- return false;
- player->Recall();
- return true;
- }
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 2)
- {
- player->PlayerTalkClass->SendCloseGossip();
- uint32 selection;
- QueryResult result = CharacterDatabase.PQuery("SELECT id FROM player_house_available WHERE c_guid = '%u'", creature->GetSpawnId());
- if (result)
- {
- Field* fields = result->Fetch();
- selection = fields[0].GetInt32();
- if (GetOwnerLandCount(player->GetSession()->GetGUIDLow()) < 10)
- {
- buyLand(player, creature, selection);
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You can not purchase anymore land!");
- player->PlayerTalkClass->SendCloseGossip();
- }
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("Failed!");
- player->PlayerTalkClass->SendCloseGossip();
- }
- }
- return true;
- }
- };
- class player_housing_packages : public CreatureScript
- {
- public:
- player_housing_packages()
- : CreatureScript("player_housing_packages")
- {
- }
- int npcb, gob;
- bool OnGossipHello(Player* player, Creature* creature)
- {
- if (!isLandOwner(player->GetSession()->GetGUIDLow()))
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You do not own any land!");
- player->PlayerTalkClass->SendCloseGossip();
- return false;
- }
- char gprice[50];
- char npcprice[50];
- npcb = getNPCBonus(player->GetSession()->GetGUIDLow());
- if (npcb > 0)
- {
- if (npcb >= 200)
- npcb = 200;
- else
- npcb = npcb + 10;
- }
- else
- {
- npcb = 10;
- }
- gob = getGoBonus(player->GetSession()->GetGUIDLow());
- if (gob > 0)
- {
- if (gob >= 200)
- gob = 200;
- else
- gob = gob + 5;
- }
- else
- {
- gob = 10;
- }
- sprintf(npcprice, "Increase NPC Spawn Limit by 10!(%i Tokens)", npcb);
- sprintf(gprice, "Increase Object Spawn Limit by 10!(%i Tokens)", gob);
- player->PlayerTalkClass->ClearMenus();
- uint32 player_guid = player->GetSession()->GetGUIDLow();
- if (!hasPackage(player_guid, 1) || !hasPackage(player_guid, 2) || !hasPackage(player_guid, 3) || !hasPackage(player_guid, 4))
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Buy Expansions!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Buy More Land!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, npcprice, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, gprice, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
- player->PlayerTalkClass->SendGossipMenu(11111, creature->GetGUID());
- return true;
- }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
- {
- uint32 player_guid = player->GetSession()->GetGUIDLow();
- uint32 upgrades = Upgrades(player->GetSession()->GetGUIDLow());
- switch (uiAction)
- {
- //BUY PACKAGE
- case GOSSIP_ACTION_INFO_DEF + 1:
- player->PlayerTalkClass->ClearMenus();
- if (!hasPackage(player_guid, 1))
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, PACKAGE_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10);
- if (!hasPackage(player_guid, 2))
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, PACKAGE_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10000); //11
- if (!hasPackage(player_guid, 3))
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, PACKAGE_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10000); //12
- if (!hasPackage(player_guid, 4))
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, PACKAGE_4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10000); //130
- player->SaveRecallPosition();
- player->PlayerTalkClass->SendGossipMenu(11111, creature->GetGUID());
- break;
- //BUY NPC PACKAGE
- case GOSSIP_ACTION_INFO_DEF + 2:
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, 0, ("Increase the size of your land by 5 yards in each direction for %i house tokens.", HOUSE_UPGRADE_PRICE), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 20);
- player->PlayerTalkClass->SendCloseGossip();
- break;
- //+10 NPC SPAWN
- case GOSSIP_ACTION_INFO_DEF + 3:
- if (player->HasItemCount(HOUSE_TOKEN, npcb, true))
- {
- player->DestroyItemCount(HOUSE_TOKEN, npcb, true);
- CharacterDatabase.PExecute("UPDATE player_house SET npcs_bonus = npcs_bonus + 10 WHERE player_guid=%u", player->GetSession()->GetGUIDLow());
- ChatHandler(player->GetSession()).PSendSysMessage("You can now add 10 more NPC's!");
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You do not have enough House Tokens to purchase this package!");
- }
- player->PlayerTalkClass->SendCloseGossip();
- break;
- //+10 GO SPAWN
- case GOSSIP_ACTION_INFO_DEF + 4:
- if (player->HasItemCount(HOUSE_TOKEN, gob, true))
- {
- player->DestroyItemCount(HOUSE_TOKEN, gob, true);
- CharacterDatabase.PExecute("UPDATE player_house SET items_bonus = items_bonus + 10 WHERE player_guid=%u", player->GetSession()->GetGUIDLow());
- ChatHandler(player->GetSession()).PSendSysMessage("You can now add 10 more GameObjects!!");
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You do not have enough House Tokens to purchase this package!");
- }
- player->PlayerTalkClass->SendCloseGossip();
- break;
- case GOSSIP_ACTION_INFO_DEF + 10:
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Profession Expansion (15 Tokens)", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13);
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Preview Package #1", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 16);
- player->PlayerTalkClass->SendGossipMenu(11111, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF + 11:
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Comming Soon (15 Tokens)", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14);
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Preview Package #2", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 17);
- player->PlayerTalkClass->SendGossipMenu(11111, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF + 12:
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Comming Soon (15 Tokens)", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15);
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Preview Package #3", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 18);
- player->PlayerTalkClass->SendGossipMenu(11111, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF + 130:
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Comming Soon (15 Tokens)", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 150);
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "Preview Package #4", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 180);
- player->PlayerTalkClass->SendGossipMenu(11111, creature->GetGUID());
- break;
- //buy packages
- case GOSSIP_ACTION_INFO_DEF + 13:
- if (player->HasItemCount(HOUSE_TOKEN, 15, true))
- {
- player->PlayerTalkClass->SendCloseGossip();
- player->DestroyItemCount(HOUSE_TOKEN, PRICE_FOR_P1, true);
- updatePlayerPackage(player->GetSession()->GetGUIDLow(), 1);
- ChatHandler(player->GetSession()).PSendSysMessage("Package #1 bought! A new option will show up on your Land Manager.");
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You do not have enough House Tokens to purchase this package!");
- }
- break;
- case GOSSIP_ACTION_INFO_DEF + 14:
- if (player->HasItemCount(HOUSE_TOKEN, 15, true))
- {
- player->PlayerTalkClass->SendCloseGossip();
- player->DestroyItemCount(HOUSE_TOKEN, PRICE_FOR_P2, true);
- updatePlayerPackage(player->GetSession()->GetGUIDLow(), 2);
- ChatHandler(player->GetSession()).PSendSysMessage("Package #2 bought! A new option will show up on your Land Manager.");
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You do not have enough House Tokens to purchase this package!");
- }
- break;
- case GOSSIP_ACTION_INFO_DEF + 15:
- if (player->HasItemCount(HOUSE_TOKEN, 15, true))
- {
- player->PlayerTalkClass->SendCloseGossip();
- player->DestroyItemCount(HOUSE_TOKEN, PRICE_FOR_P3, true);
- updatePlayerPackage(player->GetSession()->GetGUIDLow(), 3);
- ChatHandler(player->GetSession()).PSendSysMessage("Package #3 bought! A new option will show up on your Land Manager.");
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You do not have enough House Tokens to purchase this package!");
- }
- break;
- case GOSSIP_ACTION_INFO_DEF + 20:
- if (isLandOwner(player->GetSession()->GetGUIDLow()))
- {
- if (player->HasItemCount(HOUSE_TOKEN, 15, true))
- {
- if (upgrades <= MAX_UPGRADES)
- {
- CharacterDatabase.PExecute("UPDATE player_house_taken SET bottom_x=bottom_x+5 WHERE player_guid=%u", player->GetSession()->GetGUIDLow());
- CharacterDatabase.PExecute("UPDATE player_house_taken SET top_x=top_x+5 WHERE player_guid=%u", player->GetSession()->GetGUIDLow());
- CharacterDatabase.PExecute("UPDATE player_house_taken SET left_y=left_y+5 WHERE player_guid=%u", player->GetSession()->GetGUIDLow());
- CharacterDatabase.PExecute("UPDATE player_house_taken SET right_y=right_y+5 WHERE player_guid=%u", player->GetSession()->GetGUIDLow());
- player->DestroyItemCount(HOUSE_TOKEN, 15, TRUE);
- }
- else
- ChatHandler(player->GetSession()).PSendSysMessage("You have already upgraded your house %i times.", MAX_UPGRADES);
- }
- else
- ChatHandler(player->GetSession()).PSendSysMessage("You do not have enough House Tokens to upgrade the size of your housue.");
- }
- ChatHandler(player->GetSession()).PSendSysMessage("You do not own a house.", MAX_UPGRADES);
- break;
- case GOSSIP_ACTION_INFO_DEF + 150:
- if (player->HasItemCount(HOUSE_TOKEN, 15, true))
- {
- player->PlayerTalkClass->SendCloseGossip();
- player->DestroyItemCount(HOUSE_TOKEN, PRICE_FOR_P4, true);
- updatePlayerPackage(player->GetSession()->GetGUIDLow(), 4);
- ChatHandler(player->GetSession()).PSendSysMessage("Package #4 bought! A new option will show up on your Land Manager.");
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You do not have enough House Tokens to purchase this package!");
- }
- break;
- //preview packages
- case GOSSIP_ACTION_INFO_DEF + 16:
- if (player->IsInCombat())
- return false;
- player->TeleportTo(530, -1881.034668f, 5631.024902f, 127.382050f, 4.603881f);
- break;
- case GOSSIP_ACTION_INFO_DEF + 17:
- if (player->IsInCombat())
- return false;
- player->TeleportTo(530, -1729.365845f, 5612.726562f, 127.946556f, 4.764105f);
- break;
- case GOSSIP_ACTION_INFO_DEF + 18:
- if (player->IsInCombat())
- return false;
- player->TeleportTo(530, -2003.780518f, 5566.025391f, 53.307026f, 6.0363144f);
- break;
- case GOSSIP_ACTION_INFO_DEF + 180:
- if (player->IsInCombat())
- return false;
- player->TeleportTo(530, -2213.622070f, 5547.188477f, 112.163513f, 2.822561f);
- break;
- }
- return true;
- }
- };
- class player_housing_npc_package_guide : public CreatureScript
- {
- public:
- player_housing_npc_package_guide()
- : CreatureScript("player_housing_npc_package_guide")
- {
- }
- bool OnGossipHello(Player* player, Creature* creature)
- {
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_TAXI, "Take me back!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- player->PlayerTalkClass->SendGossipMenu(4, creature->GetGUID());
- return true;
- }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
- {
- player->PlayerTalkClass->SendCloseGossip();
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 1)
- {
- if (player->IsBeingTeleported() || player->IsInCombat())
- return false;
- player->Recall();
- return true;
- }
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 2)
- {
- player->PlayerTalkClass->SendCloseGossip();
- QueryResult result = CharacterDatabase.PQuery("SELECT id FROM player_house_available WHERE c_guid = '%u'", creature->GetGUID().GetCounter());
- if (result)
- {
- Field* fields = result->Fetch();
- uint32 _selection = fields[0].GetInt32();
- if (GetOwnerLandCount(player->GetSession()->GetGUIDLow()) < 10)
- {
- buyLand(player, creature, _selection);
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You can not own anymore land!");
- }
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("Failed!");
- }
- }
- return true;
- }
- };
- uint32 getNPCBonus(uint64 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();
- return npc;
- }
- bool hasPackage(uint32 player_guid, uint32 package)
- {
- QueryResult result = CharacterDatabase.PQuery("SELECT * FROM player_house WHERE package%u = 1 AND player_guid = %u", package, player_guid);
- if (result)
- return true;
- return false;
- }
- uint32 getGoBonus(uint64 plrName)
- {
- uint32 npc = 0;
- QueryResult result = CharacterDatabase.PQuery("SELECT items_bonus FROM player_house WHERE player_guid = %u", plrName);
- if (result)
- npc = (*result)[0].GetUInt32();
- return npc;
- }
- bool updatePlayerPackage(uint32 AccID, uint32 package)
- {
- CharacterDatabase.PExecute("UPDATE player_house SET package%u=1 WHERE player_guid=%u", package, AccID);
- return true;
- }
- bool isLandOwner(uint64 name)
- {
- QueryResult result = CharacterDatabase.PQuery("SELECT * FROM player_house_taken WHERE player_guid=%u", name);
- if (result)
- return true;
- return false;
- }
- uint32 getLandPrice(uint32 selection)
- {
- uint32 PFL = 10;
- QueryResult result = CharacterDatabase.PQuery("SELECT price FROM player_house_available WHERE id=%u", selection);
- if (result)
- PFL = (*result)[0].GetUInt32();
- return PFL;
- }
- bool buyLand(Player* player, Creature* creature, uint32 selection)
- {
- if (!selection)
- return false;
- uint32 _PFL = getLandPrice(selection);
- if (!creature)
- return false;
- if (player->HasItemCount(HOUSE_TOKEN, _PFL, true))
- {
- player->DestroyItemCount(HOUSE_TOKEN, _PFL, true);
- QueryResult a_result = CharacterDatabase.PQuery("SELECT zone_name, map_id, bottom_x, top_x, left_y, right_y, spawn_x, spawn_y, spawn_z, spawn_o, c_guid FROM player_house_available WHERE id = %u", selection);
- if (a_result)
- {
- Field* fields = a_result->Fetch();
- CharacterDatabase.PExecute("INSERT INTO player_house_taken (player_name, player_guid, zone_name, map_id, bottom_x, top_x, left_y, right_y, spawn_x, spawn_y, spawn_z, spawn_o) VALUES (\"%s\", %u, \"%s\", %u, %f, %f, %f, %f, %f, %f, %f, %f)", player->GetName(), player->GetSession()->GetGUIDLow(), fields[0].GetString().c_str(), fields[1].GetUInt32(), fields[2].GetFloat(), fields[3].GetFloat(), fields[4].GetFloat(), fields[5].GetFloat(), fields[6].GetFloat(), fields[7].GetFloat(), fields[8].GetFloat(), fields[9].GetFloat());
- if (!isLandOwner(player->GetSession()->GetGUIDLow()))
- CharacterDatabase.PExecute("INSERT INTO player_house SET player_guid = %u, player_name = \"%s\"", player->GetSession()->GetGUIDLow()), player->GetName();
- CharacterDatabase.PExecute("DELETE FROM player_house_available WHERE id = %u", selection);
- creature->CombatStop();
- creature->DeleteFromDB();
- creature->AddObjectToRemoveList();
- player->CastSpell(player, 55420, false);
- if (!player->HasItemCount(LAND_ITEM_ID, 1, true))
- {
- player->AddItem(LAND_ITEM_ID, 1);
- ChatHandler(player->GetSession()).PSendSysMessage("You now have your own land! You have been given a item to access all the custom features!");
- }
- else
- ChatHandler(player->GetSession()).PSendSysMessage("You now have your own land! Use your land item to access all the custom features!");
- return true;
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("Your information could not be inserted into the database! Your House Tokens have been refunded!");
- player->AddItem(HOUSE_TOKEN, _PFL);
- }
- ItemPosCountVec dest;
- if (player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, LAND_ITEM_ID, 1) == EQUIP_ERR_OK)
- {
- if (player->AddItem(LAND_ITEM_ID, 1))
- {
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("Your item to manage your land could not be given to you! Go to the Land Manager to get the House Controller.");
- return false;
- }
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage(497, LAND_ITEM_ID, 0);
- ChatHandler(player->GetSession()).PSendSysMessage("You do not have enough room in your inventory! Go to the Land Manager to get the House Controller.");
- return false;
- }
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You do not have enough House Tokens to buy any land, this land costs %u House Tokens.", _PFL);
- return false;
- }
- return false;
- }
- void AddSC_PlayerHousing()
- {
- new player_housing_npc();
- new player_housing_npc_guide();
- new player_housing_packages();
- new player_housing_npc_package_guide();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement