event.load("custom_command"); event.load("player_quit"); prefix = "§2Ticket"; pling_sound = sound.get("block.note_block.pling"); sound_category_ambient = sound.getCategory("AMBIENT"); tickets = list.new(); //List with ticket-arrays: ticket[0:ticketid, 1:helpneeder, 2:message, 3:supporter] ticketcounter = 0; msg.string("dev", "§bTickets §rloaded."); @wait wait(); ignoreGoto(event); goto("wait"); @custom_command if(!isPlayer(sender)) { goto("wait"); } player = sender; if(command == "support") { if(player.isMuted(player)) { msg.prefix(player, prefix, "You are muted."); goto("wait"); } if(!isTicketSupOnline()) { msg.prefix(player, prefix, "There is no supporter available."); goto("wait"); } size = list.getSize(args); if(size == 0) { ticket = ticket.create(player, "-"); } else { message = string.concatList(args, " ", 0, size - 1); ticket = ticket.create(player, message); } msg.prefix(player, prefix, string.concat("Ticket §a#", string.number(ticket.getId(ticket)), " §rcreated.")); informSuppsAboutNew(ticket); goto("wait"); } if(command == "ticket") { size = list.getSize(args); if(size == 0) { @tickethelp msg.prefix(player, prefix, "/ticket..."); msg.string(player, "§2 - list §rShows all tickets"); msg.string(player, "§2 - get [id] §rTakes care of a ticket"); msg.string(player, "§2 - finish §rFinishes a ticket"); msg.string(player, "§2 - release §rReleases a ticket"); msg.string(player, "§2 - note §rSets a note"); goto("wait"); } arg0 = string.toLowerCase(list.getIndex(args, 0)); if(arg0 == "list") { if(size != 1) { msg.prefix(player, prefix, "/ticket list"); goto("wait"); } amount = list.getSize(tickets); if(amount == 0) { msg.prefix(player, prefix, "There are no tickets."); goto("wait"); } msg.string(player, "§2--------------------------"); msg.prefix(player, prefix, "Processing tickets:"); msg.string(player, ""); list = ticket.getProcessing(); iter = iterator(list); while(hasNext(iter)) { ticket = next(iter); ticket_id = string.number(ticket.getId(ticket)); p_name = player.getNameFromId(ticket.getHelpNeeder(ticket)); supporter = player.getNameFromId(ticket.getSupporter(ticket)); message = ticket.getMessage(ticket); msg.string(player, string.concat("§2 - §r", ticket_id, " §a", p_name, "§r by ", supporter, " §7| §r", message)); } msg.string(player, "§2--------------------------"); msg.prefix(player, prefix, "Outstanding tickets:"); msg.string(player, ""); list = ticket.getOutstanding(); iter = iterator(list); while(hasNext(iter)) { ticket = next(iter); ticket.print(ticket, player); } msg.string(player, "§2--------------------------"); goto("wait"); } if(arg0 == "get") { if(size < 1 || size > 2) { msg.prefix(player, prefix, "/ticket get [id]"); goto("wait"); } if(ticket.getFromSupporter(player) != null) { msg.prefix(player, prefix, "You already support a ticket."); goto("wait"); } if(size == 1) { if(ticket.getOutstandingAmount() == 0) { msg.prefix(player, prefix, "There are no outstanding tickets."); goto("wait"); } ticket = ticket.getNextOutstanding(); } else { ticket_id = list.getIndex(args, 1); if(!isDouble(ticket_id)) { msg.prefix(player, prefix, "Number expected."); goto("wait"); } ticket = ticket.getFromID(ticket_id); if(ticket == null) { msg.prefix(player, prefix, "Not an existing ticket."); goto("wait"); } supporter_id = ticket.getSupporter(ticket); if(supporter_id != null) { msg.prefix(player, prefix, "Another supporter already supports this ticket."); goto("wait"); } } ticket.setSupporter(ticket, player); p_name = player.getNameFromId(ticket.getHelpNeeder(ticket)); p = read.player(p_name); ticket_id = string.number(ticket.getId(ticket)); msg.prefix(p, prefix, string.concat("Ticket §a#", ticket_id, "§r is in process: §a", player.getName(player))); msg.prefix(player, prefix, "You take care of the ticket:"); ticket.print(ticket, player); goto("wait"); } if(arg0 == "finish") { if(size != 1) { msg.prefix(player, prefix, "/ticket finish"); goto("wait"); } ticket = ticket.getFromSupporter(player); if(ticket == null) { msg.prefix(player, prefix, "You support no ticket."); goto("wait"); } ticket.stop(ticket); name = player.getNameFromId(ticket.getHelpNeeder(ticket)); msg.prefix(read.player(name), prefix, "Your ticket was finished."); msg.prefix(player, prefix, "You finished the ticket."); goto("wait"); } if(arg0 == "note") { if(size < 2) { msg.prefix(player, prefix, "/ticket note "); goto("wait"); } ticket = ticket.getFromSupporter(player); if(ticket == null) { msg.prefix(player, prefix, "You support no ticket."); goto("wait"); } message = string.concatList(args, " ", 1, size - 1); ticket.setMessage(ticket, message); msg.prefix(player, prefix, "Note set."); goto("wait"); } if(arg0 == "release") { if(size != 1) { msg.prefix(player, prefix, "/ticket release"); goto("wait"); } ticket = ticket.getFromSupporter(player); if(ticket == null) { msg.prefix(player, prefix, "You support no ticket."); goto("wait"); } ticket.release(ticket, player); goto("wait"); } goto("tickethelp"); } goto("wait"); @player_quit player_id = player.getId(player); // on player quit release tickets from supporters if(doesTickets(player)) { iter = iterator(tickets); while(hasNext(iter)) { ticket = next(iter); if(ticket.isSupporter(ticket, player)) { ticket.release(ticket, player); } } } // on player quit stop tickets from players helper_list = list.new(); for(i = 0; i < list.getSize(tickets); i++) { ticket = list.getIndex(tickets, i); if(ticket.isHelpNeeder(ticket, player)) { list.add(helper_list, ticket); } } iter = iterator(helper_list); while(hasNext(iter)) { ticket = next(iter); ticket.stop(ticket); } goto("wait"); function ticket.print(ticket, player) { ticket_id = string.number(ticket.getId(ticket)); p_name = player.getNameFromId(ticket.getHelpNeeder(ticket)); message = ticket.getMessage(ticket); msg.string(player, string.concat("§2 - §r", ticket_id, " §a", p_name, " §7| §r", message)); } function ticket.getProcessing() { list = list.new(); iter = iterator($tickets); while(hasNext(iter)) { ticket = next(iter); if(ticket.getSupporter(ticket) != null) { list.add(list, ticket); } } return list; } function ticket.getProcessingAmount() { return list.getSize(ticket.getProcessing()); } function ticket.getOutstanding() { list = list.new(); iter = iterator($tickets); while(hasNext(iter)) { ticket = next(iter); if(ticket.getSupporter(ticket) == null) { list.add(list, ticket); } } return list; } function ticket.getOutstandingAmount() { return list.getSize(ticket.getOutstanding()); } function ticket.getNextOutstanding() { iter = iterator($tickets); while(hasNext(iter)) { t = next(iter); if(ticket.getSupporter(t) == null) { return t; } } return null; } function ticket.isSupporter(ticket, player) { return ticket.getSupporter(ticket) == player.getId(player); } function ticket.isHelpNeeder(ticket, player) { return ticket.getHelpNeeder(ticket) == player.getId(player); } function doesTickets(player) { return perm.has("ticket", player) && !perm.has("notickets", player); } function getAvailableTicketSups() { online = players.toList(); iter = iterator(online); supporters = list.new(); while(hasNext(iter)) { p = next(iter); if(doesTickets(p)) { list.add(supporters, p); } } return supporters; } function ticket.create(player, message) { $ticketcounter++; ticket = array.new(4); ticket[0] = player.getId(player); ticket[1] = message; ticket[3] = $ticketcounter; list.add($tickets, ticket); return ticket; } function ticket.release(ticket, supporter) { player_id = ticket.getHelpNeeder(ticket); p = read.player(player.getNameFromId(player_id)); ticket_id = string.number(ticket.getId(ticket)); msg.prefix(p, $prefix, string.concat("Ticket §a#", ticket_id, "§r is queued.")); ticket.setSupporter(ticket, null); //Inform supports supporters = getAvailableTicketSups(); iter = iterator(supporters); while(hasNext(iter)) { p = next(iter); msg.prefix(p, $prefix, string.concat("Ticket released by §a", player.getName(supporter), "§r:")); ticket.print(ticket, p); sound.spawnForPlayer(p, $pling_sound, $sound_category_ambient); } } function informSuppsAboutNew(ticket) { supporters = getAvailableTicketSups(); iter = iterator(supporters); while(hasNext(iter)) { p = next(iter); msg.prefix(p, $prefix, "New ticket:"); ticket.print(ticket, p); sound.spawnForPlayer(p, $pling_sound, $sound_category_ambient); } } function isTicketSupOnline() { return list.getSize(getAvailableTicketSups()) != 0; } function ticket.stop(ticket) { list.remove($tickets, ticket); } function ticket.getHelpNeeder(ticket) { return ticket[0]; } function ticket.getMessage(ticket) { return ticket[1]; } function ticket.setMessage(ticket, message) { ticket[1] = message; } function ticket.getSupporter(ticket) { return ticket[2]; } function ticket.getId(ticket) { return ticket[3]; } function ticket.setSupporter(ticket, player) { if(player == null) { ticket[2] = null; } else { ticket[2] = player.getId(player); } } function ticket.getFromID(ticket_id) { iter = iterator($tickets); while(hasNext(iter)) { t = next(iter); if(ticket.getId(t) == ticket_id) { return t; } } return null; } function ticket.getFromSupporter(player) { iter = iterator($tickets); while(hasNext(iter)) { t = next(iter); if(ticket.isSupporter(t, player)) { return t; } } return null; }