tickets.txt 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. event.load("custom_command");
  2. event.load("player_logout");
  3. prefix = "§2Ticket";
  4. pling_sound = sound.get("BLOCK_NOTE_BLOCK_PLING");
  5. sound_category_ambient = sound.getCategory("AMBIENT");
  6. tickets = list.new(); //List with ticket-arrays: ticket[ticketid][helpneeder][message][supporter]
  7. ticketcounter = 0;
  8. msg.string("dev", "§bTickets §rloaded.");
  9. @wait
  10. wait();
  11. ignoreGoto(event);
  12. goto("wait");
  13. @custom_command
  14. if(!isPlayer(sender)) {
  15. goto("wait");
  16. }
  17. player = sender;
  18. if(command == "ticket") {
  19. size = list.getSize(args);
  20. if(size == 0) {
  21. @tickethelp
  22. msg.prefix(player, prefix, "/ticket...");
  23. msg.string(player, "§2 - new <message> §rCreate a ticket");
  24. msg.string(player, "§2 - stop [id] §rCancel your ticket");
  25. if(isSupporter(player)) {
  26. msg.string(player, "§2 - list §rShows all tickets");
  27. msg.string(player, "§2 - get [id] §rTake care of a ticket");
  28. msg.string(player, "§2 - finish [id] §rFinish a ticket");
  29. msg.string(player, "§2 - release [id] §rRelease a ticket for the next supporter");
  30. msg.string(player, "§2 - report [id] §rReport a ticket to marvinius");
  31. }
  32. goto("wait");
  33. }
  34. arg0 = string.toLowerCase(list.getIndex(args, 0));
  35. if(arg0 == "list") {
  36. if(size != 1) {
  37. msg.prefix(player, prefix, "/ticket list");
  38. goto("wait");
  39. }
  40. if(!isSupporter(player)) {
  41. msg.prefix(player, prefix, "You are not a supporter.");
  42. goto("wait");
  43. }
  44. amount = list.getSize(tickets);
  45. if(amount == 0) {
  46. msg.prefix(player, prefix, "There are no tickets.");
  47. goto("wait");
  48. }
  49. if(ticket.getProcessingAmount() == 0) {
  50. msg.prefix(player, prefix, "There are no processing tickets.");
  51. } else {
  52. msg.prefix(player, prefix, "Processing tickets:");
  53. msg.string(player, "§2--------------------------");
  54. list = ticket.getProcessing();
  55. iter = list.iterator(list);
  56. while(hasNext(iter)) {
  57. ticket = next(iter);
  58. msg.string(player, string.concat("§2 - §rID: §a", string.number(ticket.getId(ticket))));
  59. msg.string(player, string.concat("§2 - §rPlayer: §a", player.getNameFromId(ticket.getHelpNeeder(ticket))));
  60. msg.string(player, string.concat("§2 - §rSupporter: §a", player.getNameFromId(ticket.getSupporter(ticket))));
  61. msg.string(player, string.concat("§2 - §rMessage: §a", ticket.getMessage(ticket)));
  62. msg.string(player, "§2--------------------------");
  63. }
  64. }
  65. if(ticket.getOutstandingAmount() == 0) {
  66. msg.prefix(player, prefix, "There are no outstanding tickets.");
  67. } else {
  68. msg.prefix(player, prefix, "Outstanding tickets:");
  69. msg.string(player, "§2--------------------------");
  70. list = ticket.getOutstanding();
  71. iter = list.iterator(list);
  72. while(hasNext(iter)) {
  73. ticket = next(iter);
  74. msg.string(player, string.concat("§2 - §rID: §a", string.number(ticket.getId(ticket))));
  75. msg.string(player, string.concat("§2 - §rPlayer: §a", player.getNameFromId(ticket.getHelpNeeder(ticket))));
  76. msg.string(player, string.concat("§2 - §rMessage: §a", ticket.getMessage(ticket)));
  77. msg.string(player, "§2--------------------------");
  78. }
  79. }
  80. goto("wait");
  81. }
  82. if(arg0 == "get") {
  83. if(size < 1 || size > 2) {
  84. msg.prefix(player, prefix, "/ticket get [id]");
  85. goto("wait");
  86. }
  87. if(!isSupporter(player)) {
  88. msg.prefix(player, prefix, "You are not a supporter.");
  89. goto("wait");
  90. }
  91. if(size == 1) {
  92. if(ticket.getOutstandingAmount() == 0) {
  93. msg.prefix(player, prefix, "There are no outstanding tickets.");
  94. goto("wait");
  95. }
  96. ticket = ticket.getNextOutstanding();
  97. } else {
  98. ticket_id = list.getIndex(args, 1);
  99. if(!isDouble(ticket_id)) {
  100. msg.prefix(player, prefix, "Number expected.");
  101. goto("wait");
  102. }
  103. ticket = ticket.getFromID(ticket_id);
  104. if(ticket == null) {
  105. msg.prefix(player, prefix, "Not an existing ticket.");
  106. goto("wait");
  107. }
  108. supporter_id = ticket.getSupporter(ticket);
  109. if(supporter_id != null) {
  110. msg.prefix(player, prefix, "Another supporter supports this ticket.");
  111. goto("wait");
  112. }
  113. }
  114. message = ticket.getMessage(ticket);
  115. ticket.setSupporter(ticket, player);
  116. p_name = player.getNameFromId(ticket.getHelpNeeder(ticket));
  117. p = read.player(p_name);
  118. msg.prefix(p, prefix, "Your ticket is in process:");
  119. msg.string(p, string.concat("§2 - §rSupporter: §a", player.getName(player)));
  120. msg.string(p, string.concat("§2 - §rYour message: §a", message));
  121. msg.prefix(player, prefix, "You take care of the ticket:");
  122. msg.string(player, string.concat("§2 - §rID: §a", string.number(ticket.getId(ticket))));
  123. msg.string(player, string.concat("§2 - §rPlayer: §a", p_name));
  124. msg.string(player, string.concat("§2 - §rMessage: §a", message));
  125. goto("wait");
  126. }
  127. if(arg0 == "finish") {
  128. if(size < 1 || size > 2) {
  129. msg.prefix(player, prefix, "/ticket finish [id]");
  130. goto("wait");
  131. }
  132. if(!isSupporter(player)) {
  133. msg.prefix(player, prefix, "You are not a supporter.");
  134. goto("wait");
  135. }
  136. if(size == 1) {
  137. if(ticket.getAmountFromSupporter(player) > 1) {
  138. msg.prefix(player, prefix, "You support more than one ticket.");
  139. goto("wait");
  140. }
  141. ticket = ticket.getFromSupporter(player);
  142. if(ticket == null) {
  143. msg.prefix(player, prefix, "You support no tickets.");
  144. goto("wait");
  145. }
  146. } else {
  147. ticketid = list.getIndex(args, 1);
  148. if(!isDouble(ticketid)) {
  149. msg.prefix(player, prefix, "Number expected.");
  150. goto("wait");
  151. }
  152. ticket = ticket.getFromID(ticketid);
  153. if(ticket == null) {
  154. msg.prefix(player, prefix, "Not an existing ticket.");
  155. goto("wait");
  156. }
  157. }
  158. if(!ticket.isSupporter(ticket, player)) {
  159. msg.prefix(player, prefix, "Another supporter supports this ticket.");
  160. goto("wait");
  161. }
  162. ticket.stop(ticket);
  163. name = player.getNameFromId(ticket.getHelpNeeder(ticket));
  164. msg.send(null, name, prefix, "Your ticket was finished.", false);
  165. msg.prefix(player, prefix, "You finished the ticket.");
  166. goto("wait");
  167. }
  168. if(arg0 == "release") {
  169. if(size < 1 || size > 2) {
  170. msg.prefix(player, prefix, "/ticket release [id]");
  171. goto("wait");
  172. }
  173. if(!isSupporter(player)) {
  174. msg.prefix(player, prefix, "You are not a supporter.");
  175. goto("wait");
  176. }
  177. if(size == 1) {
  178. if(ticket.getAmountFromSupporter(player) > 1) {
  179. msg.prefix(player, prefix, "You support more than one ticket.");
  180. goto("wait");
  181. }
  182. ticket = ticket.getFromSupporter(player);
  183. if(ticket == null) {
  184. msg.prefix(player, prefix, "You support no tickets.");
  185. goto("wait");
  186. }
  187. } else {
  188. ticketid = list.getIndex(args, 1);
  189. if(!isDouble(ticketid)) {
  190. msg.prefix(player, prefix, "Number expected.");
  191. goto("wait");
  192. }
  193. ticket = ticket.getFromID(ticketid);
  194. if(ticket == null) {
  195. msg.prefix(player, prefix, "Not an existing ticket.");
  196. goto("wait");
  197. }
  198. }
  199. if(!ticket.isSupporter(ticket, player)) {
  200. msg.prefix(player, prefix, "Another supporter supports this ticket.");
  201. goto("wait");
  202. }
  203. ticket.release(ticket, player);
  204. goto("wait");
  205. }
  206. if(arg0 == "report") {
  207. if(size < 1 || size > 2) {
  208. msg.prefix(player, prefix, "/ticket report [id]");
  209. goto("wait");
  210. }
  211. if(!isSupporter(player)) {
  212. msg.prefix(player, prefix, "You are not a supporter.");
  213. goto("wait");
  214. }
  215. if(size == 1) {
  216. if(ticket.getAmountFromSupporter(player) > 1) {
  217. msg.prefix(player, prefix, "You support more than one ticket.");
  218. goto("wait");
  219. }
  220. ticket = ticket.getFromSupporter(player);
  221. if(ticket == null) {
  222. msg.prefix(player, prefix, "You support no tickets.");
  223. goto("wait");
  224. }
  225. } else {
  226. ticketid = list.getIndex(args, 1);
  227. if(!isDouble(ticketid)) {
  228. msg.prefix(player, prefix, "Number expected.");
  229. goto("wait");
  230. }
  231. ticket = ticket.getFromID(ticketid);
  232. if(ticket == null) {
  233. msg.prefix(player, prefix, "Not an existing ticket.");
  234. goto("wait");
  235. }
  236. }
  237. if(!ticket.isSupporter(ticket, player)) {
  238. msg.prefix(player, prefix, "Another supporter supports this ticket.");
  239. goto("wait");
  240. }
  241. ticket.report(ticket, player);
  242. name = player.getNameFromId(ticket.getHelpNeeder(ticket));
  243. msg.send(null, name, prefix, "Your ticket got reported.", false);
  244. msg.prefix(player, prefix, "You reported the ticket.");
  245. goto("wait");
  246. }
  247. if(arg0 == "stop") {
  248. if(size < 1 || size > 2) {
  249. msg.prefix(player, prefix, "/ticket stop [id]");
  250. goto("wait");
  251. }
  252. if(size == 1) {
  253. if(ticket.getAmountFromHelpNeeder(player) > 1) {
  254. msg.prefix(player, prefix, "You have more than one ticket.");
  255. goto("wait");
  256. }
  257. ticket = ticket.getFromHelpNeeder(player);
  258. if(ticket == null) {
  259. msg.prefix(player, prefix, "You have no tickets.");
  260. goto("wait");
  261. }
  262. } else {
  263. ticketid = list.getIndex(args, 1);
  264. if(!isDouble(ticketid)) {
  265. msg.prefix(player, prefix, "Number expected.");
  266. goto("wait");
  267. }
  268. ticket = ticket.getFromID(ticketid);
  269. if(ticket == null) {
  270. msg.prefix(player, prefix, "Not an existing ticket.");
  271. goto("wait");
  272. }
  273. if(!hasTicketCreated(player, ticket)) {
  274. msg.prefix(player, prefix, "Not your ticket.");
  275. goto("wait");
  276. }
  277. }
  278. if(ticket.stop(ticket)) {
  279. msg.prefix(player, prefix, "Stopped your ticket.");
  280. supporter_id = ticket.getSupporter(ticket);
  281. if(supporter_id != null) {
  282. msg.send(null, player.getNameFromId(supporter_id), prefix, string.concat("The ticket from ", player.getName(player), " was stopped."), false);
  283. }
  284. }
  285. goto("wait");
  286. }
  287. if(arg0 == "new") {
  288. if(size < 2) {
  289. msg.prefix(player, prefix, "/ticket new <message>");
  290. goto("wait");
  291. }
  292. supporters = getAvailableSupporters();
  293. if(list.getSize(supporters) == 0) {
  294. msg.prefix(player, prefix, "There is no supporter available.");
  295. goto("wait");
  296. }
  297. message = string.concatList(args, " ", 1, size - 1);
  298. ticket = ticket.create(player, message);
  299. msg.prefix(player, prefix, string.concat("Ticket created (ID: ", string.number(ticket.getId(ticket)), ")."));
  300. informSuppsAboutNew(ticket);
  301. goto("wait");
  302. }
  303. goto("tickethelp");
  304. }
  305. goto("wait");
  306. @player_logout
  307. player_id = player.getId(player);
  308. if(isSupporter(player)) {
  309. iter = list.iterator(tickets);
  310. while(hasNext(iter)) {
  311. ticket = next(iter);
  312. if(ticket.isSupporter(ticket, player)) {
  313. ticket.release(ticket, player);
  314. }
  315. }
  316. }
  317. for(i = 0; i < list.getSize(tickets); i++) {
  318. ticket = list.getIndex(tickets, i);
  319. if(ticket.isHelpNeeder(ticket, player)) {
  320. ticket.stop(ticket);
  321. }
  322. }
  323. goto("wait");
  324. function ticket.getProcessing() {
  325. list = list.new();
  326. iter = list.iterator($tickets);
  327. while(hasNext(iter)) {
  328. ticket = next(iter);
  329. if(ticket.getSupporter(ticket) != null) {
  330. list.add(list, ticket);
  331. }
  332. }
  333. return list;
  334. }
  335. function ticket.getProcessingAmount() {
  336. return list.getSize(ticket.getProcessing());
  337. }
  338. function ticket.getOutstanding() {
  339. list = list.new();
  340. iter = list.iterator($tickets);
  341. while(hasNext(iter)) {
  342. ticket = next(iter);
  343. if(ticket.getSupporter(ticket) == null) {
  344. list.add(list, ticket);
  345. }
  346. }
  347. return list;
  348. }
  349. function ticket.getOutstandingAmount() {
  350. return list.getSize(ticket.getOutstanding());
  351. }
  352. function ticket.getNextOutstanding() {
  353. iter = list.iterator($tickets);
  354. while(hasNext(iter)) {
  355. t = next(iter);
  356. if(ticket.getSupporter(t) == null) {
  357. return t;
  358. }
  359. }
  360. return null;
  361. }
  362. function ticket.isSupporter(ticket, player) {
  363. return ticket.getSupporter(ticket) == player.getId(player);
  364. }
  365. function ticket.isHelpNeeder(ticket, player) {
  366. return ticket.getHelpNeeder(ticket) == player.getId(player);
  367. }
  368. function isSupporter(player) {
  369. return perm.has("isSupporter", player);
  370. }
  371. function getAvailableSupporters() {
  372. online = players.toList();
  373. supporters = list.new();
  374. for(i = 0; i < list.getSize(online); i++) {
  375. p = list.getIndex(online, i);
  376. if(isSupporter(p)) {
  377. list.add(supporters, p);
  378. }
  379. }
  380. return supporters;
  381. }
  382. function ticket.create(player, message) {
  383. $ticketcounter++;
  384. ticket = array.new(4);
  385. ticket[0] = player.getId(player);
  386. ticket[1] = message;
  387. ticket[3] = $ticketcounter;
  388. list.add($tickets, ticket);
  389. return ticket;
  390. }
  391. function ticket.release(ticket, supporter) {
  392. player_id = ticket.getHelpNeeder(ticket);
  393. name = player.getNameFromId(player_id);
  394. msg.send(null, name, $prefix, "Your ticket got released, so another supporter can take care of.", false);
  395. msg.prefix(supporter, $prefix, "You released the ticket for another supporter.");
  396. ticket.setSupporter(ticket, null);
  397. informSuppsAboutRelease(ticket, supporter);
  398. }
  399. function informSuppsAboutNew(ticket) {
  400. supporters = getAvailableSupporters();
  401. iter = list.iterator(supporters);
  402. while(hasNext(iter)) {
  403. p = next(iter);
  404. msg.prefix(p, $prefix, "New ticket:");
  405. msg.string(p, string.concat("§2 - §rID: §a", string.number(ticket.getId(ticket))));
  406. msg.string(p, string.concat("§2 - §rPlayer: §a", player.getNameFromId(ticket.getHelpNeeder(ticket))));
  407. msg.string(p, string.concat("§2 - §rMessage: §a", ticket.getMessage(ticket)));
  408. sound.spawnForPlayer(p, $pling_sound, $sound_category_ambient);
  409. }
  410. }
  411. function informSuppsAboutRelease(ticket, supporter) {
  412. supporters = getAvailableSupporters();
  413. iter = list.iterator(supporters);
  414. while(hasNext(iter)) {
  415. p = next(iter);
  416. msg.prefix(p, $prefix, "Ticket released:");
  417. msg.string(p, string.concat("§2 - §rID: §a", string.number(ticket.getId(ticket))));
  418. msg.string(p, string.concat("§2 - §rPlayer: §a", player.getNameFromId(ticket.getHelpNeeder(ticket))));
  419. msg.string(p, string.concat("§2 - §rEx-Supporter: §a", player.getName(supporter)));
  420. msg.string(p, string.concat("§2 - §rMessage: §a", ticket.getMessage(ticket)));
  421. sound.spawnForPlayer(p, $pling_sound, $sound_category_ambient);
  422. }
  423. }
  424. function ticket.report(ticket, supporter) {
  425. name = player.getNameFromId(ticket.getHelpNeeder(ticket));
  426. message = ticket.getMessage(ticket);
  427. supporter_name = player.getName(supporter);
  428. mail.send(supporter_name, "marvinius", string.concat("Ticket Report: ", name, " / ", message));
  429. ticket.stop(ticket);
  430. }
  431. function ticket.stop(ticket) {
  432. if(!list.contains($tickets, ticket)) {
  433. return false;
  434. }
  435. list.remove($tickets, ticket);
  436. return true;
  437. }
  438. function ticket.getHelpNeeder(ticket) {
  439. return ticket[0];
  440. }
  441. function ticket.getMessage(ticket) {
  442. return ticket[1];
  443. }
  444. function ticket.getSupporter(ticket) {
  445. return ticket[2];
  446. }
  447. function ticket.getId(ticket) {
  448. return ticket[3];
  449. }
  450. function ticket.setSupporter(ticket, player) {
  451. if(player == null) {
  452. ticket[2] = null;
  453. } else {
  454. ticket[2] = player.getId(player);
  455. }
  456. }
  457. function hasTicketCreated(player, ticket) {
  458. return player.getId(player) == ticket.getHelpNeeder(ticket);
  459. }
  460. function ticket.getFromID(ticket_id) {
  461. iter = list.iterator($tickets);
  462. while(hasNext(iter)) {
  463. t = next(iter);
  464. if(ticket.getId(t) == ticket_id) {
  465. return t;
  466. }
  467. }
  468. return null;
  469. }
  470. function ticket.getAmountFromSupporter(player) {
  471. c = 0;
  472. iter = list.iterator($tickets);
  473. while(hasNext(iter)) {
  474. t = next(iter);
  475. if(ticket.isSupporter(t, player)) {
  476. c++;
  477. }
  478. }
  479. return c;
  480. }
  481. function ticket.getFromSupporter(player) {
  482. iter = list.iterator($tickets);
  483. while(hasNext(iter)) {
  484. t = next(iter);
  485. if(ticket.isSupporter(t, player)) {
  486. return t;
  487. }
  488. }
  489. return null;
  490. }
  491. function ticket.getAmountFromHelpNeeder(player) {
  492. c = 0;
  493. iter = list.iterator($tickets);
  494. while(hasNext(iter)) {
  495. t = next(iter);
  496. if(ticket.isHelpNeeder(t, player)) {
  497. c++;
  498. }
  499. }
  500. return c;
  501. }
  502. function ticket.getFromHelpNeeder(player) {
  503. iter = list.iterator($tickets);
  504. while(hasNext(iter)) {
  505. t = next(iter);
  506. if(ticket.isHelpNeeder(t, player)) {
  507. return t;
  508. }
  509. }
  510. return null;
  511. }