party.txt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. event.load("custom_command");
  2. event.load("player_logout");
  3. setScriptVar("party_ids", map.new()); //Player, partyid
  4. setScriptVar("party_lists", map.new()); //partyid, Liste mit Players aller Partymitglieder
  5. setScriptVar("party_ranks", map.new()); //Player, "leader"/"mod"/"player"
  6. delkeytime = list.new(); //Alle Zeitpunkte zum Löschen der Einladungen (Vergleichsliste)
  7. delkeytimes = map.new(); //Player, Liste mit Zeitpunkten zum Löschen der Einladungen
  8. deluuid = list.new(); //Alle Player zum Löschen der Einladungen
  9. invitations = map.new(); //Player, Liste mit Player aller Einlader
  10. invite_ids = map.new(); //Player, partyid
  11. partycounter = 0;
  12. party_prefix = "§5Party";
  13. msg("dev", "§bPartysystem §rwurde geladen");
  14. @wait
  15. wait();
  16. ignoreGoto(event);
  17. goto("wait");
  18. @player_logout
  19. if(player.isInParty(player)) {
  20. party.kickPlayer(player, "logout");
  21. }
  22. goto("wait");
  23. @custom_command
  24. if(command == "party") {
  25. size = list.getSize(args);
  26. if(size == 0) {
  27. @partyhelp
  28. msg.prefix(player, party_prefix, "§r/party ...");
  29. msg(player, "§5 - invite <player> §rInvite a player");
  30. msg(player, "§5 - accept <player> §rAccept an invitation");
  31. msg(player, "§5 - deny <player> §rDeny an invitation");
  32. msg(player, "§5 - kick <player> §rKick a player");
  33. msg(player, "§5 - leave §rLeave the party");
  34. msg(player, "§5 - promote <player> §rPromote a player");
  35. msg(player, "§5 - demote <player> §rDemote a player");
  36. msg(player, "§5 - disband §rDisband a party");
  37. msg(player, "§5 - list §rParty information");
  38. msg(player, "§5 - <nachricht> §rSends a party message");
  39. goto("wait");
  40. }
  41. arg0 = list.getIndex(args, 0);
  42. if(arg0 == "list") {
  43. if(size != 1) {
  44. msg.prefix(player, party_prefix, "§5/party list");
  45. } else {
  46. if(!player.isInParty(player)) {
  47. msg.prefix(player, party_prefix, "You are not in a party.");
  48. goto("wait");
  49. }
  50. list = party.getList(player.getPartyId(player));
  51. table = table.new("§5", 13, 7);
  52. msg(player, table.getStart(table));
  53. msg(player, table.get(table, "§lName", "§lRole"));
  54. msg(player, table.getMiddle(table));
  55. iter = list.iterator(list);
  56. while(hasNext(iter)) {
  57. p = player.get(next(iter));
  58. msg(player, table.get(table, player.getName(p), player.getPartyRank(p)));
  59. }
  60. msg(player, table.getEnd(table));
  61. }
  62. goto("wait");
  63. }
  64. if(arg0 == "leave") {
  65. if(size != 1) {
  66. msg.prefix(player, party_prefix, "§5/party leave");
  67. } else {
  68. if(!player.isInParty(player)) {
  69. msg.prefix(player, party_prefix, "You are not in a party.");
  70. goto("wait");
  71. }
  72. party.kickPlayer(player, "leave");
  73. }
  74. goto("wait");
  75. }
  76. if(arg0 == "disband") {
  77. if(size != 1) {
  78. msg.prefix(player, party_prefix, "§5/party disband");
  79. } else {
  80. if(!player.isInParty(player)) {
  81. msg.prefix(player, party_prefix, "You are not in a party.");
  82. goto("wait");
  83. }
  84. if(!player.isPartyLeader(player)) {
  85. msg.prefix(player, party_prefix, "You are not the party leader.");
  86. goto("wait");
  87. }
  88. party.delete(player.getPartyId(player));
  89. }
  90. goto("wait");
  91. }
  92. if(arg0 == "kick") {
  93. if(size != 2) {
  94. msg.prefix(player, party_prefix, "§5/party kick <player>");
  95. } else {
  96. if(!player.isInParty(player)) {
  97. msg.prefix(player, party_prefix, "You are not in a party.");
  98. goto("wait");
  99. }
  100. if(!player.isPartyLeaderOrMod(player)) {
  101. msg.prefix(player, party_prefix, "You are not leader or moderator of the party.");
  102. goto("wait");
  103. }
  104. pname = list.getIndex(args, 1);
  105. if(!checkIfEverOnline(pname)) {
  106. msg.prefix(player, party_prefix, "This player has never been online.");
  107. goto("wait");
  108. }
  109. p = read.player(pname);
  110. if(p == null) {
  111. msg.prefix(player, party_prefix, "This player is not online.");
  112. goto("wait");
  113. }
  114. if(player == p) {
  115. msg.prefix(player, party_prefix, "You can´t apply that to yourself.");
  116. goto("wait");
  117. }
  118. if(!party.same(p, player)) {
  119. msg.prefix(player, party_prefix, "This player is not in your party.");
  120. goto("wait");
  121. }
  122. ownrank = player.getPartyRank(player);
  123. if(ownrank == "Moderator") {
  124. if(player.isPartyLeaderOrMod(p)) {
  125. msg.prefix(player, party_prefix, "§rDu darfst diesen Spieler nicht kicken");
  126. goto("wait");
  127. }
  128. }
  129. party.kickPlayer(p, "kick");
  130. }
  131. goto("wait");
  132. }
  133. if(arg0 == "promote" || arg0 == "demote") {
  134. if(size != 2) {
  135. msg.prefix(player, party_prefix, concat("§5/party ", arg0, " <player>"));
  136. } else {
  137. pname = list.getIndex(args, 1);
  138. if(!player.isInParty(player)) {
  139. msg.prefix(player, party_prefix, "You are not in a party.");
  140. goto("wait");
  141. }
  142. if(!player.isPartyLeader(player)) {
  143. msg.prefix(player, party_prefix, "You are not the party leader.");
  144. goto("wait");
  145. }
  146. if(!checkIfEverOnline(pname)) {
  147. msg.prefix(player, party_prefix, "This player has never been online.");
  148. goto("wait");
  149. }
  150. p = read.player(pname);
  151. if(p == null) {
  152. msg.prefix(player, party_prefix, "This player is not online.");
  153. goto("wait");
  154. }
  155. if(player == p) {
  156. msg.prefix(player, party_prefix, "You can´t apply that to yourself.");
  157. goto("wait");
  158. }
  159. if(!party.same(p, player)) {
  160. msg.prefix(player, party_prefix, "This player is not in your party.");
  161. goto("wait");
  162. }
  163. partyid = player.getPartyId(player);
  164. rank = player.getPartyRank(p);
  165. if(arg0 == "promote") {
  166. if(rank == "Player") {
  167. player.setPartyRank(p, "Moderator");
  168. party.sendMessage(partyid, concat("§r", pname, " is now Moderator."));
  169. } elseif(rank == "Moderator") {
  170. player.setPartyRank(p, "Leader");
  171. player.setPartyRank(player, "Moderator"); //Ex-Leader degradieren
  172. party.sendMessage(partyid, concat("§r", pname, " is now Leader."));
  173. }
  174. } elseif(arg0 == "demote") {
  175. if(rank == "Moderator") {
  176. player.setPartyRank(p, "Player");
  177. party.sendMessage(partyid, concat("§r", pname, " is no longer Moderator."));
  178. } else {
  179. msg.prefix(player, party_prefix, "This player cannot be demoted.");
  180. }
  181. }
  182. }
  183. goto("wait");
  184. }
  185. if(arg0 == "invite") {
  186. if(size != 2) {
  187. msg.prefix(player, party_prefix, "§5/party invite <player>");
  188. } else {
  189. if(!player.isInParty(player)) { //wenn nicht in party
  190. if(map.contains(invite_ids, player)) { //wenn id noch nicht zugewiesen
  191. partycounter++;
  192. }
  193. }
  194. pname = list.getIndex(args, 1);
  195. if(!checkIfEverOnline(pname)) {
  196. msg.prefix(player, party_prefix, "This player has never been online.");
  197. goto("wait");
  198. }
  199. p = read.player(pname);
  200. if(p == null) {
  201. msg.prefix(player, party_prefix, "This player is not online.");
  202. goto("wait");
  203. }
  204. if(player == p) {
  205. msg.prefix(player, party_prefix, "You can´t apply that to yourself.");
  206. goto("wait");
  207. }
  208. if(player.isInParty(player)) {
  209. if(!player.isPartyLeaderOrMod(player)) {
  210. msg.prefix(player, party_prefix, "You are not leader or moderator of the party.");
  211. goto("wait");
  212. }
  213. }
  214. if(player.isInParty(p)) {
  215. msg.prefix(player, party_prefix, "This player is already in your party.");
  216. goto("wait");
  217. }
  218. list = map.get(invitations, p);
  219. if(list == null) {
  220. list = list.new();
  221. map.add(invitations, p, list);
  222. }
  223. if(list.contains(list, player)) {
  224. msg.prefix(player, party_prefix, "This player already has an invitation from you.");
  225. goto("wait");
  226. }
  227. list.add(list, player);
  228. list.add(deluuid, player);
  229. list.add(delkeytime, time.getMillis());
  230. map.add(delkeytimes, p, list.new());
  231. list = map.get(delkeytimes, p);
  232. list.add(list, time.getMillis());
  233. map.add(invite_ids, player, partycounter);
  234. msg.prefix(player, party_prefix, "Invitation sent.");
  235. msg.prefix(p, party_prefix, concat(player_name, " invites you to a party."));
  236. msg(p, " §5=> §rAccept ? ", text.click("[§aYes§r] ", concat("/party accept ", player_name)), text.click("[§cNo§r]", concat("/party deny ", player_name)));
  237. sgoto(1200, "deletePartyInvitation"); //Einladung bleibt 1 Minute lang erhalten
  238. }
  239. goto("wait");
  240. }
  241. if(arg0 == "accept") {
  242. if(size != 2) {
  243. msg.prefix(player, party_prefix, "§5/party accept <player>");
  244. } else {
  245. if(player.isInParty(player)) {
  246. msg.prefix(player, party_prefix, "You are already in a party.");
  247. goto("wait");
  248. }
  249. pname = list.getIndex(args, 1);
  250. if(!checkIfEverOnline(pname)) {
  251. msg.prefix(player, party_prefix, "This player has never been online.");
  252. goto("wait");
  253. }
  254. p = read.player(pname);
  255. if(p == null) {
  256. msg.prefix(player, party_prefix, "This player is no longer online.");
  257. goto("wait");
  258. }
  259. list = map.get(invitations, player);
  260. if(list == null || !list.contains(list, p)) {
  261. msg.prefix(player, party_prefix, "This invitation is invalid.");
  262. goto("wait");
  263. }
  264. if(player.isInParty(p)) { //wenn einlader bereits in party
  265. partyid = player.getPartyId(p);
  266. if(map.get(invite_ids, p) == partyid) { //wenn partyid noch die gleiche ist wie bei einladung
  267. party.addPlayer(partyid, player);
  268. player.setPartyRank(player, "Player");
  269. } else {
  270. msg.prefix(player, party_prefix, "This player is already in another party.");
  271. goto("wait");
  272. }
  273. } else {
  274. partyid = map.get(invite_ids, p);
  275. party.setList(partyid, list.new());
  276. party.addPlayer(partyid, p);
  277. party.addPlayer(partyid, player);
  278. player.setPartyRank(p, "Leader");
  279. player.setPartyRank(player, "Player");
  280. msg.prefix(p, party_prefix, "The party was created.");
  281. }
  282. list.clear(list); //Einladungs-Liste von oben
  283. party.sendMessage(partyid, concat("§r", player_name, " joined the party."));
  284. }
  285. goto("wait");
  286. }
  287. if(arg0 == "deny") {
  288. if(size != 2) {
  289. msg.prefix(player, party_prefix, "§5/party deny <player>");
  290. } else {
  291. list = map.get(invitations, player);
  292. if(list != null) {
  293. pname = list.getIndex(args, 1);
  294. p = read.player(pname);
  295. if(p == null) {
  296. msg.prefix(player, party_prefix, "This player is no longer online.");
  297. goto("wait");
  298. }
  299. if(list == null || !list.contains(list, p)) {
  300. msg.prefix(player, party_prefix, "This invitation is invalid.");
  301. goto("wait");
  302. }
  303. index = list.getIndexOf(list, p);
  304. list.remove(list, p);
  305. list2 = map.get(delkeytimes, player);
  306. list.removeIndex(list2, index);
  307. p = read.player(pname);
  308. if(p != null) {
  309. msg.prefix(p, party_prefix, concat("§r", player_name, " has denied your invitation."));
  310. }
  311. msg.prefix(player, party_prefix, concat("Invitation from ", pname, " denied."));
  312. }
  313. }
  314. goto("wait");
  315. }
  316. if(player.isInParty(player)) {
  317. message = concat(pname, " §1| §r", text.concatList(args, " ", 0, list.getSize(args) - 1));
  318. party.sendMessage(player.getPartyId(player), message);
  319. goto("wait");
  320. }
  321. goto("partyhelp");
  322. }
  323. goto("wait");
  324. @deletePartyInvitation
  325. player = list.getIndex(deluuid, 0);
  326. list = map.get(invitations, player);
  327. list2 = map.get(delkeytimes, player);
  328. if(list != null) {
  329. if(list.getSize(list) != 0) {
  330. keytime = list.getIndex(delkeytime, 0);
  331. keytime2 = list.getIndex(list2, 0);
  332. list.remove(delkeytime, keytime);
  333. if(keytime == keytime2) {
  334. index = list.getIndexOf(list2, keytime2);
  335. list.remove(list2, keytime2);
  336. list.removeIndex(list, index);
  337. }
  338. }
  339. }
  340. goto("wait");
  341. function party.kickPlayer(player, reason) {
  342. party_id = player.getPartyId(player);
  343. //Nachrichten
  344. p_name = player.getName(player);
  345. if(reason == "kick") {
  346. message = concat("§r", p_name, " has been kicked out of the party.");
  347. } else {
  348. message = concat("§r", p_name, " has left the party.");
  349. }
  350. party.sendMessage(party_id, message);
  351. //aus Partyliste entfernen
  352. list = party.getList(party_id);
  353. list.remove(list, player.getUuid(player));
  354. //ID und Rang entfernen
  355. rank = player.getPartyRank(player);
  356. player.delPartyRank(player);
  357. player.delPartyId(player);
  358. //Einladungen löschen
  359. map.remove($invitations, player);
  360. map.remove($delkeytimes, player);
  361. //Wenn Party keine zwei Spieler mehr hat, dann Party auflösen
  362. if(list.getSize(list) < 2) {
  363. party.delete(party_id);
  364. return;
  365. }
  366. //Wenn Spieler Partyleiter war, neuen Partyleiter ernennen
  367. if(rank == "Leader") {
  368. new_player = player.get(list.getIndex(list, 0));
  369. player.setPartyRank(new_player, "Leader");
  370. party.sendMessage(party_id, concat("§r", player.getName(new_player), " is now Leader."));
  371. }
  372. }
  373. function party.sendMessage(party_id, message) {
  374. iter = list.iterator(party.getList(party_id));
  375. while(hasNext(iter)) {
  376. msg.prefix(player.get(next(iter)), $party_prefix, message);
  377. }
  378. }
  379. function party.delete(party_id) {
  380. party.sendMessage(party_id, "Party disbanded.");
  381. iter = list.iterator(party.getList(party_id));
  382. while(hasNext(iter)) {
  383. player = player.get(next(iter));
  384. player.delPartyRank(player);
  385. player.delPartyId(player);
  386. }
  387. }