Advertisement
WIXXZI

Untitled

Mar 15th, 2023
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 65.67 KB | None | 0 0
  1. #include "Player.h"
  2. #include "World.h"
  3. #include "WorldSession.h"
  4. #include "ScriptedGossip.h"
  5. #include "GossipDef.h"
  6. #include "Chat.h"
  7. #include "DatabaseEnv.h"
  8. #include "ObjectMgr.h"
  9. #include "AccountMgr.h"
  10. #include "Realm.h"
  11. #include "Item.h"
  12.  
  13. static void removeCharsFromString(std::string& str, const char* charsToRemove)
  14. {
  15. for (unsigned int i = 0; i < strlen(charsToRemove); ++i) {
  16. str.erase(remove(str.begin(), str.end(), charsToRemove[i]), str.end());
  17. }
  18. }
  19.  
  20. struct MemorizeShopPT
  21. {
  22. std::string requiredText = "";
  23. uint32 VIP_Case = 0;
  24.  
  25. uint32 Coupon_p = 0; //percentage
  26. uint32 Coupon_a = 0; //amount
  27. uint32 Coupon_limit = 0; //limited amount
  28.  
  29. std::string MANAGECouponType = "static number"; //or - "percentage"
  30. uint32 MANAGECouponAmount = 0;
  31. uint32 MANAGEMaxUsage = 0; //if 0 = infinite
  32. std::string UseOnce = "true"; //can use only once per account (if max usage isn't surpassed already)
  33. std::string code_holder = "";
  34.  
  35. std::string store_coupon_code_for_edits = "";
  36.  
  37. };
  38.  
  39. static std::map<std::string, MemorizeShopPT> ShopPT;
  40.  
  41. uint32 VIP_Item_ID = 95001;
  42.  
  43. void UpdateRankLevel(Player* player, uint32 startDate, uint32 duration)
  44. {
  45.  
  46. }
  47.  
  48. uint32 GetPointsValuePT(Player* player, std::string vp_dp)
  49. {
  50. if (vp_dp == "donor")
  51. {
  52. QueryResult result = LoginDatabase.PQuery("SELECT `dp` FROM `account` WHERE `id` = '%u'", player->GetSession()->GetAccountId());
  53. if (!result)
  54. {
  55. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: couldn't detect points");
  56. return 0;
  57. }
  58. return (*result)[0].GetUInt32();
  59. }
  60. //by default
  61. return 0;
  62. }
  63.  
  64. std::string GetPointsPT(Player* player, std::string vp_dp)
  65. {
  66. std::stringstream ss;
  67. if (vp_dp == "donor")
  68. {
  69. QueryResult result = LoginDatabase.PQuery("SELECT `dp` FROM `account` WHERE `id` = '%u'", player->GetSession()->GetAccountId());
  70. if (!result)
  71. return "[|cffFF0000Error|r]: no data has been found";
  72. std::string DonorTokens = (*result)[0].GetString();
  73. return "You've got |cFFff0000" + DonorTokens + "|r Donor Points";
  74. }
  75. return "You currently have|cFFff0000 0 points";
  76. }
  77.  
  78.  
  79. void ShowStoreMenuPT(Player* player, Creature* creature, std::string category, uint8 limit, uint8 offset)
  80. {
  81. QueryResult result = LoginDatabase.PQuery("SELECT `itemid`, `amount`, `price`, `id` FROM `donor_shop` WHERE `category` = '%s' LIMIT %u OFFSET %u", category.c_str(), limit, offset);
  82. if (!result)
  83. {
  84. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r fetching information");
  85. return;
  86. }
  87. do
  88. {
  89. uint32 itemID = (*result)[0].GetUInt32();
  90. uint32 amount = (*result)[1].GetUInt32();
  91. uint32 price = (*result)[2].GetUInt32();
  92. uint32 ID = (*result)[3].GetUInt32();
  93.  
  94. if (sObjectMgr->GetItemTemplate(itemID))
  95. {
  96. std::stringstream ss;
  97. //if player is between vip bronze and vip gold
  98. if (player->GetSession()->GetSecurity() >= 1 && player->GetSession()->GetSecurity() >= 3)
  99. {
  100. ss << "[|cffFF0000VIP|r] ";
  101. price = price * 0.9;
  102. }
  103.  
  104. if (ShopPT[player->GetName()].Coupon_p != 0 && ShopPT[player->GetName()].Coupon_a == 0)
  105. {
  106. ss << "[|cffFF0000Coupon|r] ";
  107. float division = float(ShopPT[player->GetName()].Coupon_p * 0.01f);
  108. uint32 TemplPrice = division * price;
  109. price = price - TemplPrice;
  110. }
  111.  
  112. if (ShopPT[player->GetName()].Coupon_a != 0 && ShopPT[player->GetName()].Coupon_p == 0)
  113. {
  114. ss << "[|cffFF0000Coupon|r] ";
  115. uint32 storeme = price;
  116. price = storeme - ShopPT[player->GetName()].Coupon_a;
  117.  
  118. if (price >= 1000000000)
  119. price = 0;
  120. }
  121.  
  122. Item* item = player->GetItemByEntry(itemID);
  123. if (!item)
  124. continue;
  125. if (category == "gear" || category == "weapon" || category == "jewelry")
  126. {
  127. if (sObjectMgr->GetItemTemplate(itemID)->AllowableClass & player->GetClassMask())
  128. {
  129. ss << "|cFFff0000" << sObjectMgr->GetItemTemplate(itemID)->Name1 << "|r (|cffFF0000x" << amount << "|r) for |cFFff0000" << price << " Donor Points|r";
  130. }
  131. }
  132. else
  133. ss << "|cFFff0000" << sObjectMgr->GetItemTemplate(itemID)->Name1 << "|r (|cffFF0000x" << amount << "|r) for |cFFff0000" << price << " Donor Points|r";
  134.  
  135.  
  136. //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
  137. AddGossipItemFor(player, GOSSIP_ICON_CHAT, ss.str().c_str(), GOSSIP_SENDER_MAIN, ID);
  138. }
  139. else
  140. {
  141. if (player->GetSession()->GetSecurity() >= SEC_ADMINISTRATOR)
  142. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: [Administration] could not find the item ID: |cffFF0000%u|r |cffFF0000in the database, please verify", itemID);
  143. continue;
  144. }
  145.  
  146. } while (result->NextRow());
  147. }
  148.  
  149. void RewardPlayerPT(Player* player, Creature* creature, uint32 ID)
  150. {
  151. QueryResult result = LoginDatabase.PQuery("SELECT `amount`, `price`, `itemID` FROM `donor_shop` WHERE `ID` = '%u'", ID);
  152. if (!result)
  153. {
  154. 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);
  155. CloseGossipMenuFor(player);
  156. return;
  157. }
  158. uint32 amount = (*result)[0].GetUInt32();
  159. uint32 price = (*result)[1].GetUInt32();
  160. uint32 itemID = (*result)[2].GetUInt32();
  161.  
  162. //if item ID is invalid (item was not found in item_template
  163. if (!sObjectMgr->GetItemTemplate(itemID))
  164. {
  165. 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);
  166. CloseGossipMenuFor(player);
  167. return;
  168. }
  169.  
  170. if (price < 1) //if for some reason the price is BELOW 1 (0 and negative)
  171. {
  172. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r invalid price for item ID: |cffFF0000%u|r. Please contact a staff member", itemID);
  173. CloseGossipMenuFor(player);
  174. return;
  175. }
  176.  
  177. std::string AccName; sAccountMgr->GetName(player->GetSession()->GetAccountId(), AccName);
  178.  
  179. /*VIP DISCOUNT = 90% of the original value (10% off on all available products within the shop)*/
  180. if (player->GetSession()->GetSecurity() >= 1 && player->GetSession()->GetSecurity() <= 3)
  181. price = price * 0.9;
  182.  
  183. if (ShopPT[player->GetName()].Coupon_p != 0 && ShopPT[player->GetName()].Coupon_a == 0)
  184. {
  185. float division = float(ShopPT[player->GetName()].Coupon_p * 0.01f);
  186. uint32 TemplPrice = division * price;
  187. price = price - TemplPrice;
  188. }
  189.  
  190. if (ShopPT[player->GetName()].Coupon_a != 0 && ShopPT[player->GetName()].Coupon_p == 0)
  191. {
  192. uint32 storeme = price;
  193. price = storeme - ShopPT[player->GetName()].Coupon_a;
  194.  
  195. if (price >= 1000000000)
  196. price = 0;
  197. }
  198. if (GetPointsValuePT(player, "donor") >= price)
  199. {
  200. uint32 newValue = GetPointsValuePT(player, "donor") - price;
  201. 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)
  202. amount = sObjectMgr->GetItemTemplate(itemID)->MaxCount;
  203. if (amount < 1)
  204. amount = 1;
  205. if (player->AddItem(itemID, amount))
  206. {
  207. LoginDatabase.PQuery("UPDATE `account` SET `dp` = '%u' WHERE `id` = '%u'", newValue, player->GetSession()->GetAccountId());
  208. if (ShopPT[player->GetName()].Coupon_p != 0 && ShopPT[player->GetName()].Coupon_a == 0)
  209. 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(),
  210. itemID, amount, price, player->GetName().c_str(), AccName.c_str(), ShopPT[player->GetName()].Coupon_p);
  211. if (ShopPT[player->GetName()].Coupon_p == 0 && ShopPT[player->GetName()].Coupon_a != 0)
  212. 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(),
  213. itemID, amount, price, player->GetName().c_str(), AccName.c_str(), ShopPT[player->GetName()].Coupon_a);
  214.  
  215. if (ShopPT[player->GetName()].Coupon_p == 0 && ShopPT[player->GetName()].Coupon_a == 0) //if no doupon at all
  216. 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(),
  217. itemID, amount, price, player->GetName().c_str(), AccName.c_str());
  218. 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);
  219.  
  220. if (ShopPT[player->GetName()].Coupon_p != 0 && ShopPT[player->GetName()].Coupon_a == 0)
  221. {
  222. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: your coupon has been successfully used during this purchase!");
  223. ShopPT[player->GetName()].Coupon_p = 0; //remove coupon
  224. }
  225.  
  226. if (ShopPT[player->GetName()].Coupon_p == 0 && ShopPT[player->GetName()].Coupon_a != 0)
  227. {
  228. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: your coupon has been successfully used during this purchase!");
  229. ShopPT[player->GetName()].Coupon_a = 0; //remove coupon
  230. }
  231.  
  232. if (itemID == VIP_Item_ID) //VIP activation
  233. {
  234. //UpdateRankLevel(player, time(nullptr), 120);
  235. sAccountMgr->UpdateAccountAccess(nullptr, player->GetSession()->GetAccountId(), 1, realm.Id.Realm);
  236. std::string MessageToSend_VIP = "[|cffFF0000VIP Activation System|r]: congratulations to |cffFF0000" + player->GetName() + "|r for becoming our newest VIP member!";
  237. sWorld->SendServerMessage(ServerMessageType::SERVER_MSG_STRING, MessageToSend_VIP.c_str());
  238. 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!");
  239. player->DestroyItemCount(VIP_Item_ID, 1, true); //do not leave VIP coin accessible, only add it for logging purposes
  240. }
  241. CloseGossipMenuFor(player);
  242. }
  243. else
  244. {
  245. 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());
  246. CloseGossipMenuFor(player);
  247. return;
  248. }
  249. }
  250. else
  251. {
  252. 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(),
  253. GetPointsValuePT(player, "donor"), price, price - GetPointsValuePT(player, "donor"));
  254. CloseGossipMenuFor(player);
  255. return;
  256. }
  257. }
  258.  
  259. void PrintLatestLogs(Player* player, std::string vp_dp, uint8 limit, uint8 offset)
  260. {
  261. uint32 id = 0;
  262. std::string points = "";
  263. if (vp_dp == "donor")
  264. points = "donor";
  265.  
  266. 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);
  267. if (!result)
  268. {
  269. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r bad query, no data could be fetched");
  270. CloseGossipMenuFor(player);
  271. return;
  272. }
  273.  
  274. do
  275. {
  276. id++;
  277. std::stringstream ss;
  278. uint32 accID = (*result)[0].GetUInt32();
  279. uint32 guid = (*result)[1].GetUInt32();
  280. uint32 itemID = (*result)[2].GetUInt32();
  281. uint32 amount = (*result)[3].GetUInt32();
  282. uint32 price = (*result)[4].GetUInt32();
  283. std::string playerName = (*result)[5].GetString();
  284. std::string AccName = (*result)[6].GetString();
  285. std::string date = (*result)[7].GetString();
  286. uint32 coupon = (*result)[8].GetUInt32();
  287. std::string coupon_type = (*result)[9].GetString();
  288.  
  289.  
  290. if (!sObjectMgr->GetItemTemplate(itemID))
  291. continue;
  292. std::string itemName = "";
  293. itemName = sObjectMgr->GetItemTemplate(itemID)->Name1;
  294.  
  295. points[0] = toupper(points[0]);
  296.  
  297. if (price >= 1000000000)
  298. price = 0;
  299.  
  300. 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;
  301. if (coupon != 0)
  302. {
  303. ss << "|r\nCoupon discount: |cffFF0000" << coupon;
  304. if (coupon_type == "p")
  305. ss << " percent|r";
  306. if (coupon_type == "a")
  307. ss << " Donor Points|r";
  308. }
  309. AddGossipItemFor(player, GOSSIP_ICON_CHAT, ss.str().c_str(), GOSSIP_SENDER_MAIN, 1);
  310. } while (result->NextRow());
  311. }
  312.  
  313. // code pName/aName/GUID vp/dp/vip/playtime 25/50/75 25/50/75
  314. void FindLogsBy(Player* player, Creature* creature, std::string text, std::string search_by, std::string vp_dp, uint8 limit, uint8 offset)
  315. {
  316. uint32 id = 0;
  317. std::string points = "";
  318. if (vp_dp == "donor")
  319. points = "donor";
  320. 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);
  321. if (!result)
  322. {
  323. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r bad query, no data could be fetched");
  324. CloseGossipMenuFor(player);
  325. return;
  326. }
  327.  
  328. do
  329. {
  330. id++;
  331. std::stringstream ss;
  332. uint32 accID = (*result)[0].GetUInt32();
  333. uint32 guid = (*result)[1].GetUInt32();
  334. uint32 itemID = (*result)[2].GetUInt32();
  335. uint32 amount = (*result)[3].GetUInt32();
  336. uint32 price = (*result)[4].GetUInt32();
  337. std::string playerName = (*result)[5].GetString();
  338. std::string AccName = (*result)[6].GetString();
  339. std::string date = (*result)[7].GetString();
  340. uint32 coupon = (*result)[8].GetUInt32();
  341. std::string coupon_type = (*result)[9].GetString();
  342.  
  343. if (!sObjectMgr->GetItemTemplate(itemID))
  344. continue;
  345. std::string itemName = "";
  346. itemName = sObjectMgr->GetItemTemplate(itemID)->Name1;
  347.  
  348. points[0] = toupper(points[0]);
  349.  
  350. 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;
  351. if (coupon != 0)
  352. {
  353. ss << "|r\nCoupon discount: |cffFF0000" << coupon;
  354. if (coupon_type == "p")
  355. ss << " percent|r";
  356. if (coupon_type == "a")
  357. ss << " Donor Points|r";
  358. }
  359. AddGossipItemFor(player, GOSSIP_ICON_CHAT, ss.str().c_str(), GOSSIP_SENDER_MAIN, 1);
  360.  
  361. } while (result->NextRow());
  362. }
  363.  
  364.  
  365. std::string EnlistVIPPrice(Player* player)
  366. {
  367. QueryResult result = LoginDatabase.PQuery("SELECT `price`, `id` FROM `donor_shop` WHERE `itemid` = '%u'", VIP_Item_ID);
  368. if (!result)
  369. {
  370. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r bad query, no data could be fetched");
  371. CloseGossipMenuFor(player);
  372. return "";
  373. }
  374.  
  375. uint32 price = (*result)[0].GetUInt32();
  376. ShopPT[player->GetName()].VIP_Case = (*result)[1].GetUInt32();
  377. std::stringstream ss;
  378. ss << "[|cffFF0000VIP|r]: " << price << " Donor Points";
  379. return ss.str();
  380. }
  381.  
  382. bool VerifyCouponCode(Player* player, std::string code)
  383. {
  384. QueryResult result = LoginDatabase.PQuery("SELECT `couponid`, `discount_p`, `discount_a`, `times_used`, `once` FROM `coupons` WHERE `code` = '%s'", code.c_str());
  385. if (!result)
  386. {
  387. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon data could be fetched");
  388. CloseGossipMenuFor(player);
  389. return false;
  390. }
  391.  
  392. return true;
  393. }
  394.  
  395. uint32 GetCoupon_P(Player* player, std::string code)
  396. {
  397. if (!VerifyCouponCode(player, code))
  398. return 0;
  399.  
  400. QueryResult result = LoginDatabase.PQuery("SELECT `couponid`, `discount_p`, `discount_a`, `times_used`, `once` FROM `coupons` WHERE `code` = '%s'", code.c_str());
  401. if (!result)
  402. {
  403. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon data could be fetched");
  404. CloseGossipMenuFor(player);
  405. return 0;
  406. }
  407.  
  408. uint32 couponID = (*result)[0].GetUInt32();
  409. uint32 discount_p = (*result)[1].GetUInt32();
  410. uint32 discount_a = (*result)[2].GetUInt32();
  411. uint32 times_used = (*result)[3].GetUInt32();
  412. if (couponID != 0 && discount_p != 0) //if not 0 (default)
  413. return discount_p;
  414. return 0;
  415. }
  416.  
  417. uint32 GetCoupon_a(Player* player, std::string code)
  418. {
  419. if (!VerifyCouponCode(player, code))
  420. return 0;
  421.  
  422. QueryResult result = LoginDatabase.PQuery("SELECT `couponid`, `discount_p`, `discount_a`, `times_used`, `once` FROM `coupons` WHERE `code` = '%s'", code.c_str());
  423. if (!result)
  424. {
  425. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon data could be fetched");
  426. CloseGossipMenuFor(player);
  427. return 0;
  428. }
  429.  
  430. uint32 couponID = (*result)[0].GetUInt32();
  431. uint32 discount_p = (*result)[1].GetUInt32();
  432. uint32 discount_a = (*result)[2].GetUInt32();
  433. uint32 times_used = (*result)[3].GetUInt32();
  434. if (couponID != 0 && discount_a != 0) //if not 0 (default)
  435. return discount_a;
  436. return 0;
  437. }
  438. /*
  439. AC> SQL: SELECT `couponid`, `discount_p`, `discount_a`, `times_used`, `used_by` WHERE `code` = 'testing'
  440. 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
  441.  
  442. */
  443.  
  444. bool HasUsedCoupon(Player* player, std::string code)
  445. {
  446. QueryResult result = LoginDatabase.PQuery("SELECT `used_by`, `accountID`FROM `coupons_logs` WHERE `code` = '%s'", code.c_str());
  447. if (!result)
  448. {
  449. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon logs could be fetched");
  450. CloseGossipMenuFor(player);
  451. return false;
  452. }
  453. uint32 accountID = (*result)[1].GetUInt32();
  454. if (player->GetSession()->GetAccountId() == accountID)
  455. return true;
  456.  
  457. return false;
  458. }
  459.  
  460. void PrintWhoUsedCoupon(Player* player, std::string code)
  461. {
  462. QueryResult result = LoginDatabase.PQuery("SELECT `used_by`, `date` FROM `coupons_logs` WHERE `code` = '%s'", code.c_str());
  463. if (!result)
  464. {
  465. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon logs could be fetched");
  466. CloseGossipMenuFor(player);
  467. return;
  468. }
  469.  
  470. std::string used_by = (*result)[0].GetCString();
  471. std::string date = (*result)[1].GetCString();
  472. std::stringstream ss;
  473. ss << used_by << " used the coupon code " << code << " at " << date;
  474. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: %s", ss.str().c_str());
  475. }
  476.  
  477. void ApplyCoupon(Player* player, std::string code)
  478. {
  479. if (!VerifyCouponCode(player, code))
  480. return;
  481.  
  482. QueryResult result = LoginDatabase.PQuery("SELECT `couponid`, `discount_p`, `discount_a`, `times_used`, `once`, `max_use` FROM `coupons` WHERE `code` = '%s'", code.c_str());
  483. if (!result)
  484. {
  485. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r no coupon data could be fetched");
  486. CloseGossipMenuFor(player);
  487. return;
  488. }
  489. std::string use_once = (*result)[4].GetCString();
  490. if (HasUsedCoupon(player, code) && use_once == "true")
  491. {
  492. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r this coupon can be used once per account only!");
  493. return;
  494. }
  495. uint32 times_used = (*result)[3].GetUInt32();
  496. uint32 max_use = (*result)[5].GetUInt32();
  497. if (max_use <= times_used && max_use != 0)
  498. {
  499. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: |cffFF0000[error]|r the maximum usage of this coupon was reached!");
  500. return;
  501. }
  502.  
  503. std::stringstream ss;
  504. ShopPT[player->GetName()].Coupon_p = GetCoupon_P(player, code);
  505. ShopPT[player->GetName()].Coupon_a = GetCoupon_a(player, code);
  506. if (ShopPT[player->GetName()].Coupon_p != 0 && ShopPT[player->GetName()].Coupon_a != 0)
  507. {
  508. ss << "[|cffFF0000Store System|r]: this coupon code benefits 2 types of discounts therefore has been disqualified. Please contact the staff for a new coupon";
  509. ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str());
  510. ShopPT[player->GetName()].Coupon_p = 0;
  511. ShopPT[player->GetName()].Coupon_a = 0;
  512. return;
  513. }
  514.  
  515. if (ShopPT[player->GetName()].Coupon_p == 0 && ShopPT[player->GetName()].Coupon_a == 0)
  516. {
  517. ss << "[|cffFF0000Store System|r]: this coupon code does not contain any discounts";
  518. ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str());
  519. return;
  520. }
  521.  
  522. if (ShopPT[player->GetName()].Coupon_p != 0)
  523. ss << "[|cffFF0000Store System|r]: the coupon has been applied! Your next purchase will now have |cffFF0000" << ShopPT[player->GetName()].Coupon_p << "|r percent discount!";
  524. if (ShopPT[player->GetName()].Coupon_a != 0)
  525. 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!";
  526. ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str());
  527.  
  528. LoginDatabase.PQuery("UPDATE `coupons` SET `times_used` = `times_used` + 1 WHERE `code` = '%s'", code.c_str());
  529. std::stringstream s;
  530. s << player->GetName() << " (GUID: " << player->GetGUID() << ", account ID: " << player->GetSession()->GetAccountId() << ")";
  531. LoginDatabase.PQuery("INSERT INTO `coupons_logs` (`code`, `used_by`, `accountID`) VALUES ('%s', '%s', '%u')", code.c_str(), s.str().c_str(), player->GetSession()->GetAccountId());
  532. }
  533.  
  534. std::string random_string_coupon(size_t length)
  535. {
  536. srand(urand(1, 1000));
  537. auto randchar = []() -> char
  538. {
  539. const char charset[] =
  540. "0123456789"
  541. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  542. "abcdefghijklmnopqrstuvwxyz";
  543. const size_t max_index = (sizeof(charset) - 1);
  544. return charset[rand() % max_index];
  545. };
  546. std::string str(length, 0);
  547. std::generate_n(str.begin(), length, randchar);
  548. return str;
  549. }
  550.  
  551. void AddNewCoupon(Player* player, Creature* creature)
  552. {
  553. player->PlayerTalkClass->ClearMenus();
  554. std::stringstream CouponType, CouponAmount, CouponMaxUsage, CouponUseOnce;
  555. CouponType << "Coupon type: |cffFF0000" << ShopPT[player->GetName()].MANAGECouponType;
  556. CouponAmount << "Coupon amount: |cFFff0000" << ShopPT[player->GetName()].MANAGECouponAmount;
  557. CouponMaxUsage << "Coupon max usage: |cFFff0000" << ShopPT[player->GetName()].MANAGEMaxUsage;
  558. CouponUseOnce << "Coupon use once (per account): |cffFF0000" << ShopPT[player->GetName()].UseOnce;
  559.  
  560. 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
  561. AddGossipItemFor(player, GOSSIP_ICON_CHAT, CouponType.str(), GOSSIP_SENDER_MAIN, 40); //click to change
  562. 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);
  563. 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);
  564. AddGossipItemFor(player, GOSSIP_ICON_CHAT, CouponUseOnce.str(), GOSSIP_SENDER_MAIN, 43);
  565.  
  566. 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);
  567.  
  568.  
  569. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  570. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  571. SendGossipMenuFor(player, 68, creature->GetGUID());
  572. }
  573.  
  574. void DeleteCoupon(Player* player, std::string coupon)
  575. {
  576. if (!VerifyCouponCode(player, coupon))
  577. {
  578. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: this coupon is not valid or does not exist in our database");
  579. return;
  580. }
  581.  
  582. 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());
  583.  
  584. 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");
  585. }
  586.  
  587. class DonorShopStore : public CreatureScript
  588. {
  589. public:
  590. DonorShopStore() : CreatureScript("DonorShop") { }
  591.  
  592. struct DonorShopStoreAI : public ScriptedAI
  593. {
  594. DonorShopStoreAI(Creature* creature) : ScriptedAI(creature) {}
  595.  
  596. bool OnGossipHello(Player* player) override
  597. {
  598. Creature* creature = me;
  599.  
  600. player->PlayerTalkClass->ClearMenus();
  601. //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);
  602. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_coin_17:23|t " + GetPointsPT(player, "donor"), GOSSIP_SENDER_MAIN, 1);
  603. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_coin_17:23|t Preview", GOSSIP_SENDER_MAIN, 52);
  604. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_gem_variety_01:23|t Donor", GOSSIP_SENDER_MAIN, 48);
  605. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\Achievement_PVP_A_15:23|t " + EnlistVIPPrice(player), GOSSIP_SENDER_MAIN, 36);
  606. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\achievement_bg_masterofallbgs:23|t Coins & Tokens", GOSSIP_SENDER_MAIN, 4);
  607. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\ability_mount_ridinghorse:23|t Mounts", GOSSIP_SENDER_MAIN, 5);
  608. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\ability_warrior_bloodfrenzy:23|t Bundles", GOSSIP_SENDER_MAIN, 6);
  609. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_box_petcarrier_01:23|t Misc", GOSSIP_SENDER_MAIN, 46);
  610.  
  611. 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
  612. 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);
  613. if (player->GetSession()->GetSecurity() >= SEC_ADMINISTRATOR)
  614. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_crown_13:23|t Administration Panel", GOSSIP_SENDER_MAIN, 11);
  615. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  616. SendGossipMenuFor(player, 68, creature->GetGUID());
  617.  
  618. return true;
  619. }
  620.  
  621.  
  622. bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
  623. {
  624. uint32 sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId);
  625. uint32 action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
  626. Creature* creature = me;
  627.  
  628. if (action >= 1 && action <= 70)
  629. {
  630.  
  631. }
  632. else
  633. RewardPlayerPT(player, creature, action);
  634.  
  635. switch (action)
  636. {
  637. case 1: //refresh
  638. player->PlayerTalkClass->ClearMenus();
  639. OnGossipHello(player);
  640. break;
  641.  
  642. case 2: //close menu
  643. CloseGossipMenuFor(player);
  644. break;
  645.  
  646. case 48: //Donor
  647. player->PlayerTalkClass->ClearMenus();
  648. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Gear", GOSSIP_SENDER_MAIN, 49);
  649. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Weapon", GOSSIP_SENDER_MAIN, 50);
  650. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[VIP] Jewelry", GOSSIP_SENDER_MAIN, 51);
  651. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  652. SendGossipMenuFor(player, 68, creature->GetGUID());
  653. break;
  654.  
  655. case 49: //gear
  656. player->PlayerTalkClass->ClearMenus();
  657. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Gear|r menu!", GOSSIP_SENDER_MAIN, 49);
  658. ShowStoreMenuPT(player, creature, "gear", 25, 0);
  659. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 53);
  660. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  661. SendGossipMenuFor(player, 68, creature->GetGUID());
  662. break;
  663.  
  664. case 53: //gear p2
  665. player->PlayerTalkClass->ClearMenus();
  666. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Gear|r menu!", GOSSIP_SENDER_MAIN, 53);
  667. ShowStoreMenuPT(player, creature, "gear", 50, 25);
  668. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  669. SendGossipMenuFor(player, 68, creature->GetGUID());
  670. break;
  671.  
  672.  
  673. case 50: //weapon
  674. player->PlayerTalkClass->ClearMenus();
  675. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Weapon|r menu!", GOSSIP_SENDER_MAIN, 50);
  676. ShowStoreMenuPT(player, creature, "weapon", 25, 0);
  677. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 54);
  678. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  679. SendGossipMenuFor(player, 68, creature->GetGUID());
  680. break;
  681.  
  682. case 54: //weapon p2
  683. player->PlayerTalkClass->ClearMenus();
  684. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Weapon|r menu!", GOSSIP_SENDER_MAIN, 54);
  685. ShowStoreMenuPT(player, creature, "weapon", 50, 25);
  686. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  687. SendGossipMenuFor(player, 68, creature->GetGUID());
  688. break;
  689.  
  690.  
  691. case 51: //jewelry
  692. player->PlayerTalkClass->ClearMenus();
  693. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Jewelry|r menu!", GOSSIP_SENDER_MAIN, 51);
  694. if (player->GetSession()->GetSecurity() >= 1)
  695. {
  696. ShowStoreMenuPT(player, creature, "jewelry", 25, 0);
  697. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 55);
  698. }
  699. else
  700. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "This page is only available for VIPs", GOSSIP_SENDER_MAIN, 51);
  701. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  702. SendGossipMenuFor(player, 68, creature->GetGUID());
  703. break;
  704.  
  705. case 55: //jewelry p2
  706. player->PlayerTalkClass->ClearMenus();
  707. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Jewelry|r menu!", GOSSIP_SENDER_MAIN, 55);
  708. if (player->GetSession()->GetSecurity() >= 1)
  709. ShowStoreMenuPT(player, creature, "jewelry", 50, 25);
  710. else
  711. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "This page is only available for VIPs", GOSSIP_SENDER_MAIN, 51);
  712. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  713. SendGossipMenuFor(player, 68, creature->GetGUID());
  714. break;
  715.  
  716. case 3: //Transmogrification
  717. player->PlayerTalkClass->ClearMenus();
  718. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Transmogrification|r menu!", GOSSIP_SENDER_MAIN, 3);
  719. ShowStoreMenuPT(player, creature, "transmogrification", 25, 0);
  720. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 7);
  721. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  722. SendGossipMenuFor(player, 68, creature->GetGUID());
  723. break;
  724.  
  725. case 4: //tokens
  726. player->PlayerTalkClass->ClearMenus();
  727. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Coins & Tokens|r menu!", GOSSIP_SENDER_MAIN, 4);
  728. ShowStoreMenuPT(player, creature, "coins & tokens", 25, 0);
  729. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 8);
  730. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  731. SendGossipMenuFor(player, 68, creature->GetGUID());
  732. break;
  733.  
  734. case 5: //mounts
  735. player->PlayerTalkClass->ClearMenus();
  736. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Mounts|r menu!", GOSSIP_SENDER_MAIN, 5);
  737. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Exotic", GOSSIP_SENDER_MAIN, 56);
  738. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Custom", GOSSIP_SENDER_MAIN, 57);
  739. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  740. SendGossipMenuFor(player, 68, creature->GetGUID());
  741. break;
  742.  
  743. case 56: //exotic
  744. player->PlayerTalkClass->ClearMenus();
  745. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Exotic Mounts|r menu!", GOSSIP_SENDER_MAIN, 56);
  746. ShowStoreMenuPT(player, creature, "exotic", 25, 0);
  747. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 58);
  748. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  749. SendGossipMenuFor(player, 68, creature->GetGUID());
  750. break;
  751.  
  752. case 58: //exotic p2
  753. player->PlayerTalkClass->ClearMenus();
  754. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Exotic Mounts|r menu!", GOSSIP_SENDER_MAIN, 58);
  755. ShowStoreMenuPT(player, creature, "exotic", 50, 25);
  756. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  757. SendGossipMenuFor(player, 68, creature->GetGUID());
  758. break;
  759.  
  760. case 57: //custom
  761. player->PlayerTalkClass->ClearMenus();
  762. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Custom Mounts|r menu!", GOSSIP_SENDER_MAIN, 57);
  763. ShowStoreMenuPT(player, creature, "custom", 25, 0);
  764. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 59);
  765. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  766. SendGossipMenuFor(player, 68, creature->GetGUID());
  767. break;
  768.  
  769. case 59: //custom p2
  770. player->PlayerTalkClass->ClearMenus();
  771. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Custom Mounts|r menu!", GOSSIP_SENDER_MAIN, 59);
  772. ShowStoreMenuPT(player, creature, "custom", 50, 25);
  773. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  774. SendGossipMenuFor(player, 68, creature->GetGUID());
  775. break;
  776.  
  777. case 6: //bundles
  778. player->PlayerTalkClass->ClearMenus();
  779. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Bundles|r menu!", GOSSIP_SENDER_MAIN, 6);
  780. ShowStoreMenuPT(player, creature, "bundles", 25, 0);
  781. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 10);
  782. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  783. SendGossipMenuFor(player, 68, creature->GetGUID());
  784. break;
  785.  
  786. case 46: //misc
  787. player->PlayerTalkClass->ClearMenus();
  788. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Misc|r menu!", GOSSIP_SENDER_MAIN, 46);
  789. ShowStoreMenuPT(player, creature, "misc", 25, 0);
  790. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 47);
  791. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  792. SendGossipMenuFor(player, 68, creature->GetGUID());
  793. break;
  794.  
  795. case 52: //preview
  796. player->GetSession()->SendListInventory(creature->GetGUID());
  797. break;
  798.  
  799. case 7: //Transmogrification p2
  800. player->PlayerTalkClass->ClearMenus();
  801. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Transmogrification|r menu!", GOSSIP_SENDER_MAIN, 7);
  802. ShowStoreMenuPT(player, creature, "transmogrification", 50, 25);
  803. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  804. SendGossipMenuFor(player, 68, creature->GetGUID());
  805. break;
  806.  
  807. case 8: //tokens p2
  808. player->PlayerTalkClass->ClearMenus();
  809. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Coins & Tokens|r menu!", GOSSIP_SENDER_MAIN, 8);
  810. ShowStoreMenuPT(player, creature, "coins & tokens", 50, 25);
  811. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  812. SendGossipMenuFor(player, 68, creature->GetGUID());
  813. break;
  814.  
  815. case 9: //mounts p2
  816. player->PlayerTalkClass->ClearMenus();
  817. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Mounts|r menu!", GOSSIP_SENDER_MAIN, 9);
  818. ShowStoreMenuPT(player, creature, "mounts", 50, 25);
  819. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  820. SendGossipMenuFor(player, 68, creature->GetGUID());
  821. break;
  822.  
  823. case 10: //bundles p2
  824. player->PlayerTalkClass->ClearMenus();
  825. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Bundles|r menu!", GOSSIP_SENDER_MAIN, 10);
  826. ShowStoreMenuPT(player, creature, "bundles", 50, 25);
  827. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  828. SendGossipMenuFor(player, 68, creature->GetGUID());
  829. break;
  830.  
  831. case 47: //misc p2
  832. player->PlayerTalkClass->ClearMenus();
  833. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cFFff0000Misc|r menu!", GOSSIP_SENDER_MAIN, 47);
  834. ShowStoreMenuPT(player, creature, "misc", 50, 25);
  835. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  836. SendGossipMenuFor(player, 68, creature->GetGUID());
  837. break;
  838.  
  839. case 11: //Administration Panel
  840. player->PlayerTalkClass->ClearMenus();
  841. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Welcome to the |cffFF0000Administration Panel|r menu!", GOSSIP_SENDER_MAIN, 11);
  842. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_coin_19:23|t Display last purchases", GOSSIP_SENDER_MAIN, 12);
  843. 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);
  844. 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);
  845. 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);
  846. 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);
  847. 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);
  848. if (player->GetSession()->GetSecurity() >= SEC_ADMINISTRATOR) //Administrators+ can manage coupons
  849. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "|TInterface\\icons\\inv_misc_coin_16:23|t [Coupons Management]", GOSSIP_SENDER_MAIN, 37);
  850. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  851. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  852. SendGossipMenuFor(player, 68, creature->GetGUID());
  853. break;
  854.  
  855. case 12: //last 25 purchases
  856. player->PlayerTalkClass->ClearMenus();
  857. PrintLatestLogs(player, "donor", 25, 0);
  858. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 13);
  859. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  860. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  861. SendGossipMenuFor(player, 68, creature->GetGUID());
  862. break;
  863.  
  864. case 13: //last 50 purchases (offset 25)
  865. player->PlayerTalkClass->ClearMenus();
  866. PrintLatestLogs(player, "donor", 25, 25);
  867. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 14);
  868. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  869. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  870. SendGossipMenuFor(player, 68, creature->GetGUID());
  871. break;
  872.  
  873. case 14: //last 75 purchases (offset 50)
  874. player->PlayerTalkClass->ClearMenus();
  875. PrintLatestLogs(player, "donor", 25, 50);
  876. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 15);
  877. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  878. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  879. SendGossipMenuFor(player, 68, creature->GetGUID());
  880. break;
  881.  
  882. case 15: //last 100 purchases (offset 75)
  883. player->PlayerTalkClass->ClearMenus();
  884. PrintLatestLogs(player, "donor", 25, 75);
  885. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  886. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  887. SendGossipMenuFor(player, 68, creature->GetGUID());
  888. break;
  889.  
  890.  
  891.  
  892.  
  893. case 21: //search by playername p2
  894. player->PlayerTalkClass->ClearMenus();
  895. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "playername", "donor", 50, 25);
  896. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 22);
  897. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  898. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  899. SendGossipMenuFor(player, 68, creature->GetGUID());
  900. break;
  901.  
  902. case 22: //search by playername p3
  903. player->PlayerTalkClass->ClearMenus();
  904. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "playername", "donor", 75, 50);
  905. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 23);
  906. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  907. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  908. SendGossipMenuFor(player, 68, creature->GetGUID());
  909. break;
  910.  
  911. case 23: //search by playername p4
  912. player->PlayerTalkClass->ClearMenus();
  913. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "playername", "donor", 100, 75);
  914. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  915. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  916. SendGossipMenuFor(player, 68, creature->GetGUID());
  917. break;
  918.  
  919.  
  920.  
  921.  
  922.  
  923. case 24: //search by GUID p2
  924. player->PlayerTalkClass->ClearMenus();
  925. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "guid", "donor", 50, 25);
  926. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 25);
  927. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  928. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  929. SendGossipMenuFor(player, 68, creature->GetGUID());
  930. break;
  931.  
  932. case 25: //search by GUID p3
  933. player->PlayerTalkClass->ClearMenus();
  934. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "guid", "donor", 75, 50);
  935. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 26);
  936. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  937. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  938. SendGossipMenuFor(player, 68, creature->GetGUID());
  939. break;
  940.  
  941. case 26: //search by GUID p4
  942. player->PlayerTalkClass->ClearMenus();
  943. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "guid", "donor", 100, 75);
  944. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  945. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  946. SendGossipMenuFor(player, 68, creature->GetGUID());
  947. break;
  948.  
  949.  
  950.  
  951.  
  952. case 27: //search by accountID p2
  953. player->PlayerTalkClass->ClearMenus();
  954. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountID", "donor", 50, 25);
  955. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 28);
  956. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  957. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  958. SendGossipMenuFor(player, 68, creature->GetGUID());
  959. break;
  960.  
  961. case 28: //search by accountID p3
  962. player->PlayerTalkClass->ClearMenus();
  963. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountID", "donor", 75, 50);
  964. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 29);
  965. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  966. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  967. SendGossipMenuFor(player, 68, creature->GetGUID());
  968. break;
  969.  
  970. case 29: //search by accountID p4
  971. player->PlayerTalkClass->ClearMenus();
  972. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountID", "donor", 100, 75);
  973. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  974. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  975. SendGossipMenuFor(player, 68, creature->GetGUID());
  976. break;
  977.  
  978.  
  979.  
  980. case 30: //search by account name p2
  981. player->PlayerTalkClass->ClearMenus();
  982. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountname", "donor", 50, 25);
  983. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 31);
  984. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  985. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  986. SendGossipMenuFor(player, 68, creature->GetGUID());
  987. break;
  988.  
  989. case 31: //search by account name p3
  990. player->PlayerTalkClass->ClearMenus();
  991. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountname", "donor", 75, 50);
  992. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 32);
  993. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  994. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  995. SendGossipMenuFor(player, 68, creature->GetGUID());
  996. break;
  997.  
  998. case 32: //search by account name p4
  999. player->PlayerTalkClass->ClearMenus();
  1000. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "accountname", "donor", 100, 75);
  1001. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1002. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1003. SendGossipMenuFor(player, 68, creature->GetGUID());
  1004. break;
  1005.  
  1006.  
  1007.  
  1008.  
  1009. case 33: //search by itemID p2
  1010. player->PlayerTalkClass->ClearMenus();
  1011. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "itemID", "donor", 50, 25);
  1012. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 3]", GOSSIP_SENDER_MAIN, 34);
  1013. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1014. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1015. SendGossipMenuFor(player, 68, creature->GetGUID());
  1016. break;
  1017.  
  1018. case 34: //search by itemID p3
  1019. player->PlayerTalkClass->ClearMenus();
  1020. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "itemID", "donor", 75, 50);
  1021. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 4]", GOSSIP_SENDER_MAIN, 35);
  1022. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1023. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1024. SendGossipMenuFor(player, 68, creature->GetGUID());
  1025. break;
  1026.  
  1027. case 35: //search by itemID p4
  1028. player->PlayerTalkClass->ClearMenus();
  1029. FindLogsBy(player, creature, ShopPT[player->GetName()].requiredText, "itemID", "donor", 100, 75);
  1030. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1031. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1032. SendGossipMenuFor(player, 68, creature->GetGUID());
  1033. break;
  1034.  
  1035. case 36: //activate VIP
  1036. RewardPlayerPT(player, creature, ShopPT[player->GetName()].VIP_Case);
  1037. break;
  1038.  
  1039. case 37: //coupon management
  1040. player->PlayerTalkClass->ClearMenus();
  1041. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Add a new coupon", GOSSIP_SENDER_MAIN, 38);
  1042. 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);
  1043.  
  1044. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1045. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1046. SendGossipMenuFor(player, 68, creature->GetGUID());
  1047. break;
  1048.  
  1049. case 38: //new coupon adding process - main interface
  1050. player->PlayerTalkClass->ClearMenus();
  1051. AddNewCoupon(player, creature);
  1052. break;
  1053.  
  1054. case 40: //coupon management - set coupon type (static number discount or percentage)
  1055. player->PlayerTalkClass->ClearMenus();
  1056.  
  1057. if (ShopPT[player->GetName()].MANAGECouponType == "static number")
  1058. {
  1059. ShopPT[player->GetName()].MANAGECouponType = "percentage";
  1060. //player->PlayerTalkClass->ClearMenus();
  1061. //OnGossipSelect(player, creature, sender, 38);
  1062. }
  1063. else if (ShopPT[player->GetName()].MANAGECouponType == "percentage")
  1064. {
  1065. ShopPT[player->GetName()].MANAGECouponType = "static number";
  1066. //player->PlayerTalkClass->ClearMenus();
  1067. //OnGossipSelect(player, creature, sender, 38);
  1068. }
  1069. player->PlayerTalkClass->ClearMenus();
  1070. AddNewCoupon(player, creature);
  1071. break;
  1072.  
  1073. case 43: //coupon management - once per account true/false
  1074. player->PlayerTalkClass->ClearMenus();
  1075.  
  1076. if (ShopPT[player->GetName()].UseOnce == "true")
  1077. {
  1078. ShopPT[player->GetName()].UseOnce = "false";
  1079. //return true;
  1080. }
  1081. else if (ShopPT[player->GetName()].UseOnce == "false")
  1082. {
  1083. ShopPT[player->GetName()].UseOnce = "true";
  1084. //return true;
  1085. }
  1086. player->PlayerTalkClass->ClearMenus();
  1087. AddNewCoupon(player, creature);
  1088. break;
  1089.  
  1090. case 44: //submit new coupon data (based om RAM data)
  1091. player->PlayerTalkClass->ClearMenus();
  1092.  
  1093. ShopPT[player->GetName()].code_holder = random_string_coupon(8);
  1094. if (ShopPT[player->GetName()].MANAGECouponType == "percentage")
  1095. 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());
  1096. else
  1097. 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());
  1098.  
  1099. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Coupon Management|r]: a new coupon was generated. Code: |cffFF0000%s|r", ShopPT[player->GetName()].code_holder.c_str());
  1100.  
  1101. ShopPT[player->GetName()].code_holder = "";
  1102. OnGossipHello(player);
  1103. break;
  1104.  
  1105. case 45: //delete coupon (make invalud)
  1106. player->PlayerTalkClass->ClearMenus();
  1107. DeleteCoupon(player, ShopPT[player->GetName()].store_coupon_code_for_edits);
  1108. OnGossipHello(player);
  1109. break;
  1110. }
  1111.  
  1112. return true;
  1113. }
  1114.  
  1115. bool OnGossipSelectCode(Player* player, uint32 menuId, uint32 gossipListId, char const* code)
  1116. {
  1117. uint32 sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId);
  1118. uint32 action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
  1119. Creature* creature = me;
  1120.  
  1121. if (action > 15 && action < 50)
  1122. {
  1123. }
  1124.  
  1125. std::string text = code;
  1126. removeCharsFromString(text, "'");
  1127. switch (action)
  1128. {
  1129. case 16: //search by playerName
  1130. ShopPT[player->GetName()].requiredText = text;
  1131. player->PlayerTalkClass->ClearMenus();
  1132. FindLogsBy(player, creature, text, "playername", "donor", 25, 0);
  1133. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 21);
  1134. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1135. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1136. SendGossipMenuFor(player, 68, creature->GetGUID());
  1137. break;
  1138.  
  1139. case 17: //search by GUID
  1140. ShopPT[player->GetName()].requiredText = text;
  1141. player->PlayerTalkClass->ClearMenus();
  1142. FindLogsBy(player, creature, text, "guid", "donor", 25, 0);
  1143. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 24);
  1144. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1145. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1146. SendGossipMenuFor(player, 68, creature->GetGUID());
  1147. break;
  1148.  
  1149. case 18: //search by accountID
  1150. ShopPT[player->GetName()].requiredText = text;
  1151. player->PlayerTalkClass->ClearMenus();
  1152. FindLogsBy(player, creature, text, "accountID", "donor", 25, 0);
  1153. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 27);
  1154. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1155. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1156. SendGossipMenuFor(player, 68, creature->GetGUID());
  1157. break;
  1158.  
  1159. case 19: //search by account name
  1160. ShopPT[player->GetName()].requiredText = text;
  1161. player->PlayerTalkClass->ClearMenus();
  1162. FindLogsBy(player, creature, text, "accountname", "donor", 25, 0);
  1163. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 30);
  1164. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1165. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1166. SendGossipMenuFor(player, 68, creature->GetGUID());
  1167. break;
  1168.  
  1169. case 20: //search by itemID
  1170. ShopPT[player->GetName()].requiredText = text;
  1171. player->PlayerTalkClass->ClearMenus();
  1172. FindLogsBy(player, creature, text, "itemID", "donor", 25, 0);
  1173. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Page 2]", GOSSIP_SENDER_MAIN, 33);
  1174. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1175. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1176. SendGossipMenuFor(player, 68, creature->GetGUID());
  1177. break;
  1178.  
  1179. case 37: //enter a coupon code
  1180. if (VerifyCouponCode(player, code)) //if the code is verified
  1181. ApplyCoupon(player, code);
  1182. OnGossipHello(player);
  1183. break;
  1184.  
  1185.  
  1186. case 41: //edit coupon amount
  1187. player->PlayerTalkClass->ClearMenus();
  1188. /*if (ShopPT[player->GetName()].MANAGECouponType == "percentage" && atoi(code) >= 100) //cannot be higher than 100% (if percentage)
  1189. {
  1190. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Coupon Management|r]: cannot provide 100 percent discount coupon");
  1191. return true;
  1192. }*/
  1193. ShopPT[player->GetName()].MANAGECouponAmount = atoi(code);
  1194. player->PlayerTalkClass->ClearMenus();
  1195. AddNewCoupon(player, creature);
  1196. break;
  1197.  
  1198. case 42: //edit coupon max usage
  1199. player->PlayerTalkClass->ClearMenus();
  1200. ShopPT[player->GetName()].MANAGEMaxUsage = atoi(code);
  1201. player->PlayerTalkClass->ClearMenus();
  1202. AddNewCoupon(player, creature);
  1203. break;
  1204.  
  1205. case 39: //edit an existing coupon - main interface
  1206. player->PlayerTalkClass->ClearMenus();
  1207. if (!VerifyCouponCode(player, code))
  1208. {
  1209. ChatHandler(player->GetSession()).PSendSysMessage("[|cffFF0000Store System|r]: this coupon is not valid or does not exist in our database");
  1210. return true;
  1211. }
  1212. ShopPT[player->GetName()].store_coupon_code_for_edits = code;
  1213. std::stringstream ss;
  1214. ss << "Disable this coupon code: " << code;
  1215. AddGossipItemFor(player, GOSSIP_ICON_CHAT, ss.str(), GOSSIP_SENDER_MAIN, 45);
  1216.  
  1217. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Go back]", GOSSIP_SENDER_MAIN, 1);
  1218. AddGossipItemFor(player, GOSSIP_ICON_CHAT, "[Nevermind]", GOSSIP_SENDER_MAIN, 2);
  1219. SendGossipMenuFor(player, 68, creature->GetGUID());
  1220. break;
  1221.  
  1222. }
  1223. return true;
  1224. }
  1225. };
  1226.  
  1227. CreatureAI* GetAI(Creature* m_creature) const override
  1228. {
  1229. return new DonorShopStoreAI(m_creature);
  1230. }
  1231. };
  1232.  
  1233. void AddSC_DonorShopStore()
  1234. {
  1235. new DonorShopStore();
  1236. }
  1237.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement