event.load("custom_command"); event.load("player_logout"); setScriptVar("party_ids", map.new()); //Player, partyid setScriptVar("party_lists", map.new()); //partyid, Liste mit Players aller Partymitglieder setScriptVar("party_ranks", map.new()); //Player, "leader"/"mod"/"player" delkeytime = list.new(); //Alle Zeitpunkte zum Löschen der Einladungen (Vergleichsliste) delkeytimes = map.new(); //Player, Liste mit Zeitpunkten zum Löschen der Einladungen deluuid = list.new(); //Alle Player zum Löschen der Einladungen invitations = map.new(); //Player, Liste mit Player aller Einlader invite_ids = map.new(); //Player, partyid partycounter = 0; party_prefix = "§5Party"; msg("dev", "§bPartysystem §rwurde geladen"); @wait wait(); ignoreGoto(event); goto("wait"); @player_logout if(player.isInParty(player)) { party.kickPlayer(player, "logout"); } goto("wait"); @custom_command if(command == "party") { size = list.getSize(args); if(size == 0) { @partyhelp speakPrefix(player, party_prefix, "§r/party ..."); msg(player, "§5 - invite §rInvite a player"); msg(player, "§5 - accept §rAccept an invitation"); msg(player, "§5 - deny §rDeny an invitation"); msg(player, "§5 - kick §rKick a player"); msg(player, "§5 - leave §rLeave the party"); msg(player, "§5 - promote §rPromote a player"); msg(player, "§5 - demote §rDemote a player"); msg(player, "§5 - disband §rDisband a party"); msg(player, "§5 - list §rParty information"); msg(player, "§5 - §rSends a party message"); goto("wait"); } arg0 = list.getIndex(args, 0); if(arg0 == "list") { if(size != 1) { speakPrefix(player, party_prefix, "§5/party list"); } else { if(!player.isInParty(player)) { speakPrefix(player, party_prefix, "You are not in a party."); goto("wait"); } list = party.getList(player.getPartyId(player)); table = table.new("§5", 13, 7); msg(player, table.getStart(table)); msg(player, table.get(table, "§lName", "§lRole")); msg(player, table.getMiddle(table)); iter = list.iterator(list); while(hasNext(iter)) { p = player.get(next(iter)); msg(player, table.get(table, player.getName(p), player.getPartyRank(p))); } msg(player, table.getEnd(table)); } goto("wait"); } if(arg0 == "leave") { if(size != 1) { speakPrefix(player, party_prefix, "§5/party leave"); } else { if(!player.isInParty(player)) { speakPrefix(player, party_prefix, "You are not in a party."); goto("wait"); } party.kickPlayer(player, "leave"); } goto("wait"); } if(arg0 == "disband") { if(size != 1) { speakPrefix(player, party_prefix, "§5/party disband"); } else { if(!player.isInParty(player)) { speakPrefix(player, party_prefix, "You are not in a party."); goto("wait"); } if(!player.isPartyLeader(player)) { speakPrefix(player, party_prefix, "You are not the party leader."); goto("wait"); } party.delete(player.getPartyId(player)); } goto("wait"); } if(arg0 == "kick") { if(size != 2) { speakPrefix(player, party_prefix, "§5/party kick "); } else { if(!player.isInParty(player)) { speakPrefix(player, party_prefix, "You are not in a party."); goto("wait"); } if(!player.isPartyLeaderOrMod(player)) { speakPrefix(player, party_prefix, "You are not leader or moderator of the party."); goto("wait"); } pname = list.getIndex(args, 1); if(!checkIfEverOnline(pname)) { speakPrefix(player, party_prefix, "This player has never been online."); goto("wait"); } p = read.player(pname); if(p == null) { speakPrefix(player, party_prefix, "This player is not online."); goto("wait"); } if(player == p) { speakPrefix(player, party_prefix, "You can´t apply that to yourself."); goto("wait"); } if(!party.same(p, player)) { speakPrefix(player, party_prefix, "This player is not in your party."); goto("wait"); } ownrank = player.getPartyRank(player); if(ownrank == "Moderator") { if(player.isPartyLeaderOrMod(p)) { speakPrefix(player, party_prefix, "§rDu darfst diesen Spieler nicht kicken"); goto("wait"); } } party.kickPlayer(p, "kick"); } goto("wait"); } if(arg0 == "promote" || arg0 == "demote") { if(size != 2) { speakPrefix(player, party_prefix, concat("§5/party ", arg0, " ")); } else { pname = list.getIndex(args, 1); if(!player.isInParty(player)) { speakPrefix(player, party_prefix, "You are not in a party."); goto("wait"); } if(!player.isPartyLeader(player)) { speakPrefix(player, party_prefix, "You are not the party leader."); goto("wait"); } if(!checkIfEverOnline(pname)) { speakPrefix(player, party_prefix, "This player has never been online."); goto("wait"); } p = read.player(pname); if(p == null) { speakPrefix(player, party_prefix, "This player is not online."); goto("wait"); } if(player == p) { speakPrefix(player, party_prefix, "You can´t apply that to yourself."); goto("wait"); } if(!party.same(p, player)) { speakPrefix(player, party_prefix, "This player is not in your party."); goto("wait"); } partyid = player.getPartyId(player); rank = player.getPartyRank(p); if(arg0 == "promote") { if(rank == "Player") { player.setPartyRank(p, "Moderator"); party.sendMessage(partyid, concat("§r", pname, " is now Moderator.")); } elseif(rank == "Moderator") { player.setPartyRank(p, "Leader"); player.setPartyRank(player, "Moderator"); //Ex-Leader degradieren party.sendMessage(partyid, concat("§r", pname, " is now Leader.")); } } elseif(arg0 == "demote") { if(rank == "Moderator") { player.setPartyRank(p, "Player"); party.sendMessage(partyid, concat("§r", pname, " is no longer Moderator.")); } else { speakPrefix(player, party_prefix, "This player cannot be demoted."); } } } goto("wait"); } if(arg0 == "invite") { if(size != 2) { speakPrefix(player, party_prefix, "§5/party invite "); } else { if(!player.isInParty(player)) { //wenn nicht in party if(map.contains(invite_ids, player)) { //wenn id noch nicht zugewiesen partycounter++; } } pname = list.getIndex(args, 1); if(!checkIfEverOnline(pname)) { speakPrefix(player, party_prefix, "This player has never been online."); goto("wait"); } p = read.player(pname); if(p == null) { speakPrefix(player, party_prefix, "This player is not online."); goto("wait"); } if(player == p) { speakPrefix(player, party_prefix, "You can´t apply that to yourself."); goto("wait"); } if(player.isInParty(player)) { if(!player.isPartyLeaderOrMod(player)) { speakPrefix(player, party_prefix, "You are not leader or moderator of the party."); goto("wait"); } } if(player.isInParty(p)) { speakPrefix(player, party_prefix, "This player is already in your party."); goto("wait"); } list = map.get(invitations, p); if(list == null) { list = list.new(); map.add(invitations, p, list); } if(list.contains(list, player)) { speakPrefix(player, party_prefix, "This player already has an invitation from you."); goto("wait"); } list.add(list, player); list.add(deluuid, player); list.add(delkeytime, time.getMillis()); map.add(delkeytimes, p, list.new()); list = map.get(delkeytimes, p); list.add(list, time.getMillis()); map.add(invite_ids, player, partycounter); speakPrefix(player, party_prefix, "Invitation sent."); speakPrefix(p, party_prefix, concat(player_name, " invites you to a party.")); msg(p, " §5=> §rAccept ? ", text.click("[§aYes§r] ", concat("/party accept ", player_name)), text.click("[§cNo§r]", concat("/party deny ", player_name))); sgoto(1200, "deletePartyInvitation"); //Einladung bleibt 1 Minute lang erhalten } goto("wait"); } if(arg0 == "accept") { if(size != 2) { speakPrefix(player, party_prefix, "§5/party accept "); } else { if(player.isInParty(player)) { speakPrefix(player, party_prefix, "You are already in a party."); goto("wait"); } pname = list.getIndex(args, 1); if(!checkIfEverOnline(pname)) { speakPrefix(player, party_prefix, "This player has never been online."); goto("wait"); } p = read.player(pname); if(p == null) { speakPrefix(player, party_prefix, "This player is no longer online."); goto("wait"); } list = map.get(invitations, player); if(list == null || !list.contains(list, p)) { speakPrefix(player, party_prefix, "This invitation is invalid."); goto("wait"); } if(player.isInParty(p)) { //wenn einlader bereits in party partyid = player.getPartyId(p); if(map.get(invite_ids, p) == partyid) { //wenn partyid noch die gleiche ist wie bei einladung party.addPlayer(partyid, player); player.setPartyRank(player, "Player"); } else { speakPrefix(player, party_prefix, "This player is already in another party."); goto("wait"); } } else { partyid = map.get(invite_ids, p); party.setList(partyid, list.new()); party.addPlayer(partyid, p); party.addPlayer(partyid, player); player.setPartyRank(p, "Leader"); player.setPartyRank(player, "Player"); speakPrefix(p, party_prefix, "The party was created."); } list.clear(list); //Einladungs-Liste von oben party.sendMessage(partyid, concat("§r", player_name, " joined the party.")); } goto("wait"); } if(arg0 == "deny") { if(size != 2) { speakPrefix(player, party_prefix, "§5/party deny "); } else { list = map.get(invitations, player); if(list != null) { pname = list.getIndex(args, 1); p = read.player(pname); if(p == null) { speakPrefix(player, party_prefix, "This player is no longer online."); goto("wait"); } if(list == null || !list.contains(list, p)) { speakPrefix(player, party_prefix, "This invitation is invalid."); goto("wait"); } index = list.getIndexOf(list, p); list.remove(list, p); list2 = map.get(delkeytimes, player); list.removeIndex(list2, index); p = read.player(pname); if(p != null) { speakPrefix(p, party_prefix, concat("§r", player_name, " has denied your invitation.")); } speakPrefix(player, party_prefix, concat("Invitation from ", pname, " denied.")); } } goto("wait"); } if(player.isInParty(player)) { message = concat(pname, " §1| §r", text.concatList(args, " ", 0, list.getSize(args) - 1)); party.sendMessage(player.getPartyId(player), message); goto("wait"); } goto("partyhelp"); } goto("wait"); @deletePartyInvitation player = list.getIndex(deluuid, 0); list = map.get(invitations, player); list2 = map.get(delkeytimes, player); if(list != null) { if(list.getSize(list) != 0) { keytime = list.getIndex(delkeytime, 0); keytime2 = list.getIndex(list2, 0); list.remove(delkeytime, keytime); if(keytime == keytime2) { index = list.getIndexOf(list2, keytime2); list.remove(list2, keytime2); list.removeIndex(list, index); } } } goto("wait"); function party.kickPlayer(player, reason) { party_id = player.getPartyId(player); //Nachrichten p_name = player.getName(player); if(reason == "kick") { message = concat("§r", p_name, " has been kicked out of the party."); } else { message = concat("§r", p_name, " has left the party."); } party.sendMessage(party_id, message); //aus Partyliste entfernen list = party.getList(party_id); list.remove(list, player.getUuid(player)); //ID und Rang entfernen rank = player.getPartyRank(player); player.delPartyRank(player); player.delPartyId(player); //Einladungen löschen map.remove($invitations, player); map.remove($delkeytimes, player); //Wenn Party keine zwei Spieler mehr hat, dann Party auflösen if(list.getSize(list) < 2) { party.delete(party_id); return; } //Wenn Spieler Partyleiter war, neuen Partyleiter ernennen if(rank == "Leader") { new_player = player.get(list.getIndex(list, 0)); player.setPartyRank(new_player, "Leader"); party.sendMessage(party_id, concat("§r", player.getName(new_player), " is now Leader.")); } } function party.sendMessage(party_id, message) { iter = list.iterator(party.getList(party_id)); while(hasNext(iter)) { speakPrefix(player.get(next(iter)), $party_prefix, message); } } function party.delete(party_id) { party.sendMessage(party_id, "Party disbanded."); iter = list.iterator(party.getList(party_id)); while(hasNext(iter)) { player = player.get(next(iter)); player.delPartyRank(player); player.delPartyId(player); } }