mailsystem.txt 5.6 KB

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