Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.15 KB | None | 0 0
  1. #include "ScriptPCH.h"
  2.  
  3. class Poll_NPC : public CreatureScript
  4. {
  5. public:
  6. Poll_NPC() : CreatureScript("Poll_NPC") {}
  7.  
  8. bool OnGossipHello(Player* player, Creature* creature)
  9. {
  10. player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_CHAT, "Enter feedback", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1, "", 0, true);
  11. //player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "What is this?", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 190001);
  12. ViewGossipItems1(player);
  13. player->PlayerTalkClass->SendGossipMenu(907, creature->GetGUID());
  14. return true;
  15. }
  16.  
  17. void DeveloperResponse(Player* player)
  18. {
  19. QueryResult howmanyreports = CharacterDatabase.PQuery("SELECT devcomment FROM feedback_player WHERE guid = '%u'", player->GetGUIDLow());
  20. uint32 list = 0;
  21.  
  22. if (howmanyreports)
  23. {
  24. Field* fields = howmanyreports->Fetch();
  25. char const* devcomments = fields[0].GetCString();
  26. ChatHandler(player->GetSession()).SendSysMessage("Developer response:");
  27. do
  28. {
  29. ChatHandler(player->GetSession()).PSendSysMessage("========================");
  30. ChatHandler(player->GetSession()).PSendSysMessage("Report %u: %s ", ++list, devcomments);
  31. } while (howmanyreports->NextRow());
  32. ChatHandler(player->GetSession()).PSendSysMessage("========================");
  33. }
  34. else
  35. return;
  36. }
  37.  
  38. void InsertingPreparedStatment(Player* player, std::string& feedback, uint32 report)
  39. {
  40. PreparedStatement * stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_FEEDBACK_PLAYER);
  41. stmt->setUInt32(0, player->GetGUIDLow());
  42. stmt->setString(1, player->GetName().c_str());
  43. stmt->setString(2, feedback);
  44. stmt->setUInt32(3, report);
  45. CharacterDatabase.Execute(stmt);
  46. player->GetSession()->SendAreaTriggerMessage("Thank you for your feedback!");
  47. }
  48.  
  49. // cant be assed to put it into one void function, but this is fine
  50. void Viewdeletefeedback1(Player* player)
  51. {
  52. QueryResult howmanyreports = CharacterDatabase.PQuery("SELECT reports FROM feedback_player WHERE reports = 1 AND guid = '%u'", player->GetGUIDLow());
  53.  
  54. if (howmanyreports)
  55. player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Delete report 1", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
  56. }
  57.  
  58. void Viewdeletefeedback2(Player* player)
  59. {
  60. QueryResult howmanyreports = CharacterDatabase.PQuery("SELECT reports FROM feedback_player WHERE reports = 2 AND guid = '%u'", player->GetGUIDLow());
  61.  
  62. if (howmanyreports)
  63. player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Delete report 2", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
  64. }
  65. void Viewdeletefeedback3(Player* player)
  66. {
  67. QueryResult howmanyreports = CharacterDatabase.PQuery("SELECT reports FROM feedback_player WHERE reports = 3 AND guid = '%u'", player->GetGUIDLow());
  68.  
  69. if (howmanyreports)
  70. player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Delete report 3", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7);
  71. }
  72. void Viewdeletefeedback4(Player* player)
  73. {
  74. QueryResult howmanyreports = CharacterDatabase.PQuery("SELECT reports FROM feedback_player WHERE reports = 4 AND guid = '%u'", player->GetGUIDLow());
  75.  
  76. if (howmanyreports)
  77. player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Delete report 4", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8);
  78. }
  79. void Viewdeletefeedback5(Player* player)
  80. {
  81. QueryResult howmanyreports = CharacterDatabase.PQuery("SELECT reports FROM feedback_player WHERE reports = 5 AND guid = '%u'", player->GetGUIDLow());
  82.  
  83. if (howmanyreports)
  84. player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Delete report 5", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
  85. }
  86.  
  87. void DeleteFeedback(Player* player, uint32& report)
  88. {
  89. CharacterDatabase.PExecute("DELETE FROM feedback_player WHERE reports = '%u' AND guid = '%u'", report, player->GetGUIDLow());
  90. }
  91.  
  92. void ViewGossipItems1(Player* player)
  93. {
  94. QueryResult viewreport = CharacterDatabase.PQuery("SELECT comment FROM feedback_player WHERE guid = '%u'", player->GetGUIDLow());
  95.  
  96. if (viewreport)
  97. {
  98. player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "View my reports", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); // display should player have a report?
  99. player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Delete reports", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
  100. player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "View Developer comments", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1337);
  101. }
  102. else
  103. return;
  104. }
  105.  
  106. void ViewFeedback(Player* player)
  107. {
  108. QueryResult viewreport = CharacterDatabase.PQuery("SELECT comment FROM feedback_player WHERE guid = '%u'", player->GetGUIDLow());
  109. uint32 list = 0;
  110.  
  111. if (viewreport)
  112. {
  113. ChatHandler(player->GetSession()).SendSysMessage("Your Reports:");
  114. do
  115. {
  116. Field* fields = viewreport->Fetch();
  117. char const* comments = fields[0].GetCString();
  118. ChatHandler(player->GetSession()).PSendSysMessage("========================");
  119. ChatHandler(player->GetSession()).PSendSysMessage("Report %u: %s ", ++list, comments);
  120. } while (viewreport->NextRow());
  121. ChatHandler(player->GetSession()).PSendSysMessage("========================");
  122. }
  123. else
  124. return; // should never really happen but just incase
  125. }
  126.  
  127. void InsertFeedback2(Player* player, std::string& feedback)
  128. {
  129. QueryResult selectreport = CharacterDatabase.PQuery("SELECT COUNT(guid) FROM feedback_player WHERE guid = '%u'", player->GetGUIDLow());
  130. QueryResult reporting1 = CharacterDatabase.PQuery("SELECT reports FROM feedback_player WHERE reports = 1 AND guid = '%u'", player->GetGUIDLow());
  131. QueryResult reporting2 = CharacterDatabase.PQuery("SELECT reports FROM feedback_player WHERE reports = 2 AND guid = '%u'", player->GetGUIDLow());
  132. QueryResult reporting3 = CharacterDatabase.PQuery("SELECT reports FROM feedback_player WHERE reports = 3 AND guid = '%u'", player->GetGUIDLow());
  133. QueryResult reporting4 = CharacterDatabase.PQuery("SELECT reports FROM feedback_player WHERE reports = 4 AND guid = '%u'", player->GetGUIDLow());
  134. QueryResult reporting5 = CharacterDatabase.PQuery("SELECT reports FROM feedback_player WHERE reports = 5 AND guid = '%u'", player->GetGUIDLow());
  135.  
  136. uint64 reportcount = !selectreport ? 0 : selectreport->Fetch()[0].GetUInt64();
  137. if (!reportcount || reportcount >= 1)
  138. {
  139. if (!reportcount)
  140. {
  141. InsertingPreparedStatment(player, feedback, 1);
  142. return;
  143. }
  144.  
  145. if (reportcount == 1)
  146. {
  147. InsertingPreparedStatment(player, feedback, 2);
  148. return;
  149. }
  150. if (reportcount == 2)
  151. {
  152. if (!reporting1)
  153. {
  154. InsertingPreparedStatment(player, feedback, 1);
  155. }
  156. else if (!reporting2)
  157. {
  158. InsertingPreparedStatment(player, feedback, 2);
  159. }
  160. else if (!reporting3)
  161. {
  162. InsertingPreparedStatment(player, feedback, 3);
  163. }
  164. else if (!reporting4)
  165. {
  166. InsertingPreparedStatment(player, feedback, 4);
  167. }
  168. else if (!reporting5)
  169. {
  170. InsertingPreparedStatment(player, feedback, 5);
  171. }
  172. else
  173. {
  174. InsertingPreparedStatment(player, feedback, 3);
  175. }
  176. }
  177. if (reportcount == 3)
  178. {
  179. if (!reporting1)
  180. {
  181. InsertingPreparedStatment(player, feedback, 1);
  182. }
  183. else if (!reporting2)
  184. {
  185. InsertingPreparedStatment(player, feedback, 2);
  186. }
  187. else if (!reporting3)
  188. {
  189. InsertingPreparedStatment(player, feedback, 3);
  190. }
  191. else if (!reporting4)
  192. {
  193. InsertingPreparedStatment(player, feedback, 4);
  194. }
  195. else if (!reporting5)
  196. {
  197. InsertingPreparedStatment(player, feedback, 5);
  198. }
  199. else
  200. {
  201. InsertingPreparedStatment(player, feedback, 4);
  202. }
  203. }
  204. if (reportcount == 4)
  205. {
  206. if (!reporting1)
  207. {
  208. InsertingPreparedStatment(player, feedback, 1);
  209. }
  210. else if (!reporting2)
  211. {
  212. InsertingPreparedStatment(player, feedback, 2);
  213. }
  214. else if (!reporting3)
  215. {
  216. InsertingPreparedStatment(player, feedback, 3);
  217. }
  218. else if (!reporting4)
  219. {
  220. InsertingPreparedStatment(player, feedback, 4);
  221. }
  222. else if (!reporting5)
  223. {
  224. InsertingPreparedStatment(player, feedback, 5);
  225. }
  226. else
  227. {
  228. InsertingPreparedStatment(player, feedback, 5);
  229. }
  230. }
  231. if (reportcount >= 5)
  232. player->GetSession()->SendAreaTriggerMessage("You've reached your bug report limit!");
  233. return;
  234. }
  235. }
  236.  
  237.  
  238. bool OnGossipSelect(Player *player, Creature * creature, uint32 sender, uint32 action)
  239. {
  240. player->PlayerTalkClass->ClearMenus();
  241.  
  242. uint32 report;
  243. switch (action)
  244. {
  245. case GOSSIP_ACTION_INFO_DEF + 2:
  246. ViewFeedback(player);
  247. player->PlayerTalkClass->SendCloseGossip();
  248. break;
  249. case GOSSIP_ACTION_INFO_DEF + 3:
  250. player->PlayerTalkClass->ClearMenus();
  251. Viewdeletefeedback1(player);
  252. Viewdeletefeedback2(player);
  253. Viewdeletefeedback3(player);
  254. Viewdeletefeedback4(player);
  255. Viewdeletefeedback5(player);
  256. player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Previous Page", GOSSIP_SENDER_MAIN, 15);
  257. player->SEND_GOSSIP_MENU(60020, creature->GetGUID());
  258. break;
  259. case GOSSIP_ACTION_INFO_DEF + 5:
  260. report = 1;
  261. DeleteFeedback(player, report);
  262. player->PlayerTalkClass->SendCloseGossip();
  263. player->GetSession()->SendAreaTriggerMessage("Deleted report 1!");
  264. break;
  265. case GOSSIP_ACTION_INFO_DEF + 6:
  266. report = 2;
  267. DeleteFeedback(player, report);
  268. player->PlayerTalkClass->SendCloseGossip();
  269. player->GetSession()->SendAreaTriggerMessage("Deleted report 2!");
  270. break;
  271. case GOSSIP_ACTION_INFO_DEF + 7:
  272. report = 3;
  273. DeleteFeedback(player, report);
  274. player->PlayerTalkClass->SendCloseGossip();
  275. player->GetSession()->SendAreaTriggerMessage("Deleted report 3!");
  276. break;
  277. case GOSSIP_ACTION_INFO_DEF + 8:
  278. report = 4;
  279. DeleteFeedback(player, report);
  280. player->PlayerTalkClass->SendCloseGossip();
  281. player->GetSession()->SendAreaTriggerMessage("Deleted report 4!");
  282. break;
  283. case GOSSIP_ACTION_INFO_DEF + 9:
  284. report = 5;
  285. DeleteFeedback(player, report);
  286. player->PlayerTalkClass->SendCloseGossip();
  287. player->GetSession()->SendAreaTriggerMessage("Deleted report 5!");
  288. break;
  289. case GOSSIP_ACTION_INFO_DEF + 1337:
  290. DeveloperResponse(player);
  291. player->PlayerTalkClass->SendCloseGossip();
  292. break;
  293. case 15:
  294. OnGossipHello(player, creature);
  295. break;
  296. case GOSSIP_ACTION_INFO_DEF + 190001:
  297. player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "This is a feedback NPC. Allows players to write feedback regarding any bug report or suggestions which a developer can leave a response for you to read.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10000);
  298. default:
  299. break;
  300. }
  301. return true;
  302. }
  303.  
  304. bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, char const* code)
  305. {
  306. player->PlayerTalkClass->ClearMenus();
  307. if (sender == GOSSIP_SENDER_MAIN)
  308. {
  309. switch (action)
  310. {
  311. case GOSSIP_ACTION_INFO_DEF + 1:
  312. {
  313. if (strlen(code) < 10)
  314. {
  315. player->GetSession()->SendAreaTriggerMessage("You need to type more than 10 characters to submit a report!");
  316. player->PlayerTalkClass->SendCloseGossip();
  317. return false;
  318. }
  319. std::string feedback;
  320. feedback = code;
  321. InsertFeedback2(player, feedback);
  322. player->PlayerTalkClass->SendCloseGossip();
  323. break;
  324. }
  325. }
  326. }
  327.  
  328. return true;
  329. }
  330. };
  331.  
  332. void AddSC_Poll_NPC()
  333. {
  334. new Poll_NPC();
  335. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement