mailsystem.txt 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. event.load("custom_command");
  2. event.load("player_login");
  3. databank.workerExecute(databank.prepare("CREATE TABLE IF NOT EXISTS mails (mail_id INT NOT NULL PRIMARY KEY, from_id INT NOT NULL, to_id INT NOT NULL, readed TINYINT NOT NULL, time BIGINT NOT NULL, del_time BIGINT, message VARCHAR(255) NOT NULL);"));
  4. sgoto(200, "timerloop");
  5. prefix_mail = "§bMail";
  6. prefix_commands = "§6Commands";
  7. msg("dev", "§bMailsystem §rloaded.");
  8. @wait
  9. wait();
  10. ignoreGoto(event);
  11. goto("wait");
  12. @custom_command
  13. if(command == "mail") {
  14. size = list.getSize(args);
  15. if(size == 0) {
  16. msg.prefix(player, prefix_mail, "/mail ...");
  17. msg(player, "§b - <player> <message> §rSends a mail");
  18. msg(player, "§b - new §rShows all new mails");
  19. msg(player, "§b - inbox §rShows inbox");
  20. msg(player, "§b - outbox §rShows outbox");
  21. if(perm.has(player, "mail.reset")) {
  22. msg(player, "§b - reset §rDeletes ALL mails.");
  23. }
  24. goto("wait");
  25. }
  26. arg0 = list.getIndex(args, 0);
  27. if(arg0 == "new") {
  28. if(size != 1) {
  29. msg.prefix(player, prefix_mail, "/mail new");
  30. goto("wait");
  31. }
  32. mail.showNew(player);
  33. goto("wait");
  34. }
  35. if(arg0 == "inbox" || arg0 == "outbox") {
  36. if(size != 1) {
  37. msg.prefix(player, prefix_mail, "/mail inbox/outbox");
  38. goto("wait");
  39. }
  40. mail.showBox(player, arg0);
  41. goto("wait");
  42. }
  43. if(arg0 == "reset") {
  44. if(size != 1) {
  45. msg.prefix(player, prefix_mail, "/mail reset");
  46. goto("wait");
  47. }
  48. if(!perm.has(player, "mail.reset")) {
  49. msg.prefix(player, prefix_mail, "No permission.");
  50. goto("wait");
  51. }
  52. mail.reset();
  53. msg.prefix(player, prefix_mail, "All mails reset.");
  54. goto("wait");
  55. }
  56. //send a mail
  57. if(player.isMuted(player)) {
  58. msg.prefix(player, prefix_commands, "You are muted.");
  59. goto("wait");
  60. }
  61. p_uuid = player.getUuid(arg0);
  62. if(p_uuid == null) {
  63. msg.prefix(player, prefix_mail, "This player has never been online.");
  64. goto("wait");
  65. }
  66. if(size == 1) {
  67. msg.prefix(player, prefix_mail, "/mail <player> <message>");
  68. goto("wait");
  69. }
  70. p_name = player.getName(p_uuid);
  71. mail.send(player.getName(player), p_name, concatList(args, " ", 1, size - 1));
  72. msg.prefix(player, prefix_mail, concat("Mail sent to ", p_name, "."));
  73. }
  74. goto("wait");
  75. @player_login
  76. mail.checkForNew(player);
  77. goto("wait");
  78. @timerloop
  79. mail.timedReset();
  80. sgoto(72000, "timerloop"); //Stundentakt
  81. goto("wait");
  82. function mail.showNew(player) {
  83. stmt = databank.prepare("SELECT mail_id, from_id, time, message FROM mails WHERE to_id = ? AND readed = false;");
  84. to_id = player.getId(player);
  85. databank.setInt(stmt, 1, to_id);
  86. result = databank.execute(stmt);
  87. nextrow = databank.next(result);
  88. if(!nextrow) {
  89. msg.prefix(player, $prefix_mail, "You have no new mails.");
  90. databank.close(result);
  91. databank.close(stmt);
  92. return;
  93. }
  94. msg(player, "[§bMail-New§r]");
  95. while(nextrow) {
  96. mail_id = databank.getInt(result, 1);
  97. from = player.getNameFromId(databank.getInt(result, 2));
  98. time = databank.getLong(result, 3);
  99. message = databank.getString(result, 4);
  100. msg(player, " - ", text.hover(concat("§e", from), getTimeString(time)), " §r§l", message);
  101. nextrow = databank.next(result);
  102. }
  103. databank.close(result);
  104. databank.close(stmt);
  105. mail.readedAll(to_id);
  106. }
  107. function mail.showBox(player, box) {
  108. if(box == "inbox") {
  109. header = "[§bMail-Inbox§r]";
  110. stmt = databank.prepare("SELECT mail_id, from_id, to_id, readed, time, message FROM mails WHERE to_id = ?;");
  111. to_id = player.getId(player);
  112. databank.setInt(stmt, 1, to_id);
  113. } else {
  114. header = "[§bMail-Outbox§r]";
  115. stmt = databank.prepare("SELECT mail_id, from_id, to_id, readed, time, message FROM mails WHERE from_id = ?;");
  116. from_id = player.getId(player);
  117. databank.setInt(stmt, 1, from_id);
  118. }
  119. result = databank.execute(stmt);
  120. nextrow = databank.next(result);
  121. if(!nextrow) {
  122. msg.prefix(player, $prefix_mail, "You have no mails in this box.");
  123. databank.close(result);
  124. databank.close(stmt);
  125. return;
  126. }
  127. msg(player, header);
  128. while(nextrow) {
  129. mail_id = databank.getInt(result, 1);
  130. from = player.getNameFromId(databank.getInt(result, 2));
  131. to = player.getNameFromId(databank.getInt(result, 3));
  132. readed = databank.getBool(result, 4);
  133. if(readed) {
  134. colorcode = "§r";
  135. } else {
  136. colorcode = "§l";
  137. }
  138. time = databank.getLong(result, 5);
  139. message = databank.getString(result, 6);
  140. if(box == "inbox") {
  141. msg(player, " - ", text.hover(concat("§e", from), getTimeString(time)), " §r", colorcode, message);
  142. } else {
  143. msg(player, " - ", text.hover(concat("§e", to), getTimeString(time)), " §r", colorcode, message);
  144. }
  145. nextrow = databank.next(result);
  146. }
  147. databank.close(result);
  148. databank.close(stmt);
  149. if(box == "inbox") {
  150. mail.readedAll(to_id);
  151. }
  152. }
  153. function mail.readedAll(player_id) {
  154. stmt = databank.prepare("UPDATE mails SET readed = true, del_time = ? WHERE to_id = ? AND readed = false;");
  155. databank.setLong(stmt, 1, time.getMillis() + 1209600000); //+2 weeks
  156. databank.setInt(stmt, 2, player_id);
  157. databank.workerExecute(stmt);
  158. }
  159. function mail.timedReset() {
  160. stmt = databank.prepare("DELETE FROM mails WHERE del_time < ?");
  161. databank.setLong(stmt, 1, time.getMillis());
  162. databank.workerExecute(stmt);
  163. }
  164. function mail.reset() {
  165. databank.workerExecute(databank.prepare("DELETE FROM mails"));
  166. server_config = getScriptVar("server_config");
  167. config.set(server_config, "mail_id", 0);
  168. config.saveAsync(server_config);
  169. }