Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Player.h"
- #include "World.h"
- #include "WorldSession.h"
- #include "ScriptedGossip.h"
- #include "GossipDef.h"
- #include "Chat.h"
- #include "DatabaseEnv.h"
- #include "ObjectMgr.h"
- #include "AccountMgr.h"
- #include "Realm.h"
- #include "Item.h"
- static void removeCharsFromString(std::string& str, const char* charsToRemove)
- {
- for (unsigned int i = 0; i < strlen(charsToRemove); ++i) {
- str.erase(remove(str.begin(), str.end(), charsToRemove[i]), str.end());
- }
- }
- struct MemorizeShopPT
- {
- std::string requiredText = "";
- uint32 VIP_Case = 0;
- uint32 Coupon_p = 0; //percentage
- uint32 Coupon_a = 0; //amount
- uint32 Coupon_limit = 0; //limited amount
- std::string MANAGECouponType = "static number"; //or - "percentage"
- uint32 MANAGECouponAmount = 0;
- uint32 MANAGEMaxUsage = 0; //if 0 = infinite
- std::string UseOnce = "true"; //can use only once per account (if max usage isn't surpassed already)
- std::string code_holder = "";
- std::string store_coupon_code_for_edits = "";
- };
- static std::map<std::string, MemorizeShopPT> ShopPT;
- uint32 VIP_Item_ID = 95001;
- void UpdateRankLevel(Player* player, uint32 startDate, uint32 duration)
- {
- }
- uint32 GetPointsValuePT(Player* player, std::string vp_dp)
- {
- if (vp_dp == "donor")
- {
- QueryResult result = LoginDatabase.PQuery("SELECT `dp` FROM `account` WHERE `id` = '%u'", player->GetSession()->GetAccountId());
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: couldn't detect points");
- return 0;
- }
- return (*result)[0].GetUInt32();
- }
- //by default
- return 0;
- }
- std::string GetPointsPT(Player* player, std::string vp_dp)
- {
- std::stringstream ss;
- if (vp_dp == "donor")
- {
- QueryResult result = LoginDatabase.PQuery("SELECT `dp` FROM `account` WHERE `id` = '%u'", player->GetSession()->GetAccountId());
- if (!result)
- return "[|cffFF0000Error|r]: no data has been found";
- std::string DonorTokens = (*result)[0].GetString();
- return "You've got |cFFff0000" + DonorTokens + "|r Donor Points";
- }
- return "You currently have|cFFff0000 0 points";
- }
- void ShowStoreMenuPT(Player* player, Creature* creature, std::string category, uint8 limit, uint8 offset)
- {
- QueryResult result = LoginDatabase.PQuery("SELECT `itemid`, `amount`, `price`, `id` FROM `donor_shop` WHERE `category` = '%s' LIMIT %u OFFSET %u", category.c_str(), limit, offset);
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r fetching information");
- return;
- }
- do
- {
- uint32 itemID = (*result)[0].GetUInt32();
- uint32 amount = (*result)[1].GetUInt32();
- uint32 price = (*result)[2].GetUInt32();
- uint32 ID = (*result)[3].GetUInt32();
- if (sObjectMgr->GetItemTemplate(itemID))
- {
- std::stringstream ss;
- //if player is between vip bronze and vip gold
- if (player->GetSession()->GetSecurity() >= 1 && player->GetSession()->GetSecurity() >= 3)
- {
- ss << "[|cffFF0000VIP|r] ";
- price = price * 0.9;
- }
- if (ShopPT[player->GetName()].Coupon_p != 0 && ShopPT[player->GetName()].Coupon_a == 0)
- {
- ss << "[|cffFF0000Coupon|r] ";
- float division = float(ShopPT[player->GetName()].Coupon_p * 0.01f);
- uint32 TemplPrice = division * price;
- price = price - TemplPrice;
- }
- if (ShopPT[player->GetName()].Coupon_a != 0 && ShopPT[player->GetName()].Coupon_p == 0)
- {
- ss << "[|cffFF0000Coupon|r] ";
- uint32 storeme = price;
- price = storeme - ShopPT[player->GetName()].Coupon_a;
- if (price >= 1000000000)
- price = 0;
- }
- Item* item = player->GetItemByEntry(itemID);
- if (!item)
- continue;
- if (category == "gear" || category == "weapon" || category == "jewelry")
- {
- if (sObjectMgr->GetItemTemplate(itemID)->AllowableClass & player->GetClassMask())
- {
- ss << "|cFFff0000" << sObjectMgr->GetItemTemplate(itemID)->Name1 << "|r (|cffFF0000x" << amount << "|r) for |cFFff0000" << price << " Donor Points|r";
- }
- }
- else
- ss << "|cFFff0000" << sObjectMgr->GetItemTemplate(itemID)->Name1 << "|r (|cffFF0000x" << amount << "|r) for |cFFff0000" << price << " Donor Points|r";
- //if (itemID == VIP_Item_ID && player->GetSession()->GetSecurity() == SEC_PLAYER) //do not display VIP to VIPs (or staff) to avoid possible confusion and mis-purchase by any chance
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, ss.str().c_str(), GOSSIP_SENDER_MAIN, ID);
- }
- else
- {
- if (player->GetSession()->GetSecurity() >= SEC_ADMINISTRATOR)
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: [Administration] could not find the item ID: |cffFF0000%u|r |cffFF0000in the database, please verify", itemID);
- continue;
- }
- } while (result->NextRow());
- }
- void RewardPlayerPT(Player* player, Creature* creature, uint32 ID)
- {
- QueryResult result = LoginDatabase.PQuery("SELECT `amount`, `price`, `itemID` FROM `donor_shop` WHERE `ID` = '%u'", ID);
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r could not find the case ID: |cffFF0000%u|r in the store's database, please contact a staff member", ID);
- CloseGossipMenuFor(player);
- return;
- }
- uint32 amount = (*result)[0].GetUInt32();
- uint32 price = (*result)[1].GetUInt32();
- uint32 itemID = (*result)[2].GetUInt32();
- //if item ID is invalid (item was not found in item_template
- if (!sObjectMgr->GetItemTemplate(itemID))
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r could not find the item ID: |cffFF0000%u|r in the database, please contact a staff member", itemID);
- CloseGossipMenuFor(player);
- return;
- }
- if (price < 1) //if for some reason the price is BELOW 1 (0 and negative)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r invalid price for item ID: |cffFF0000%u|r. Please contact a staff member", itemID);
- CloseGossipMenuFor(player);
- return;
- }
- std::string AccName; sAccountMgr->GetName(player->GetSession()->GetAccountId(), AccName);
- /*VIP DISCOUNT = 90% of the original value (10% off on all available products within the shop)*/
- if (player->GetSession()->GetSecurity() >= 1 && player->GetSession()->GetSecurity() <= 3)
- price = price * 0.9;
- if (ShopPT[player->GetName()].Coupon_p != 0 && ShopPT[player->GetName()].Coupon_a == 0)
- {
- float division = float(ShopPT[player->GetName()].Coupon_p * 0.01f);
- uint32 TemplPrice = division * price;
- price = price - TemplPrice;
- }
- if (ShopPT[player->GetName()].Coupon_a != 0 && ShopPT[player->GetName()].Coupon_p == 0)
- {
- uint32 storeme = price;
- price = storeme - ShopPT[player->GetName()].Coupon_a;
- if (price >= 1000000000)
- price = 0;
- }
- if (GetPointsValuePT(player, "donor") >= price)
- {
- uint32 newValue = GetPointsValuePT(player, "donor") - price;
- if (amount > sObjectMgr->GetItemTemplate(itemID)->MaxCount && sObjectMgr->GetItemTemplate(itemID)->MaxCount != 0) //if NOT 0 (unlimited) AND NOT bigger than maxcount (1 and above, negative amounts should not exist by default, uint value)
- amount = sObjectMgr->GetItemTemplate(itemID)->MaxCount;
- if (amount < 1)
- amount = 1;
- if (player->AddItem(itemID, amount))
- {
- LoginDatabase.PQuery("UPDATE `account` SET `dp` = '%u' WHERE `id` = '%u'", newValue, player->GetSession()->GetAccountId());
- if (ShopPT[player->GetName()].Coupon_p != 0 && ShopPT[player->GetName()].Coupon_a == 0)
- LoginDatabase.PQuery("INSERT INTO `store_system_logs` (`accountID`, `guid`, `itemID`, `amount`, `price`, `playerName`, `AccountName`, `points`, `date`, `coupon`, `coupon_type`) VALUES ('%u', '%u', '%u', '%u', '%u', '%s', '%s', 'donor', NOW(), '%u', 'p')", player->GetSession()->GetAccountId(), player->GetGUID(),
- itemID, amount, price, player->GetName().c_str(), AccName.c_str(), ShopPT[player->GetName()].Coupon_p);
- if (ShopPT[player->GetName()].Coupon_p == 0 && ShopPT[player->GetName()].Coupon_a != 0)
- LoginDatabase.PQuery("INSERT INTO `store_system_logs` (`accountID`, `guid`, `itemID`, `amount`, `price`, `playerName`, `AccountName`, `points`, `date`, `coupon`, `coupon_type`) VALUES ('%u', '%u', '%u', '%u', '%u', '%s', '%s', 'donor', NOW(), '%u', 'a')", player->GetSession()->GetAccountId(), player->GetGUID(),
- itemID, amount, price, player->GetName().c_str(), AccName.c_str(), ShopPT[player->GetName()].Coupon_a);
- if (ShopPT[player->GetName()].Coupon_p == 0 && ShopPT[player->GetName()].Coupon_a == 0) //if no doupon at all
- LoginDatabase.PQuery("INSERT INTO `store_system_logs` (`accountID`, `guid`, `itemID`, `amount`, `price`, `playerName`, `AccountName`, `points`, `date`, `coupon_type`) VALUES ('%u', '%u', '%u', '%u', '%u', '%s', '%s', 'donor', NOW(), '-')", player->GetSession()->GetAccountId(), player->GetGUID(),
- itemID, amount, price, player->GetName().c_str(), AccName.c_str());
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: congratulations, you bought |cffFF0000%s|r (|cffFF0000x %u|r) for |cffFF0000%u Donor Points|r!", sObjectMgr->GetItemTemplate(itemID)->Name1.c_str(), amount, price);
- if (ShopPT[player->GetName()].Coupon_p != 0 && ShopPT[player->GetName()].Coupon_a == 0)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: your coupon has been successfully used during this purchase!");
- ShopPT[player->GetName()].Coupon_p = 0; //remove coupon
- }
- if (ShopPT[player->GetName()].Coupon_p == 0 && ShopPT[player->GetName()].Coupon_a != 0)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: your coupon has been successfully used during this purchase!");
- ShopPT[player->GetName()].Coupon_a = 0; //remove coupon
- }
- if (itemID == VIP_Item_ID) //VIP activation
- {
- //UpdateRankLevel(player, time(nullptr), 120);
- sAccountMgr->UpdateAccountAccess(nullptr, player->GetSession()->GetAccountId(), 1, realm.Id.Realm);
- std::string MessageToSend_VIP = "[|cffFF0000VIP Activation System|r]: congratulations to |cffFF0000" + player->GetName() + "|r for becoming our newest VIP member!";
- sWorld->SendServerMessage(ServerMessageType::SERVER_MSG_STRING, MessageToSend_VIP.c_str());
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000VIP Activation System|r]: congratulations, and thank you for becoming our newest VIP member! If you have any issues or questions, be sure to contact us through a ticket!");
- player->DestroyItemCount(VIP_Item_ID, 1, true); //do not leave VIP coin accessible, only add it for logging purposes
- }
- CloseGossipMenuFor(player);
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000it seems you don't have enough space in your bags or you reached maximum quantity for this item: |cffFF0000%s|r", sObjectMgr->GetItemTemplate(itemID)->Name1.c_str());
- CloseGossipMenuFor(player);
- return;
- }
- }
- else
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: you don't have enough points to buy |cffFF0000%s|r. You have |cffFF0000%u Donor Points|r but the item costs |cffFF0000%u |cffFF0000Donor Points|r. You need |cffFF0000%u additional Donor Points|r", sObjectMgr->GetItemTemplate(itemID)->Name1.c_str(),
- GetPointsValuePT(player, "donor"), price, price - GetPointsValuePT(player, "donor"));
- CloseGossipMenuFor(player);
- return;
- }
- }
- void PrintLatestLogs(Player* player, std::string vp_dp, uint8 limit, uint8 offset)
- {
- uint32 id = 0;
- std::string points = "";
- if (vp_dp == "donor")
- points = "donor";
- QueryResult result = LoginDatabase.PQuery("SELECT `accountid`, `guid`, `itemid`, `amount`, `price`, `playername`, `AccountName`, `date`, `coupon`, `coupon_type` FROM `store_system_logs` WHERE `points` = '%s' ORDER BY `DATE` DESC LIMIT %u OFFSET %u", points.c_str(), limit, offset);
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r bad query, no data could be fetched");
- CloseGossipMenuFor(player);
- return;
- }
- do
- {
- id++;
- std::stringstream ss;
- uint32 accID = (*result)[0].GetUInt32();
- uint32 guid = (*result)[1].GetUInt32();
- uint32 itemID = (*result)[2].GetUInt32();
- uint32 amount = (*result)[3].GetUInt32();
- uint32 price = (*result)[4].GetUInt32();
- std::string playerName = (*result)[5].GetString();
- std::string AccName = (*result)[6].GetString();
- std::string date = (*result)[7].GetString();
- uint32 coupon = (*result)[8].GetUInt32();
- std::string coupon_type = (*result)[9].GetString();
- if (!sObjectMgr->GetItemTemplate(itemID))
- continue;
- std::string itemName = "";
- itemName = sObjectMgr->GetItemTemplate(itemID)->Name1;
- points[0] = toupper(points[0]);
- if (price >= 1000000000)
- price = 0;
- ss << "[ID: |cFFff0000" << id << "|r]: |cffFF0000" << playerName << "|r (GUID: |cFFff0000" << guid << "|r, account ID: |cFFff0000" << accID << "|r, account name: |cffFF0000" << AccName << "|r) purchased |cffFF0000" << itemName << "|r (ID: |cFFff0000" << itemID << "|r, amount: |cFFff0000" << amount << "|r) for |cFFff0000" << price << " " << points << " Points|r\nDate: |cffFF0000" << date;
- if (coupon != 0)
- {
- ss << "|r\nCoupon discount: |cffFF0000" << coupon;
- if (coupon_type == "p")
- ss << " percent|r";
- if (coupon_type == "a")
- ss << " Donor Points|r";
- }
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, ss.str().c_str(), GOSSIP_SENDER_MAIN, 1);
- } while (result->NextRow());
- }
- // code pName/aName/GUID vp/dp/vip/playtime 25/50/75 25/50/75
- void FindLogsBy(Player* player, Creature* creature, std::string text, std::string search_by, std::string vp_dp, uint8 limit, uint8 offset)
- {
- uint32 id = 0;
- std::string points = "";
- if (vp_dp == "donor")
- points = "donor";
- QueryResult result = LoginDatabase.PQuery("SELECT `accountid`, `guid`, `itemid`, `amount`, `price`, `playername`, `AccountName`, `date`, `coupon`, `coupon_type` FROM `store_system_logs` WHERE `points` = '%s' AND `%s` = '%s' ORDER BY `date` DESC LIMIT %u OFFSET %u", points.c_str(), search_by.c_str(), text.c_str(), limit, offset);
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r bad query, no data could be fetched");
- CloseGossipMenuFor(player);
- return;
- }
- do
- {
- id++;
- std::stringstream ss;
- uint32 accID = (*result)[0].GetUInt32();
- uint32 guid = (*result)[1].GetUInt32();
- uint32 itemID = (*result)[2].GetUInt32();
- uint32 amount = (*result)[3].GetUInt32();
- uint32 price = (*result)[4].GetUInt32();
- std::string playerName = (*result)[5].GetString();
- std::string AccName = (*result)[6].GetString();
- std::string date = (*result)[7].GetString();
- uint32 coupon = (*result)[8].GetUInt32();
- std::string coupon_type = (*result)[9].GetString();
- if (!sObjectMgr->GetItemTemplate(itemID))
- continue;
- std::string itemName = "";
- itemName = sObjectMgr->GetItemTemplate(itemID)->Name1;
- points[0] = toupper(points[0]);
- ss << "[ID: |cFFff0000" << id << "|r]: |cffFF0000" << playerName << "|r (GUID: |cFFff0000" << guid << "|r, account ID: |cFFff0000" << accID << "|r, account name: |cffFF0000" << AccName << "|r) purchased |cffFF0000" << itemName << "|r (ID: |cFFff0000" << itemID << "|r, amount: |cFFff0000" << amount << "|r) for |cFFff0000" << price << " " << points << " Points|r\nDate: |cffFF0000" << date;
- if (coupon != 0)
- {
- ss << "|r\nCoupon discount: |cffFF0000" << coupon;
- if (coupon_type == "p")
- ss << " percent|r";
- if (coupon_type == "a")
- ss << " Donor Points|r";
- }
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, ss.str().c_str(), GOSSIP_SENDER_MAIN, 1);
- } while (result->NextRow());
- }
- std::string EnlistVIPPrice(Player* player)
- {
- QueryResult result = LoginDatabase.PQuery("SELECT `price`, `id` FROM `donor_shop` WHERE `itemid` = '%u'", VIP_Item_ID);
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r bad query, no data could be fetched");
- CloseGossipMenuFor(player);
- return "";
- }
- uint32 price = (*result)[0].GetUInt32();
- ShopPT[player->GetName()].VIP_Case = (*result)[1].GetUInt32();
- std::stringstream ss;
- ss << "[|cffFF0000VIP|r]: " << price << " Donor Points";
- return ss.str();
- }
- bool VerifyCouponCode(Player* player, std::string code)
- {
- QueryResult result = LoginDatabase.PQuery("SELECT `couponid`, `discount_p`, `discount_a`, `times_used`, `once` FROM `coupons` WHERE `code` = '%s'", code.c_str());
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon data could be fetched");
- CloseGossipMenuFor(player);
- return false;
- }
- return true;
- }
- uint32 GetCoupon_P(Player* player, std::string code)
- {
- if (!VerifyCouponCode(player, code))
- return 0;
- QueryResult result = LoginDatabase.PQuery("SELECT `couponid`, `discount_p`, `discount_a`, `times_used`, `once` FROM `coupons` WHERE `code` = '%s'", code.c_str());
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon data could be fetched");
- CloseGossipMenuFor(player);
- return 0;
- }
- uint32 couponID = (*result)[0].GetUInt32();
- uint32 discount_p = (*result)[1].GetUInt32();
- uint32 discount_a = (*result)[2].GetUInt32();
- uint32 times_used = (*result)[3].GetUInt32();
- if (couponID != 0 && discount_p != 0) //if not 0 (default)
- return discount_p;
- return 0;
- }
- uint32 GetCoupon_a(Player* player, std::string code)
- {
- if (!VerifyCouponCode(player, code))
- return 0;
- QueryResult result = LoginDatabase.PQuery("SELECT `couponid`, `discount_p`, `discount_a`, `times_used`, `once` FROM `coupons` WHERE `code` = '%s'", code.c_str());
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon data could be fetched");
- CloseGossipMenuFor(player);
- return 0;
- }
- uint32 couponID = (*result)[0].GetUInt32();
- uint32 discount_p = (*result)[1].GetUInt32();
- uint32 discount_a = (*result)[2].GetUInt32();
- uint32 times_used = (*result)[3].GetUInt32();
- if (couponID != 0 && discount_a != 0) //if not 0 (default)
- return discount_a;
- return 0;
- }
- /*
- AC> SQL: SELECT `couponid`, `discount_p`, `discount_a`, `times_used`, `used_by` WHERE `code` = 'testing'
- ERROR: [1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `code` = 'testing'' at line 1
- */
- bool HasUsedCoupon(Player* player, std::string code)
- {
- QueryResult result = LoginDatabase.PQuery("SELECT `used_by`, `accountID`FROM `coupons_logs` WHERE `code` = '%s'", code.c_str());
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon logs could be fetched");
- CloseGossipMenuFor(player);
- return false;
- }
- uint32 accountID = (*result)[1].GetUInt32();
- if (player->GetSession()->GetAccountId() == accountID)
- return true;
- return false;
- }
- void PrintWhoUsedCoupon(Player* player, std::string code)
- {
- QueryResult result = LoginDatabase.PQuery("SELECT `used_by`, `date` FROM `coupons_logs` WHERE `code` = '%s'", code.c_str());
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon logs could be fetched");
- CloseGossipMenuFor(player);
- return;
- }
- std::string used_by = (*result)[0].GetCString();
- std::string date = (*result)[1].GetCString();
- std::stringstream ss;
- ss << used_by << " used the coupon code " << code << " at " << date;
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: %s", ss.str().c_str());
- }
- void ApplyCoupon(Player* player, std::string code)
- {
- if (!VerifyCouponCode(player, code))
- return;
- QueryResult result = LoginDatabase.PQuery("SELECT `couponid`, `discount_p`, `discount_a`, `times_used`, `once`, `max_use` FROM `coupons` WHERE `code` = '%s'", code.c_str());
- if (!result)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon data could be fetched");
- CloseGossipMenuFor(player);
- return;
- }
- std::string use_once = (*result)[4].GetCString();
- if (HasUsedCoupon(player, code) && use_once == "true")
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r this coupon can be used once per account only!");
- return;
- }
- uint32 times_used = (*result)[3].GetUInt32();
- uint32 max_use = (*result)[5].GetUInt32();
- if (max_use <= times_used && max_use != 0)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r the maximum usage of this coupon was reached!");
- return;
- }
- std::stringstream ss;
- ShopPT[player->GetName()].Coupon_p = GetCoupon_P(player, code);
- ShopPT[player->GetName()].Coupon_a = GetCoupon_a(player, code);
- if (ShopPT[player->GetName()].Coupon_p != 0 && ShopPT[player->GetName()].Coupon_a != 0)
- {
- ss << "[|cffFF0000Store System|r]: this coupon code benefits 2 types of discounts therefore has been disqualified. Please contact the staff for a new coupon";
- ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str());
- ShopPT[player->GetName()].Coupon_p = 0;
- ShopPT[player->GetName()].Coupon_a = 0;
- return;
- }
- if (ShopPT[player->GetName()].Coupon_p == 0 && ShopPT[player->GetName()].Coupon_a == 0)
- {
- ss << "[|cffFF0000Store System|r]: this coupon code does not contain any discounts";
- ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str());
- return;
- }
- if (ShopPT[player->GetName()].Coupon_p != 0)
- ss << "[|cffFF0000Store System|r]: the coupon has been applied! Your next purchase will now have |cffFF0000" << ShopPT[player->GetName()].Coupon_p << "|r percent discount!";
- if (ShopPT[player->GetName()].Coupon_a != 0)
- ss << "[|cffFF0000Store System|r]: the coupon has been applied! Your next purchase will now have |cffFF0000" << ShopPT[player->GetName()].Coupon_a << "|r Donor Points discount!";
- ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str());
- LoginDatabase.PQuery("UPDATE `coupons` SET `times_used` = `times_used` + 1 WHERE `code` = '%s'", code.c_str());
- std::stringstream s;
- s << player->GetName() << " (GUID: " << player->GetGUID() << ", account ID: " << player->GetSession()->GetAccountId() << ")";
- LoginDatabase.PQuery("INSERT INTO `coupons_logs` (`code`, `used_by`, `accountID`) VALUES ('%s', '%s', '%u')", code.c_str(), s.str().c_str(), player->GetSession()->GetAccountId());
- }
- std::string random_string_coupon(size_t length)
- {
- srand(urand(1, 1000));
- auto randchar = []() -> char
- {
- const char charset[] =
- "0123456789"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz";
- const size_t max_index = (sizeof(charset) - 1);
- return charset[rand() % max_index];
- };
- std::string str(length, 0);
- std::generate_n(str.begin(), length, randchar);
- return str;
- }
- void AddNewCoupon(Player* player, Creature* creature)
- {
- player->PlayerTalkClass->ClearMenus();
- std::stringstream CouponType, CouponAmount, CouponMaxUsage, CouponUseOnce;
- CouponType << "Coupon type: |cffFF0000" << ShopPT[player->GetName()].MANAGECouponType;
- CouponAmount << "Coupon amount: |cFFff0000" << ShopPT[player->GetName()].MANAGECouponAmount;
- CouponMaxUsage << "Coupon max usage: |cFFff0000" << ShopPT[player->GetName()].MANAGEMaxUsage;
- CouponUseOnce << "Coupon use once (per account): |cffFF0000" << ShopPT[player->GetName()].UseOnce;
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the coupon management menu. In order to generate a new coupon, these variables must be filled. To edit, click on each menu and select the proper option you desire. Options documentation is provided by the server owner / co-owner", GOSSIP_SENDER_MAIN, 39); //refresh
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, CouponType.str(), GOSSIP_SENDER_MAIN, 40); //click to change
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, CouponAmount.str(), GOSSIP_SENDER_MAIN, 41, "Please insert the amount you want to reduce. The amount is according to the coupon type you've entered in the previous menu (percentage or a hardcoded number)\bPress 'ACCEPT' NOT Enter!", NULL, true);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, CouponMaxUsage.str(), GOSSIP_SENDER_MAIN, 42, "If you would like to keep an unlimited coupon usage, type '0'. If you want it limited, enter your desired number of times", NULL, true);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, CouponUseOnce.str(), GOSSIP_SENDER_MAIN, 43);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Submit data", GOSSIP_SENDER_MAIN, 44, "ARE YOU CERTAIN YOU WISH TO SUBMIT THIS AS IT CURRENTLY STANDS? Press 'ACCEPT', NOT Enter!", NULL, false);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- }
- void DeleteCoupon(Player* player, std::string coupon)
- {
- if (!VerifyCouponCode(player, coupon))
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: this coupon is not valid or does not exist in our database");
- return;
- }
- LoginDatabase.PQuery("UPDATE `coupons` SET `discount_p`='0', `discount_a`='0', `max_use` = '1', `times_used` = '1', `once` = 'true' WHERE `code` = '%s'", coupon.c_str());
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: this coupon has been successfully disabled and is no longer usable. The logs still persist in the database");
- }
- class DonorShopStore : public CreatureScript
- {
- public:
- DonorShopStore() : CreatureScript("DonorShop") { }
- struct DonorShopStoreAI : public ScriptedAI
- {
- DonorShopStoreAI(Creature* creature) : ScriptedAI(creature) {}
- bool OnGossipHello(Player* player) override
- {
- Creature* creature = me;
- player->PlayerTalkClass->ClearMenus();
- //AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_gem_variety_01:23|t Welcome to the Playtime Shop, " + player->GetName() + "!", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_coin_17:23|t " + GetPointsPT(player, "donor"), GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_coin_17:23|t Preview", GOSSIP_SENDER_MAIN, 52);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_gem_variety_01:23|t Donor", GOSSIP_SENDER_MAIN, 48);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\Achievement_PVP_A_15:23|t " + EnlistVIPPrice(player), GOSSIP_SENDER_MAIN, 36);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\achievement_bg_masterofallbgs:23|t Coins & Tokens", GOSSIP_SENDER_MAIN, 4);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\ability_mount_ridinghorse:23|t Mounts", GOSSIP_SENDER_MAIN, 5);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\ability_warrior_bloodfrenzy:23|t Bundles", GOSSIP_SENDER_MAIN, 6);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_box_petcarrier_01:23|t Misc", GOSSIP_SENDER_MAIN, 46);
- if (ShopPT[player->GetName()].Coupon_p == 0 && ShopPT[player->GetName()].Coupon_a == 0) //only allow coupon usage when you have nothing applied in your account
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_letter_07:23|t I have a coupon code!", GOSSIP_SENDER_MAIN, 37, "Please insert here your coupon code. When you're done, press 'Accept', AND NOT Enter!", NULL, true);
- if (player->GetSession()->GetSecurity() >= SEC_ADMINISTRATOR)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_crown_13:23|t Administration Panel", GOSSIP_SENDER_MAIN, 11);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- return true;
- }
- bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
- {
- uint32 sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId);
- uint32 action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
- Creature* creature = me;
- if (action >= 1 && action <= 70)
- {
- }
- else
- RewardPlayerPT(player, creature, action);
- switch (action)
- {
- case 1: //refresh
- player->PlayerTalkClass->ClearMenus();
- OnGossipHello(player);
- break;
- case 2: //close menu
- CloseGossipMenuFor(player);
- break;
- case 48: //Donor
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Gear", GOSSIP_SENDER_MAIN, 49);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Weapon", GOSSIP_SENDER_MAIN, 50);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[VIP] Jewelry", GOSSIP_SENDER_MAIN, 51);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 49: //gear
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Gear|r menu!", GOSSIP_SENDER_MAIN, 49);
- ShowStoreMenuPT(player, creature, "gear", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 53);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 53: //gear p2
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Gear|r menu!", GOSSIP_SENDER_MAIN, 53);
- ShowStoreMenuPT(player, creature, "gear", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 50: //weapon
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Weapon|r menu!", GOSSIP_SENDER_MAIN, 50);
- ShowStoreMenuPT(player, creature, "weapon", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 54);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 54: //weapon p2
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Weapon|r menu!", GOSSIP_SENDER_MAIN, 54);
- ShowStoreMenuPT(player, creature, "weapon", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 51: //jewelry
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Jewelry|r menu!", GOSSIP_SENDER_MAIN, 51);
- if (player->GetSession()->GetSecurity() >= 1)
- {
- ShowStoreMenuPT(player, creature, "jewelry", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 55);
- }
- else
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "This page is only available for VIPs", GOSSIP_SENDER_MAIN, 51);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 55: //jewelry p2
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Jewelry|r menu!", GOSSIP_SENDER_MAIN, 55);
- if (player->GetSession()->GetSecurity() >= 1)
- ShowStoreMenuPT(player, creature, "jewelry", 50, 25);
- else
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "This page is only available for VIPs", GOSSIP_SENDER_MAIN, 51);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 3: //Transmogrification
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Transmogrification|r menu!", GOSSIP_SENDER_MAIN, 3);
- ShowStoreMenuPT(player, creature, "transmogrification", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 7);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 4: //tokens
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Coins & Tokens|r menu!", GOSSIP_SENDER_MAIN, 4);
- ShowStoreMenuPT(player, creature, "coins & tokens", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 8);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 5: //mounts
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Mounts|r menu!", GOSSIP_SENDER_MAIN, 5);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Exotic", GOSSIP_SENDER_MAIN, 56);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Custom", GOSSIP_SENDER_MAIN, 57);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 56: //exotic
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Exotic Mounts|r menu!", GOSSIP_SENDER_MAIN, 56);
- ShowStoreMenuPT(player, creature, "exotic", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 58);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 58: //exotic p2
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Exotic Mounts|r menu!", GOSSIP_SENDER_MAIN, 58);
- ShowStoreMenuPT(player, creature, "exotic", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 57: //custom
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Custom Mounts|r menu!", GOSSIP_SENDER_MAIN, 57);
- ShowStoreMenuPT(player, creature, "custom", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 59);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 59: //custom p2
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Custom Mounts|r menu!", GOSSIP_SENDER_MAIN, 59);
- ShowStoreMenuPT(player, creature, "custom", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 6: //bundles
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Bundles|r menu!", GOSSIP_SENDER_MAIN, 6);
- ShowStoreMenuPT(player, creature, "bundles", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 10);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 46: //misc
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Misc|r menu!", GOSSIP_SENDER_MAIN, 46);
- ShowStoreMenuPT(player, creature, "misc", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 47);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 52: //preview
- player->GetSession()->SendListInventory(creature->GetGUID());
- break;
- case 7: //Transmogrification p2
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Transmogrification|r menu!", GOSSIP_SENDER_MAIN, 7);
- ShowStoreMenuPT(player, creature, "transmogrification", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 8: //tokens p2
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Coins & Tokens|r menu!", GOSSIP_SENDER_MAIN, 8);
- ShowStoreMenuPT(player, creature, "coins & tokens", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 9: //mounts p2
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Mounts|r menu!", GOSSIP_SENDER_MAIN, 9);
- ShowStoreMenuPT(player, creature, "mounts", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 10: //bundles p2
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Bundles|r menu!", GOSSIP_SENDER_MAIN, 10);
- ShowStoreMenuPT(player, creature, "bundles", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 47: //misc p2
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Misc|r menu!", GOSSIP_SENDER_MAIN, 47);
- ShowStoreMenuPT(player, creature, "misc", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 11: //Administration Panel
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cffFF0000Administration Panel|r menu!", GOSSIP_SENDER_MAIN, 11);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_coin_19:23|t Display last purchases", GOSSIP_SENDER_MAIN, 12);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\achievement_character_bloodelf_male:23|t Search by character name", GOSSIP_SENDER_MAIN, 16, "Insert character name. Press 'Accept' AND NOT Enter!", NULL, true);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\spell_nature_stoneclawtotem:23|t Search by GUID", GOSSIP_SENDER_MAIN, 17, "Insert character GUID. Press 'Accept' AND NOT Enter!", NULL, true);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\ability_hunter_eagleeye:23|t Search by account ID", GOSSIP_SENDER_MAIN, 18, "Insert account ID. Press 'Accept' AND NOT Enter!", NULL, true);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_eye_01:23|t Search by account name", GOSSIP_SENDER_MAIN, 19, "Insert account name. Press 'Accept' AND NOT Enter!", NULL, true);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_coin_16:23|t Search by item ID", GOSSIP_SENDER_MAIN, 20, "Insert item ID. Press 'Accept' AND NOT Enter!", NULL, true);
- if (player->GetSession()->GetSecurity() >= SEC_ADMINISTRATOR) //Administrators+ can manage coupons
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_coin_16:23|t [Coupons Management]", GOSSIP_SENDER_MAIN, 37);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 12: //last 25 purchases
- player->PlayerTalkClass->ClearMenus();
- PrintLatestLogs(player, "donor", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 13);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 13: //last 50 purchases (offset 25)
- player->PlayerTalkClass->ClearMenus();
- PrintLatestLogs(player, "donor", 25, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 14);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 14: //last 75 purchases (offset 50)
- player->PlayerTalkClass->ClearMenus();
- PrintLatestLogs(player, "donor", 25, 50);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 15);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 15: //last 100 purchases (offset 75)
- player->PlayerTalkClass->ClearMenus();
- PrintLatestLogs(player, "donor", 25, 75);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 21: //search by playername p2
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "playername", "donor", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 22);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 22: //search by playername p3
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "playername", "donor", 75, 50);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 23);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 23: //search by playername p4
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "playername", "donor", 100, 75);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 24: //search by GUID p2
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "guid", "donor", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 25: //search by GUID p3
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "guid", "donor", 75, 50);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 26);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 26: //search by GUID p4
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "guid", "donor", 100, 75);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 27: //search by accountID p2
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountID", "donor", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 28);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 28: //search by accountID p3
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountID", "donor", 75, 50);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 29);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 29: //search by accountID p4
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountID", "donor", 100, 75);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 30: //search by account name p2
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountname", "donor", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 31);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 31: //search by account name p3
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountname", "donor", 75, 50);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 32);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 32: //search by account name p4
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountname", "donor", 100, 75);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 33: //search by itemID p2
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "itemID", "donor", 50, 25);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 34);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 34: //search by itemID p3
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "itemID", "donor", 75, 50);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 35);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 35: //search by itemID p4
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "itemID", "donor", 100, 75);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 36: //activate VIP
- RewardPlayerPT(player, creature, ShopPT[player->GetName()].VIP_Case);
- break;
- case 37: //coupon management
- player->PlayerTalkClass->ClearMenus();
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Add a new coupon", GOSSIP_SENDER_MAIN, 38);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Edit an existing coupon", GOSSIP_SENDER_MAIN, 39, "Type your coupon code, when you are done press 'ACCEPT' NOT Enter!", NULL, true);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 38: //new coupon adding process - main interface
- player->PlayerTalkClass->ClearMenus();
- AddNewCoupon(player, creature);
- break;
- case 40: //coupon management - set coupon type (static number discount or percentage)
- player->PlayerTalkClass->ClearMenus();
- if (ShopPT[player->GetName()].MANAGECouponType == "static number")
- {
- ShopPT[player->GetName()].MANAGECouponType = "percentage";
- //player->PlayerTalkClass->ClearMenus();
- //OnGossipSelect(player, creature, sender, 38);
- }
- else if (ShopPT[player->GetName()].MANAGECouponType == "percentage")
- {
- ShopPT[player->GetName()].MANAGECouponType = "static number";
- //player->PlayerTalkClass->ClearMenus();
- //OnGossipSelect(player, creature, sender, 38);
- }
- player->PlayerTalkClass->ClearMenus();
- AddNewCoupon(player, creature);
- break;
- case 43: //coupon management - once per account true/false
- player->PlayerTalkClass->ClearMenus();
- if (ShopPT[player->GetName()].UseOnce == "true")
- {
- ShopPT[player->GetName()].UseOnce = "false";
- //return true;
- }
- else if (ShopPT[player->GetName()].UseOnce == "false")
- {
- ShopPT[player->GetName()].UseOnce = "true";
- //return true;
- }
- player->PlayerTalkClass->ClearMenus();
- AddNewCoupon(player, creature);
- break;
- case 44: //submit new coupon data (based om RAM data)
- player->PlayerTalkClass->ClearMenus();
- ShopPT[player->GetName()].code_holder = random_string_coupon(8);
- if (ShopPT[player->GetName()].MANAGECouponType == "percentage")
- LoginDatabase.PQuery("INSERT INTO `coupons` (`code`, `discount_p`, `used_by`, `max_use`, `once`) VALUES ('%s', '%u', '0', '%u', '%s')", ShopPT[player->GetName()].code_holder.c_str(), ShopPT[player->GetName()].MANAGECouponAmount, ShopPT[player->GetName()].MANAGEMaxUsage, ShopPT[player->GetName()].UseOnce.c_str());
- else
- LoginDatabase.PQuery("INSERT INTO `coupons` (`code`, `discount_a`, `used_by`, `max_use`, `once`) VALUES ('%s', '%u', '0', '%u', '%s')", ShopPT[player->GetName()].code_holder.c_str(), ShopPT[player->GetName()].MANAGECouponAmount, ShopPT[player->GetName()].MANAGEMaxUsage, ShopPT[player->GetName()].UseOnce.c_str());
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Coupon Management|r]: a new coupon was generated. Code: |cffFF0000%s|r", ShopPT[player->GetName()].code_holder.c_str());
- ShopPT[player->GetName()].code_holder = "";
- OnGossipHello(player);
- break;
- case 45: //delete coupon (make invalud)
- player->PlayerTalkClass->ClearMenus();
- DeleteCoupon(player, ShopPT[player->GetName()].store_coupon_code_for_edits);
- OnGossipHello(player);
- break;
- }
- return true;
- }
- bool OnGossipSelectCode(Player* player, uint32 menuId, uint32 gossipListId, char const* code)
- {
- uint32 sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId);
- uint32 action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
- Creature* creature = me;
- if (action > 15 && action < 50)
- {
- }
- std::string text = code;
- removeCharsFromString(text, "'");
- switch (action)
- {
- case 16: //search by playerName
- ShopPT[player->GetName()].requiredText = text;
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, text, "playername", "donor", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 21);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 17: //search by GUID
- ShopPT[player->GetName()].requiredText = text;
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, text, "guid", "donor", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 24);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 18: //search by accountID
- ShopPT[player->GetName()].requiredText = text;
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, text, "accountID", "donor", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 27);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 19: //search by account name
- ShopPT[player->GetName()].requiredText = text;
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, text, "accountname", "donor", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 30);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 20: //search by itemID
- ShopPT[player->GetName()].requiredText = text;
- player->PlayerTalkClass->ClearMenus();
- FindLogsBy(player, creature, text, "itemID", "donor", 25, 0);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 33);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- case 37: //enter a coupon code
- if (VerifyCouponCode(player, code)) //if the code is verified
- ApplyCoupon(player, code);
- OnGossipHello(player);
- break;
- case 41: //edit coupon amount
- player->PlayerTalkClass->ClearMenus();
- /*if (ShopPT[player->GetName()].MANAGECouponType == "percentage" && atoi(code) >= 100) //cannot be higher than 100% (if percentage)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Coupon Management|r]: cannot provide 100 percent discount coupon");
- return true;
- }*/
- ShopPT[player->GetName()].MANAGECouponAmount = atoi(code);
- player->PlayerTalkClass->ClearMenus();
- AddNewCoupon(player, creature);
- break;
- case 42: //edit coupon max usage
- player->PlayerTalkClass->ClearMenus();
- ShopPT[player->GetName()].MANAGEMaxUsage = atoi(code);
- player->PlayerTalkClass->ClearMenus();
- AddNewCoupon(player, creature);
- break;
- case 39: //edit an existing coupon - main interface
- player->PlayerTalkClass->ClearMenus();
- if (!VerifyCouponCode(player, code))
- {
- ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: this coupon is not valid or does not exist in our database");
- return true;
- }
- ShopPT[player->GetName()].store_coupon_code_for_edits = code;
- std::stringstream ss;
- ss << "Disable this coupon code: " << code;
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, ss.str(), GOSSIP_SENDER_MAIN, 45);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
- SendGossipMenuFor(player, 68, creature->GetGUID());
- break;
- }
- return true;
- }
- };
- CreatureAI* GetAI(Creature* m_creature) const override
- {
- return new DonorShopStoreAI(m_creature);
- }
- };
- void AddSC_DonorShopStore()
- {
- new DonorShopStore();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement