Browse Source

ticketsystem refactored

Marvin Löschenkohl 3 years ago
parent
commit
556333da90
5 changed files with 794 additions and 281 deletions
  1. 1 1
      startscript.txt
  2. 8 8
      system/commands.txt
  3. 538 0
      system/tickets.txt
  4. 242 269
      system/ticketsystem.txt
  5. 5 3
      utils/u_general.txt

+ 1 - 1
startscript.txt

@@ -17,7 +17,7 @@ script.startNamed("Playtime", "system/playtime");
 script.startNamed("Pumpkin", "system/pumpkin", "utils/u_general");
 script.startNamed("Voxel", "system/voxel");
 script.startNamed("Sitting", "system/sitting", "utils/u_general");
-script.startNamed("Ticket", "system/ticketsystem", "utils/u_general");
+script.startNamed("Ticket", "system/tickets", "utils/u_general");
 script.startNamed("Mails", "system/mailsystem", "utils/u_general");
 script.startNamed("Shops", "system/chestshops", "utils/u_general");
 script.startNamed("Survival", "system/survival", "utils/u_general");

+ 8 - 8
system/commands.txt

@@ -1231,14 +1231,14 @@ if(arg0 == "add") {
 			friend.add(player_id, friend_id);
 			map.remove(friend_requests, friend_id);
 			msg.prefix(player, prefix_friends, concat("§7", friend_name, "§r is your friend now."));
-			player.sendMessage(player, friend_name, prefix_friends, concat("§7", player_name, "§r is your friend now."), true);
+			msg.send(player, friend_name, prefix_friends, concat("§7", player_name, "§r is your friend now."), true);
 			goto("wait");
 		}
 	}
 	map.add(friend_requests, player_id, friend_id); //Einlader, Eingeladener
 	friend = read.player(friend_name);
 	msg.prefix(player, prefix_friends, concat("You sent an invitation to §7", friend_name, "§r."));
-	player.sendMessage(player, friend_name, prefix_friends, concat("§7", player_name, "§r wants to be your friend."), true);
+	msg.send(player, friend_name, prefix_friends, concat("§7", player_name, "§r wants to be your friend."), true);
 	if(friend != null) {
 		msg(friend, text.click("§r[§aAccept§r]", concat("/friend add ", player_name)));
 	}
@@ -1262,7 +1262,7 @@ if(arg0 == "remove") {
 	}
 	friend.delete(player_id, friend_id);
 	msg.prefix(player, prefix_friends, concat("§7", friend_name, "§r is no longer your friend."));
-	player.sendMessage(player, friend_name, prefix_friends, concat("§7", player_name, "§r is no longer your friend."), true);
+	msg.send(player, friend_name, prefix_friends, concat("§7", player_name, "§r is no longer your friend."), true);
 	goto("wait");
 }
 if(arg0 == "list") {
@@ -2470,7 +2470,7 @@ elseif(arg0 == "ticket") {
 	if(script != null) {
 		script.term(script);
 	}
-	script.startNamed("Ticket", "system/ticketsystem", "utils/u_general");
+	script.startNamed("Ticket", "system/tickets", "utils/u_general");
 }
 elseif(arg0 == "story") {
 	script = script.get("Story");
@@ -8159,12 +8159,12 @@ function setCommandHelps() {
 	helpArg0 = command.newHelpLiteral("get");
 	command.addHelpChild(helpArg0, command.newHelpInt("ticket-id", 1, 1000, "isSupporter"));
 	command.addHelpChild(help, helpArg0);
-	//ticket end <ticket-id>
-	helpArg0 = command.newHelpLiteral("end");
+	//ticket finish <ticket-id>
+	helpArg0 = command.newHelpLiteral("finish");
 	command.addHelpChild(helpArg0, command.newHelpInt("ticket-id", 1, 1000, "isSupporter"));
 	command.addHelpChild(help, helpArg0);
-	//ticket free <ticket-id>
-	helpArg0 = command.newHelpLiteral("free");
+	//ticket release <ticket-id>
+	helpArg0 = command.newHelpLiteral("release");
 	command.addHelpChild(helpArg0, command.newHelpInt("ticket-id", 1, 1000, "isSupporter"));
 	command.addHelpChild(help, helpArg0);
 	//ticket report <ticket-id>

+ 538 - 0
system/tickets.txt

@@ -0,0 +1,538 @@
+event.load("custom_command");
+event.load("player_logout");
+prefix = "§2Ticket";
+pling_sound = sound.get("minecraft: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("dev", "§bTickets §rloaded.");
+@wait
+wait();
+ignoreGoto(event);
+goto("wait");
+
+@custom_command
+if(command == "ticket") {
+	size = list.getSize(args);
+	if(size == 0) {
+		@tickethelp
+		msg(player, "§2Ticket §r/ticket...");
+		msg(player, "§2 - new <message> §rCreate a ticket");
+		msg(player, "§2 - stop [id] §rCancel your ticket");
+		if(isSupporter(player)) {
+			msg(player, "§2 - list §rShows all tickets");
+			msg(player, "§2 - get [id] §rTake care of a ticket");
+			msg(player, "§2 - finish [id] §rFinish a ticket");
+			msg(player, "§2 - release [id] §rRelease a ticket for the next supporter");
+			msg(player, "§2 - report [id] §rReport a ticket to marvinius");
+		}
+		goto("wait");
+	}
+	arg0 = text.toLowerCase(list.getIndex(args, 0));
+	if(arg0 == "list") {
+		if(size != 1) {
+			msg.prefix(player, prefix, "/ticket list");
+			goto("wait");
+		}
+		if(!isSupporter(player)) {
+			msg.prefix(player, prefix, "You are not a supporter.");
+			goto("wait");
+		}
+		amount = list.getSize(tickets);
+		if(amount == 0) {
+			msg.prefix(player, prefix, "There are no tickets.");
+			goto("wait");
+		}
+		if(ticket.getProcessingAmount() == 0) {
+			msg.prefix(player, prefix, "There are no processing tickets.");
+		} else {
+			msg.prefix(player, prefix, "Processing tickets:");
+			msg(player, "§2--------------------------");
+			list = ticket.getProcessing();
+			iter = list.iterator(list);
+			while(hasNext(iter)) {
+				ticket = next(iter);
+				msg(player, concat("§2 - §rID: §a", text.number(ticket.getId(ticket))));
+				msg(player, concat("§2 - §rPlayer: §a", player.getNameFromId(ticket.getHelpNeeder(ticket))));
+				msg(player, concat("§2 - §rSupporter: §a", player.getNameFromId(ticket.getSupporter(ticket))));
+				msg(player, concat("§2 - §rMessage: §a", ticket.getMessage(ticket)));
+				msg(player, "§2--------------------------");
+			}
+		}
+		if(ticket.getOutstandingAmount() == 0) {
+			msg.prefix(player, prefix, "There are no outstanding tickets.");
+		} else {
+			msg.prefix(player, prefix, "Outstanding tickets:");
+			msg(player, "§2--------------------------");
+			list = ticket.getOutstanding();
+			iter = list.iterator(list);
+			while(hasNext(iter)) {
+				ticket = next(iter);
+				msg(player, concat("§2 - §rID: §a", text.number(ticket.getId(ticket))));
+				msg(player, concat("§2 - §rPlayer: §a", player.getNameFromId(ticket.getHelpNeeder(ticket))));
+				msg(player, concat("§2 - §rMessage: §a", ticket.getMessage(ticket)));
+				msg(player, "§2--------------------------");
+			}
+		}
+		goto("wait");
+	}
+	if(arg0 == "get") {
+		if(size < 1 || size > 2) {
+			msg.prefix(player, prefix, "/ticket get [id]");
+			goto("wait");
+		}
+		if(!isSupporter(player)) {
+			msg.prefix(player, prefix, "You are not a supporter.");
+			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 supports this ticket.");
+				goto("wait");
+			}
+		}
+		message = ticket.getMessage(ticket);
+		ticket.setSupporter(ticket, player);
+		p_name = player.getNameFromId(ticket.getHelpNeeder(ticket));
+		p = read.player(p_name);
+		msg.prefix(p, prefix, "Your ticket is in process:");
+		msg(p, concat("§2 - §rSupporter: §a", player.getName(player)));
+		msg(p, concat("§2 - §rYour message: §a", message));
+		msg.prefix(player, prefix, "You take care of the ticket:");
+		msg(player, concat("§2 - §rID: §a", text.number(ticket.getId(ticket))));
+		msg(player, concat("§2 - §rPlayer: §a", p_name));
+		msg(player, concat("§2 - §rMessage: §a", message));
+		goto("wait");
+	}
+	if(arg0 == "finish") {
+		if(size < 1 || size > 2) {
+			msg.prefix(player, prefix, "/ticket finish [id]");
+			goto("wait");
+		}
+		if(!isSupporter(player)) {
+			msg.prefix(player, prefix, "You are not a supporter.");
+			goto("wait");
+		}
+		if(size == 1) {
+			if(ticket.getAmountFromSupporter(player) > 1) {
+				msg.prefix(player, prefix, "You support more than one ticket.");
+				goto("wait");
+			}
+			ticket = ticket.getFromSupporter(player);
+			if(ticket == null) {
+				msg.prefix(player, prefix, "You support no tickets.");
+				goto("wait");
+			}
+		} else {
+			ticketid = list.getIndex(args, 1);
+			if(!isDouble(ticketid)) {
+				msg.prefix(player, prefix, "Number expected.");
+				goto("wait");
+			}
+			ticket = ticket.getFromID(ticketid);
+			if(ticket == null) {
+				msg.prefix(player, prefix, "Not an existing ticket.");
+				goto("wait");
+			}
+		}
+		if(!ticket.isSupporter(ticket, player)) {
+			msg.prefix(player, prefix, "Another supporter supports this ticket.");
+			goto("wait");
+		}
+		ticket.stop(ticket);
+		name = player.getNameFromId(ticket.getHelpNeeder(ticket));
+		msg.send(null, name, prefix, "Your ticket was finished.", false);
+		msg.prefix(player, prefix, "You finished the ticket.");
+		goto("wait");
+	}
+	if(arg0 == "release") {
+		if(size < 1 || size > 2) {
+			msg.prefix(player, prefix, "/ticket release [id]");
+			goto("wait");
+		}
+		if(!isSupporter(player)) {
+			msg.prefix(player, prefix, "You are not a supporter.");
+			goto("wait");
+		}
+		if(size == 1) {
+			if(ticket.getAmountFromSupporter(player) > 1) {
+				msg.prefix(player, prefix, "You support more than one ticket.");
+				goto("wait");
+			}
+			ticket = ticket.getFromSupporter(player);
+			if(ticket == null) {
+				msg.prefix(player, prefix, "You support no tickets.");
+				goto("wait");
+			}
+		} else {
+			ticketid = list.getIndex(args, 1);
+			if(!isDouble(ticketid)) {
+				msg.prefix(player, prefix, "Number expected.");
+				goto("wait");
+			}
+			ticket = ticket.getFromID(ticketid);
+			if(ticket == null) {
+				msg.prefix(player, prefix, "Not an existing ticket.");
+				goto("wait");
+			}
+		}
+		if(!ticket.isSupporter(ticket, player)) {
+			msg.prefix(player, prefix, "Another supporter supports this ticket.");
+			goto("wait");
+		}
+		ticket.release(ticket, player);
+		goto("wait");
+	}
+	if(arg0 == "report") {
+		if(size < 1 || size > 2) {
+			msg.prefix(player, prefix, "/ticket report [id]");
+			goto("wait");
+		}
+		if(!isSupporter(player)) {
+			msg.prefix(player, prefix, "You are not a supporter.");
+			goto("wait");
+		}
+		if(size == 1) {
+			if(ticket.getAmountFromSupporter(player) > 1) {
+				msg.prefix(player, prefix, "You support more than one ticket.");
+				goto("wait");
+			}
+			ticket = ticket.getFromSupporter(player);
+			if(ticket == null) {
+				msg.prefix(player, prefix, "You support no tickets.");
+				goto("wait");
+			}
+		} else {
+			ticketid = list.getIndex(args, 1);
+			if(!isDouble(ticketid)) {
+				msg.prefix(player, prefix, "Number expected.");
+				goto("wait");
+			}
+			ticket = ticket.getFromID(ticketid);
+			if(ticket == null) {
+				msg.prefix(player, prefix, "Not an existing ticket.");
+				goto("wait");
+			}
+		}
+		if(!ticket.isSupporter(ticket, player)) {
+			msg.prefix(player, prefix, "Another supporter supports this ticket.");
+			goto("wait");
+		}
+		ticket.report(ticket, player);
+		name = player.getNameFromId(ticket.getHelpNeeder(ticket));
+		msg.send(null, name, prefix, "Your ticket got reported.", false);
+		msg.prefix(player, prefix, "You reported the ticket.");
+		goto("wait");
+	}
+	if(arg0 == "stop") {
+		if(size < 1 || size > 2) {
+			msg.prefix(player, prefix, "/ticket stop [id]");
+			goto("wait");
+		}
+		if(size == 1) {
+			if(ticket.getAmountFromHelpNeeder(player) > 1) {
+				msg.prefix(player, prefix, "You have more than one ticket.");
+				goto("wait");
+			}
+			ticket = ticket.getFromHelpNeeder(player);
+			if(ticket == null) {
+				msg.prefix(player, prefix, "You have no tickets.");
+				goto("wait");
+			}
+		} else {
+			ticketid = list.getIndex(args, 1);
+			if(!isDouble(ticketid)) {
+				msg.prefix(player, prefix, "Number expected.");
+				goto("wait");
+			}
+			ticket = ticket.getFromID(ticketid);
+			if(ticket == null) {
+				msg.prefix(player, prefix, "Not an existing ticket.");
+				goto("wait");
+			}
+			if(!hasTicketCreated(player, ticket)) {
+				msg.prefix(player, prefix, "Not your ticket.");
+				goto("wait");
+			}
+		}
+		if(ticket.stop(ticket)) {
+			msg.prefix(player, prefix, "Stopped your ticket.");
+			supporter_id = ticket.getSupporter(ticket);
+			if(supporter_id != null) {
+				msg.send(null, player.getNameFromId(supporter_id), prefix, concat("The ticket from ", player.getName(player), " was stopped."), false);
+			}
+		}
+		goto("wait");
+	}
+	if(arg0 == "new") {
+		if(size < 2) {
+			msg.prefix(player, prefix, "/ticket new <message>");
+			goto("wait");
+		}
+		
+		supporters = getAvailableSupporters();
+		if(list.getSize(supporters) == 0) {
+			msg.prefix(player, prefix, "There is no supporter available.");
+			goto("wait");
+		}
+		message = text.concatList(args, " ", 1, size - 1);
+		ticket = ticket.create(player, message);
+		msg.prefix(player, prefix, concat("Ticket created (ID: ", text.number(ticket.getId(ticket)), ")."));
+		informSuppsAboutNew(ticket);
+		goto("wait");
+	}
+	goto("tickethelp");
+}
+goto("wait");
+
+@player_logout
+player_id = player.getId(player);
+if(isSupporter(player)) {
+	iter = list.iterator(tickets);
+	while(hasNext(iter)) {
+		ticket = next(iter);
+		if(ticket.isSupporter(ticket, player)) {
+			ticket.release(ticket, player);
+		}
+	}
+}
+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.getProcessing() {
+	list = list.new();
+	iter = list.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 = list.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 = list.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 isSupporter(player) {
+	return perm.has(player, "isSupporter");
+}
+
+function getAvailableSupporters() {
+	online = players.toList();
+	supporters = list.new();
+	for(i = 0; i < list.getSize(online); i++) {
+		p = list.getIndex(online, i);
+		if(isSupporter(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);
+	name = player.getNameFromId(player_id);
+	msg.send(null, name, $prefix, "Your ticket got released, so another supporter can take care of.", false);
+	msg.prefix(supporter, $prefix, "You released the ticket for another supporter.");
+	ticket.setSupporter(ticket, null);
+	informSuppsAboutRelease(ticket, supporter);
+}
+
+function informSuppsAboutNew(ticket) {
+	supporters = getAvailableSupporters();
+	iter = list.iterator(supporters);
+	while(hasNext(iter)) {
+		p = next(iter);
+		msg.prefix(p, $prefix, "New ticket:");
+		msg(p, concat("§2 - §rID: §a", text.number(ticket.getId(ticket))));
+		msg(p, concat("§2 - §rPlayer: §a", player.getNameFromId(ticket.getHelpNeeder(ticket))));
+		msg(p, concat("§2 - §rMessage: §a", ticket.getMessage(ticket)));
+		sound.spawnForPlayer(p, $pling_sound, $sound_category_ambient);
+	}
+}
+
+function informSuppsAboutRelease(ticket, supporter) {
+	supporters = getAvailableSupporters();
+	iter = list.iterator(supporters);
+	while(hasNext(iter)) {
+		p = next(iter);
+		msg.prefix(p, $prefix, "Ticket released:");
+		msg(p, concat("§2 - §rID: §a", text.number(ticket.getId(ticket))));
+		msg(p, concat("§2 - §rPlayer: §a", player.getNameFromId(ticket.getHelpNeeder(ticket))));
+		msg(p, concat("§2 - §rEx-Supporter: §a", player.getName(supporter)));
+		msg(p, concat("§2 - §rMessage: §a", ticket.getMessage(ticket)));
+		sound.spawnForPlayer(p, $pling_sound, $sound_category_ambient);
+	}
+}
+
+function ticket.report(ticket, supporter) {
+	name = player.getNameFromId(ticket.getHelpNeeder(ticket));
+	message = ticket.getMessage(ticket);
+	supporter_name = player.getName(supporter);
+	mail.send(supporter_name, "marvinius", concat("Ticket Report: ", name, " / ", message));
+	ticket.stop(ticket);
+}
+
+function ticket.stop(ticket) {
+	if(!list.contains($tickets, ticket)) {
+		return false;
+	}
+	list.remove($tickets, ticket);
+	return true;
+}
+
+function ticket.getHelpNeeder(ticket) {
+	return ticket[0];
+}
+
+function ticket.getMessage(ticket) {
+	return ticket[1];
+}
+
+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 hasTicketCreated(player, ticket) {
+	return player.getId(player) == ticket.getHelpNeeder(ticket);
+}
+
+function ticket.getFromID(ticket_id) {
+	iter = list.iterator($tickets);
+	while(hasNext(iter)) {
+		t = next(iter);
+		if(ticket.getId(t) == ticket_id) {
+			return t;
+		}
+	}
+	return null;
+}
+
+function ticket.getAmountFromSupporter(player) {
+	c = 0;
+	iter = list.iterator($tickets);
+	while(hasNext(iter)) {
+		t = next(iter);
+		if(ticket.isSupporter(t, player)) {
+			c++;
+		}
+	}
+	return c;
+}
+
+function ticket.getFromSupporter(player) {
+	iter = list.iterator($tickets);
+	while(hasNext(iter)) {
+		t = next(iter);
+		if(ticket.isSupporter(t, player)) {
+			return t;
+		}
+	}
+	return null;
+}
+
+function ticket.getAmountFromHelpNeeder(player) {
+	c = 0;
+	iter = list.iterator($tickets);
+	while(hasNext(iter)) {
+		t = next(iter);
+		if(ticket.isHelpNeeder(t, player)) {
+			c++;
+		}
+	}
+	return c;
+}
+
+function ticket.getFromHelpNeeder(player) {
+	iter = list.iterator($tickets);
+	while(hasNext(iter)) {
+		t = next(iter);
+		if(ticket.isHelpNeeder(t, player)) {
+			return t;
+		}
+	}
+	return null;
+}

+ 242 - 269
system/ticketsystem.txt

@@ -1,17 +1,13 @@
-/* TODO
-msg.prefix(name
-übersetzen
-*/
-
 event.load("custom_command");
 event.load("player_logout");
+
 prefix = "§2Ticket";
 pling_sound = sound.get("minecraft:block.note_block.pling");
 sound_category_ambient = sound.getCategory("ambient");
 
 //Ticket-Array: ticket[helpneeder][message][solver][ticketid]
-freetickets = list.new(); //Liste mit allen offenen Tickets (Arrays)
-solvingtickets = list.new(); //Liste mit Tickets in Bearbeitung (Arrays)
+free_tickets = list.new(); //list with all outstanding ticket_arrays
+process_tickets = list.new(); //list with all process ticket_arrays
 ticketcounter = 0;
 
 msg("dev", "§bTicketsystem §rwurde geladen");
@@ -26,236 +22,224 @@ if(command == "ticket") {
 	size = list.getSize(args);
 	if(size == 0) {
 		@tickethelp
-		msg(player, "§2Ticket §r/ticket...");
-		msg(player, "§2 - new <nachricht> §rErstellt ein Ticket");
-		msg(player, "§2 - stop <ticketid> §rZieht das Ticket zurück");
-		if(issupporter(player)) {
-			msg(player, "§2 - list §rZeigt alle offenen Tickets an");
-			msg(player, "§2 - get [ticketid] §rGibt dir das nächste bzw. ein bestimmtes Ticket");
-			msg(player, "§2 - end <ticketid> §rBeendet ein Ticket");
-			msg(player, "§2 - free <ticketid> §rGibt ein Ticket für den nächsten Supporter frei");
-			msg(player, "§2 - report <ticketid> §rSendet eine Mail an marvinius mit dem Ticketinhalt");
+		msg.prefix(player, prefix, "/ticket...");
+		msg(player, "§2 - new <message> §rCreate a ticket");
+		msg(player, "§2 - stop <ticketid> §rCancel a ticket");
+		if(isSupporter(player)) {
+			msg(player, "§2 - list §rShows all outstanding tickets");
+			msg(player, "§2 - get [ticketid] §rTake a ticket");
+			msg(player, "§2 - end <ticketid> §rFinish a ticket");
+			msg(player, "§2 - free <ticketid> §rRelease a ticket for the next supporter");
+			msg(player, "§2 - report <ticketid> §rReport a ticket to marvinius");
 		}
 		goto("wait");
 	}
-	arg0 = list.getIndex(args, 0);
+	arg0 = text.toLowerCase(list.getIndex(args, 0));
 	if(arg0 == "list") {
 		if(size != 1) {
 			msg.prefix(player, prefix, "§a/ticket list");
-		} else {
-			if(!issupporter(player)) {
-				msg.prefix(player, prefix, "Du bist kein Supporter");
-				goto("wait");
-			}
-			sizefreetickets = list.getSize(freetickets);
-			sizesolvingtickets = list.getSize(solvingtickets);
-			if(sizefreetickets == 0 && sizesolvingtickets == 0) {
-				msg.prefix(player, prefix, "§rAktuell gibt es keine Tickets");
-				goto("wait");
-			}
-			msg.prefix(player, prefix, concat("§rTickets: ", text.number(sizefreetickets + sizesolvingtickets), " davon offen: ", text.number(sizefreetickets)));
-			//msg.prefix(player, prefix, "§rTickets in Bearbeitung: ", list.getSize(solvingtickets));
-			//msg.prefix(player, prefix, "§rOffene Tickets: ", sizefreetickets);
-			for(i = 0; i <= sizefreetickets - 1; i++) {
-				ticket = list.getIndex(freetickets, i);
-				msg(player, "ID ", text.number(getTicketID(ticket)), " / ", player.getNameFromId(getHelpneeder(ticket)), " / ", getMessage(ticket));
-			}
-			msg(player, "---------");
-			for(i = 0; i <= sizesolvingtickets - 1; i++) {
-				ticket = list.getIndex(solvingtickets, i);
-				msg(player, "ID ", text.number(getTicketID(ticket)), " / ", player.getNameFromId(getHelpneeder(ticket)), " --> ", player.getNameFromId(getSolver(ticket)), " / ", getMessage(ticket));
-			}
+			goto("wait");
+		}
+		if(!isSupporter(player)) {
+			msg.prefix(player, prefix, "You are not a supporter.");
+			goto("wait");
+		}
+		amount_free_tickets = list.getSize(free_tickets);
+		amount_process_tickets = list.getSize(process_tickets);
+		if(amount_free_tickets == 0 && amount_process_tickets == 0) {
+			msg.prefix(player, prefix, "There are no outstanding tickets.");
+			goto("wait");
+		}
+		msg.prefix(player, prefix, concat("§rTickets: ", text.number(amount_free_tickets + amount_process_tickets), " thereof outstanding: ", text.number(amount_free_tickets)));
+		for(i = 0; i < amount_free_tickets; i++) {
+			ticket = list.getIndex(free_tickets, i);
+			msg(player, "ID ", text.number(ticket.getId(ticket)), " / ", player.getNameFromId(ticket.getHelpNeeder(ticket)), " / ", ticket.getMessage(ticket));
+		}
+		msg(player, "---------");
+		for(i = 0; i < amount_process_tickets; i++) {
+			ticket = list.getIndex(process_tickets, i);
+			msg(player, "ID ", text.number(ticket.getId(ticket)), " / ", player.getNameFromId(ticket.getHelpNeeder(ticket)), " --> ", player.getNameFromId(ticket.getSolver(ticket)), " / ", ticket.getMessage(ticket));
 		}
 		goto("wait");
 	}
 	if(arg0 == "get") {
 		if(size < 1 || size > 2) {
 			msg.prefix(player, prefix, "§a/ticket get [ticketid]");
-		} else {
-			if(!issupporter(player)) {
-				msg.prefix(player, prefix, "Du bist kein Supporter");
-				goto("wait");
-			}
-			team_player_id = player.getId(player);
-			if(size == 1) {
-				if(list.getSize(freetickets) == 0) {
-					msg.prefix(player, prefix, "§rAktuell gibt es keine offenen Tickets");
-					goto("wait");
-				}
-				ticket = list.getIndex(freetickets, 0);
-			} else {
-				ticketid = list.getIndex(args, 1);
-				if(!isDouble(ticketid)) {
-					msg.prefix(player, prefix, "Zahl erwartet");
-					goto("wait");
-				}
-				ticket = getTicketFromID(ticketid);
-				if(ticket == null || !list.contains(freetickets, ticket)) {
-					msg.prefix(player, prefix, "Dieses Ticket ist nicht aktiv");
-					goto("wait");
-				}
-			}
-			player_id = getHelpneeder(ticket);
-			pname = player.getNameFromId(player_id);
-			p = read.player(pname);
-			nachricht = getMessage(ticket);
-			list.remove(freetickets, ticket);
-			list.add(solvingtickets, ticket);
-			team_player_id = player.getId(player);
-			setSolver(ticket, team_player_id);
-			msg.prefix(p, prefix, concat("§r", player_name, " kümmert sich um dein Ticket: §a", nachricht));
-			msg.prefix(player, prefix, concat("§rDu kümmerst dich um das Ticket von ", pname, ": §a", nachricht));
+			goto("wait");
 		}
-		goto("wait");
-	}
-	if(arg0 == "end") {
-		if(size != 2) {
-			msg.prefix(player, prefix, "§a/ticket end <ticketid>");
-		} else {
-			if(!issupporter(player)) {
-				msg.prefix(player, prefix, "Du bist kein Supporter");
+		if(!isSupporter(player)) {
+			msg.prefix(player, prefix, "You are not a supporter.");
+			goto("wait");
+		}
+		team_player_id = player.getId(player);
+		if(size == 1) {
+			if(list.getSize(free_tickets) == 0) {
+				msg.prefix(player, prefix, "There are no outstanding tickets.");
 				goto("wait");
 			}
+			ticket = list.getIndex(free_tickets, 0);
+		} else {
 			ticketid = list.getIndex(args, 1);
 			if(!isDouble(ticketid)) {
-				msg.prefix(player, prefix, "Zahl erwartet");
+				msg.prefix(player, prefix, "Number expected.");
 				goto("wait");
 			}
-			team_player_id = player.getId(player);
-			ticket = getTicketFromID(ticketid);
+			ticket = ticket.getFromID(ticketid);
 			if(ticket == null) {
-				msg.prefix(player, prefix, "Dieses Ticket ist nicht aktiv");
-				goto("wait");
-			}
-			if(getSolver(ticket) != team_player_id) {
-				msg.prefix(player, prefix, "Du löst dieses Ticket nicht");
+				msg.prefix(player, prefix, "Not an active ticket.");
 				goto("wait");
 			}
-			player_id = getHelpneeder(ticket);
-			list.remove(solvingtickets, ticket);
-			msg.prefix(player.getNameFromId(player_id), prefix, "§rDein Ticket wurde fertig bearbeitet");
-			msg.prefix(player, prefix, "§rDu hast das Ticket fertig bearbeitet");
 		}
+		player_id = ticket.getHelpNeeder(ticket);
+		p_name = player.getNameFromId(player_id);
+		p = read.player(p_name);
+		message = ticket.getMessage(ticket);
+		list.remove(free_tickets, ticket);
+		list.add(process_tickets, ticket);
+		team_player_id = player.getId(player);
+		ticket.setSolver(ticket, team_player_id);
+		msg.prefix(p, prefix, concat("§r", player.getName(player), " takes care of your ticket: §a", message));
+		msg.prefix(player, prefix, concat("§rYou takes care of the ticket of ", p_name, ": §a", message));
+		goto("wait");
+	}
+	if(arg0 == "end") {
+		if(size != 2) {
+			msg.prefix(player, prefix, "§a/ticket end <ticketid>");
+			goto("wait");
+		}
+		if(!isSupporter(player)) {
+			msg.prefix(player, prefix, "You are not a supporter.");
+			goto("wait");
+		}
+		ticketid = list.getIndex(args, 1);
+		if(!isDouble(ticketid)) {
+			msg.prefix(player, prefix, "Number expected.");
+			goto("wait");
+		}
+		team_player_id = player.getId(player);
+		ticket = ticket.getFromID(ticketid);
+		if(ticket == null) {
+			msg.prefix(player, prefix, "Not an active ticket.");
+			goto("wait");
+		}
+		if(ticket.getSolver(ticket) != team_player_id) {
+			msg.prefix(player, prefix, "Du löst dieses Ticket nicht");
+			goto("wait");
+		}
+		player_id = ticket.getHelpNeeder(ticket);
+		list.remove(process_tickets, ticket);
+		msg.prefix(player.getNameFromId(player_id), prefix, "§rDein Ticket wurde fertig bearbeitet");
+		msg.prefix(player, prefix, "§rDu hast das Ticket fertig bearbeitet");
 		goto("wait");
 	}
 	if(arg0 == "free") {
 		if(size != 2) {
 			msg.prefix(player, prefix, "§a/ticket free <ticketid>");
-		} else {
-			if(!issupporter(player)) {
-				msg.prefix(player, prefix, "Du bist kein Supporter");
-				goto("wait");
-			}
-			ticketid = list.getIndex(args, 1);
-			if(!isDouble(ticketid)) {
-				msg.prefix(player, prefix, "Zahl erwartet");
-				goto("wait");
-			}
-			team_player_id = player.getId(player);
-			ticket = getTicketFromID(ticketid);
-			if(ticket == null) {
-				msg.prefix(player, prefix, "Dieses Ticket ist nicht aktiv");
-				goto("wait");
-			}
-			if(getSolver(ticket) != team_player_id) {
-				msg.prefix(player, prefix, "Du löst dieses Ticket nicht");
-				goto("wait");
-			}
-			freeticket(ticket);
+			goto("wait");
+		}
+		if(!isSupporter(player)) {
+			msg.prefix(player, prefix, "You are not a supporter.");
+			goto("wait");
+		}
+		ticketid = list.getIndex(args, 1);
+		if(!isDouble(ticketid)) {
+			msg.prefix(player, prefix, "Number expected.");
+			goto("wait");
 		}
+		team_player_id = player.getId(player);
+		ticket = ticket.getFromID(ticketid);
+		if(ticket == null) {
+			msg.prefix(player, prefix, "Not an active ticket.");
+			goto("wait");
+		}
+		if(ticket.getSolver(ticket) != team_player_id) {
+			msg.prefix(player, prefix, "Du löst dieses Ticket nicht");
+			goto("wait");
+		}
+		ticket.free(ticket, player);
 		goto("wait");
 	}
 	if(arg0 == "report") {
 		if(size != 2) {
 			msg.prefix(player, prefix, "§a/ticket report <ticketid>");
-		} else {
-			if(!issupporter(player)) {
-				msg.prefix(player, prefix, "Du bist kein Supporter");
-				goto("wait");
-			}
-			ticketid = list.getIndex(args, 1);
-			if(!isDouble(ticketid)) {
-				msg.prefix(player, prefix, "Zahl erwartet");
-				goto("wait");
-			}
-			team_player_id = player.getId(player);
-			ticket = getTicketFromID(ticketid);
-			if(ticket == null) {
-				msg.prefix(player, prefix, "Dieses Ticket ist nicht aktiv");
-				goto("wait");
-			}
-			if(getSolver(ticket) != team_player_id) {
-				msg.prefix(player, prefix, "Du löst dieses Ticket nicht");
-				goto("wait");
-			}
-			team_player_id = player.getId(player);
-			player_id = getHelpneeder(ticket);
-			name = player.getNameFromId(player_id);
-			nachricht = getMessage(ticket);
-			msg.prefix(name, prefix, "§rDein Ticket wurde reportet");
-			msg.prefix(player, prefix, "§rDu hast das Ticket reportet");
-			list.remove(solvingtickets, ticket);
-			mail.send(player.getName(player), "marvinius", concat("Ticket Report: ", name, " / ", nachricht));
+			goto("wait");
+		}
+		if(!isSupporter(player)) {
+			msg.prefix(player, prefix, "You are not a supporter.");
+			goto("wait");
+		}
+		ticketid = list.getIndex(args, 1);
+		if(!isDouble(ticketid)) {
+			msg.prefix(player, prefix, "Number expected.");
+			goto("wait");
+		}
+		team_player_id = player.getId(player);
+		ticket = ticket.getFromID(ticketid);
+		if(ticket == null) {
+			msg.prefix(player, prefix, "Not an active ticket.");
+			goto("wait");
 		}
+		if(ticket.getSolver(ticket) != team_player_id) {
+			msg.prefix(player, prefix, "Du löst dieses Ticket nicht");
+			goto("wait");
+		}
+		player_id = ticket.getHelpNeeder(ticket);
+		name = player.getNameFromId(player_id);
+		message = ticket.getMessage(ticket);
+		msg.send(player, name, prefix, "Your ticket got reported.", false);
+		msg.prefix(player, prefix, "You reported the ticket.");
+		list.remove(process_tickets, ticket);
+		mail.send(player.getName(player), "marvinius", concat("Ticket Report: ", name, " / ", message));
 		goto("wait");
 	}
 	if(arg0 == "stop") {
 		if(size != 2) {
 			msg.prefix(player, prefix, "§a/ticket stop <ticketid>");
-		} else {
-			ticketid = list.getIndex(args, 1);
-			if(!isDouble(ticketid)) {
-				msg.prefix(player, prefix, "Zahl erwartet");
-				goto("wait");
-			}
-			ticket = getTicketFromID(ticketid);
-			if(ticket == null) {
-				msg.prefix(player, prefix, "§rDu hast das Ticket nicht erstellt");
-				goto("wait");
-			}
-			if(!hasticketcreated(player_id, ticket)) {
-				msg.prefix(player, prefix, "§rDu hast das Ticket nicht erstellt");
-				goto("wait");
-			}
-			if(stopticket(ticket)) {
-				msg.prefix(player, prefix, "§rDein Ticket wurde aufgelöst");
-				team_player_id = getSolver(ticket);
-				if(team_player_id != null) {
-					msg.prefix(player.getNameFromId(team_player_id), prefix, concat("§rDas Ticket von ", player_name, " wurde aufgelöst"));
-				}
-			} else {
-				msg.prefix(player, prefix, "§rDas Ticket existiert nicht");
+			goto("wait");
+		}
+		ticketid = list.getIndex(args, 1);
+		if(!isDouble(ticketid)) {
+			msg.prefix(player, prefix, "Number expected.");
+			goto("wait");
+		}
+		ticket = ticket.getFromID(ticketid);
+		if(ticket == null) {
+			msg.prefix(player, prefix, "§rDu hast das Ticket nicht erstellt");
+			goto("wait");
+		}
+		if(!hasTicketCreated(player_id, ticket)) {
+			msg.prefix(player, prefix, "§rDu hast das Ticket nicht erstellt");
+			goto("wait");
+		}
+		if(ticket.stop(ticket)) {
+			msg.prefix(player, prefix, "§rDein Ticket wurde aufgelöst");
+			team_player_id = ticket.getSolver(ticket);
+			if(team_player_id != null) {
+				msg.prefix(player.getNameFromId(team_player_id), prefix, concat("§rDas Ticket von ", player.getName(player), " wurde aufgelöst"));
 			}
+		} else {
+			msg.prefix(player, prefix, "§rDas Ticket existiert nicht");
 		}
 		goto("wait");
 	}
 	if(arg0 == "new") {
 		if(size < 2) {
-			msg.prefix(player, prefix, "§a/ticket new <nachricht>");
-		} else {
-			//checkforteamler
-			online = players.toList();
-			teamlers = list.new();
-			for(i = 0; i <= list.getSize(online) - 1; i++) {
-				p = list.getIndex(online, i);
-				if(issupporter(p)) {
-					list.add(teamlers, p);
-				}
-			}
-			if(list.getSize(teamlers) == 0) {
-				msg.prefix(player, prefix, "§rIm Moment steht kein Teamler zur Verfügung");
-				goto("wait");
-			}
-			nachricht = concatList(args, " ", 1, size - 1);
-			player_id = player.getId(player);
-			createticket(player_id, nachricht);
-			msg.prefix(player, prefix, concat("§rDas Ticket wurde eingereicht #ID:", text.number(ticketcounter)));
-			for(i = 0; i <= list.getSize(teamlers) - 1; i++) {
-				p = list.getIndex(teamlers, i);
-				msg.prefix(p, prefix, concat("§r", player_name, " hat ein Ticket eingereicht: §a", nachricht));
-				msg.prefix(p, prefix, concat("§rOffene Tickets: ", text.number(list.getSize(freetickets))));
-				sound.spawnForPlayer(p, pling_sound, sound_category_ambient);
-			}
+			msg.prefix(player, prefix, "§a/ticket new <message>");
+			goto("wait");
+		}
+		teamlers = getAvailableSupporters();
+		if(list.getSize(teamlers) == 0) {
+			msg.prefix(player, prefix, "There is no supporter available.");
+			goto("wait");
+		}
+		message = concatList(args, " ", 1, size - 1);
+		ticket.create(player, message);
+		msg.prefix(player, prefix, concat("§rDas Ticket wurde eingereicht #ID:", text.number(ticketcounter)));
+		for(i = 0; i < list.getSize(teamlers); i++) {
+			p = list.getIndex(teamlers, i);
+			msg.prefix(p, prefix, concat("§r", player.getName(player), " hat ein Ticket eingereicht: §a", message));
+			msg.prefix(p, prefix, concat("§rOffene Tickets: ", text.number(list.getSize(free_tickets))));
+			sound.spawnForPlayer(p, pling_sound, sound_category_ambient);
 		}
 		goto("wait");
 	}
@@ -265,133 +249,122 @@ goto("wait");
 
 @player_logout
 player_id = player.getId(player);
-if(issupporter(player)) {
+if(isSupporter(player)) {
 	//Liste mit Tickets in Bearbeitung durchlaufen und jeden Array auf den Solver checken
-	for(i = 0; i <= list.getSize($solvingtickets) - 1; i++) {
-		ticket = list.getIndex($solvingtickets, i);
-		if(getSolver(ticket) == player_id) {
-			freeticket(ticket);
+	for(i = 0; i < list.getSize($process_tickets); i++) {
+		ticket = list.getIndex($process_tickets, i);
+		if(ticket.getSolver(ticket) == player_id) {
+			ticket.free(ticket, player);
 		}
 	}
 } else {
 	//Beide Ticket-Listen durchlaufen und jeden Array auf den Helpneeder checken
-	for(i = 0; i <= list.getSize($freetickets) - 1; i++) {
-		ticket = list.getIndex($freetickets, i);
-		if(getHelpneeder(ticket) == player_id) {
-			stopticket(ticket);
+	for(i = 0; i < list.getSize($free_tickets); i++) {
+		ticket = list.getIndex($free_tickets, i);
+		if(ticket.getHelpNeeder(ticket) == player_id) {
+			ticket.stop(ticket);
 		}
 	}
-	for(i = 0; i <= list.getSize($solvingtickets) - 1; i++) {
-		ticket = list.getIndex($solvingtickets, 0);
-		if(getHelpneeder(ticket) == player_id) {
-			stopticket(ticket);
+	for(i = 0; i < list.getSize($process_tickets); i++) {
+		ticket = list.getIndex($process_tickets, 0);
+		if(ticket.getHelpNeeder(ticket) == player_id) {
+			ticket.stop(ticket);
 		}
 	}
 }
 goto("wait");
 
-function issupporter(player) {
-	if(perm.has(player, "isSupporter")) {
-		return true;
-	}
-	return false;
-}
-
-function createticket(player_id, nachricht) {
-	//Ticket erstellen
-	$ticketcounter += 1;
-	ticket = array.new(4);
-	ticket[0] = player_id;
-	ticket[1] = nachricht;
-	ticket[3] = $ticketcounter;
-	list.add($freetickets, ticket);
-	return;
+function isSupporter(player) {
+	return perm.has(player, "isSupporter");
 }
 
-function freeticket(ticket) {
-	player_id = getHelpneeder(ticket);
-	name = player.getNameFromId(player_id);
-	team_player_id = player.getId($player);
-	msg.prefix(name, $prefix, "§rDein Ticket wurde wieder freigegeben. Ein anderer Teamler wird sich darum kümmern");
-	msg.prefix($player, $prefix, "§rDu hast das Ticket freigegeben");
-	list.remove($solvingtickets, ticket);
-	list.add($freetickets, ticket);
-	setSolver(ticket, null);
-	//checkforteamler
+function getAvailableSupporters() {
 	online = players.toList();
 	teamlers = list.new();
-	for(i = 0; i <= list.getSize(online) - 1; i++) {
+	for(i = 0; i < list.getSize(online); i++) {
 		p = list.getIndex(online, i);
-		if(issupporter(p)) {
+		if(isSupporter(p)) {
 			list.add(teamlers, p);
 		}
 	}
-	for(i = 0; i <= list.getSize(teamlers) - 1; i++) {
+	return teamlers;
+}
+
+function ticket.create(player, message) {
+	$ticketcounter++;
+	ticket = array.new(4);
+	ticket[0] = player.getId(player);
+	ticket[1] = message;
+	ticket[3] = $ticketcounter;
+	list.add($free_tickets, ticket);
+}
+
+function ticket.free(ticket, player_solver) {
+	player_id = ticket.getHelpNeeder(ticket);
+	name = player.getNameFromId(player_id);
+	msg.send(player_solver, name, $prefix, "Your ticket got released, so another supporter can take care of.", false);
+	msg.prefix(player_solver, $prefix, "You released the ticket for another supporter.");
+	list.remove($process_tickets, ticket);
+	list.add($free_tickets, ticket);
+	ticket.setSolver(ticket, null);
+	teamlers = getAvailableSupporters();
+	for(i = 0; i < list.getSize(teamlers); i++) {
 		p = list.getIndex(teamlers, i);
-		msg.prefix(p, $prefix, concat("§r", $player_name, " hat das Ticket von ", name, " wieder freigegeben: §a", getMessage(ticket)));
-		msg.prefix(p, $prefix, concat("§rOffene Tickets: ", text.number(list.getSize($freetickets))));
+		msg.prefix(p, $prefix, concat("§r", player.getName(player_solver), " hat das Ticket von ", name, " wieder freigegeben: §a", ticket.getMessage(ticket)));
+		msg.prefix(p, $prefix, concat("§rOffene Tickets: ", text.number(list.getSize($free_tickets))));
 		sound.spawnForPlayer(p, pling_sound, sound_category_ambient);
 	}
-	return;
 }
 
-function stopticket(ticket) {
+function ticket.stop(ticket) {
 	//Check ob Ticket existiert
-	if(!(list.contains($freetickets, ticket) || list.contains($solvingtickets, ticket))) {
+	if(!(list.contains($free_tickets, ticket) || list.contains($process_tickets, ticket))) {
 		return false;
 	}
 	//Ticket löschen
-	player_id = getHelpneeder(ticket);
-	list.remove($freetickets, ticket);
-	list.remove($solvingtickets, ticket);
+	player_id = ticket.getHelpNeeder(ticket);
+	list.remove($free_tickets, ticket);
+	list.remove($process_tickets, ticket);
 	return true;
 }
 
-function getHelpneeder(ticket) {
-	player_id = ticket[0];
-	return player_id;
+function ticket.getHelpNeeder(ticket) {
+	return ticket[0];
 }
 
-function getMessage(ticket) {
-	message = ticket[1];
-	return message;
+function ticket.getMessage(ticket) {
+	return ticket[1];
 }
 
-function getSolver(ticket) {
-	solver = ticket[2];
-	return solver;
+function ticket.getSolver(ticket) {
+	return ticket[2];
 }
 
-function getTicketID(ticket) {
-	ticketid = ticket[3];
-	return ticketid;
+function ticket.getId(ticket) {
+	return ticket[3];
 }
 
-function setSolver(ticket, player_id) {
+function ticket.setSolver(ticket, player_id) {
 	ticket[2] = player_id;
-	return;
 }
 
-function hasticketcreated(player_id, ticket) {
-	if(player_id == getHelpneeder(ticket)) {
-		return true;
-	}
-	return false;
+function hasTicketCreated(player_id, ticket) {
+	return player_id == ticket.getHelpNeeder(ticket);
 }
-
-function getTicketFromID(ticketid) {
+	
+function ticket.getFromID(ticketid) {
 	//Beide Ticket-Listen durchlaufen und jeden Array auf die ID checken
-	for(i = 0; i <= list.getSize($freetickets) - 1; i++) {
-		tempticket = list.getIndex($freetickets, i);
-		if(getTicketID(tempticket) == ticketid) {
+	for(i = 0; i < list.getSize($free_tickets); i++) {
+		tempticket = list.getIndex($free_tickets, i);
+		if(ticket.getId(tempticket) == ticketid) {
 			return tempticket;
 		}
 	}
-	for(i = 0; i <= list.getSize($solvingtickets) - 1; i++) {
-		tempticket = list.getIndex($solvingtickets, i);
-		if(getTicketID(tempticket) == ticketid) {
+	for(i = 0; i < list.getSize($process_tickets); i++) {
+		tempticket = list.getIndex($process_tickets, i);
+		if(ticket.getId(tempticket) == ticketid) {
 			return tempticket;
 		}
 	}
 	return null;
-}
+}

+ 5 - 3
utils/u_general.txt

@@ -1357,11 +1357,13 @@ function sendOnlineMessage(player, message) {
 	}
 }
 
-function player.sendMessage(from_player, to_name, prefix, message, send_mail) {
+function msg.send(from_player, to_name, prefix, message, send_mail) {
 	p = read.player(to_name);
 	if(p == null) {
-		mail.send(player.getName(from_player), to_name, message);
-	} elseif(send_mail) {
+		if(send_mail) {
+			mail.send(player.getName(from_player), to_name, message);
+		}
+	} else {
 		msg.prefix(p, prefix, message);
 	}
 }