123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- 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[ticketid][helpneeder][message][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 <message> §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 <message>");
- 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);
- if(doesTickets(player)) {
- iter = iterator(tickets);
- while(hasNext(iter)) {
- ticket = next(iter);
- if(ticket.isSupporter(ticket, player)) {
- ticket.release(ticket, player);
- }
- }
- }
- //No iterator here, otherwise concurrent modification
- for(i = 0; i < list.getSize(tickets); i++) {
- ticket = list.getIndex(tickets, i);
- if(ticket.isHelpNeeder(ticket, player)) {
- 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;
- }
|