Browse Source

timber, mobarena, skills, quests

mloeschenkohl 3 năm trước cách đây
mục cha
commit
58b88c4fd3
66 tập tin đã thay đổi với 10160 bổ sung1141 xóa
  1. 94 0
      Jan/3d_pattern.txt
  2. 1 2
      Jan/4D_Fractal_Maker.txt
  3. 325 0
      Jan/FEZ_like_4D.txt
  4. 122 0
      Jan/Lava_Sponge.txt
  5. 214 9
      Jan/Test.txt
  6. 27 0
      Jan/bmq.txt
  7. 0 0
      Jan/enterhaken.txt
  8. 57 0
      Jan/recoil.txt
  9. 16 17
      Piet/4D Feld runter/game.txt
  10. 63 0
      Piet/Test1.txt
  11. 10 0
      docu_core.php
  12. 91 1
      docu_minecraft.php
  13. 5395 0
      minigames/among_us/among_us.txt
  14. 619 0
      minigames/among_us/among_us_map1.txt
  15. 3 0
      minigames/fastbridge/fastbridge.txt
  16. 4 0
      minigames/gamecenter.txt
  17. 16 0
      minigames/jumpnrun/4d/3d_shadow/3d_s_map1.txt
  18. 366 0
      minigames/jumpnrun/4d/3d_shadow/shadow_jump_core.txt
  19. 4 0
      minigames/jumpnrun/4d/4d_j_r_core.txt
  20. 2 2
      minigames/knockfight/knockfight.txt
  21. 3 0
      minigames/rebuild/rebuild.txt
  22. 354 0
      minigames/sammelfieber/sammelfieber.txt
  23. 329 0
      minigames/sammelfieber/sammelfieberitems.txt
  24. 6 0
      minigames/sammelfieber/sfmap1.txt
  25. 6 0
      minigames/sammelfieber/sfmap2.txt
  26. 23 0
      minigames/sammelfieber/sfmap3.txt
  27. 361 0
      minigames/sammelfieber/sfranked.txt
  28. 11 39
      minigames/snowfight/snowfight.txt
  29. 0 1
      minigames/snowfight/snowmap1.txt
  30. 0 1
      minigames/snowfight/snowmap2.txt
  31. 18 0
      ranks.txt
  32. 4 5
      startscript.txt
  33. 0 103
      story/admont/albtraum.txt
  34. 46 0
      story/admont/anna_in_trouble.txt
  35. 76 196
      story/admont/core.txt
  36. 0 117
      story/admont/erstes_date.txt
  37. 143 0
      story/admont/first_date.txt
  38. 0 70
      story/admont/ich_und_mein_holz.txt
  39. 65 0
      story/admont/me_and_my_wood.txt
  40. 0 47
      story/admont/merle_in_noeten.txt
  41. 103 0
      story/admont/nightmare.txt
  42. 127 0
      survival/gemstones.txt
  43. 0 66
      survival/harvest.txt
  44. 3 4
      survival/mobarena.txt
  45. 68 20
      survival/skills.txt
  46. 40 59
      survival/survival.txt
  47. 5 0
      survival/teleporter.txt
  48. 208 0
      survival/timber.txt
  49. 1 1
      system/chat.txt
  50. 79 126
      system/commands.txt
  51. 30 16
      system/humans.txt
  52. 13 1
      system/init.txt
  53. 27 1
      system/market.txt
  54. 7 3
      system/perms.txt
  55. 1 0
      system/scheduler.txt
  56. 1 6
      system/tiploop.txt
  57. 60 21
      test.txt
  58. 2 17
      test2.txt
  59. 0 18
      test3.txt
  60. 0 19
      test4.txt
  61. 309 0
      test6.txt
  62. 10 20
      utils/u_cmdhelp.txt
  63. 30 24
      utils/u_games.txt
  64. 69 42
      utils/u_general.txt
  65. 40 31
      utils/u_quest.txt
  66. 53 36
      utils/u_skills.txt

+ 94 - 0
Jan/3d_pattern.txt

@@ -0,0 +1,94 @@
+//Events:
+event.load("block_break");
+//
+random_Blocks_Array = array.new(4);
+random_Blocks_Array[0] = material.get("RED_WOOL");
+random_Blocks_Array[1] = material.get("BLUE_WOOL");
+random_Blocks_Array[2] = material.get("YELLOW_WOOL");
+random_Blocks_Array[3] = material.get("GREEN_WOOL");
+random_Blocks_Array_Size = array,getSize(random_Blocks_Array);
+
+
+//Place Pattern
+pattern.place();
+
+//wait
+@wait
+wait();
+
+goto("wait");
+
+//Functions:
+
+//Lines
+function line.new(){
+	Line_Array = array.new(4);
+	for(a = 0; a < 3; a++){
+		Liine_Array[a] = math.random(0,2) - 1;
+	}
+	Line_Array[3] = 1;
+	return(Line_Array);
+}
+
+function line.set(All_Lines_In_Array){
+	for(a = 0; a < array.getSize(All_Lines_In_Array); a++){
+		Line_a = All_Lines_In_Array[a];
+		key = ;
+		value = $random_Blocks_Array[math.random(0, $random_Blocks_Array_Size)];
+		map.add($Pattern_Blocks, key, value);
+	}
+	retrun();
+}
+
+//Pattern
+function pattern.make(){
+	Rotate_Amount = math.random(0,3);
+	Mirror_1_Amount = math.random(0,1);
+	Mirror_2_Amount = math.random(0,1);
+	for(a = 0; a < Space_Amount; a++){
+		for(b = 0; b < a * Rotate_Amount; b++){
+			Space.rotate();
+		}
+		for(b = 0; b < a * Mirror_1_Amount; b++){
+			Space.Mirror_1(Mirror_Axis);
+		}
+		for(b = 0; b < a * Mirror_2_Amount; b++){
+			Space.Mirror_2();
+		}
+	}
+	return();
+}
+
+function pattern.place(){
+	
+	return();
+}
+
+//Mirror 1
+function Space.Mirror_1(Mirror_Axis){
+	if(Mirror_Axis = 1){ //x Mirror
+		for(a = 0; a < x_axis_length; a++){
+			
+		}
+	}
+	if(Mirror_Axis = 2){ //y Mirror
+		
+	}
+	if(Mirror_Axis = 3){ //z Mirror
+		
+	}
+	return();
+}
+
+//Mirror 2 
+function Space.Mirror_2(){
+	
+	return();
+}
+
+//Rotate 
+function Space.rotate(){
+	Space.Mirror_1(Mirror_Axis);
+	Space.Mirror_2();
+	return();
+}

+ 1 - 2
Jan/4D_Fractal_Maker.txt

@@ -481,7 +481,6 @@ function remove_blocks(Active_Blocks){
 		}
 		element = next(iterator);
 		value = map.getValue(element);
-		//block.getType(value)
 		block.setMaterial(value, $air_material, false);
 	}
 	waitfor(2);
@@ -599,7 +598,7 @@ function place_blocks(current_layer, currently_active_dimensions, Blocks, first_
 function Dim.Fractal.create(Min_Max, Blocks){
 	Max_Block_Amount = 2500;
 	HyperCuboid = array.new(4);
-	for(a = 0; a < 4; a++){
+	for(a = 0; a < 4; a -= -1){
 		HyperCuboid[a] = Min_Max[a,1]-Min_Max[a,0];
 	}
 	Iterations = math.roundDown(math.ln(Max_Block_Amount)/math.ln(map.getSize(Blocks)));

+ 325 - 0
Jan/FEZ_like_4D.txt

@@ -0,0 +1,325 @@
+sign.started(gamesignloc);
+event.load("block_click");
+event.load("entity_damage");
+event.load("player_move");
+event.load("player_quit");
+event.load("player_giveup");
+event.load("minigame_join");
+event.load("block_break");
+
+games = world.getGames();
+
+gamename = "§4D-FEZ";
+
+maxplayers = 1;
+
+air_material = material.get("AIR");
+
+x1 = loc.getX(Edge_1);
+x2 = loc.getX(Edge_2);
+x3 = loc.getX(Edge_3);
+x4 = x3 + x2 - x1;
+Spawn_X = loc.getX(Start_Pos)-0.5;
+
+y1 = loc.getY(Edge_1);
+y2 = loc.getY(Edge_2);
+y3 = loc.getY(Edge_3);
+y4 = y3 + y2 - y1;
+Spawn_Y = loc.getY(Start_Pos);
+
+z1 = loc.getZ(Edge_1);
+z2 = loc.getZ(Edge_2);
+z3 = loc.getZ(Edge_3);
+z4 = z3 + z2 - z1;
+Spawn_Z = loc.getZ(Start_Pos)-0.5;
+
+//XYZ -> WYZ -> XYW -> XYZ
+Dimension_Blocks = list.new();
+
+event.addMoveData(loc1, loc2, -1, -1);
+
+currently_active_dimensions = 0; //0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+difference_array = array.new(6);
+difference_array[0] = Layer_amount;
+difference_array[1] = x2-x1;
+difference_array[2] = z2-z2;
+difference_array[3] = Layer_amount;
+difference_array[4] = x2-x1;
+difference_array[5] = z2-z2;
+
+@wait
+wait();
+if(event == "entity_damage") {
+	if(!isPlayer(entity)) {
+		goto("wait");
+	}
+	player = entity;
+}
+
+if(!player.hasMinigameId(player, script_id)) {
+	goto("wait");
+}
+
+if(event == "minigame_join"){
+	msg.prefix(player, $gamename, "Game is Loading, please be patient.");
+	entity.teleport(player, Start_Pos);
+	player.clearInventory(player);
+	player_inv = player.getInv(player);
+	waitfor(10);
+	remove_blocks();
+	$currently_active_dimensions = 0;
+	$current_layer[$currently_active_dimensions] = 0;
+	inv.setItem(player_inv, 0, item.custom.create("ARROW_LEFT",1,"Turn down","Interdimensionally"));
+	inv.setItem(player_inv, 1, item.custom.create("ARROW_RIGHT",1,"Turn up","Interdimensionally"));
+	inv.setItem(player_inv, 2, item.custom.create("ARROW_DOWN",1,"Move down","background axis"));
+	inv.setItem(player_inv, 3, item.custom.create("ARROW_UP",1,"Move up","background axis"));
+	c = 0;
+	for(layer_var = 0; layer_var < Layer_amount; layer_var++){
+		x_d = layer_var * Layer_difference_X;
+		y_d = layer_var * Layer_difference_Y;
+		z_d = layer_var * Layer_difference_Z;
+		for(x = x1 - x_d; x <= x2 - x_d; x++){
+			for(y = y1 - y_d; y <= y2 - y_d; y++){
+				for(z = z1 - z_d; z <= z2 - z_d; z++){
+					c++;
+					if(c > 500){
+						c = 0;
+						waitfor(2);
+					}
+					temp_block = block.get(loc.new(games, x, y, z));
+					if(!block.isAir(temp_block)){
+						D_Array = array.new(4);
+						D_Array[0] = x - x1 + x_d;//X
+						D_Array[1] = y - y1 + y_d;//Y
+						D_Array[2] = z - z1 + z_d;//Z
+						D_Array[3] = layer_var;//W
+						temp_array = array.new(2);
+						temp_array[0] = D_Array;
+						temp_array[1] = block.getType(temp_block);
+						list.add(Dimension_Blocks, temp_array);//Dimensional_Blocks -> Koords4D,Block
+					}
+				}
+			}
+		}
+	}
+	Active_blocks = place_blocks(Dimension_Blocks);
+	msg.prefix(player, $gamename, "Game has loaded.");
+	//snuvi.debug(list.getSize(Dimension_Blocks));
+	goto("wait");
+}
+
+if(event == "block_break"){
+	cancel = true;
+	goto("wait");
+}
+
+if(event == "entity_damage") {
+	cancel = true;
+	goto("wait");
+}
+
+if(event == "block_click"){
+	if(slot.isoffhand(hand)){
+		goto("wait");
+	}
+	if(action == "PHYSICAL"){
+		goto("wait");
+	}
+	player_hand = living.getHand(player);
+	if(!item.hasName(player_hand)){
+		goto("wait");
+	}
+	item_name = string.text(item.getName(player_hand));
+	if(item_name == "Turn down"){
+		goto("dimensional_turn_down");
+	}
+	if(item_name == "Turn up"){
+		goto("dimensional_turn_up");
+	}
+	goto("wait");
+}
+
+if(event == "player_move"){
+	//if(current_layer[1] == finish_layer){
+	game_stop("You did it!");
+	//}
+	goto("wait");
+}
+
+if(event == "player_quit"){
+	game_stop(null);
+}
+
+if(event == "player_giveup"){
+	game_stop("You left :(");
+}
+goto("wait");
+
+@dimensional_turn_up
+remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+temp_layer = current_layer[currently_active_dimensions];
+temp_player_loc = entity.getLocation(player);
+stood_on_block_loc = loc.new(loc.getWorld(temp_player_loc), math.round(loc.getX(temp_player_loc)), math.round(loc.getY(temp_player_loc)-1), math.round(loc.getZ(temp_player_loc)));
+if(block.getType == air_material){
+	goto("wait");
+}
+if(y3 >= loc.getX(stood_on_block_loc)){
+	goto("wait");
+}
+if(map.contains(Active_blocks, stood_on_block_loc)){
+	temp_layer = map.get(Active_blocks, stood_on_block_loc);
+}
+else{
+	goto("wait");
+}
+
+if(currently_active_dimensions == 0){//XYZ to WYZ
+	currently_active_dimensions++;//0 = W, 1 = X, 2 = Z
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}elseif(currently_active_dimensions == 1){//WYZ to WYX
+	currently_active_dimensions++;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}elseif(currently_active_dimensions == 2){//WYX to ZYX
+	currently_active_dimensions++;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}elseif(currently_active_dimensions == 3){//ZYX to ZYW
+	currently_active_dimensions++;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}elseif(currently_active_dimensions == 4){//ZYW to XYW
+	currently_active_dimensions++;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}elseif(currently_active_dimensions == 5){//XYW to XYZ
+	currently_active_dimensions = 0;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}
+Active_blocks = place_blocks(Dimension_Blocks);
+goto("wait");
+
+@dimensional_turn_down
+remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+temp_player_loc = entity.getLocation(player);
+stood_on_block_loc = loc.new(loc.getWorld(temp_player_loc), math.round(loc.getX(temp_player_loc)), math.round(loc.getY(temp_player_loc)-1), math.round(loc.getZ(temp_player_loc)));
+if(block.getType == air_material){
+	goto("wait");
+}
+if(y3 >= loc.getX(stood_on_block_loc)){
+	goto("wait");
+}
+if(map.contains(Active_blocks, stood_on_block_loc)){
+	temp_layer = map.get(Active_blocks, stood_on_block_loc);
+}
+else{
+	goto("wait");
+}
+
+if(currently_active_dimensions == 0){//XYZ to XYW
+	currently_active_dimensions = 5;//0 = W, 1 = X, 2 = Z, 3 = W, 4 = X, 5 = Z
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}elseif(currently_active_dimensions == 1){//WYZ to XYZ
+	currently_active_dimensions--;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}elseif(currently_active_dimensions == 2){//WYX to WYZ
+	currently_active_dimensions--;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}elseif(currently_active_dimensions == 3){//ZYX to WYX
+	currently_active_dimensions--;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}elseif(currently_active_dimensions == 4){//ZYW to ZYX
+	currently_active_dimensions--;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}elseif(currently_active_dimensions == 5){//XYW to ZYW
+	currently_active_dimensions--;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}
+Active_blocks = place_blocks(Dimension_Blocks);
+goto("wait");
+
+
+
+function remove_blocks(){
+	c = 0;
+	for(x = $x3; x < $x3 + $x2 - $x1 + 1; x++){
+		for(y = $y3; y < $y3 + $y2 - $y1 + 1; y++){
+			for(z = $z3; z < $z3 + $z2 - $z1 + 1; z++){
+				c++;
+				if(c > 750){
+					c = 0;
+					waitfor(2);
+				}
+				block.setmaterial(block.get(loc.new($games, x, y, z)), $air_material);
+			}
+		}
+	}
+}
+
+function place_blocks(Dimension_Blocks){
+	c = 0;
+	temp_a_d = $currently_active_dimensions;
+	active_blocks = map.new();
+	for(a = 0; a < list.getSize(Dimension_Blocks); a++){
+		c++;
+		if(c > 750){
+			c = 0;
+			waitfor(2);
+		}
+		temp_array = list.getIndex(Dimension_Blocks, a);
+		D_Array = temp_array[0];//temp_array[1] ist der Block-Type, bei remove egal. D_Array[0] = x, D_Array[1] = y, D_Array[2] = z, D_Array[3] = w
+		//0 = XYZ, 1 = WYZ, 2 = XYW
+		//x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
+		X_place = 0;
+		Y_place = -1;
+		Z_place = 0;
+		if(temp_a_d == 0){//0 = XYZ
+			X_place = D_Array[0];
+			Y_place = D_Array[1];
+			Z_place = D_Array[2];
+			background_coordinate = D_Array[3];
+		}elseif(temp_a_d == 1){//1 = WYZ
+			X_place = D_Array[3];
+			Y_place = D_Array[1];
+			Z_place = D_Array[2];
+			background_coordinate = D_Array[0];
+		}elseif(temp_a_d == 2){//2 = WYX
+			X_place = D_Array[3];
+			Y_place = D_Array[1];
+			Z_place = D_Array[0];
+			background_coordinate = D_Array[2];
+		}elseif(temp_a_d == 3){//3 = ZYX
+			X_place = D_Array[2];
+			Y_place = D_Array[1];
+			Z_place = D_Array[0];
+			background_coordinate = D_Array[3];
+		}elseif(temp_a_d == 4){//4 = ZYW
+			X_place = D_Array[2];
+			Y_place = D_Array[1];
+			Z_place = D_Array[3];
+			background_coordinate = D_Array[0];
+		}elseif(temp_a_d == 5){//5 = XYW
+			X_place = D_Array[0];
+			Y_place = D_Array[1];
+			Z_place = D_Array[3];
+			background_coordinate = D_Array[2];
+		}
+		if(Y_place > -1){
+			X_place = X_place + $x3;
+			Y_place = Y_place + $y3;
+			Z_place = Z_place + $z3;
+			if(X_place < $x4+1 && Y_place < $y4+1 && Z_place < $z4+1){
+				temp_loc = loc.new($games,X_place,Y_place,Z_place);
+				block.setmaterial(block.get(temp_loc), temp_array[1]);
+				map.add(active_blocks, temp_loc, background_coordinate)
+			}
+		}
+	}
+	return(active_blocks);
+}
+
+function game_stop(message){
+	if(message != null){
+		msg.prefix($player, $gamename, message);
+	}
+	script = script.getFromId($script_id);
+	minigame.kickPlayer(script, $player);
+	minigame.term(script, $gamesignloc);
+	term();
+}

+ 122 - 0
Jan/Lava_Sponge.txt

@@ -0,0 +1,122 @@
+event.load("block_place");
+wet_sponge = material.get("WET_SPONGE");
+lava = material.get("LAVA");
+obsidian_material = material.get("OBSIDIAN");
+//max_radius = 1.5;
+//block_remover_max = 343;
+block_to_destroy = lava;
+
+@wait
+wait();
+if(block.getType(block) != wet_sponge){
+	goto("wait");
+}
+if(player.getName(player) == "SirTerence7"){
+		block_loc = block.getLocation(block);
+		block_remover.get(block_loc);
+}
+goto("wait");
+
+function block_remover.get(block_loc){
+	c = 0;
+	original_block_loc = block_loc;
+	lava_counter = 0;
+	$lava_locs = list.new();
+	list.add($lava_locs, block_loc);
+	while(list.getSize($lava_locs) != 0){
+		c++;
+		block_loc = list.getIndex($lava_locs, 0);
+		list.removeIndex($lava_locs, 0);
+		distance = loc.distance(block_loc, original_block_loc);
+		if(distance < 1.9){
+			block_remover.add_block(loc.mod(block_loc,1,0,0));
+			block_remover.add_block(loc.mod(block_loc,-1,0,0));
+			block_remover.add_block(loc.mod(block_loc,0,1,0));
+			block_remover.add_block(loc.mod(block_loc,0,-1,0));
+			block_remover.add_block(loc.mod(block_loc,0,0,1));
+			block_remover.add_block(loc.mod(block_loc,0,0,-1));
+			
+			lava_counter++;
+			if(c > 5){
+				waitfor(2);
+				c = 0;
+			}
+			if(lava_counter > 343 - 1) {
+				break;
+			}
+		}
+	}
+}
+
+function block_remover.add_block(temp_loc){
+	temp_block = block.get(temp_loc);
+	if(block.getType(temp_block) == $block_to_destroy){
+		list.add($lava_locs, temp_loc);
+		block.setMaterial(block.get(temp_loc), $obsidian_material);
+	}
+}
+
+//Zentraler befehl:
+/*
+function block_remover.get(block_loc, block_to_replace, material_to_place, max_distance){
+	c = 0;
+	original_block_loc = block_loc;
+	block_counter = 0;
+	block_locs = list.new();
+	list.add(block_locs, block_loc);
+	while(list.getSize(block_locs) != 0){
+		c++;
+		block_loc = list.getIndex(block_locs, 0);
+		list.removeIndex(block_locs, 0);
+		distance = loc.distance(block_loc, original_block_loc);
+		if(distance < max_distance){
+			
+			temp_loc = loc.mod(block_loc,1,0,0);
+			if(block.getType(temp_block) == block_to_replace){
+				block.setMaterial(block.get(temp_loc), material_to_place);
+				list.add(block_locs, temp_loc);
+			}
+			temp_loc = loc.mod(block_loc,-1,0,0);
+			if(block.getType(temp_block) == block_to_replace){
+				block.setMaterial(block.get(temp_loc), material_to_place);
+				list.add(block_locs, temp_loc);
+			}
+			temp_loc = loc.mod(block_loc,0,1,0);
+			if(block.getType(temp_block) == block_to_replace){
+				block.setMaterial(block.get(temp_loc), material_to_place);
+				list.add(block_locs, temp_loc);
+			}
+			temp_loc = loc.mod(block_loc,0,-1,0);
+			if(block.getType(temp_block) == block_to_replace){
+				block.setMaterial(block.get(temp_loc), material_to_place);
+				list.add(block_locs, temp_loc);
+			}
+			temp_loc = loc.mod(block_loc,0,0,1);
+			if(block.getType(temp_block) == block_to_replace){
+				block.setMaterial(block.get(temp_loc), material_to_place);
+				list.add(block_locs, temp_loc);
+			}
+			temp_loc = loc.mod(block_loc,0,0,-1);
+			if(block.getType(temp_block) == block_to_replace){
+				block.setMaterial(block.get(temp_loc), material_to_place);
+				list.add(block_locs, temp_loc);
+			}
+			
+			block_remover.add_block(loc.mod(block_loc,1,0,0));
+			block_remover.add_block(loc.mod(block_loc,-1,0,0));
+			block_remover.add_block(loc.mod(block_loc,0,1,0));
+			block_remover.add_block(loc.mod(block_loc,0,-1,0));
+			block_remover.add_block(loc.mod(block_loc,0,0,1));
+			block_remover.add_block(loc.mod(block_loc,0,0,-1));
+			
+			block_counter++;
+			if(c > 100){
+				waitfor(2);
+				c = 0;
+			}
+			if(block_counter > 2500) {
+				break;
+			}
+		}
+	}
+}*/

+ 214 - 9
Jan/Test.txt

@@ -1,12 +1,217 @@
-Array = array.new(3);
-List = list.new();
-list.add(List,"LALALA");
+event.load("projectile_hit");
+event.load("block_click");
+event.load("player_drop");
+event.load("player_teleport");
+//event.load("player_item_held");
+event.load("missing_command");
+event.load("missing_perm");
+event.load("player_elytra_start");
+//event.load("entity_click");
+//event.load("entity_damage");
 
-Array[0] = "string";
-Array[1] = 1;
-Array[2] = List;
 
-msg("dev", text.new(class(Array[0])));
-msg("dev", text.new(class(Array[1])));
-msg("dev", text.new(class(Array[2])));
+item_list = list.new();
+list.add(item_list, material.get("SNOWBALL"));
+list.add(item_list, material.get("EGG"));
+list.add(item_list, material.get("FISHING_ROD"));
+list.add(item_list, material.get("TRIDENT"));
+list.add(item_list, material.get("SPLASH_POTION"));
+
+Particle_Soul = particle.get("SOUL_FIRE_FLAME");
+Particle_Table = particle.get("ENCHANTMENT_TABLE");
+Particle_Smoke = particle.get("CAMPFIRE_COSY_SMOKE");
+Particle_Slime = particle.get("SLIME");
+
+Slime_Itemstack = item.new("SLIME_BALL", 1);
+Small_Slime = "SLIME";
+Sound_Slimeblock_place = sound.get("BLOCK_SLIME_BLOCK_PLACE");
+Sound_Cat_Hostile = sound.getCategory("HOSTILE");
+
+@wait
+wait();
+
+if(event == "block_click") {
+	if(action != "RIGHT_CLICK_AIR"){
+		goto("wait");
+	}
+	player_name = player.getName(player);
+	if(player_name == "SirTerence7" || player_name == "marvinius" || player_name == "Mareeeen" || player_name == "fireeagle013"){
+	}else{
+		goto("wait");
+	}
+	equip = living.getEquip(player, hand);
+	Item_Type = item.getType(equip);
+	if(list.contains(item_list, Item_Type)){
+		player_look = entity.getLook(player);
+		player_motion = entity.getMotion(player);
+		x = player_motion[0] - 0.025*player_look[0];
+		z = player_motion[2] - 0.025*player_look[2];
+		entity.setMotion(player, x, player_motion[1], z);
+		goto("wait");
+	}
+	if(Item_Type == "SLIME_BALL"){
+		player_loc = player.getLocation(player);
+		player_look = entity.getLook(player);
+		player_motion = entity.getMotion(player);
+		Slime = entity.spawn(player_loc, Small_Slime);
+		x = player_motion[0] + player_look[0];
+		y = player_motion[1] + player_look[1];
+		z = player_motion[2] + player_look[2];
+		entity.setMotion(Slime, x,y,z);
+		sound.spawn(player_loc, Sound_Slimeblock_place, Sound_Cat_Hostile, 1, 1);
+		particle.spawn(player_loc, Particle_Slime, 3, 0.1, 0.125, 1.2, 0.125);
+	}
+	goto("wait");
+}
+
+if(event == "entity_damage"){
+	if(entity.getType(entity) != Slime){
+		goto("wait");
+	}
+	if(cause != "FALL"){
+		goto("wait");
+	}
+	cancel = true;
+}
+
+if(event == "entity_click"){
+	player_name = player.getName(player);
+	if(player_name == "SirTerence7" || player_name == "marvinius" || player_name == "Mareeeen" || player_name == "fireeagle013"){
+	}else{
+		goto("wait");
+	}
+	entity_Type = entity.getType(entity);
+	if(entity_Type == Slime){
+		entity_loc = entity.getLocation(entity);
+		entity.remove(entity);
+		sound.spawn(player_loc, Sound_Slimeblock_place, Sound_Cat_Hostile, 1, 1);
+		item.drop(Slime_Itemstack, entity_loc);
+	}
+	
+	goto("wait");
+}
+
+if(event == "player_drop"){
+	player_name = player.getName(player);
+	if(player_name == "SirTerence7" || player_name == "marvinius" || player_name == "Mareeeen" || player_name == "fireeagle013"){
+	}else{
+		goto("wait");
+	}
+	amount = item.getAmount(item.entity.get(item_entity));
+	strength = 0.05 * (1+math.log(amount)/math.log(1.5));
+	player_look = entity.getLook(player);
+	player_motion = entity.getMotion(player);
+	x = player_motion[0] - strength*player_look[0];
+	z = player_motion[2] - strength*player_look[2];
+	entity.setMotion(player, x, player_motion[1], z);
+	goto("wait");
+}
+
+if(event == "projectile_hit") {
+	if(shooter == null) {
+		goto("wait");
+	}
+	if(entity_hit == null) {
+		goto("wait");
+	}
+	if(!isPlayer(entity_hit)){
+		goto("wait");
+	}
+	if(!isPlayer(shooter)){
+		goto("wait");
+	}
+	if(shooter == entity_hit){
+		goto("wait");
+	}
+	entity_hit_name = player.getName(entity_hit);
+	if(entity_hit_name == "SirTerence7" || entity_hit_name == "marvinius" || entity_hit_name == "Mareeeen" || entity_hit_name == "fireeagle013"){
+	}else{
+		goto("wait");
+	}
+	shooter_loc = entity.getLocation(shooter);
+	hit_player_loc = entity.getLocation(entity_hit);
+	if(loc.getWorld(shooter_loc) != loc.getWorld(hit_player_loc)){
+		goto("wait");
+	}
+	shooter_loc_X = loc.GetX(shooter_loc);
+	shooter_loc_Y = loc.GetY(shooter_loc);
+	shooter_loc_Z = loc.GetZ(shooter_loc);
+	hit_player_loc_X = loc.GetX(hit_player_loc);
+	hit_player_loc_Y = loc.GetY(hit_player_loc);
+	hit_player_loc_Z = loc.GetZ(hit_player_loc);
+	entity_hit_motion = entity.getMotion(entity_hit);
+	
+	distance = math.abs(loc.distance(shooter_loc, hit_player_loc));
+	
+	x = entity_hit_motion[0] + (hit_player_loc_X - shooter_loc_X+1)/math.pow(distance+1,2);
+	y = entity_hit_motion[1] + 0.25*(hit_player_loc_Y - shooter_loc_Y+1)/math.pow(distance+1,2);
+	z = entity_hit_motion[2] + (hit_player_loc_Z - shooter_loc_Z+1)/math.pow(distance+1,2);
+	entity.setMotion(entity_hit, x, y, z);
+	goto("wait");
+}
+
+if(event == "player_teleport"){
+	player_name = player.getName(player);
+	if(player_name == "SirTerence7" || player_name == "marvinius" || player_name == "Mareeeen" || player_name == "fireeagle013"){
+	}else{
+		goto("wait");
+	}
+	particle.spawn(from, Particle_Table, 25, 0.125, 0.25, 0.5, 0.25);
+	particle.spawn(to, Particle_Soul, 7, 0.5, 0.25, 0.5, 0.25);
+	particle.spawn(to, Particle_Table, 25, 0.5, 0.5, 0.75, 0.5);
+	living.addEffect(player, "BLINDNESS", 20, 1, false);
+	//living.addEffect(player, "CONFUSION", 100, 5, false);
+	//living.addEffect(player, "LEVITATION", 5, 255, false);
+	goto("wait");
+}
+
+if(event == "player_item_held"){
+	player_name = player.getName(player);
+	if(player_name == "SirTerence7" || player_name == "marvinius" || player_name == "Mareeeen" || player_name == "fireeagle013"){
+	}else{
+		goto("wait");
+	}
+	inv = player.getInv(player);
+	item1 = inv.getItem(inv, from);
+	item2 = inv.getItem(inv, to);
+	inv.setItem(inv, to, item1);
+	inv.setItem(inv, from, item2);
+}
+
+if(event == "player_elytra_start"){
+	player_name = player.getName(player);
+	if(player_name == "SirTerence7" || player_name == "marvinius" || player_name == "Mareeeen" || player_name == "fireeagle013"){
+	}else{
+		goto("wait");
+	}
+	if(!player.isSneaking(player)){
+		goto("wait");
+	}
+	player_look = entity.getLook(player);
+	player_motion = entity.getMotion(player);
+	x = player_motion[0] + 0.25*player_look[0];
+	z = player_motion[2] + 0.25*player_look[2];
+	y = math.abs(player_motion[1]) + 0.0125*math.abs(player_look[1]) + 0.5*(math.abs(x) + math.abs(z));
+	entity.setMotion(player, x, y, z);
+	
+}
+
+if(event == "missing_perm"){
+	player_name = player.getName(sender);
+	if(player_name == "SirTerence7" || player_name == "marvinius" || player_name == "Mareeeen" || player_name == "fireeagle013"){
+	}else{
+		goto("wait");
+	}
+	particle.spawn(entity.getLocation(sender), Particle_Smoke, 7, 0.1, 0.125, 1.2, 0.125);
+}
+
+if(event == "missing_command"){
+	player_name = player.getName(sender);
+	if(player_name == "SirTerence7" || player_name == "marvinius" || player_name == "Mareeeen" || player_name == "fireeagle013"){
+	}else{
+		goto("wait");
+	}
+	particle.spawn(entity.getLocation(sender), Particle_Smoke, 7, 0.1, 0.125, 1.2, 0.125);
+}
+goto("wait");
 

+ 27 - 0
Jan/bmq.txt

@@ -3,6 +3,7 @@ event.load("human_damage");
 event.load("human_goal_reach");
 event.load("human_goal_timeout");
 event.load("player_toggle_sneak");
+event.load("entity_click");
 
 survivalworld = world.get("world");
 Human_Spawn1 = loc.new(survivalworld, -2720, 65, 1096);
@@ -31,8 +32,34 @@ uuid = "6cc9f8c7-9dfd-44f4-a3f2-af30054411a8";
 started = false;
 one = false;
 
+Jan_inv = inv.new("333333333", text.new("Quests: Jan"));
+inv.setItem(dieter_inv, 0, item.create("minecraft:enchanted_book", 1, "§fBored Mathematician...", "§e...with some mathematical fun."));
+
 @wait
 wait();
+if(event == "entity_click"){
+	if(!entity.isHuman(entity)) {
+		goto("wait");
+	}
+	human_name = human.getName(entity);
+	if(human_name == "§9Jan") {
+		if(player.isSneaking(player)){
+			inv.open(Jan_inv, player);
+			goto("wait");
+		}
+	}
+	goto("wait");
+}
+
+if(event == "snuvi_click"){
+	item = inv.getItem(inv, inv_slot);
+	item.removeFlag(item, "HIDE_DESTROYS");
+	title_string = string.text(inv_title);
+	if(title_string == "Quests: Jan") {
+		
+	}
+}
+
 if(event == "player_toggle_sneak"){
 	playername = player.getName(player);
 	if(playername == "SirTerence7"){

+ 0 - 0
Jan/enterhaken.txt


+ 57 - 0
Jan/recoil.txt

@@ -0,0 +1,57 @@
+event.load("player_toss");
+//event.load("left_click_air");
+event.load("fishing");
+/*item_list = list.new();
+list.add(item_list, "minecraft:bow");
+list.add(item_list, "minecraft:crossbow");
+list.add(item_list, "km:sling");
+list.add(item_list, "minecraft:trident");
+*/
+level = 2;
+max_level = 5;
+level = max_level+1-level;
+mult = 1;
+
+@wait
+wait();
+/*-if(event == "left_click_air"){
+	mult = -0.25;
+	mult2 = 0;
+	array2 = entity.getMotion(player);
+	if(math,abs(array2[1]) > 0.1){
+		goto("wait");
+	}
+}-*/
+
+name = player.getName(player);
+if(name == "SirTerence7" || name == "Mareeeen"){
+	/*item_type = item.getType(item);
+	if(list.contains(item_list, item_type)){
+		power_level = enchantment.getLevel(enchantment.get("power"), item);
+		multishot_level = enchantment.getLevel(enchantment.get("multishot"), item);
+		piercing_level = enchantment.getLevel(enchantment.get("piercing"), item);
+		impaling_level = enchantment.getLevel(enchantment.get("impaling"), item);
+		strength = 0.2*power_level + 0.6*multishot_level + 0.2*piercing_level + 0.2*impaling_level + 0.1;*/
+		strength = 0.225;
+		array1 = entity.getLook(player);
+		array2 = entity.getMotion(player);
+		if(event == "player_toss"){
+			amount = item.getAmount(item);
+			strength = 0.125 * (1+math.log(amount)/math.log(level));
+		}
+		if(math.abs(array2[1]) > 0.25){
+			x = array2[0]*0.5 - array1[0] * mult * 0.25 * strength;
+			y = array2[1]*0.75 - array1[1] * mult * 0.005 * strength;
+			z = array2[2]*0.5 - array1[2] * mult * 0.25 * strength;
+		}
+		else{
+			x = array2[0] - array1[0] * mult * strength;
+			y = array2[1] - array1[1] * mult * 0.75 * strength;
+			z = array2[2] - array1[2] * mult * strength;
+		}
+		entity.throw(player, x, y, z);
+		//mult = 1;
+	//}
+}
+goto("wait");
+

+ 16 - 17
Piet/4D Feld runter/game.txt

@@ -1,10 +1,10 @@
 
 
-//-------------------Global_Variables------------------------
+//-------------------Global_Variables-----------------------
 fieldSize = 4;
 field = array.new(fieldSize, fieldSize, fieldSize);
 gravityLayer = 0;
-displayCoordinates = array.new(3);
+coordinates = array.new(3);
 //----------------------------------------------------------
 
 
@@ -35,15 +35,13 @@ LayerBlocks[3] = fieldLayerFourBlock;
 
 
 //------------------Commands--------------------------------
-
 //TODO add commands to run the game / interactions with items
 command.add("");
-
 //----------------------------------------------------------
 
 
 //------------------Functions-------------------------------
-function setBlockIn$field(x, y, z, block) {
+function setBlockInfield(x, y, z, block) {
 	//sets a players block at the coordinates
 	$field[x, y, z] = block;
 	enableGravity();
@@ -53,14 +51,14 @@ function setBlockIn$field(x, y, z, block) {
  * generates the $field in Minecraft 	
  * starting at the block x y z and up
  */
-function display$field() {
+function displayField() {
 	//TODO fix loc
 	loc = array.new(3);
 	for (i = 0;  i <= $fieldSize; i++) {
 		for (j = 0;  j <= $fieldSize; j++) {
 			for (k = 0;  k <= $fieldSize; k++) {
-				loc = ($displayCoordinates[0] + i, $displayCoordinates[1] + j, $displayCoordinates[2] + k);
-				block.set(loc, getBlockFrom$field(i, j, k), true);
+				loc = ($coordinates[0] + i, $coordinates[1] + j, $coordinates[2] + k);
+				block.set(loc, getBlockFromfield(i, j, k), true);
 			}
 		}
 	}
@@ -69,7 +67,7 @@ function display$field() {
 /*
  * returns the block at the x, y, z values of $field
  */
-function getBlockFrom$field(x, y, z, block) {
+function getBlockFromfield(x, y, z, block) {
 	for (i = 0; i <= $fieldSize; i++) {
 		if ($field[x, y, z] == i) {
 			return blocks[i];
@@ -83,7 +81,7 @@ function getNumberInBounds(number) {
 }
 
 
-function move$fieldInX() {
+function moveFieldInX() {
 	disposable$field = $field;
 	for (i = 0;  i <= $fieldSize; i++) {
 		for (j = 0;  j <= $fieldSize; j++) {
@@ -93,10 +91,10 @@ function move$fieldInX() {
 		}
 	}
 	$field = disposable$field;
-	display$field();
+	displayfield();
 }
 
-function move$fieldInY() {
+function moveFieldInY() {
 	disposable$field = $field;
 	for (i = 0;  i <= $fieldSize; i++) {
 		for (j = 0;  j <= $fieldSize; j++) {
@@ -106,10 +104,10 @@ function move$fieldInY() {
 		}
 	}
 	$field = disposable$field;
-	display$field();
+	displayField();
 }
 
-function move$fieldInZ() {
+function moveFieldInZ() {
 	disposable$field = $$field;
 	for (i = 0;  i <= $fieldSize; i++) {
 		for (j = 0;  j <= $fieldSize; j++) {
@@ -119,12 +117,12 @@ function move$fieldInZ() {
 		}
 	}
 	$field = disposable$field;
-	display$field();
+	displayfield();
 }
 
-function set$gravityLayer(layer) {
+function setGravityLayer(layer) {
 	while (layer != $gravityLayer) {
-		move$fieldInZ();
+		moveFieldInZ();
 		$gravityLayer++;
 		$gravityLayer = $gravityLayer % $fieldSize;
 	}
@@ -144,3 +142,4 @@ function enableGravity() {
 	}	
 }
 //----------------------------------------------------------
+

+ 63 - 0
Piet/Test1.txt

@@ -0,0 +1,63 @@
+event.load("player_join");
+event.load("player_quit");
+
+databank.workerExecute(databank.prepare("
+	CREATE TABLE IF NOT EXISTS playtime (
+		id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
+		player_id INT NOT NULL, 
+		current_time BIGINT NOT NULL,
+        total_time BIGINT
+	);
+"));
+
+msg.string("dev", "§bPlaytime §rloaded.");
+
+
+@wait
+wait();
+player_id = player.getId(player);
+ignoreGoto(event);
+goto("wait");
+
+@player_join
+deleteDefectPlaytime(player_id);
+goto("wait");
+
+@player_quit
+calculateTotalPlaytime(player_id);
+resetCurrentTime(player_id);
+goto("wait");
+
+function deleteDefectPlaytime(player_id) {
+    stmt = databank.prepare("DELETE FROM playtime WHERE player_id = ? AND current_time IS NOT 0 OR current_time IS NULL;", false);
+	databank.setInt(stmt, 1, player_id);
+	databank.workerExecute(stmt);
+}
+
+function insertPlaytimeLeave(player_id) {
+	stmt = databank.prepare("UPDATE playtime SET leave_time = ? WHERE player_id = ? AND leave_time IS NULL;", false);
+	databank.setLong(stmt, 1, time.getMillis());
+	databank.setInt(stmt, 2, player_id);
+	databank.workerExecute(stmt);
+}
+
+function calculateTotalPlaytime(player_id) {
+    stmt = databank.prepare("UPDATE playtime 
+                             SET total_time 
+                             WHEN total_time IS NULL 
+                                OR total_time = ' ' THEN ? 
+                             ElSE total_time + ? END 
+                             WHERE player_id = ?;", false);
+	databank.setLong(stmt, 1, time.getMillis());
+    databank.setLong(stmt, 2, time.getMillis());
+    databank.setInt(stmt, 3, player_id);
+    databank.workerExecute(stmt);
+}
+
+function resetCurrentTime(player_id) {
+    stmt = databank.prepare("UPDATE playtime 
+                             SET current_time = 0
+                             WHERE player_id = ?;", false);
+    databank.setInt(stmt, 1, player_id);
+    databank.workerExecute(stmt);
+}

+ 10 - 0
docu_core.php

@@ -1600,6 +1600,16 @@
             <td>file.isDirectory(file)</td>
         </tr>
     </table>
+    <table>
+        <tr>
+            <th class="command">file.createFolder</th>
+            <th class="desc">creates a folder</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>file.createFolder(file)</td>
+        </tr>
+    </table>
 </section>
 
 <section id="Config">

+ 91 - 1
docu_minecraft.php

@@ -994,7 +994,7 @@
 	<table>
         <tr>
             <th class="command">block.isLeaves</th>
-            <th class="desc">returns true if a block is a leave</th>
+            <th class="desc">returns true if a block is a leaf</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
@@ -1288,6 +1288,16 @@
             <td>material.setCooldown(material, player, ticks)</td>
         </tr>
     </table>
+	<table>
+        <tr>
+            <th class="command">material.getSlot</th>
+            <th class="desc">returns the slot to use for an item attribute</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>material.getSlot(material)</td>
+        </tr>
+    </table>
 </section>
 
 <section id="Item">
@@ -2262,6 +2272,16 @@
             <td>text.item(show_text, itemstack)</td>
         </tr>
     </table>
+	<table>
+        <tr>
+            <th class="command">text.chest</th>
+            <th class="desc">returns a clickable text for chat/command line insertion</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>text.chest(show_text, chest_text)</td>
+        </tr>
+    </table>
 </section>
 
 <section id="Plot">
@@ -3033,6 +3053,16 @@
             <td>perm.add(perm, player)</td>
         </tr>
     </table>
+    <table>
+        <tr>
+            <th class="command">perm.remove</th>
+            <th class="desc">removes a permission from a player</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>perm.remove(perm, player)</td>
+        </tr>
+    </table>
     <table>
         <tr>
             <th class="command">perm.has</th>
@@ -3960,6 +3990,56 @@
             <td>world.unload(world)</td>
         </tr>
     </table>
+	<table>
+        <tr>
+            <th class="command">world.getLoadedChunks</th>
+            <th class="desc">returns a list with all loaded chunks</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.getLoadedChunks(world)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.unloadChunk</th>
+            <th class="desc">returns true if unloading a chunk is successful</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.unloadChunk(chunk)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.getChunkX</th>
+            <th class="desc">returns the x chunk coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.getChunkX(chunk)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.getChunkZ</th>
+            <th class="desc">returns the x chunk coordinate</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.getChunkZ(chunk)</td>
+        </tr>
+    </table>
+	<table>
+        <tr>
+            <th class="command">world.isForceLoadedChunk</th>
+            <th class="desc">returns true if a chunk is forced to be loaded</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>world.isForceLoadedChunk(chunk)</td>
+        </tr>
+    </table>
 </section>
 
 <section id="Entity">
@@ -4087,6 +4167,16 @@
             <td>entity.unmount(entity)</td>
         </tr>
     </table>
+    <table>
+        <tr>
+            <th class="command">entity.getMount</th>
+            <th class="desc">returns the mount of an entity</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>entity.getMount(entity)</td>
+        </tr>
+    </table>
     <table>
         <tr>
             <th class="command">entity.isWet</th>

+ 5395 - 0
minigames/among_us/among_us.txt

@@ -0,0 +1,5395 @@
+/*
+TODO
+
+event function_key
+status.
+stacks.
+display.
+//TODO
+
+--- Version 2 ---
+Hüte
+Door Closing
+Visual Tasks
+Stay in lobby after win
+Trailer musik. JPB - Defeat the night (feat Ashley appollodor) _NCS Release
+rauswerf animation. mit no gravity stufenweise in die mitte tpen?
+vision durch rauch-partikel rund um den spieler (zylinder)
+geister vanishen, auch bei sich ändernden effekten
+
+*/
+
+cross_red_ = custom;
+
+@game_core
+event.load("entity_dismount");
+event.load("snuvi_click");
+event.load("function_key");
+event.load("player_drop");
+
+player_colors = map.new();
+specific_lobby_handling = true;
+no_lobby_tp = true;
+no_core_reset = true;
+gamename = "§cAmong Us";
+game_short = "among_us";
+rankingtable = "among_us_ranks";
+
+settings_inv = inv.new("222222222222222222222222222222222222222222222222222222", text.new("§cSettings"));
+for(i = 0; i < 9; i++) {
+	inv.setItem(settings_inv, i, item_arrow_up);
+}
+inv.setItem(settings_inv, 9, item.custom.create("GEAR", 1, string.concat("§rImpostors: ", string.number(amount_impostors)), null));
+inv.setItem(settings_inv, 10, item.custom.create("GEAR", 1, string.concat("§rShort Tasks: ", string.number(amount_short)), null));
+inv.setItem(settings_inv, 11, item.custom.create("GEAR", 1, string.concat("§rCommon Tasks: ", string.number(amount_common)), null));
+inv.setItem(settings_inv, 12, item.custom.create("GEAR", 1, string.concat("§rLong Tasks: ", string.number(amount_long)), null));
+inv.setItem(settings_inv, 13, item.custom.create("GEAR", 1, string.concat("§rAmount Meetings: ", string.number(amount_meetings)), null));
+inv.setItem(settings_inv, 14, item.custom.create("GEAR", 1, string.concat("§rMeeting Cooldown: ", string.number(meeting_cooldown)), null));
+inv.setItem(settings_inv, 15, item.custom.create("GEAR", 1, string.concat("§rDiscussion Time: ", string.number(discuss_time)), null));
+inv.setItem(settings_inv, 16, item.custom.create("GEAR", 1, string.concat("§rVoting Time: ", string.number(vote_time)), null));
+inv.setItem(settings_inv, 17, item.custom.create("GEAR", 1, string.concat("§rSpeed: ", string.number(move_speed)), null));
+for(i = 18; i < 27; i++) {
+	inv.setItem(settings_inv, i, item_arrow_down);
+}
+for(i = 27; i < 29; i++) {
+	inv.setItem(settings_inv, i, item_arrow_up);
+}
+inv.setItem(settings_inv, 36, item.custom.create("GEAR", 1, string.concat("§rKill Cooldown: ", string.number(kill_cooldown)), null));
+inv.setItem(settings_inv, 37, item.custom.create("GEAR", 1, string.concat("§rConfirm Ejects: ", confirm_ejects), null));
+//inv.setItem(settings_inv, 38, item.custom.create("GEAR", 1, string.concat("§r: ", string.number()), null));
+//inv.setItem(settings_inv, 39, item.custom.create("GEAR", 1, string.concat("§r: ", string.number()), null));
+//inv.setItem(settings_inv, 40, item.custom.create("GEAR", 1, string.concat("§r: ", string.number()), null));
+//inv.setItem(settings_inv, 41, item.custom.create("GEAR", 1, string.concat("§r: ", string.number()), null));
+//inv.setItem(settings_inv, 42, item.custom.create("GEAR", 1, string.concat("§r: ", string.number()), null));
+//inv.setItem(settings_inv, 43, item.custom.create("GEAR", 1, string.concat("§r: ", string.number()), null));
+//inv.setItem(settings_inv, 44, item.custom.create("GEAR", 1, string.concat("§r: ", string.number()), null));
+for(i = 45; i < 47; i++) {
+	inv.setItem(settings_inv, i, item_arrow_down);
+}
+
+color_list = list.new();
+list.add(color_list, "dark_gray");
+list.add(color_list, "cyan");
+list.add(color_list, "red");
+list.add(color_list, "blue");
+list.add(color_list, "orange");
+list.add(color_list, "green");
+list.add(color_list, "gray");
+list.add(color_list, "white");
+list.add(color_list, "pink");
+list.add(color_list, "purple");
+list.add(color_list, "yellow");
+list.add(color_list, "lime");
+
+cloth_code_map = map.new();
+map.add(cloth_code_map, "dark_gray", 4673362);
+map.add(cloth_code_map, "cyan", 1481884);
+map.add(cloth_code_map, "red", 11546150);
+map.add(cloth_code_map, "blue", 3949738);
+map.add(cloth_code_map, "orange", 16351261);
+map.add(cloth_code_map, "green", 6192150);
+map.add(cloth_code_map, "gray", 10329495);
+map.add(cloth_code_map, "white", 16383998);
+map.add(cloth_code_map, "pink", 15961002);
+map.add(cloth_code_map, "purple", 8991416);
+map.add(cloth_code_map, "yellow", 16701501);
+map.add(cloth_code_map, "lime", 8439583);
+
+color_code_map = map.new();
+map.add(color_code_map, "dark_gray", "§8");
+map.add(color_code_map, "cyan", "§b");
+map.add(color_code_map, "red", "§c");
+map.add(color_code_map, "blue", "§9");
+map.add(color_code_map, "orange", "§6");
+map.add(color_code_map, "green", "§2");
+map.add(color_code_map, "gray", "§7");
+map.add(color_code_map, "white", "§f");
+map.add(color_code_map, "pink", "§d");
+map.add(color_code_map, "purple", "§5");
+map.add(color_code_map, "yellow", "§e");
+map.add(color_code_map, "lime", "§a");
+
+//color_choose_inv = inv.new("000000000 033333300 033333300 000000000");
+color_choose_inv = inv.new("000000000033333300033333300000000000");
+index = 0;
+iter = iterator(color_list);
+while(hasNext(iter)) {
+	color_name = next(iter);
+	cloth_code = map.get(cloth_code_map, color_name);
+	color_name = string.upperFirstLetter(color_name);
+	item = read.item(string.concat("{id:\"minecraft:leather_chestplate\",Count:1b,tag:{Damage:0,display:{color:", cloth_code, ",Name:'{\"text\":\"§r", color_name, "\"}'}}}"));
+	item.addFlag(item, "HIDE_ATTRIBUTES");
+	inv.setItem(color_choose_inv, index++, item);
+}
+
+gosub("setstart");
+goto("simplelobby");
+
+@specificLobbyHandling
+if(event == "player_join") {
+	resetplayer(player);
+	assignSeat(player);
+	if(lobby_leader == null) {
+		lobby_leader = player.getUuid(player);
+		stacks.set(player, 1, "km:gear");
+	}
+	sb.add(player, 99, "Lobby-Leader: ", player.getName(lobby_leader));
+	sb.add(player, 98, gamename);
+	sb.add(player, 97, "Impostors: ", string.number(amount_impostors));
+	sb.add(player, 96, "Short Tasks: ", string.number(amount_short));
+	sb.add(player, 95, "Common Tasks: ", string.number(amount_common));
+	sb.add(player, 94, "Long Tasks: ", string.number(amount_long));
+	sb.add(player, 93, "Amount Meetings: ", string.number(amount_meetings));
+	sb.add(player, 92, "Meeting Cooldown: ", string.number(meeting_cooldown), " s");
+	sb.add(player, 91, "Discussion Time: ", string.number(discuss_time), " s");
+	sb.add(player, 90, "Voting Time: ", string.number(vote_time), " s");
+	sb.add(player, 89, "Speed: ", string.number(move_speed));
+	sb.add(player, 88, "Kill Cooldown: ", string.number(kill_cooldown), " s");
+	sb.add(player, 87, "Confirm Ejects: ", confirm_ejects);
+	sb.add(player, 86, sb.getSpacer());
+	//TODO stacks.set(player, 0, "minecraft:leather_chestplate");
+	player.setSpeed(player, move_speed);
+	player.setHunger(player, 20);
+	player.setSaturation(player, 100);
+	return;
+}
+if(event == "player_drop") {
+	cancel = true;
+	return;
+}
+if(event == "block_click") {
+	if(block_loc == start_sign_loc) {
+		if(player.getUuid(player) != lobby_leader) {
+			msg.prefix(player, gamename, "You are not the Lobby-Leader.");
+			return;
+		}
+		if(!started) {
+			counterindex = 3;
+			goto("startcountdown");
+		}
+	}
+	return;
+}
+if(event == "snuvi_click") {
+	inv_name = string.text(inv_title);
+	if(inv_name == "§cSettings") {
+		//amount_impostors
+		if(inv_slot == 0 || inv_slot == 9 || inv_slot == 18) {
+			if(inv_slot == 0 || inv_slot == 9) {
+				if(amount_impostors < amount_impostors_max) {
+					amount_impostors++;
+				}
+			} elseif(inv_slot == 18) {
+				if(amount_impostors > amount_impostors_min) {
+					amount_impostors--;
+				}
+			}	
+			minigame.displayAll(2, string.concat("Impostors: ", string.number(amount_impostors)));
+			inv.setItem(settings_inv, 9, item.custom.create("GEAR", 1, string.concat("§rImpostors: ", string.number(amount_impostors)), null));
+			return;
+		}
+		//short_tasks
+		if(inv_slot == 1 || inv_slot == 10 || inv_slot == 19) {
+			if(inv_slot == 1 || inv_slot == 10) {
+				if(amount_short < amount_short_max) {
+					amount_short++;
+				}
+			} elseif(inv_slot == 19) {
+				if(amount_short > amount_short_min) {
+					amount_short--;
+				}
+			}	
+			minigame.displayAll(3, string.concat("Short Tasks: ", string.number(amount_short)));
+			inv.setItem(settings_inv, 10, item.custom.create("GEAR", 1, string.concat("§rShort Tasks: ", string.number(amount_short)), null));
+			return;
+		}
+		//common_tasks
+		if(inv_slot == 2 || inv_slot == 11 || inv_slot == 20) {
+			if(inv_slot == 2 || inv_slot == 11) {
+				if(amount_common < amount_common_max) {
+					amount_common++;
+				}
+			} elseif(inv_slot == 20) {
+				if(amount_common > amount_common_min) {
+					amount_common--;
+				}
+			}	
+			minigame.displayAll(4, string.concat("Common Tasks: ", string.number(amount_common)));
+			inv.setItem(settings_inv, 11, item.custom.create("GEAR", 1, string.concat("§rCommon Tasks: ", string.number(amount_common)), null));
+			return;
+		}
+		//long_tasks
+		if(inv_slot == 3 || inv_slot == 12 || inv_slot == 21) {
+			if(inv_slot == 3 || inv_slot == 12) {
+				if(amount_long < amount_long_max) {
+					amount_long++;
+				}
+			} elseif(inv_slot == 21) {
+				if(amount_long > amount_long_min) {
+					amount_long--;
+				}
+			}	
+			minigame.displayAll(5, string.concat("Long Tasks: ", string.number(amount_long)));
+			inv.setItem(settings_inv, 12, item.custom.create("GEAR", 1, string.concat("§rLong Tasks: ", string.number(amount_long)), null));
+			return;
+		}
+		//amount_meetings
+		if(inv_slot == 4 || inv_slot == 13 || inv_slot == 22) {
+			if(inv_slot == 4 || inv_slot == 13) {
+				if(amount_meetings < amount_meetings_max) {
+					amount_meetings++;
+				}
+			} elseif(inv_slot == 22) {
+				if(amount_meetings > amount_meetings_min) {
+					amount_meetings--;
+				}
+			}	
+			minigame.displayAll(6, string.concat("Amount Meetings: ", string.number(amount_meetings)));
+			inv.setItem(settings_inv, 13, item.custom.create("GEAR", 1, string.concat("§rAmount Meetings: ", string.number(amount_meetings)), null));
+			return;
+		}
+		//meeting_cooldown
+		if(inv_slot == 5 || inv_slot == 14 || inv_slot == 23) {
+			if(inv_slot == 5 || inv_slot == 14) {
+				if(meeting_cooldown < meeting_cooldown_max) {
+					meeting_cooldown += 5;
+				}
+			} elseif(inv_slot == 23) {
+				if(meeting_cooldown > meeting_cooldown_min) {
+					meeting_cooldown -= 5;
+				}
+			}	
+			minigame.displayAll(7, string.concat("Meeting Cooldown: ", string.number(meeting_cooldown), " s"));
+			inv.setItem(settings_inv, 14, item.custom.create("GEAR", 1, string.concat("§rMeeting Cooldown: ", string.number(meeting_cooldown)), null));
+			return;
+		}
+		//discuss_time
+		if(inv_slot == 6 || inv_slot == 15 || inv_slot == 24) {
+			if(inv_slot == 6 || inv_slot == 15) {
+				if(discuss_time < discuss_time_max) {
+					discuss_time += 5;
+				}
+			} elseif(inv_slot == 24) {
+				if(discuss_time > discuss_time_min) {
+					discuss_time -= 5;
+				}
+			}	
+			minigame.displayAll(8, string.concat("Discussion Time: ", string.number(discuss_time), " s"));
+			inv.setItem(settings_inv, 15, item.custom.create("GEAR", 1, string.concat("§rDiscussion Time: ", string.number(discuss_time)), null));
+			return;
+		}
+		//vote_time
+		if(inv_slot == 7 || inv_slot == 16 || inv_slot == 25) {
+			if(inv_slot == 7 || inv_slot == 16) {
+				if(vote_time < vote_time_max) {
+					vote_time += 5;
+				}
+			} elseif(inv_slot == 25) {
+				if(vote_time > vote_time_min) {
+					vote_time -= 5;
+				}
+			}	
+			minigame.displayAll(9, string.concat("Voting Time: ", string.number(vote_time), " s"));
+			inv.setItem(settings_inv, 16, item.custom.create("GEAR", 1, string.concat("§rVoting Time: ", string.number(vote_time)), null));
+			return;
+		}
+		//move_speed
+		if(inv_slot == 8 || inv_slot == 17 || inv_slot == 26) {
+			if(inv_slot == 8 || inv_slot == 17) {
+				if(move_speed < move_speed_max) {
+					move_speed += 0.25;
+				}
+			} elseif(inv_slot == 26) {
+				if(move_speed > move_speed_min) {
+					move_speed -= 0.25;
+				}
+			}
+			iter = iterator(minigame.getPlayers(script_id));
+			while(hasNext(iter)) {
+				p_uuid = next(iter);
+				p = player.get(p_uuid);
+				player.setSpeed(p, move_speed);
+			}
+			minigame.displayAll(10, string.concat("Speed: ", string.number(move_speed)));
+			inv.setItem(settings_inv, 17, item.custom.create("GEAR", 1, string.concat("§rSpeed: ", string.number(move_speed)), null));
+			return;
+		}
+		//kill_cooldown
+		if(inv_slot == 27 || inv_slot == 36 || inv_slot == 45) {
+			if(inv_slot == 27 || inv_slot == 36) {
+				if(kill_cooldown < kill_cooldown_max) {
+					kill_cooldown++;
+				}
+			} elseif(inv_slot == 45) {
+				if(kill_cooldown > kill_cooldown_min) {
+					kill_cooldown--;
+				}
+			}	
+			minigame.displayAll(11, string.concat("Kill Cooldown: ", string.number(kill_cooldown), " s"));
+			inv.setItem(settings_inv, 36, item.custom.create("GEAR", 1, string.concat("§rKill Cooldown: ", string.number(kill_cooldown)), null));
+			return;
+		}
+		//confirm_ejects
+		if(inv_slot == 28 || inv_slot == 37 || inv_slot == 46) {
+			if(confirm_ejects) {
+				confirm_ejects = false;
+			} else {
+				confirm_ejects = true;
+			}
+			minigame.displayAll(12, string.concat("Confirm Ejects: ", confirm_ejects));
+			inv.setItem(settings_inv, 37, item.custom.create("GEAR", 1, string.concat("§rConfirm Ejects: ", confirm_ejects), null));
+			return;
+		}
+		return;
+	}
+	if(inv_name == "§cChoose your color") {
+		item_name = string.text(item.getName(item));
+		if(string.startsWith(item_name, "§cUsed", 0)) {
+			return;
+		}
+		color = amongus.getPlayerColor(player);
+		if(color != null) {
+			item.setName(inv.getItem(inv, list.getIndexOf(color_list, color)), string.concat("§r", string.upperFirstLetter(color)));
+		}
+		new_color = string.removeFormat(string.toLowerCase(item_name));
+		cloth_color = map.get(cloth_code_map, new_color);
+		amongus.setPlayerColor(player, new_color);
+		item.setName(item, string.concat("§cUsed by ", player.getName(player)));
+		amongus.forceEquip(player, new_color);
+	}
+	return;
+}
+if(event == "function_key") {
+	if(key == 1) {
+		inv.open(color_choose_inv, player, "§cChoose your color");
+		return;
+	}
+	if(key == 2) {
+		if(player.getUuid(player) != lobby_leader) {
+			return;
+		}
+		inv.open(settings_inv, player);
+		return;
+	}
+	return;
+}
+if(event == "entity_dismount") {
+	if(isPlayer(entity)) {
+		leaveSeat(entity);
+	}
+	return;
+}
+if(event == "player_logout" || event == "player_giveup") {
+	leaveSeat(player);
+	if(lobby_leader == player.getUuid(player)) {
+		list = minigame.getPlayers(script_id);
+		if(list.getSize(list) != 0) {
+			lobby_leader = list.getIndex(list, 0);
+		}
+	}
+}
+return;
+
+@finalstart
+player_list = minigame.getPlayers(script_id);
+
+gosub("init_map_specific");
+
+progress_bar = boss.create(text.new("TOTAL TASKS COMPLETED"), "GREEN", "SOLID");
+boss.setProgress(progress_bar, 0);
+
+wooden_trapdoors_tag = block.getTag("minecraft:wooden_trapdoors");
+shulker_tag = block.getTag("minecraft:shulker_boxes");
+
+master_sound_category = sound.getCategory("master");
+kill_sound = sound.get("entity.slime.hurt");
+task_sound = sound.get("minecraft:block.note_block.chime");
+vote_sound = sound.get("minecraft:block.note_block.pling");
+vote_ends_sound = sound.get("minecraft:block.note_block.bell");
+crit_sabo_sound = sound.get("minecraft:block.note_block.bell");
+
+all_list = list.new(); //All players (Ingame + Ghost + Left)
+vote_inv_map = map.new();
+sabo_par_list = list.new();
+ghosts = list.new();
+dead_bodies = list.new();
+roles = map.new();
+player_tasks = map.new();
+task_steps = map.new();
+all_tasks = map.new();
+auto_close_list = list.new();
+auto_close_list_2 = list.new();
+task_part_map = map.new();
+admin_table_map = map.new(); //In welchem Raum befindet sich ein Spieler? (Geister ausgenommen)
+admin_table_map_2 = map.new(); //Wie viele Spieler befinden sich in einem Raum? (Geister ausgenommen)
+impostors_list = list.new(); //Impostors (Ingame + Ghost + Left)
+impostors_list_2 = list.new(); //Impostors (Ingame + Ghost)
+holded_kill_cooldown = map.new();
+report_map = map.new();
+meeting_amounts = map.new();
+removed_perms = list.new(); //Spieler-Uuids, denen Building-Perms entfernt wurden
+
+short_tasks = list.new();
+list.addAll(short_tasks, 1, 3, 5, 6, 7, 9, 14, 15, 17);
+common_tasks = list.new();
+list.addAll(common_tasks, 10, 11);
+long_tasks = list.new();
+list.addAll(long_tasks, 2, 4, 8, 12, 13, 16);
+amount_done_tasks = 0;
+
+sabo_list = list.new();
+comms_state_list = list.new();
+comms_fix_list = list.new();
+comms_fix_map = map.new();
+comms_state_map = map.new();
+comms_counter_map = map.new();
+comms_inv_map = map.new();
+oxygen_map = map.new();
+vent_list = list.new();
+vent_map_2 = map.new();
+vent_map_4 = map.new();
+vent_loop = false;
+cam_list = list.new();
+cam_map = map.new();
+cam_map_2 = map.new();
+cam_map_3 = map.new();
+cam_map_4 = map.new();
+
+align_engine_map = map.new(); //Position des Engine-Outputs für jeden Spieler
+align_engine_map_2 = map.new(); //Dient zur Zuordnung zur Engine-Location bei korrekt ausgerichtetem Engine-Output
+align_le_engine_set = set.new(); //Spieler, die Align-Engine bei Lower-Engine gemacht haben
+align_ue_engine_set = set.new(); //Spieler, die Align-Engine bei Upper-Engine gemacht haben
+submit_scan_list = list.new();
+submit_scan_list_2 = list.new();
+submit_scan_map = map.new();
+submit_scan_map_2 = map.new();
+ast_directions = array.new(8);
+ast_start_pos = list.new();
+ast_start_pos_dirs = map.new();
+clear_ast_list = list.new();
+clear_ast_list_2 = list.new();
+clear_ast_list_3 = list.new();
+clear_ast_map = map.new();
+clear_ast_map_2 = map.new();
+clear_ast_map_3 = map.new();
+fuel_counter = map.new();
+download_counter = map.new();
+download_map = map.new();
+download_map_3 = map.new();
+download_list = list.new();
+download_list_2 = list.new();
+chart_course_counter = map.new();
+chart_course_pattern = map.new();
+manifolds_counter = map.new();
+manifolds_list = list.new();
+manifolds_list_2 = list.new();
+reactor_draw_list_1 = list.new();
+reactor_draw_list_2 = list.new();
+reset_reactor_draw_list = list.new();
+reactor_block_list = list.new();
+reset_reactor_click_list = list.new();
+reset_reactor_click_list_2 = list.new();
+reactor_false_click_list = list.new();
+start_reactor_map = map.new();
+sample_list = list.new();
+sample_list_2 = list.new();
+empty_garb_list = list.new();
+empty_garb_list_2 = list.new();
+empty_garb_map = map.new();
+empty_garb_map_2 = map.new();
+empty_garb_map_3 = map.new();
+sample_map = map.new();
+calibrate_dist_list = list.new();
+calibrate_dist_list_2 = list.new();
+calibrate_dist_map = map.new();
+wires_map = map.new();
+wires_map_2 = map.new();
+wires_map_4 = map.new();
+swipe_card_map = map.new();
+divert_pow_map_3 = map.new();
+clean_o2_map = map.new();
+
+align_engine_array = array.new(11);
+temp_list = list.new();
+list.addAll(temp_list, 34, 42);
+align_engine_array[0] = temp_list;
+temp_list = list.new();
+list.addAll(temp_list, 25, 32, 33, 39, 40);
+align_engine_array[1] = temp_list;
+temp_list = list.new();
+list.addAll(temp_list, 24, 25, 30, 31, 32, 36, 37, 38);
+align_engine_array[2] = temp_list;
+temp_list = list.new();
+list.addAll(temp_list, 23, 24, 25, 28, 29, 30, 31, 36);
+align_engine_array[3] = temp_list;
+temp_list = list.new();
+list.addAll(temp_list, 22, 23, 24, 25, 27, 28, 29, 30);
+align_engine_array[4] = temp_list;
+temp_list = list.new();
+list.addAll(temp_list, 18, 19, 20, 21, 22, 23, 24, 25);
+align_engine_array[5] = temp_list;
+temp_list = list.new();
+list.addAll(temp_list, 9, 10, 11, 12, 22, 23, 24, 25);
+align_engine_array[6] = temp_list;
+temp_list = list.new();
+list.addAll(temp_list, 0, 10, 11, 12, 13, 23, 24, 25);
+align_engine_array[7] = temp_list;
+temp_list = list.new();
+list.addAll(temp_list, 0, 1, 2, 12, 13, 14, 24, 25);
+align_engine_array[8] = temp_list;
+temp_list = list.new();
+list.addAll(temp_list, 3, 4, 14, 15, 25);
+align_engine_array[9] = temp_list;
+temp_list = list.new();
+list.addAll(temp_list, 6, 16);
+align_engine_array[10] = temp_list;
+
+calibrate_dist_array = array.new(12);
+calibrate_dist_array[0] = 5;
+calibrate_dist_array[1] = 4;
+calibrate_dist_array[2] = 3;
+calibrate_dist_array[3] = 6;
+calibrate_dist_array[4] = 8;
+calibrate_dist_array[5] = 12;
+calibrate_dist_array[6] = 15;
+calibrate_dist_array[7] = 16;
+calibrate_dist_array[8] = 17;
+calibrate_dist_array[9] = 13;
+calibrate_dist_array[10] = 9;
+calibrate_dist_array[11] = 7;
+
+wires_list = list.new();
+list.add(wires_list, item.create("minecraft:blue_stained_glass_pane", 1, "§rBlue Wire", null));
+list.add(wires_list, item.create("minecraft:green_stained_glass_pane", 1, "§rGreen Wire", null));
+list.add(wires_list, item.create("minecraft:red_stained_glass_pane", 1, "§rRed Wire", null));
+list.add(wires_list, item.create("minecraft:yellow_stained_glass_pane", 1, "§rYellow Wire", null));
+
+garb_items = list.new();
+list.add(garb_items, item.new(material.get("minecraft:diamond")));
+list.add(garb_items, item.new(material.get("minecraft:dead_bush")));
+list.add(garb_items, item.new(material.get("minecraft:rotten_flesh")));
+list.add(garb_items, item.new(material.get("minecraft:totem_of_undying")));
+list.add(garb_items, item.new(material.get("minecraft:bone")));
+list.add(garb_items, item.new(material.get("minecraft:bone_meal")));
+
+addAstDirection(0, 1, 0); //rechts
+addAstDirection(1, -1, 0); //links
+addAstDirection(2, 0, -1); //oben
+addAstDirection(3, 0, 1); //unten
+addAstDirection(4, 1, -1); //rechts oben
+addAstDirection(5, -1, 1); //links unten
+addAstDirection(6, 1, 1); //rechts unten
+addAstDirection(7, -1, -1); //links oben
+
+addAstStartPos(0, 6, 6, 6);
+addAstStartPos(1, 3, 5, 6);
+addAstStartPos(2, 3, 5, 6);
+addAstStartPos(3, 3, 5, 6);
+addAstStartPos(4, 3, 5, 6);
+addAstStartPos(5, 3, 5, 6);
+addAstStartPos(6, 3, 5, 6);
+addAstStartPos(7, 3, 5, 6);
+addAstStartPos(8, 5, 5, 5);
+addAstStartPos(9, 0, 4, 6);
+addAstStartPos(17, 1, 5, 7);
+addAstStartPos(18, 0, 4, 6);
+addAstStartPos(26, 1, 5, 7);
+addAstStartPos(27, 0, 4, 6);
+addAstStartPos(35, 1, 5, 7);
+addAstStartPos(36, 0, 4, 6);
+addAstStartPos(44, 1, 5, 7);
+addAstStartPos(45, 4, 4, 4);
+addAstStartPos(46, 2, 4, 7);
+addAstStartPos(47, 2, 4, 7);
+addAstStartPos(48, 2, 4, 7);
+addAstStartPos(49, 2, 4, 7);
+addAstStartPos(50, 2, 4, 7);
+addAstStartPos(51, 2, 4, 7);
+addAstStartPos(52, 2, 4, 7);
+addAstStartPos(53, 7, 7, 7);
+
+air_item = item.getAir();
+lime_glass = item.create("minecraft:lime_stained_glass_pane", 1, "", null);
+green_glass = item.create("minecraft:green_stained_glass_pane", 1, "", null);
+red_glass = item.create("minecraft:red_stained_glass_pane", 1, "", null);
+gray_glass = item.create("minecraft:gray_stained_glass_pane", 1, "", null);
+black_glass = item.create("minecraft:black_stained_glass_pane", 1, "", null);
+yellow_glass = item.create("minecraft:yellow_stained_glass_pane", 1, "", null);
+blue_glass = item.create("minecraft:blue_stained_glass_pane", 1, "", null);
+cyan_glass = item.create("minecraft:cyan_stained_glass_pane", 1, "", null);
+zombie_head = item.create("zombie_head", 1, "", null);
+zombie_head_mat = material.get("ZOMBIE_HEAD");
+player_head_mat = material.get("PLAYER_HEAD");
+
+space_par = particle.get("END_ROD");
+task_par = particle.get("COMPOSTER");
+cam_par = particle.get("SPELL_WITCH");
+sabo_par = particle.get("SPELL_WITCH");
+imp_par = particle.get("SPELL_WITCH");
+
+cam_loop = false;
+meeting = false;
+amongus.setAlert(false);
+lights_sabotaged = false;
+comms_sabotaged = false;
+reactor_sabotaged = false;
+oxygen_sabotaged = false;
+reactor_used = false;
+lights_inv = inv.new("202020202", text.new("§cFix Lights"));
+reactor_inv_1 = inv.new("222222222222222222222222222222222222222222222222222222", text.new("§cPRESS TO STOP MELTDOWN"));
+sabotage.holdReactor(reactor_inv_1, false);
+reactor_inv_2 = inv.new("222222222222222222222222222222222222222222222222222222", text.new("§cPRESS TO STOP MELTDOWN"));
+sabotage.holdReactor(reactor_inv_2, false);
+reactor_hold_list_1 = list.new();
+reactor_hold_list_2 = list.new();
+
+common_tasks_2 = list.new();
+for(i = 0; i < amount_common; i++) {
+	index = math.random(0, list.getSize(common_tasks) - 1);
+	id = list.getIndex(common_tasks, index);
+	list.add(common_tasks_2, id);
+}
+
+registerTask(1, "Storage", "Fuel Engines", 0, 4);
+registerTask(2, "[Room]", "Download Data", 0, 2);
+registerTask(3, "Shields", "Prime Shields", 0, 1);
+registerTask(4, "Reactor", "Start Reactor", 0, 1);
+registerTask(5, "Reactor", "Unlock Manifolds", 0, 1);
+registerTask(6, "Navigation", "Chart Course", 0, 1);
+registerTask(7, "Navigation", "Stabilize Steering", 0, 1);
+registerTask(8, "MedBay", "Inspect Sample", 0, 1);
+registerTask(9, "Electrical", "Calibrate Distributor", 0, 1);
+registerTask(10, "Cafeteria", "Fix Wiring", 0, 3);
+registerTask(11, "Admin", "Swipe Card", 0, 1);
+registerTask(12, "Cafeteria", "Empty Garbage", 0, 2);
+registerTask(13, "Weapons", "Clear Asteroids", 0, 20);
+registerTask(14, "Electrical", "Divert Power to [Room]", 0, 2);
+registerTask(15, "O2", "Clean O2 Filter", 0, 1);
+registerTask(16, "MedBay", "Submit Scan", 0, 1);
+registerTask(17, "UE/LE", "Align Engine Output", 0, 2);
+
+player_list_size = list.getSize(player_list);
+
+if(player_list_size < 6) {
+	amount_impostors = 1;
+}
+
+imps = set.new();
+for(i = 0; i < amount_impostors; i++) {
+	index = math.random(0, player_list_size - 1);
+	while(set.contains(imps, index)) {
+		index = math.random(0, player_list_size - 1);
+	}
+	set.add(imps, index);
+}
+if(player_list_size == 1) {
+	amount_all_tasks = 17;
+	freeplay = true;
+} else {
+	minplayers = multi_minplayers;
+	amount_crew = player_list_size - amount_impostors;
+	amount_all_tasks = (amount_short + amount_common + amount_long) * amount_crew;
+	freeplay = false;
+}
+
+for(i = 0; i < player_list_size; i++) {
+	p_uuid = list.getIndex(player_list, i);
+	p = player.get(p_uuid);
+	if(amount_impostors > 1) {
+		msg.prefix(p, gamename, string.concat("There are §c", string.number(amount_impostors), " Impostors §ramong us."));
+	} else {
+		msg.prefix(p, gamename, string.concat("There is §c", string.number(amount_impostors), " Impostor §ramong us."));
+	}
+
+	entity.teleport(p, list.getIndex(spawn_locs, i));
+	sound.spawnForPlayer(p, pling_sound, sound_category_ambient);
+	player.setGamemode(p, "survival");
+	player.setFly(p, false);
+	entity.setName(p, "");
+}
+
+for(h = 0; h < player_list_size; h++) {
+	p_uuid = list.getIndex(player_list, h);
+	p = player.get(p_uuid);
+	list.add(all_list, p_uuid);
+	boss.addPlayer(progress_bar, p);
+	data.setTimer(p, "Meeting Cooldown", $meeting_cooldown * 20);
+	status.addTimed(p, 0, $meeting_cooldown * 20, "Meeting Cooldown");
+	player.setSpeed(p, move_speed);
+	map.add(meeting_amounts, p_uuid, amount_meetings);
+	player.clearInventory(p);
+	player.giveItem(p, read.item("minecraft:map"));
+	inv.close(p);
+	player.gameMute(p, true);
+	//Building-Perms entfernen
+	if(perm.has(p, "plot.bypass")) {
+		perm.unregisterPlayer(p_uuid, 1);
+		perm.unregisterPlayer(p_uuid, 15);
+		list.add(removed_perms, p_uuid);
+	}
+	//Farbe zuweisen bzw. erneut forcen
+	color = amongus.getPlayerColor(p);
+	if(color == null) {
+		iter = iterator(color_list);
+		while(hasNext(iter)) {
+			color = next(iter);
+			if(!amongus.isUsedPlayerColor(color)) {
+				amongus.setPlayerColor(p, color);
+				amongus.forceEquip(p, color);
+				break;
+			}
+		}
+	} else {
+		amongus.forceEquip(p, color);
+	}
+	
+	display.reset(p);
+	if(set.contains(imps, h)) {
+		setImpostor(p);
+	} else {
+		setCrewmate(p);
+	}
+	if(freeplay) {
+		giveTask(p, 1, "Storage", "Fuel Engines", 0, 4, null);
+		giveTask(p, 2, "[Room]", "Download Data", 0, 2, null);
+		giveTask(p, 3, "Shields", "Prime Shields", 0, 1, null);
+		giveTask(p, 4, "Reactor", "Start Reactor", 0, 1, null);
+		giveTask(p, 5, "Reactor", "Unlock Manifolds", 0, 1, null);
+		giveTask(p, 6, "Navigation", "Chart Course", 0, 1, null);
+		giveTask(p, 7, "Navigation", "Stabilize Steering", 0, 1, null);
+		giveTask(p, 8, "MedBay", "Inspect Sample", 0, 1, null);
+		giveTask(p, 9, "Electrical", "Calibrate Distributor", 0, 1, null);
+		giveTask(p, 10, "Cafeteria", "Fix Wiring", 0, 3, null);
+		giveTask(p, 11, "Admin", "Swipe Card", 0, 1, null);
+		giveTask(p, 12, "Cafeteria", "Empty Garbage", 0, 2, null);
+		giveTask(p, 13, "Weapons", "Clear Asteroids", 0, 20, null);
+		giveTask(p, 14, "Electrical", "Divert Power to [Room]", 0, 2, null);
+		giveTask(p, 15, "O2", "Clean O2 Filter", 0, 1, null);
+		giveTask(p, 16, "MedBay", "Submit Scan", 0, 1, null);
+		giveTask(p, 17, "UE/LE", "Align Engine Output", 0, 2, null);
+	} else {
+		for(i = 0; i < list.getSize(common_tasks_2); i++) {
+			id = list.getIndex(common_tasks_2, i);
+			a = map.get(all_tasks, id);
+			giveTask(p, id, a[0], a[1], a[2], a[3], null);
+		}
+		i = 0;
+		while(i != amount_short) {
+			index = math.random(0, list.getSize(short_tasks) - 1);
+			id = list.getIndex(short_tasks, index);
+			if(hasTask(p, id)) {
+				continue;
+			}
+			i++;
+			a = map.get(all_tasks, id);
+			giveTask(p, id, a[0], a[1], a[2], a[3], null);
+		}
+		i = 0;
+		while(i != amount_long) {
+			index = math.random(0, list.getSize(long_tasks) - 1);
+			id = list.getIndex(long_tasks, index);
+			if(hasTask(p, id)) {
+				continue;
+			}
+			i++;
+			a = map.get(all_tasks, id);
+			giveTask(p, id, a[0], a[1], a[2], a[3], null);
+		}
+	}
+}
+
+if(freeplay) {
+	starttime = time.getMillis();
+} else {
+	imp_string = "";
+	iter = iterator(impostors_list);
+	while(hasNext(iter)) {
+		p_uuid = next(iter);
+		p_name = player.getName(p_uuid);
+		if(imp_string == "") {
+			imp_string = p_name;
+		} else {
+			imp_string = string.concat(imp_string, ", ", amongus.getPlayerColorCode(p_uuid), p_name);
+		}
+	}
+	for(i = 0; i < list.getSize(impostors_list); i++) {
+		p_uuid = list.getIndex(impostors_list, i);
+		p = player.get(p_uuid);
+		map.remove(player_tasks, p_uuid);
+		msg.prefix(p, gamename, string.concat("§4Impostors: §r", imp_string));
+	}
+}
+
+setSaboCooldown(0);
+
+event.unload("entity_dismount");
+event.load("chat");
+event.load("player_move");
+event.load("inv_close");
+event.load("player_data_tick");
+
+sgoto(10, "space_loop");
+sgoto(10, "task_part_loop");
+sgoto(5, "imp_par_loop");
+
+switchLights(true);
+
+goto("loop");
+
+@checkgame
+wait();
+if(event == "entity_damage") {
+	if(isPlayer(entity)) {
+		player = entity;
+		if(player.hasMinigameId(player, script_id)) {
+			cancel = true;
+		}
+	} else {
+		player = player.getFromDamageSource(damage_source);
+		if(player == null) {
+			goto("checkgame");
+		}
+		if(player.hasMinigameId(player, script_id)) {
+			cancel = true;
+		}
+	}
+	goto("checkgame");
+}
+if(player.hasMinigameId(player, script_id)) {
+	ignoreGoto(event);
+}
+goto("checkgame");
+
+@chat
+cancel = true;
+if(player.isGhost(player)) {
+	iter = iterator(ghosts);
+	while(hasNext(iter)) {
+		p_uuid = next(iter);
+		if(!list.contains(player_list, p_uuid)) {
+			continue;
+		}
+		p = player.get(p_uuid);
+		msg.prefix(p, string.concat("Ghost ", amongus.getPlayerColorCode(player), player.getName(player)), message);
+	}
+	goto("checkgame");
+}
+if(meeting) {
+	minigame.speakAll(string.concat(amongus.getPlayerColorCode(player), player.getName(player)), message);
+} else {
+	msg.prefix(player, "§6Commands", "You are muted.");
+}
+goto("checkgame");
+
+@player_move
+player_uuid = player.getUuid(player);
+player.action(player, map.getOrDefault(move_id_map, id, ""));
+if(player.isOnCam(player)) {
+	goto("checkgame");
+}
+if(player.isGhost(player)) {
+	goto("checkgame");
+}
+old_room_id = map.getOrDefault(admin_table_map, player_uuid, "");
+if(old_room_id != id) {
+	map.add(admin_table_map, player_uuid, id);
+	//Neuer Raum
+	amount_players = map.getOrDefault(admin_table_map_2, id, 0) + 1;
+	map.add(admin_table_map_2, id, amount_players);
+	amongus.updateAdminTable(id, amount_players);
+	//Alter Raum
+	amount_players = map.getOrDefault(admin_table_map_2, old_room_id, 0) - 1;
+	map.add(admin_table_map_2, old_room_id, amount_players);
+	amongus.updateAdminTable(old_room_id, amount_players);
+}
+goto("checkgame");
+
+function amongus.updateAdminTable(room_id, amount_players) {
+	if(amount_players == 0) {
+		if(room_id == $move_id_le) {
+			inv.setItem($admin_table_inv, 23, read.item("minecraft:blue_stained_glass_pane", 1, "§rLower Engine"));
+		} elseif(room_id == $move_id_sec) {
+			inv.setItem($admin_table_inv, 14, read.item("minecraft:blue_stained_glass_pane", 1, "§rSecurity"));
+		} elseif(room_id == $move_id_ue) {
+			inv.setItem($admin_table_inv, 0, read.item("minecraft:blue_stained_glass_pane", 1, "§rUpper Engine"));
+		} elseif(room_id == $move_id_reac) {
+			inv.setItem($admin_table_inv, 12, read.item("minecraft:blue_stained_glass_pane", 1, "§rReactor"));
+		} elseif(room_id == $move_id_o2) {
+			inv.setItem($admin_table_inv, 10, read.item("minecraft:blue_stained_glass_pane", 1, "§rO2"));
+		} elseif(room_id == $move_id_navi) {
+			inv.setItem($admin_table_inv, 18, read.item("minecraft:blue_stained_glass_pane", 1, "§rNavigation"));
+		} elseif(room_id == $move_id_weap) {
+			inv.setItem($admin_table_inv, 6, read.item("minecraft:blue_stained_glass_pane", 1, "§rWeapons"));
+		} elseif(room_id == $move_id_shie) {
+			inv.setItem($admin_table_inv, 29, read.item("minecraft:blue_stained_glass_pane", 1, "§rShields"));
+		} elseif(room_id == $move_id_comm) {
+			inv.setItem($admin_table_inv, 30, read.item("minecraft:blue_stained_glass_pane", 1, "§rCommunications"));
+		} elseif(room_id == $move_id_stor1 || room_id == $move_id_stor2) {
+			inv.setItem($admin_table_inv, 27, read.item("minecraft:blue_stained_glass_pane", 1, "§rStorage"));
+		} elseif(room_id == $move_id_elec1 || room_id == $move_id_elec2) {
+			inv.setItem($admin_table_inv, 20, read.item("minecraft:blue_stained_glass_pane", 1, "§rElectrical"));
+		} elseif(room_id == $move_id_med1 || room_id == $move_id_med2) {
+			inv.setItem($admin_table_inv, 8, read.item("minecraft:blue_stained_glass_pane", 1, "§rMedBay"));
+		} elseif(room_id == $move_id_cafe) {
+			inv.setItem($admin_table_inv, 4, read.item("minecraft:blue_stained_glass_pane", 1, "§rCafeteria"));
+		} elseif(room_id == $move_id_admin) {
+			inv.setItem($admin_table_inv, 16, read.item("minecraft:blue_stained_glass_pane", 1, "§rAdmin"));
+		}
+	} else {
+		if(room_id == move_id_le) {
+			inv.setItem($admin_table_inv, 23, read.item("minecraft:sticky_piston", amount_players, "§rLower Engine"));
+		} elseif(room_id == $move_id_sec) {
+			inv.setItem($admin_table_inv, 14, read.item("minecraft:observer", amount_players, "§rSecurity"));
+		} elseif(room_id == $move_id_ue) {
+			inv.setItem($admin_table_inv, 0, read.item("minecraft:sticky_piston", amount_players, "§rUpper Engine"));
+		} elseif(room_id == $move_id_reac) {
+			inv.setItem($admin_table_inv, 12, read.item("minecraft:tnt", amount_players, "§rReactor"));
+		} elseif(room_id == $move_id_o2) {
+			inv.setItem($admin_table_inv, 10, read.item("km:plum_sapling", amount_players, "§rO2"));
+		} elseif(room_id == $move_id_navi) {
+			inv.setItem($admin_table_inv, 18, read.item("minecraft:compass", amount_players, "§rNavigation"));
+		} elseif(room_id == $move_id_weap) {
+			sword_item = read.item("minecraft:golden_sword", amount_players, "§rWeapons");
+			item.addFlag(sword_item, "HIDE_ATTRIBUTES");
+			inv.setItem($admin_table_inv, 6, sword_item);
+		} elseif(room_id == $move_id_shie) {
+			inv.setItem($admin_table_inv, 29, read.item("minecraft:shield", amount_players, "§rShields"));
+		} elseif(room_id == $move_id_comm) {
+			inv.setItem($admin_table_inv, 30, read.item("minecraft:end_rod", amount_players, "§rCommunications"));
+		} elseif(room_id == $move_id_stor1 || room_id == $move_id_stor2) {
+			inv.setItem($admin_table_inv, 27, read.item("minecraft:red_shulker_box", amount_players, "§rStorage"));
+		} elseif(room_id == $move_id_elec1 || room_id == $move_id_elec2) {
+			inv.setItem($admin_table_inv, 20, read.item("minecraft:redstone", amount_players, "§rElectrical"));
+		} elseif(room_id == $move_id_med1 || room_id == $move_id_med2) {
+			inv.setItem($admin_table_inv, 8, read.item("km:plus_red", amount_players, "§rMedBay"));
+		} elseif(room_id == $move_id_cafe) {
+			inv.setItem($admin_table_inv, 4, read.item("minecraft:cake", amount_players, "§rCafeteria"));
+		} elseif(room_id == $move_id_admin) {
+			inv.setItem($admin_table_inv, 16, read.item("minecraft:lectern", amount_players, "§rAdmin"));
+		}
+	}
+}
+
+@block_click
+if(action != "RIGHT_CLICK_BLOCK") {
+	goto("checkgame");
+}
+if(slot.isOffHand(hand)) {
+	goto("checkgame");
+}
+if(block.hasTag(block, shulker_tag)) {
+	cancel = true;
+	goto("checkgame");
+}
+if(block.hasTag(block, wooden_trapdoors_tag)) {
+	cancel = true;
+	goto("checkgame");
+}
+block_loc = block.getLocation(block);
+if(set.contains(cams_locs, block_loc)) {
+	cam_number = 0;
+	player_uuid = player.getUuid(player);
+	map.add(cam_map, player_uuid, cam_number);
+	player_loc = entity.getLocation(player);
+	map.add(cam_map_2, player_uuid, player_loc);
+	if(!player.isGhost(player)) {
+		ent = human.spawn(player_loc);
+		living.removeAi(ent);
+		map.add(cam_map_3, player_uuid, ent);
+		map.add(cam_map_4, ent, player_uuid);
+		human.setSkin(ent, player_uuid);
+		entity.setName(ent, "");
+		color = amongus.getPlayerColor(player);
+		amongus.forceEquip(ent, color);
+	}
+	cam.enter(player);
+	goto("checkgame");
+}
+if(set.contains(med_scan_locs, block_loc)) {
+	task_id = 16;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	if(loc.distance(entity.getLocation(player), block_loc) > 3) {
+		msg.prefix(player, gamename, "Get closer.");
+		goto("checkgame");
+	}
+	player_uuid = player.getUuid(player);
+	//inv = inv.new("202222202 002222200 202222202 002222200 202222202 003333300");
+	inv = inv.new("202222202002222200202222202002222200202222202003333300");
+	inv.setItem(inv, 9, player.getHead(player_uuid, player.getName(player)));
+	color = amongus.getPlayerColor(player);
+	color_code = map.get(cloth_code_map, color);
+	item = read.item(string.concat("{id:\"minecraft:leather_chestplate\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+	item.addFlag(item, "HIDE_ATTRIBUTES");
+	inv.setItem(inv, 15, item);
+	item = read.item(string.concat("{id:\"minecraft:leather_leggings\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+	item.addFlag(item, "HIDE_ATTRIBUTES");
+	inv.setItem(inv, 21, item);
+	item = read.item(string.concat("{id:\"minecraft:leather_boots\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+	item.addFlag(item, "HIDE_ATTRIBUTES");
+	inv.setItem(inv, 27, item);
+	inv.open(inv, player, "§cSubmit Scan");
+	list.add(submit_scan_list, player_uuid);
+	map.add(submit_scan_map, player_uuid, 0);
+	map.add(submit_scan_map_2, player_uuid, inv);
+	sgoto(20, "submit_scan");
+	goto("checkgame");
+}
+if(set.contains(clear_ast_locs, block_loc)) {
+	task_id = 13;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 20) {
+		goto("checkgame");
+	}
+	//inv = inv.new("333333333 333333333 333333333 333333333 333333333 333333333");
+	inv = inv.new("333333333333333333333333333333333333333333333333333333");
+	a = array.new(7);
+	a[0] = inv;
+	slot = list.getIndex(ast_start_pos, math.random(0, 25));
+	a[1] = slot;
+	inv.setItem(inv, slot, read.item("minecraft:bedrock", 1, "§rAsteroid"));
+	inv.open(inv, player, "§cClear Asteroids");
+	b = getAstDirection(slot);
+	a[2] = b[0]; //x_dir
+	a[3] = b[1]; //y_dir
+	a[4] = false; //reached end
+	a[5] = math.random(1, 2); //speed
+	a[6] = 0; //speed counter
+	my_list = list.new();
+	list.add(my_list, a);
+	player_uuid = player.getUuid(player);
+	map.add(clear_ast_map, player_uuid, my_list);
+	map.add(clear_ast_map_2, player_uuid, 0);
+	map.add(clear_ast_map_3, player_uuid, inv);
+	if(list.getSize(clear_ast_list) == 0) {
+		sgoto(5, "clear_ast");
+	}
+	list.add(clear_ast_list, player_uuid);
+	goto("checkgame");
+}
+if(set.contains(inspect_sample_locs, block_loc)) {
+	task_id = 8;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	player_uuid = player.getUuid(player);
+	inv = map.get(sample_map, player_uuid);
+	if(inv == null) {
+		//inv = inv.new("202020202 202020202 202020202 000000000 202020202 000000002");
+		inv = inv.new("202020202202020202202020202000000000202020202000000002");
+		for(i = 0; i < 15; i++) {
+			inv.setItem(inv, i, read.item("minecraft:white_stained_glass_pane", 1, "§rSample"));
+		}
+		for(i = 15; i < 20; i++) {
+			inv.setItem(inv, i, read.item("minecraft:gray_stained_glass_pane", 1, "§rSelect sample"));
+		}
+		inv.setItem(inv, 20, read.item("minecraft:green_stained_glass_pane", 1, "§rPress to start"));
+	}
+	inv.open(inv, player, "§cInspect Sample");
+	goto("checkgame");
+}
+if(block_loc == admin_table_loc) {
+	if(comms_sabotaged) {
+		msg.prefix(player, gamename, "Communications disabled.");
+		goto("checkgame");
+	}
+	inv.open(admin_table_inv, player);
+	goto("checkgame");
+}
+if(block_loc == ue_align_loc || block_loc == le_align_loc) {
+	task_id = 17;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 2) {
+		goto("checkgame");
+	}
+	player_uuid = player.getUuid(player);
+	if(block_loc == ue_align_loc && set.contains(align_ue_engine_set, player_uuid)) {
+		goto("checkgame");
+	}
+	if(block_loc == le_align_loc && set.contains(align_le_engine_set, player_uuid)) {
+		goto("checkgame");
+	}
+	//inv = inv.new("333333332 333333333 222222222 333333333 333333332");
+	inv = inv.new("333333332333333333222222222333333333333333332");
+	inv.setItem(inv, 8, item_arrow_up);
+	inv.setItem(inv, 44, item_arrow_down);
+	inv.setItem(inv, 26, green_glass);
+	inv.open(inv, player, "§cAlign Engine Output");
+	pos = math.random(0, 10);
+	while(pos == 5) {
+		pos = math.random(0, 10);
+	}
+	map.add(align_engine_map, player_uuid, pos);
+	map.add(align_engine_map_2, player_uuid, block_loc);
+	set_engine(player, inv, null);
+	goto("checkgame");
+}
+if(block_loc == clean_o2_loc) {
+	task_id = 15;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	//inv = inv.new("222222222 222222222 222222222 222222222 222222222 222222222");
+	inv = inv.new("222222222222222222222222222222222222222222222222222222");
+	inv.setItem(inv, 0, black_glass);
+	inv.setItem(inv, 9, black_glass);
+	inv.setItem(inv, 36, black_glass);
+	inv.setItem(inv, 45, black_glass);
+	for(i = 0; i < 6; i++) {
+		slot = math.random(1, 53);
+		while(slot % 9 == 0 || item.getType(inv.getItem(inv, slot)) != "minecraft:air") {
+			slot = math.random(1, 53);
+		}
+		inv.setItem(inv, slot, read.item("minecraft:oak_leaves"));
+		if(slot < 18) {
+			if(item.getType(inv.getItem(inv, slot + 9)) == "minecraft:air") {
+				inv.setItem(inv, slot + 9, item_arrow_down);
+				continue;
+			}
+		}
+		if(slot > 36) {
+			if(item.getType(inv.getItem(inv, slot - 9)) == "minecraft:air") {
+				inv.setItem(inv, slot - 9, item_arrow_up);
+				continue;
+			}
+		}
+		if(item.getType(inv.getItem(inv, slot - 1)) == "minecraft:air") {
+			inv.setItem(inv, slot - 1, item_arrow_left);
+		}
+	}
+	inv.open(inv, player, "§cClean O2 Filter");
+	goto("checkgame");
+}
+if(block_loc == elec_power_loc) {
+	task_id = 14;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step != 0) {
+		goto("checkgame");
+	}
+	//inv = inv.new("000020000 002222200 022222220 222222222 222222222 000000000");
+	inv = inv.new("000020000002222200022222220222222222222222222000000000");
+	gunpowder = read.item("minecraft:gunpowder");
+	for(i = 0; i < 22; i++) {
+		inv.setItem(inv, i, gunpowder);
+	}
+	for(i = 22; i < 31; i++) {
+		inv.setItem(inv, i, read.item("minecraft:lever", 1, map.get(divert_pow_map, i)));
+	}
+	r = map.get(divert_pow_map_3, player.getUuid(player));
+	inv.setItem(inv, r, read.item("minecraft:redstone_torch", 1, map.get(divert_pow_map, r)));
+	inv.open(inv, player, "§cDivert Power");
+	goto("checkgame");
+}
+r = map.get(divert_pow_map_3, player.getUuid(player));
+if(r != null && block_loc == map.get(divert_pow_map_2, r)) {
+	task_id = 14;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step != 1) {
+		goto("checkgame");
+	}
+	//inv = inv.new("002200002 220200220 020202002 222222220 002002002 220000220");
+	inv = inv.new("002200002220200220020202002222222220002002002220000220");
+	gunpowder = read.item("minecraft:gunpowder");
+	redstone = read.item("minecraft:redstone");
+	inv.setItem(inv, 0, redstone);
+	inv.setItem(inv, 1, redstone);
+	inv.setItem(inv, 2, gunpowder);
+	inv.setItem(inv, 3, redstone);
+	inv.setItem(inv, 4, redstone);
+	inv.setItem(inv, 5, redstone);
+	inv.setItem(inv, 6, gunpowder);
+	inv.setItem(inv, 7, gunpowder);
+	inv.setItem(inv, 8, redstone);
+	inv.setItem(inv, 9, redstone);
+	inv.setItem(inv, 10, gunpowder);
+	inv.setItem(inv, 11, gunpowder);
+	inv.setItem(inv, 12, redstone);
+	inv.setItem(inv, 13, redstone);
+	inv.setItem(inv, 14, redstone);
+	inv.setItem(inv, 15, redstone);
+	inv.setItem(inv, 16, read.item("stone_button", 1, "§rConnect Grids"));
+	inv.setItem(inv, 17, gunpowder);
+	inv.setItem(inv, 18, gunpowder);
+	inv.setItem(inv, 19, gunpowder);
+	inv.setItem(inv, 20, redstone);
+	inv.setItem(inv, 21, gunpowder);
+	inv.setItem(inv, 22, gunpowder);
+	inv.setItem(inv, 23, redstone);
+	inv.setItem(inv, 24, redstone);
+	inv.setItem(inv, 25, gunpowder);
+	inv.setItem(inv, 26, gunpowder);
+	inv.open(inv, player, "§cDivert Power");
+	goto("checkgame");
+}
+if(block_loc == cafe_garb_loc || block_loc == o2_garb_loc) {
+	cancel = true;
+	task_id = 12;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step != 0) {
+		goto("checkgame");
+	}
+	player_uuid = player.getUuid(player);
+	r = map.get(empty_garb_map_3, player_uuid);
+	if(r == 0 && block_loc == o2_garb_loc) {
+		goto("checkgame");
+	} elseif(r == 1 && block_loc == cafe_garb_loc) {
+		goto("checkgame");
+	}
+	//inv = inv.new("033333330 033333330 033333330 033333330 033333332 033333330");
+	inv = inv.new("033333330033333330033333330033333330033333332033333330", text.new("§cEmpty Garbage"));
+	for(i = 7; i < 43; i++) {
+		r = math.random(1, 6);
+		if(r == 1) {
+			inv.setItem(inv, i, read.item("minecraft:oak_leaves"));
+		} elseif(r == 2) {
+			inv.setItem(inv, i, read.item("minecraft:birch_leaves"));
+		} elseif(r == 3) {
+			inv.setItem(inv, i, read.item("minecraft:spruce_leaves"));
+		} elseif(r == 4) {
+			inv.setItem(inv, i, read.item("minecraft:jungle_leaves"));
+		} elseif(r == 5) {
+			inv.setItem(inv, i, read.item("minecraft:acacia_leaves"));
+		} elseif(r == 6) {
+			inv.setItem(inv, i, read.item("minecraft:dark_oak_leaves"));
+		}
+	}
+	inv.setItem(inv, 35, item.custom.create("ARROW_DOWN", 1, "§rEmpty Garbage", null));
+	inv.open(inv, player);
+	goto("checkgame");
+}
+if(block_loc == stor_garb_loc) {
+	cancel = true;
+	task_id = 12;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step != 1) {
+		goto("checkgame");
+	}
+	//inv = inv.new("033333330 033333330 033333330 033333330 033333332 033333330");
+	inv = inv.new("033333330033333330033333330033333330033333332033333330", text.new("§cEmpty Garbage"));
+	for(i = 7; i < 43; i++) {
+		r = math.random(1, 6);
+		if(r == 1) {
+			inv.setItem(inv, i, read.item("minecraft:oak_leaves"));
+		} elseif(r == 2) {
+			inv.setItem(inv, i, read.item("minecraft:birch_leaves"));
+		} elseif(r == 3) {
+			inv.setItem(inv, i, read.item("minecraft:spruce_leaves"));
+		} elseif(r == 4) {
+			inv.setItem(inv, i, read.item("minecraft:jungle_leaves"));
+		} elseif(r == 5) {
+			inv.setItem(inv, i, read.item("minecraft:acacia_leaves"));
+		} elseif(r == 6) {
+			inv.setItem(inv, i, read.item("minecraft:dark_oak_leaves"));
+		}
+	}
+	list.shuffle(garb_items);
+	inv.setItem(inv, math.random(7, 18), list.getIndex(garb_items, 0));
+	inv.setItem(inv, math.random(19, 30), list.getIndex(garb_items, 1));
+	inv.setItem(inv, math.random(31, 42), list.getIndex(garb_items, 2));
+	inv.setItem(inv, 35, item.custom.create("ARROW_DOWN", 1, "§rEmpty Garbage", null));
+	inv.open(inv, player);
+	goto("checkgame");
+}
+if(block_loc == swipe_card_loc) {
+	task_id = 11;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	//inv = inv.new("000000000 003333320 000000000");
+	inv = inv.new("000000000003333320000000000", text.new("§cSwipe Card"));
+	inv.open(inv, player);
+	goto("checkgame");
+}
+if(block_loc == calibrate_dist_loc) {
+	task_id = 9;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	//inv = inv.new("000222000 000333000 003000300 003000322 003000302 00033300");
+	inv = inv.new("00022200000033300000300030000300032200300030200033300", text.new("§cCalibrate Distributor"));
+	inv.setItem(inv, 0, read.item("km:cross_red"));
+	inv.setItem(inv, 1, read.item("km:cross_red"));
+	inv.setItem(inv, 2, read.item("km:cross_red"));
+	for(i = 0; i < 12; i++) {
+		inv.setItem(inv, calibrate_dist_array[i], air_item);
+	}
+	inv.setItem(inv, 10, yellow_glass);
+	inv.setItem(inv, 11, yellow_glass);
+	inv.setItem(inv, 14, read.item("km:minus_green", 1, "§rPress"));
+	inv.open(inv, player);
+	start_index = math.random(0, 8);
+	a = array.new(5);
+	player_uuid = player.getUuid(player);
+	a[0] = player_uuid;
+	a[1] = inv;
+	a[2] = start_index;
+	a[3] = start_index; //index
+	a[4] = 0; //stage
+	list.add(calibrate_dist_list, player_uuid);
+	map.add(calibrate_dist_map, player_uuid, a);
+	sgoto(7, "calibrate_dist");
+	goto("checkgame");
+}
+if(block_loc == steering_loc) {
+	task_id = 7;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	//inv = inv.new("222222222 222222222 222222222 222222222 222222222");
+	inv = inv.new("222222222222222222222222222222222222222222222");
+	inv.setItem(inv, 22, read.item("km:plus_red"));
+	r = math.random(0, 3);
+	if(r == 0) {
+		slot = 6;
+		slot_left = 5;
+		slot_right = 7;
+		slot_down = 15;
+		slot_up = -1;
+	} elseif(r == 1) {
+		slot = 9;
+		slot_left = -1;
+		slot_right = 10;
+		slot_down = 18;
+		slot_up = 0;
+	} elseif(r == 2) {
+		slot = 28;
+		slot_left = 27;
+		slot_right = 29;
+		slot_down = 37;
+		slot_up = 19;
+	} else {
+		slot = 35;
+		slot_left = 34;
+		slot_right = -1;
+		slot_down = 44;
+		slot_up = 26;
+	}
+	if(slot_left != -1) {
+		inv.setItem(inv, slot_left, item_arrow_left);
+	}
+	if(slot_right != -1) {
+		inv.setItem(inv, slot_right, item_arrow_right);
+	}
+	if(slot_up != -1) {
+		inv.setItem(inv, slot_up, item_arrow_up);
+	}
+	if(slot_down != -1) {
+		inv.setItem(inv, slot_down, item_arrow_down);
+	}
+	inv.setItem(inv, slot, read.item("km:plus_red"));
+	inv.open(inv, player, "§cStabilize Steering");
+	goto("checkgame");
+}
+if(block_loc == chart_course_loc) {
+	task_id = 6;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	a = array.new(9);
+	r = math.random(0, 2);
+	if(r == 0) {
+		//inv = inv.new("000000000 000000300 030003030 303030003 000300000 000000002");
+		inv = inv.new("000000000000000300030003030303030003000300000000000002");
+		a[0] = 4;
+		a[1] = 1;
+		a[2] = 5;
+		a[3] = 8;
+		a[4] = 6;
+		a[5] = 2;
+		a[6] = 0;
+		a[7] = 3;
+		a[8] = 7;
+	} elseif(r == 1) {
+		//inv = inv.new("000000000 000000000 300030003 030303030 003000300 000000002");
+		inv = inv.new("000000000000000000300030003030303030003000300000000002");
+		a[0] = 0;
+		a[1] = 3;
+		a[2] = 7;
+		a[3] = 4;
+		a[4] = 1;
+		a[5] = 5;
+		a[6] = 8;
+		a[7] = 6;
+		a[8] = 2;
+	} else {
+		//inv = inv.new("000000000 000030000 003303033 030000300 300000000 000000002");
+		inv = inv.new("000000000000030000003303033030000300300000000000000002");
+		a[0] = 8;
+		a[1] = 6;
+		a[2] = 1;
+		a[3] = 2;
+		a[4] = 0;
+		a[5] = 3;
+		a[6] = 7;
+		a[7] = 4;
+		a[8] = 5;
+	}
+	player_uuid = player.getUuid(player);
+	map.add(chart_course_pattern, player_uuid, a);
+	inv.open(inv, player, "§cChart Course");
+	goto("checkgame");
+}
+if(block_loc == unlock_manifolds_loc) {
+	task_id = 5;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	//inv = inv.new("003333300 003333300");
+	inv = inv.new("003333300003333300");
+	list = list.new();
+	for(i = 0; i < 10; i++) {
+		list.add(list, read.item("minecraft:blue_stained_glass_pane", i + 1));
+	}
+	list.shuffle(list);
+	for(i = 0; i < 10; i++) {
+		inv.setItem(inv, i, list.getIndex(list, i));
+	}
+	inv.open(inv, player, "§cUnlock Manifolds");
+	goto("checkgame");
+}
+if(block_loc == start_reactor_loc) {
+	task_id = 4;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	if(reactor_used) {
+		msg.prefix(player, gamename, "Another player already starts the reactor.");
+		goto("checkgame");
+	}
+	reactor_used = true;
+	reactor_array = reactor.get(player);
+	if(reactor_array == null) {
+		//inv = inv.new("003333300 000000000 022202220 022202220 022202220 000000000");
+		inv = inv.new("003333300000000000022202220022202220022202220000000000");
+		reactor_array = array.new(5);
+		reactor.setInv(reactor_array, inv);
+		reactor.setStage(reactor_array, 0);
+		reactor.setPattern(reactor_array);
+	} else {
+		inv = reactor.getInv(reactor_array);
+	}
+	reactor.setCounter(reactor_array, 0);
+	reactor.setPhase(reactor_array, "draw");
+	reactor.save(reactor_array, player);
+	reactor.setHeader(inv, air_item);
+	reactor.setLeftSide(inv, black_glass);
+	reactor.setRightSide(inv, black_glass);
+	inv.open(inv, player, "§cStart Reactor");
+	list.add(reactor_draw_list_1, player.getUuid(player));
+	sgoto(20, "draw_pattern_1");
+	goto("checkgame");
+}
+if(block_loc == prime_shields_loc) {
+	task_id = 3;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	//inv = inv.new("000000000 000222000 002222200 002222200 000222000 000000000");
+	inv = inv.new("000000000000222000002222200002222200000222000000000000");
+	for(i = 0; i < 16; i++) {
+		r = math.random(0, 1);
+		if(r == 0) {
+			inv.setItem(inv, i, green_glass);
+		} else {
+			inv.setItem(inv, i, red_glass);
+		}
+	}
+	inv.open(inv, player, "§cPrime Shields");
+	goto("checkgame");
+}
+if(block_loc == fix_o2_loc_1 || block_loc == fix_o2_loc_2) {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	if(oxygen_sabotaged) {
+		if(block_loc == fix_o2_loc_1) {
+			map.add(oxygen_map, player.getUuid(player), fix_o2_loc_1);
+			if(oxy_fixed_1) {
+				goto("checkgame");
+			}
+		} elseif(block_loc == fix_o2_loc_2) {
+			map.add(oxygen_map, player.getUuid(player), fix_o2_loc_2);
+			if(oxy_fixed_2) {
+				goto("checkgame");
+			}
+		}
+		//oxygen_inv = inv.new("003333322 000000000 000222000 000222000 000222000 000222000");
+		oxygen_inv = inv.new("003333322000000000000222000000222000000222000000222000", text.new("§cENTER CODE"));
+		inv.setItem(oxygen_inv, 6, item.create("minecraft:paper", 1, string.concat("§r", string.number(oxy_code)), null));
+		inv.setItem(oxygen_inv, 7, item.custom.create("DIGIT_0", 1, "§f0", null));
+		inv.setItem(oxygen_inv, 8, item.custom.create("DIGIT_1", 1, "§f1", null));
+		inv.setItem(oxygen_inv, 9, item.custom.create("DIGIT_2", 1, "§f2", null));
+		inv.setItem(oxygen_inv, 10, item.custom.create("DIGIT_3", 1, "§f3", null));
+		inv.setItem(oxygen_inv, 11, item.custom.create("DIGIT_4", 1, "§f4", null));
+		inv.setItem(oxygen_inv, 12, item.custom.create("DIGIT_5", 1, "§f5", null));
+		inv.setItem(oxygen_inv, 13, item.custom.create("DIGIT_6", 1, "§f6", null));
+		inv.setItem(oxygen_inv, 14, item.custom.create("DIGIT_7", 1, "§f7", null));
+		inv.setItem(oxygen_inv, 15, item.custom.create("DIGIT_8", 1, "§f8", null));
+		inv.setItem(oxygen_inv, 16, read.item("km:cross_red"));
+		inv.setItem(oxygen_inv, 17, item.custom.create("DIGIT_9", 1, "§f9", null));
+		inv.setItem(oxygen_inv, 18, read.item("km:check_green"));
+		inv.open(oxygen_inv, player);
+		sabotage.openedInv(player);
+	}
+	goto("checkgame");
+}
+if(block_loc == fix_reactor_loc_1 || block_loc == fix_reactor_loc_2) {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	if(reactor_sabotaged) {
+		if(block_loc == fix_reactor_loc_1) {
+			sabotage.openedInv(player);
+			inv.open(reactor_inv_1, player);
+			list.add(reactor_hold_list_1, player.getUuid(player));
+			goto("checkgame");
+		}
+		if(block_loc == fix_reactor_loc_2) {
+			sabotage.openedInv(player);
+			inv.open(reactor_inv_2, player);
+			list.add(reactor_hold_list_2, player.getUuid(player));
+		}
+	}
+	goto("checkgame");
+}
+if(block_loc == fix_comms_loc) {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	if(comms_sabotaged) {
+		player_uuid = player.getUuid(player);
+		inv = inv.new("333333333333333333333333333333333333000000000000222002");
+		inv.setItem(inv, 36, read.item("km:arrow_left"));
+		inv.setItem(inv, 37, read.item("minecraft:black_stained_glass_pane", 32));
+		inv.setItem(inv, 38, read.item("km:arrow_right"));
+		inv.open(inv, player, "§cFix Communications");
+		sabotage.openedInv(player);
+		diff = math.abs(32 - comms_fix_freq);
+		if(diff == 0) {
+			comms.drawCorrect(inv, player);
+		} elseif(diff < 4) {
+			comms.drawClose(inv, player);
+		} else {
+			comms.drawWorst(inv, player);
+		}
+		map.add(comms_inv_map, player_uuid, inv);
+		if(!list.contains(comms_state_list, player_uuid)) {
+			list.add(comms_state_list, player_uuid);
+			sgoto(5, "draw_comms");
+		}
+	}
+	goto("checkgame");
+}
+if(block_loc == fix_lights_loc_1 || block_loc == fix_lights_loc_2) {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	if(lights_sabotaged) {
+		sabotage.openedInv(player);
+		inv.open(lights_inv, player);
+	}
+	goto("checkgame");
+}
+if(block_loc == meeting_button_loc) {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	if(amongus.isAlert()) {
+		msg.prefix(player, gamename, "No meetings allowed while sabotaged.");
+		goto("checkgame");
+	}
+	if(!meeting) {
+		callMeeting(player);
+	}
+	goto("checkgame");
+}
+block_type = block.getType(block_loc);
+if(block_type == "minecraft:lever") {
+	cancel = true;
+}
+if(block_type == "minecraft:redstone_lamp") {
+	task_id = 10;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 3) {
+		goto("checkgame");
+	}
+	my_list = map.get(wires_map_4, player.getUuid(player));
+	if(block_loc != list.getIndex(my_list, step)) {
+		goto("checkgame");
+	}
+	//inv = inv.new("000000000 002202200 002202200 002202200 002202200 000000000");
+	inv = inv.new("000000000002202200002202200002202200002202200000000000");
+	inv.setItem(inv, 1, read.item("km:cross_red", 1, "§rDisconnected"));
+	inv.setItem(inv, 2, read.item("km:cross_red", 1, "§rDisconnected"));
+	inv.setItem(inv, 5, read.item("km:cross_red", 1, "§rDisconnected"));
+	inv.setItem(inv, 6, read.item("km:cross_red", 1, "§rDisconnected"));
+	inv.setItem(inv, 9, read.item("km:cross_red", 1, "§rDisconnected"));
+	inv.setItem(inv, 10, read.item("km:cross_red", 1, "§rDisconnected"));
+	inv.setItem(inv, 13, read.item("km:cross_red", 1, "§rDisconnected"));
+	inv.setItem(inv, 14, read.item("km:cross_red", 1, "§rDisconnected"));
+	list.shuffle(wires_list);
+	inv.setItem(inv, 0, list.getIndex(wires_list, 0));
+	inv.setItem(inv, 4, list.getIndex(wires_list, 1));
+	inv.setItem(inv, 8, list.getIndex(wires_list, 2));
+	inv.setItem(inv, 12, list.getIndex(wires_list, 3));
+	list.shuffle(wires_list);
+	inv.setItem(inv, 3, list.getIndex(wires_list, 0));
+	inv.setItem(inv, 7, list.getIndex(wires_list, 1));
+	inv.setItem(inv, 11, list.getIndex(wires_list, 2));
+	inv.setItem(inv, 15, list.getIndex(wires_list, 3));
+	inv.open(inv, player, "§cFix Wiring");
+	goto("checkgame");
+}
+if(list.contains(download_list_3, block_loc) || block_loc == admin_upload_loc) {
+	cancel = true;
+	task_id = 2;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(block_loc == admin_upload_loc) {
+		if(step != 1) {
+			goto("checkgame");
+		}
+		//Upload
+		//inv = inv.new("222222222 200000002 000020000");
+		inv = inv.new("222222222200000002000020000", text.new("§cUpload Data"));
+		inv.setItem(inv, 9, item.create("minecraft:birch_trapdoor", 1, "§rMy Laptop", null));
+		inv.setItem(inv, 17, item.create("minecraft:redstone_torch", 1, "§rHeadquarters", null));
+		inv.setItem(inv, 22, item.custom.create("ARROW_UP", 1, "§rUpload", null));
+		inv.open(inv, player);
+		goto("checkgame");
+	}
+	if(step != 0) {
+		goto("checkgame");
+	}
+	r = map.get(download_map_3, player.getUuid(player));
+	down_loc = list.getIndex(download_list_3, r);
+	if(down_loc != block_loc) {
+		goto("checkgame");
+	}
+	//Download
+	inv = inv.new("222222222200000002000020000", text.new("§cDownload Data"));
+	inv.setItem(inv, 9, item.create("minecraft:chest", 1, map.get(download_map_2, block_loc), null));
+	inv.setItem(inv, 17, item.create("minecraft:birch_trapdoor", 1, "§rMy Laptop", null));
+	inv.setItem(inv, 22, item.custom.create("ARROW_DOWN", 1, "§rDownload", null));
+	inv.open(inv, player);
+	goto("checkgame");
+}
+if(block_loc == get_fuel_loc) {
+	task_id = 1;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 1 || step == 3 || step == 4) {
+		goto("checkgame");
+	}
+	inv = inv.new("333333302333333300333333300333333300333333300333333300");
+	//inv = inv.new(333333302 333333300 333333300 333333300 333333300 333333300);
+	player_uuid = player.getUuid(player);
+	c = map.getOrDefault(fuel_counter, player_uuid, 0);
+	for(i = 0; i < 43; i++) {
+		if(i >= c) {
+			inv.setItem(inv, i, read.item("minecraft:lime_terracotta"));
+		}
+	}
+	inv.setItem(inv, 7, item.custom.creat("ARROW_DOWN", 1, "§rGet fuel", null));
+	inv.open(inv, player, "§cFuel");
+	goto("checkgame");
+}
+if(block_loc == upper_engine_loc || block_loc == lower_engine_loc) {
+	task_id = 1;
+	cancel = true;
+	if(!hasTask(player, task_id)) {
+		goto("checkgame");
+	}
+	step = task.getStep(player, task_id);
+	if(step == 0 || step == 2 || step == 4) {
+		goto("checkgame");
+	}
+	if(step == 1 && block_loc != upper_engine_loc) {
+		goto("checkgame");
+	}
+	if(step == 3 && block_loc != lower_engine_loc) {
+		goto("checkgame");
+	}
+	inv = inv.new("333333302333333300333333300333333300333333300333333300");
+	//inv = inv.new(333333302 333333300 333333300 333333300 333333300 333333300);
+	player_uuid = player.getUuid(player);
+	c = map.getOrDefault(fuel_counter, player_uuid, 42);
+	for(i = 42; i > c; i--) {
+		inv.setItem(inv, i, read.item("minecraft:lime_terracotta"));
+	}
+	inv.setItem(inv, 7, read.item("km:arrow_up", 1, "§rFill engine"));
+	inv.open(inv, player, "§cEngine");
+	goto("checkgame");
+}
+goto("checkgame");
+
+@inv_close
+player_uuid = player.getUuid(player);
+if(list.contains(auto_close_list, player_uuid)) {
+	list.add(auto_close_list_2, player_uuid);
+}
+if(amongus.isAlert()) {
+	sabotage.closedInv(player);
+}
+if(reactor_sabotaged) {
+	if(inv_id == inv.getId(reactor_inv_1)) {
+		list.remove(reactor_hold_list_1, player_uuid);
+		if(list.getSize(reactor_hold_list_1) == 0) {
+			sabotage.holdReactor(reactor_inv_1, false);
+			hold_reactor_1 = false;
+		}
+		goto("checkgame");
+	}
+	if(inv_id == inv.getId(reactor_inv_2)) {
+		list.remove(reactor_hold_list_2, player_uuid);
+		if(list.getSize(reactor_hold_list_2) == 0) {
+			sabotage.holdReactor(reactor_inv_2, false);
+			hold_reactor_2 = false;
+		}
+		goto("checkgame");
+	}
+}
+if(inv_name == "§cFix Wiring") {
+	map.remove(wires_map, player_uuid);
+	goto("checkgame");
+}
+if(inv_name == "§cFix Communications") {
+	map.remove(comms_inv_map, player_uuid);
+	map.remove(comms_fix_map, player_uuid);
+	goto("checkgame");
+}
+if(inv_name == "§cClean O2 Filter") {
+	map.remove(clean_o2_map, player_uuid);
+	goto("checkgame");
+}
+if(inv_name == "§cSubmit Scan") {
+	list.add(submit_scan_list_2, player_uuid);
+	sgoto(20, "unblock_submit_scan");
+	goto("checkgame");
+}
+if(inv_name == "§cCalibrate Distributor") {
+	list.add(calibrate_dist_list_2, player_uuid);
+	sgoto(7, "unblock_calib_dist");
+	goto("checkgame");
+}
+if(inv_name == "§cChart Course") {
+	map.remove(chart_course_counter, player_uuid);
+	map.remove(chart_course_pattern, player_uuid);
+	goto("checkgame");
+}
+if(inv_name == "§cEmpty Garbage") {
+	list.add(empty_garb_list_2, player_uuid);
+	sgoto(25, "unblock_empty_garb");
+	goto("checkgame");
+}
+if(inv_name == "§cClear Asteroids") {
+	list.add(clear_ast_list_2, player_uuid);
+	sgoto(5, "unblock_clear_ast");
+	goto("checkgame");
+}
+if(inv_name == "§cUnlock Manifolds") {
+	map.remove(manifolds_counter, player_uuid);
+	goto("checkgame");
+}
+if(inv_name == "§cStart Reactor") {
+	reactor_used = false;
+	list.add(reactor_block_list, player_uuid);
+	sgoto(20, "unblock_start_reactor");
+	goto("checkgame");
+}
+if(inv_name == "§cDownload Data" || inv_name == "Upload Data") {
+	list.add(download_list_2, player_uuid);
+	sgoto(25, "unblock_download");
+}
+goto("checkgame");
+
+@snuvi_click
+if(inv_name == "§cVOTE") {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	player_uuid = player.getUuid(player);
+	if(map.contains(vote_count_map_2, player_uuid)) {
+		goto("checkgame");
+	}
+	item_type = item.getType(item);
+	if(item_type == "km:return_green" || item_type == player_head_mat && item.getType(inv.getItem(inv, inv_slot - 1)) != zombie_head_mat) {
+		inv.setItem(inv, 2, air_item);
+		inv.setItem(inv, 3, air_item);
+		inv.setItem(inv, 6, air_item);
+		inv.setItem(inv, 7, air_item);
+		inv.setItem(inv, 10, air_item);
+		inv.setItem(inv, 11, air_item);
+		inv.setItem(inv, 14, air_item);
+		inv.setItem(inv, 15, air_item);
+		inv.setItem(inv, 18, air_item);
+		inv.setItem(inv, 19, air_item);
+		inv.setItem(inv, 22, air_item);
+		inv.setItem(inv, 23, air_item);
+		inv.setItem(inv, 26, air_item);
+		inv.setItem(inv, 27, air_item);
+		inv.setItem(inv, 30, air_item);
+		inv.setItem(inv, 31, air_item);
+		inv.setItem(inv, 34, air_item);
+		inv.setItem(inv, 35, air_item);
+		inv.setItem(inv, 38, air_item);
+		inv.setItem(inv, 39, air_item);
+		inv.setItem(inv, 41, air_item);
+		inv.setItem(inv, 42, air_item);
+		inv.setItem(inv, inv_slot + 1, read.item("km:check_green", 1, "§rConfirm"));
+		inv.setItem(inv, inv_slot + 2, read.item("km:cross_red", 1, "§rCancel"));
+		goto("checkgame");
+	}
+	if(item_type == "km:cross_red") {
+		inv.setItem(inv, inv_slot, air_item);
+		inv.setItem(inv, inv_slot - 1, air_item);
+		goto("checkgame");
+	}
+	if(item_type == "km:check_green") {
+		if(item.getType(inv.getItem(inv, inv_slot - 2)) != zombie_head_mat) {
+			vote_item = inv.getItem(inv, inv_slot - 1);
+			if(item.getType(vote_item) == "km:return_green") {
+				map.add(vote_count_map, "skip", map.getOrDefault(vote_count_map, "skip", 0) + 1);
+				map.add(vote_count_map_2, player_uuid, "skip");
+			} else {
+				vote_item_name = string.text(item.getName(vote_item));
+				list = string.split(" ", vote_item_name);
+				vote_name = list.getIndex(list, 2);
+				vote_uuid = player.getUuid(string.removeFormat(vote_name));
+				map.add(vote_count_map, vote_uuid, map.getOrDefault(vote_count_map, vote_uuid, 0) + 1);
+				map.add(vote_count_map_2, player_uuid, vote_uuid);
+			}
+			inv.setItem(inv, inv_slot, air_item);
+			inv.setItem(inv, inv_slot + 1, air_item);
+			//Bei allen Spielern anzeigen, dass player gevoted hat
+			index = list.getIndexOf(all_list, player_uuid);
+			voted_slot = index * 4;
+			voted_item = read.item("km:skill33", 1, string.concat(amongus.getPlayerColorCode(player), player.getName(player), "§r has voted"));
+			iter = iterator(player_list);
+			while(hasNext(iter)) {
+				p_uuid = next(iter);
+				p = player.get(p_uuid);
+				inv = getVoteInv(p);
+				inv.setItem(inv, voted_slot, voted_item);
+			}
+			sound.spawnForPlayer(player, vote_sound, master_sound_category);
+			//Haben bereits alle gevoted?
+			if(map.getSize(vote_count_map_2) == list.getSize(player_list) - list.getSize(ghosts)) {
+				goto("score_evaluation");
+			}
+		}
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cENTER CODE") {
+	//CODE eingeben
+	if(item.isDigit(item)) {
+		number = string.text(item.getName(item));
+		for(i = 0; i < 5; i++) {
+			if(item.getType(inv.getItem(inv, i)) == null) {
+				break;
+			}
+		}
+		if(i == 5) {
+			goto("checkgame");
+		}
+		inv.setItem(inv, i, item);
+		inv.setItem(inv, 5, air_item);
+		goto("checkgame");
+	}
+	//CODEEINGABE CANCELN
+	if(inv_slot == 16) {
+		for(i = 0; i < 5; i++) {
+			inv.setItem(inv, i, air_item);
+		}
+		goto("checkgame");
+	}
+	//CODE BESTÄTIGEN
+	if(inv_slot == 18) {
+		number = "";
+		for(i = 0; i < 5; i++) {
+			item = inv.getItem(inv, i);
+			if(item.getType(item) == "minecraft:air") {
+				for(h = 0; h < 5; h++) {
+					inv.setItem(inv, h, air_item);
+				}
+				goto("checkgame");
+			}
+			number = string.concat(number, string.text(item.getName(item)));
+		}
+		number = read.number(string.removeFormat(number));
+		if(number == oxy_code) {
+			player_uuid = player.getUuid(player);
+			sgoto_auto_close_inv(player_uuid);
+			inv.setItem(inv, 5, read.item("km:check_green", 1, "§rCorrect code"));
+			loc = map.get(oxygen_map, player_uuid);
+			if(loc == fix_o2_loc_1) {
+				oxy_fixed_1 = true;
+				removeSaboParticles(fix_o2_par_loc_1, null);
+				if(oxy_fixed_2) {
+					fix_oxygen();
+				}
+			} elseif(loc == fix_o2_loc_2) {
+				oxy_fixed_2 = true;
+				removeSaboParticles(fix_o2_par_loc_2, null);
+				if(oxy_fixed_1) {
+					fix_oxygen();
+				}
+			}
+		} else {
+			inv.setItem(inv, 5, read.item("km:cross_red", 1, "§rFalse code"));
+			for(i = 0; i < 5; i++) {
+				inv.setItem(inv, i, air_item);
+			}
+		}
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cAlign Engine Output") {
+	task_id = 17;
+	step = task.getStep(player, task_id);
+	if(step == 2) {
+		goto("checkgame");
+	}
+	player_uuid = player.getUuid(player);
+	loc = map.get(align_engine_map_2, player_uuid);	
+	if(block_loc == ue_align_loc && set.contains(align_ue_engine_set, player_uuid)) {
+		goto("checkgame");
+	}
+	if(block_loc == le_align_loc && set.contains(align_le_engine_set, player_uuid)) {
+		goto("checkgame");
+	}
+	item_type = item.getType(item);
+	if(item_type == "km:arrow_up") {
+		temp = set_engine(player, inv, "up");
+	} elseif(item_type == "km:arrow_down") {
+		temp = set_engine(player, inv, "down");
+	} else {
+		goto("checkgame");
+	}
+	if(temp) {
+		if(loc == le_align_loc) {
+			set.add(align_le_engine_set, player_uuid);
+			removeTaskParticle(player, le_align_par_loc);
+		} else {
+			set.add(align_ue_engine_set, player_uuid);
+			removeTaskParticle(player, ue_align_par_loc);
+		}
+		step = task.stepIncrease(player, task_id);
+		giveTask(player, 17, "UE/LE", "Align Engine Output", step, 2, null);
+		sgoto_auto_close_inv(player_uuid);
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cClean O2 Filter") {
+	task_id = 15;
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	item_type = item.getType(item);
+	if(item_type == "km:arrow_up") {
+		old_slot = inv_slot + 9;
+	} elseif(item_type == "km:arrow_left") {
+		old_slot = inv_slot + 1;
+	} elseif(item_type == "km:arrow_down") {
+		old_slot = inv_slot - 9;
+	} else {
+		goto("checkgame");
+	}
+	inv.setItem(inv, inv_slot, read.item("minecraft:oak_leaves"));
+	inv.setItem(inv, old_slot, air_item);
+	if(inv_slot == 18 || inv_slot == 27) {
+		inv.setItem(inv, inv_slot, air_item);
+		player_uuid = player.getUuid(player);
+		c = map.getOrDefault(clean_o2_map, player_uuid, 0) + 1;
+		map.add(clean_o2_map, player_uuid, c);
+		if(c == 6) {
+			removeTaskParticle(player, clean_o2_par_loc);
+			step = task.stepIncrease(player, task_id);
+			giveTask(player, 15, "O2", "Clean O2 Filter", 1, 1, null);
+			sgoto_auto_close_inv(player_uuid);
+			goto("checkgame");
+		}
+	}
+	for(slot = 1; slot < 53; slot++) {
+		if(item.getType(inv.getItem(inv, slot)) == "minecraft:oak_leaves") {
+			if(slot < 18) {
+				temp_type = item.getType(inv.getItem(inv, slot + 9));
+				temp_type_2 = item.getType(inv.getItem(inv, slot - 1));
+				if(temp_type == "km:arrow_down" || temp_type_2 == "km:arrow_left") {
+					continue;
+				}
+				if(temp_type == "minecraft:air") {
+					inv.setItem(inv, slot + 9, item_arrow_down);
+					continue;
+				}
+			}
+			if(slot > 36) {
+				temp_type = item.getType(inv.getItem(inv, slot - 9));
+				temp_type_2 = item.getType(inv.getItem(inv, slot - 1));
+				if(temp_type == "km:arrow_up" || temp_type_2 == "km:arrow_left") {
+					continue;
+				}
+				if(temp_type == "minecraft:air") {
+					inv.setItem(inv, slot - 9, item_arrow_up);
+					continue;
+				}
+			}
+			if(item.getType(inv.getItem(inv, slot - 1)) == "minecraft:air") {
+				inv.setItem(inv, slot - 1, item_arrow_left);
+			}
+		}
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cDivert Power") {
+	task_id = 14;
+	step = task.getStep(player, task_id);
+	if(step == 2) {
+		goto("checkgame");
+	}
+	item_type = item.getType(item);
+	if(item_type == "minecraft:redstone_torch") {
+		if(step == 1) {
+			goto("checkgame");
+		}
+		redstone = read.item("minecraft:redstone");
+		inv.setItem(inv, 0, redstone);
+		inv.setItem(inv, 3, redstone);
+		inv.setItem(inv, inv_slot - 9, redstone);
+		if(inv_slot < 26) {
+			inv.setItem(inv, inv_slot - 16, redstone);
+			if(inv_slot < 24) {
+				inv.setItem(inv, inv_slot - 20, redstone);
+				inv.setItem(inv, inv_slot - 21, redstone);
+			}
+		} elseif(inv_slot > 26) {
+			inv.setItem(inv, inv_slot - 18, redstone);
+			if(inv_slot > 28) {
+				inv.setItem(inv, inv_slot - 25, redstone);
+				inv.setItem(inv, inv_slot - 26, redstone);
+			}
+		} else {
+			inv.setItem(inv, inv_slot - 17, redstone);
+		}
+		player_uuid = player.getUuid(player);
+		removeTaskParticle(player, elec_power_par_loc);
+		r = map.get(divert_pow_map_3, player_uuid);
+		addTaskParticle(player, map.get(divert_pow_map_4, r));
+		step = task.stepIncrease(player, task_id);
+		giveTask(player, task_id, "[Room]", "Divert power to [Room]", step, 2, null);
+		sgoto_auto_close_inv(player_uuid);
+		goto("checkgame");
+	}
+	if(item_type == "minecraft:stone_button") {
+		redstone = read.item("minecraft:redstone");
+		inv.setItem(inv, 2, redstone);
+		inv.setItem(inv, 6, redstone);
+		inv.setItem(inv, 7, redstone);
+		inv.setItem(inv, 10, redstone);
+		inv.setItem(inv, 11, redstone);
+		inv.setItem(inv, 17, redstone);
+		inv.setItem(inv, 18, redstone);
+		inv.setItem(inv, 19, redstone);
+		inv.setItem(inv, 21, redstone);
+		inv.setItem(inv, 22, redstone);
+		inv.setItem(inv, 25, redstone);
+		inv.setItem(inv, 26, redstone);
+		player_uuid = player.getUuid(player);
+		r = map.get(divert_pow_map_3, player_uuid);
+		removeTaskParticle(player, map.get(divert_pow_map_4, r));
+		step = task.stepIncrease(player, task_id);
+		giveTask(player, task_id, "[Room]", "Divert power to [Room]", step, 2, null);
+		inv.open(inv, player, "§cDivert Power");
+		sgoto_auto_close_inv(player.getUuid(player));
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cClear Asteroids") {
+	task_id = 13;
+	step = task.getStep(player, task_id);
+	if(step == 20) {
+		goto("checkgame");
+	}
+	if(item.getType(item) == "minecraft:bedrock") {
+		inv.setItem(inv, inv_slot, air_item);
+		player_uuid = player.getUuid(player);
+		my_list = map.get(clear_ast_map, player_uuid);
+		iter = iterator(my_list);
+		while(hasNext(iter)) {
+			a = next(iter);
+			slot = a[1];
+			if(slot == inv_slot) {
+				step = task.stepIncrease(player, task_id);
+				giveTask(player, 13, "Weapons", "Clear Asteroids", step, 20, null);
+				if(step == 20) {
+					removeTaskParticle(player, clear_ast_par_loc);
+					sgoto_auto_close_inv(player_uuid);
+					list.add(clear_ast_list_3, player_uuid);
+					break;
+				} else {
+					remove(iter);
+					continue;
+				}
+			}
+		}
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cEmpty Garbage") {
+	task_id = 12;
+	step = task.getStep(player, task_id);
+	if(step == 2) {
+		goto("checkgame");
+	}
+	if(item.getType(item) == "km:arrow_down") {
+		inv.setItem(inv, 35, air_item);
+		player_uuid = player.getUuid(player);
+		list.add(empty_garb_list, player_uuid);
+		map.add(empty_garb_map, player_uuid, 0);
+		map.add(empty_garb_map_2, player_uuid, inv);
+		sgoto(20, "empty_garb");
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cSwipe Card") {
+	task_id = 11;
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	if(inv_slot == 0 || (item.getType(item) == "minecraft:air" && item.getType(inv.getItem(inv, inv_slot - 1)) == "minecraft:lime_stained_glass_pane")) {
+		player_uuid = player.getUuid(player);
+		if(inv_slot == 0) {
+			map.add(swipe_card_map, player_uuid, time.getMillis());
+		}
+		inv.setItem(inv, inv_slot, lime_glass);
+		if(inv_slot == 4) {
+			start_time = map.get(swipe_card_map, player_uuid);
+			time = (time.getMillis() - start_time) / 1000;
+			if(time < 1.8) {
+				inv.setItem(inv, 5, read.item("km:cross_red", 1, string.concat("§rToo fast ", math.roundComma(time, 1), "s")));
+				for(i = 0; i < 5; i++) {
+					inv.setItem(inv, i, air_item);
+				}
+			} elseif(time > 2.2) {
+				inv.setItem(inv, 5, read.item("km:cross_red", 1, string.concat("§rToo slow ", math.roundComma(time, 1), "s")));
+				for(i = 0; i < 5; i++) {
+					inv.setItem(inv, i, air_item);
+				}
+			} else {
+				removeTaskParticle(player, swipe_card_par_loc);
+				inv.setItem(inv, 5, read.item("km:check_green", 1, "§rTask completed"));
+				step = task.stepIncrease(player, task_id);
+				giveTask(player, 11, "Admin", "Swipe Card", 1, 1, null);
+				sgoto_auto_close_inv(player_uuid);
+			}
+		}
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cFix Wiring") {
+	task_id = 10;
+	step = task.getStep(player, task_id);
+	if(step == 3) {
+		goto("checkgame");
+	}
+	player_uuid = player.getUuid(player);
+	if(inv_slot == 0 || inv_slot == 4 || inv_slot == 8 || inv_slot == 12) {
+		map.add(wires_map_2, player_uuid, inv_slot);
+	}
+	if(inv_slot == 3 || inv_slot == 7 || inv_slot == 11 || inv_slot == 15) {
+		slot = map.get(wires_map_2, player_uuid);
+		if(slot == null) {
+			goto("checkgame");
+		}
+		map.remove(wires_map_2, player_uuid);
+		if(item.getType(inv.getItem(inv, slot)) == item.getType(item) && item.getType(inv.getItem(inv, inv_slot - 1)) == "km:cross_red") {
+			inv.setItem(inv, slot + 1, read.item("km:check_green", 1, "§rConnected"));
+			inv.setItem(inv, inv_slot - 1, read.item("km:check_green", 1, "§rConnected"));
+			c = map.getOrDefault(wires_map, player_uuid, 0) + 1;
+			map.add(wires_map, player_uuid, c);
+			if(c == 4) {
+				map.remove(wires_map, player_uuid);
+				step = task.stepIncrease(player, task_id);
+				giveTask(player, 10, "Cafeteria", "Fix Wiring", step, 3, null);
+				sgoto_auto_close_inv(player_uuid);
+			}
+		}
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cCalibrate Distributor") {
+	task_id = 9;
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	if(inv_slot == 14) {
+		player_uuid = player.getUuid(player);
+		a = map.get(calibrate_dist_map, player_uuid);
+		if(item.getType(inv.getItem(inv, 9)) == item.getType(inv.getItem(inv, 10))) {
+			stage = a[4] + 1;
+			a[4] = stage;
+			if(stage == 1) {
+				inv.setItem(inv, 0, read.item("km:check_green"));
+				inv.setItem(inv, 10, blue_glass);
+				inv.setItem(inv, 11, blue_glass);
+			} elseif(stage == 2) {
+				inv.setItem(inv, 1, read.item("km:check_green"));
+				inv.setItem(inv, 10, cyan_glass);
+				inv.setItem(inv, 11, cyan_glass);
+			} elseif(stage == 3) {
+				removeTaskParticle(player, calibrate_dist_par_loc);
+				inv.setItem(inv, 2, read.item("km:check_green"));
+				step = task.stepIncrease(player, task_id);
+				giveTask(player, 9, "Electrical", "Calibrate Distributor", 1, 1, null);
+				sgoto_auto_close_inv(player_uuid);
+			}
+		} else {
+			a[4] = 0;
+			inv.setItem(inv, 0, read.item("km:cross_red"));
+			inv.setItem(inv, 1, read.item("km:cross_red"));
+			inv.setItem(inv, 2, read.item("km:cross_red"));
+			inv.setItem(inv, 10, yellow_glass);
+			inv.setItem(inv, 11, yellow_glass);
+		}
+		a[3] = a[2]; //Index = Start_index
+		map.add(calibrate_dist_map, player_uuid, a);
+		for(h = 0; h < 12; h++) {
+			inv.setItem(inv, calibrate_dist_array[h], air_item);
+		}
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cInspect Sample") {
+	task_id = 8;
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	item_type = item.getType(item);
+	if(item_type == "minecraft:green_stained_glass_pane") {
+		if(inv_slot == 20) {
+			inv.setItem(inv, 20, read.item("minecraft:gray_stained_glass_pane", 59, "§rGo grab a coffee"));
+			giveTask(player, 8, "MedBay", "Inspect Sample", 0, 1, 59);
+			player_uuid = player.getUuid(player);
+			list.add(sample_list, player_uuid);
+			list.add(sample_list_2, 59);
+			map.add(sample_map, player_uuid, inv);
+			sgoto(20, "countdown_sample");
+			goto("checkgame");
+		}
+		if(inv_slot >= 15) {
+			if(item.getType(inv.getItem(inv, inv_slot - 5)) == "minecraft:red_stained_glass_pane") {
+				removeTaskParticle(player, inspect_par_loc);
+				step = task.stepIncrease(player, task_id);
+				giveTask(player, 8, "MedBay", "Inspect Sample", 1, 1, null);
+				sgoto_auto_close_inv(player.getUuid(player));
+			} else {
+				for(i = 0; i < 15; i++) {
+					inv.setItem(inv, i, read.item("minecraft:white_stained_glass_pane", 1, "§rSample"));
+				}
+				for(i = 15; i < 20; i++) {
+					inv.setItem(inv, i, read.item("minecraft:gray_stained_glass_pane", 1, "§rSelect sample"));
+				}
+				inv.setItem(inv, 20, read.item("minecraft:green_stained_glass_pane", 1, "§rPress to start"));
+				giveTask(player, 8, "MedBay", "Inspect Sample", 0, 1, null);
+			}
+		}
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cStabilize Steering") {
+	task_id = 7;
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	item_type = item.getType(item);
+	new_cross_slot = inv_slot;
+	if(item_type == "km:arrow_down") {
+		cross_slot = inv_slot - 9;
+		if(cross_slot == 22) {
+			new_cross_slot = cross_slot;
+			cross_slot -= 9;
+		}
+	} elseif(item_type == "km:arrow_up") {
+		cross_slot = inv_slot + 9;
+		if(cross_slot == 22) {
+			new_cross_slot = cross_slot;
+			cross_slot += 9;
+		}
+	} elseif(item_type == "km:arrow_left") {
+		cross_slot = inv_slot + 1;
+		if(cross_slot == 22) {
+			new_cross_slot = cross_slot;
+			cross_slot++;
+		}
+	} elseif(item_type == "km:arrow_right") {
+		cross_slot = inv_slot - 1;
+		if(cross_slot == 22) {
+			new_cross_slot = cross_slot;
+			cross_slot--;
+		}
+	} else {
+		goto("checkgame");
+	}
+	//remove old plus
+	if(cross_slot != 22) {
+		inv.setItem(inv, cross_slot, air_item);
+	}
+	temp_slot = cross_slot - 1;
+	if(temp_slot == 22) {
+		temp_slot--;
+	}
+	if(temp_slot >= 0 && cross_slot % 9 != 0) {
+		inv.setItem(inv, temp_slot, air_item);
+	}
+	temp_slot = cross_slot + 1;
+	if(temp_slot == 22) {
+		temp_slot++;
+	}
+	if(temp_slot >= 0 && temp_slot % 9 != 0) {
+		inv.setItem(inv, temp_slot, air_item);
+	}
+	temp_slot = cross_slot - 9;
+	if(temp_slot == 22) {
+		temp_slot -= 9;
+	}
+	if(temp_slot >= 0) {
+		inv.setItem(inv, temp_slot, air_item);
+	}
+	temp_slot = cross_slot + 9;
+	if(temp_slot == 22) {
+		temp_slot += 9;
+	}
+	if(temp_slot < 45) {
+		inv.setItem(inv, temp_slot, air_item);
+	}
+	//set new plus
+	inv.setItem(inv, new_cross_slot, read.item("km:plus_red"));
+	temp_slot = new_cross_slot - 1;
+	if(temp_slot == 22) {
+		inv.setItem(inv, temp_slot - 1, item_arrow_left);
+	} else {
+		if(temp_slot >= 0 && new_cross_slot % 9 != 0) {
+			inv.setItem(inv, temp_slot, item_arrow_left);
+		}
+	}
+	temp_slot = new_cross_slot + 1;
+	if(temp_slot == 22) {
+		inv.setItem(inv, temp_slot + 1, item_arrow_right);
+	} else {
+		if(temp_slot >= 0 && temp_slot % 9 != 0) {
+			inv.setItem(inv, temp_slot, item_arrow_right);
+		}
+	}
+	temp_slot = new_cross_slot - 9;
+	if(temp_slot == 22) {
+		inv.setItem(inv, temp_slot - 9, item_arrow_up);
+	} else {
+		if(temp_slot >= 0) {
+			inv.setItem(inv, temp_slot, item_arrow_up);
+		}
+	}
+	temp_slot = new_cross_slot + 9;
+	if(temp_slot == 22) {
+		inv.setItem(inv, temp_slot + 9, item_arrow_down);
+	} else {
+		if(temp_slot < 45) {
+			inv.setItem(inv, temp_slot, item_arrow_down);
+		}
+	}
+	//finish task
+	if(new_cross_slot == 22) {
+		removeTaskParticle(player, steering_par_loc);
+		inv.setItem(inv, 44, read.item("km:check_green", 1, "§rTask completed"));
+		step = task.stepIncrease(player, task_id);
+		giveTask(player, task_id, "Navigation", "Stabilize Steering", 1, 1, null);
+		sgoto_auto_close_inv(player.getUuid(player));
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cChart Course") {
+	task_id = 6;
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	player_uuid = player.getUuid(player);
+	a = map.get(chart_course_pattern, player_uuid);
+	c = map.getOrDefault(chart_course_counter, player_uuid, 0);
+	if(a[c] == inv_slot) {
+		inv.setItem(inv, inv_slot, green_glass);
+		map.add(chart_course_counter, player_uuid, c + 1);
+		if(c == 8) {
+			inv.setItem(inv, inv.getSize(inv) - 1, read.item("km:check_green", 1, "§rTask completed"));
+			removeTaskParticle(player, chart_course_par_loc);
+			step = task.stepIncrease(player, task_id);
+			giveTask(player, task_id, "Navigation", "Chart Course", 1, 1, null);
+			sgoto_auto_close_inv(player_uuid);
+		}
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cUnlock Manifolds") {
+	task_id = 5;
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	item_type = item.getType(item);
+	if(item_type == "minecraft:blue_stained_glass_pane") {
+		player_uuid = player.getUuid(player);
+		amount = map.getOrDefault(manifolds_counter, player_uuid, 1);
+		if(amount == item.getAmount(item)) {
+			inv.setItem(inv, inv_slot, read.item("minecraft:green_stained_glass_pane", amount));
+			map.add(manifolds_counter, player_uuid, amount + 1);
+			if(amount == 10) {
+				removeTaskParticle(player, unlock_manifolds_par_loc);
+				step = task.stepIncrease(player, task_id);
+				giveTask(player, task_id, "Reactor", "Unlock Manifolds", 1, 1, null);
+				sgoto_auto_close_inv(player_uuid);
+			}
+			goto("checkgame");
+		}
+		goto("false_manifolds_click");
+	}
+	if(item_type == "minecraft:green_stained_glass_pane") {
+		goto("false_manifolds_click");
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cStart Reactor") {
+	task_id = 4;
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	if(!(inv_slot > 7 && inv_slot < 11 || inv_slot > 13 && inv_slot < 17 || inv_slot > 19 && inv_slot < 23)) {
+		goto("checkgame");
+	}
+	player_uuid = player.getUuid(player);
+	item_type = item.getType(item);
+	if(item_type == "minecraft:red_stained_glass_pane") {
+		goto("checkgame");
+	}
+	if(item_type == "minecraft:black_stained_glass_pane") {
+		goto("false_reactor_click");
+	}
+	if(reactor.getPhase(reactor_array) == "draw") {
+		goto("false_reactor_click");
+	}
+	reactor_array = reactor.get(player);
+	stage = reactor.getStage(reactor_array);
+	counter = reactor.getCounter(reactor_array);
+	pattern = reactor.getPattern(reactor_array);
+	if(inv_slot - 3 != pattern[counter]) {
+		goto("false_reactor_click");
+	}
+	inv.setItem(inv, inv_slot, blue_glass);
+	list.add(reset_reactor_click_list, player_uuid);
+	list.add(reset_reactor_click_list_2, inv_slot);
+	sgoto(10, "reset_reactor_click");
+	if(counter == stage && stage < 5) {
+		stage++;
+		reactor.setStage(reactor_array, stage);
+		reactor.setCounter(reactor_array, 0);
+		reactor.setPhase(reactor_array, "draw");
+		reactor.save(reactor_array, player);
+		if(stage == 5) {
+			removeTaskParticle(player, start_reactor_par_loc);
+			step = task.stepIncrease(player, task_id);
+			giveTask(player, task_id, "Reactor", "Start Reactor", 1, 1, null);
+			sgoto_auto_close_inv(player_uuid);
+			reactor_used = false;
+			goto("checkgame");
+		}
+		list.add(reactor_draw_list_1, player_uuid);
+		sgoto(20, "draw_pattern_1");
+		goto("checkgame");
+	}
+	reactor.setCounter(reactor_array, ++counter);
+	reactor.save(reactor_array, player);
+	goto("checkgame");
+}
+if(inv_name == "§cPrime Shields") {
+	task_id = 3;
+	step = task.getStep(player, task_id);
+	if(step == 1) {
+		goto("checkgame");
+	}
+	item_type = item.getType(item);
+	if(item_type == "minecraft:red_stained_glass_pane") {
+		inv.setItem(inv, inv_slot, green_glass);
+		c = 0;
+		for(i = 0; i < 16; i++) {
+			if(item.getType(inv.getitem(inv, i)) == "minecraft:green_stained_glass_pane") {
+				c++;
+			}
+		}
+		if(c == 16) {
+			removeTaskParticle(player, prime_shields_par_loc);
+			step = task.stepIncrease(player, task_id);
+			giveTask(player, task_id, "Shields", "Prime Shields", 1, 1, null);
+			sgoto_auto_close_inv(player.getUuid(player));
+		}
+	}
+	if(item_type == "minecraft:green_stained_glass_pane") {
+		inv.setItem(inv, inv_slot, red_glass);
+	}
+	goto("checkgame");
+}
+if(inv_id == inv.getId(reactor_inv_1)) {
+	if(reactor_sabotaged) {
+		sabotage.holdReactor(reactor_inv_1, true);
+		hold_reactor_1 = true;
+		if(hold_reactor_2) {
+			fix_meltdown();
+		}
+	}
+	goto("checkgame");
+}
+if(inv_id == inv.getId(reactor_inv_2)) {
+	if(reactor_sabotaged) {
+		sabotage.holdReactor(reactor_inv_2, true);
+		hold_reactor_2 = true;
+		if(hold_reactor_1) {
+			fix_meltdown();
+		}
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cFix Communications") {
+	if(!comms_sabotaged) {
+		goto("checkgame");
+	}
+	if(inv_slot == 36) {
+		comms_freq = item.getAmount(inv.getItem(inv, 37)) - 1;
+	} elseif(inv_slot == 38) {
+		comms_freq = item.getAmount(inv.getItem(inv, 37)) + 1;
+	} else {
+		goto("checkgame");
+	}
+	if(comms_freq < 1 || comms_freq > 64) {
+		goto("checkgame");
+	}
+	inv.setItem(inv, 37, read.item("minecraft:black_stained_glass_pane", comms_freq));
+	player_uuid = player.getUuid(player);
+	comms_state = map.get(comms_state_map, player_uuid);
+	diff = math.abs(comms_freq - comms_fix_freq);
+	if(diff == 0) {
+		if(comms_state != 2) {
+			comms.drawCorrect(inv, player);
+		}
+		list.add(comms_fix_list, player_uuid);
+		map.add(comms_fix_map, player_uuid, time.getMillis());
+		sgoto(40, "scheduled_fix_comms");
+		goto("checkgame");
+	} elseif(diff < 4) {
+		if(comms_state != 1) {
+			comms.drawClose(inv, player);
+		}
+		map.remove(comms_fix_map, player_uuid);
+	} else {
+		if(comms_state != 0) {
+			comms.drawWorst(inv, player);
+		}
+		map.remove(comms_fix_map, player_uuid);
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cFix Lights") {
+	if(!lights_sabotaged) {
+		goto("checkgame");
+	}
+	item_type = item.getType(item);
+	if(item_type == "minecraft:red_stained_glass_pane") {
+		inv.setItem(lights_inv, inv_slot, read.item("minecraft:green_stained_glass_pane", 1, "§rOn"));
+		c = 0;
+		for(i = 0; i < 5; i++) {
+			if(item.getType(inv.getitem(lights_inv, i)) == "minecraft:green_stained_glass_pane") {
+				c++;
+			}
+		}
+		if(c == 5) {
+			fix_light();
+		}
+		goto("checkgame");
+	}
+	if(item_type == "minecraft:green_stained_glass_pane") {
+		inv.setItem(lights_inv, inv_slot, read.item("minecraft:red_stained_glass_pane", 1, "§rOff"));
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cDownload Data") {
+	if(string.text(item.getName(item)) == "§rDownload") {
+		inv.setItem(inv, 11, air_item);
+		goto("download_data_2");
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cUpload Data") {
+	if(string.text(item.getName(item)) == "§rUpload") {
+		inv.setItem(inv, 11, air_item);
+		goto("download_data_2");
+	}
+	goto("checkgame");
+}
+if(inv_name == "§cFuel") {
+	task_id = 1;
+	step = task.getStep(player, task_id);
+	if(step == 1 || step == 3 || step == 4) {
+		goto("checkgame");
+	}
+	if(string.text(item.getName(item)) == "§rGet fuel") {
+		player_uuid = player.getUuid(player);
+		c = map.getOrDefault(fuel_counter, player_uuid, 0);
+		if(c == 7) {
+			c++;
+		}
+		inv.setItem(inv, c++, air_item);
+		map.add(fuel_counter, player_uuid, c);
+		if(c == 43) {
+			step = task.stepIncrease(player, task_id);
+			map.remove(fuel_counter, player_uuid);
+			removeTaskParticle(player, get_fuel_par_loc);
+			if(step == 1) {
+				addTaskParticle(player, upper_engine_par_loc);
+				giveTask(player, task_id, "Upper engine", "Fuel Engines", 1, 4, null);
+				sgoto_auto_close_inv(player_uuid);
+			} elseif(step == 3) {
+				addTaskParticle(player, lower_engine_par_loc);
+				giveTask(player, task_id, "Lower engine", "Fuel Engines", 3, 4, null);
+				sgoto_auto_close_inv(player_uuid);
+			}
+		}
+		goto("checkgame");
+	}
+	cancel = true;
+	goto("checkgame");
+}
+if(inv_name == "§cEngine") {
+	task_id = 1;
+	step = task.getStep(player, task_id);
+	if(step == 0 || step == 2 || step == 4) {
+		goto("checkgame");
+	}
+	if(string.text(item.getName(item)) == "§rFill engine") {
+		player_uuid = player.getUuid(player);
+		c = map.getOrDefault(fuel_counter, player_uuid, 42);
+		if(c == 7) {
+			c--;
+		}
+		inv.setItem(inv, c--, read.item("minecraft:lime_terracotta"));
+		map.add(fuel_counter, player_uuid, c);
+		if(c == -1) {
+			map.remove(fuel_counter, player_uuid);
+			if(step == 1) {
+				removeTaskParticle(player, upper_engine_par_loc);
+				addTaskParticle(player, get_fuel_par_loc);
+				giveTask(player, task_id, "Storage", "Fuel Engines", 2, 4, null);
+				sgoto_auto_close_inv(player_uuid);
+			} elseif(step == 3) {
+				removeTaskParticle(player, lower_engine_par_loc);
+				giveTask(player, task_id, "Lower engine", "Fuel Engines", 4, 4, null);
+				sgoto_auto_close_inv(player_uuid);
+			}
+			step = task.stepIncrease(player, task_id);
+		}
+		goto("checkgame");
+	}
+	cancel = true;
+}
+goto("checkgame");
+
+@score_evaluation
+sort_array = map.sort(vote_count_map, false);
+//Ausgabe der Votes
+minigame.speakAll(gamename, "§0------------------------");
+sort_array_size = array.getSize(sort_array);
+for(i = 0; i < sort_array_size; i++) {
+	p_uuid = sort_array[i, 0];
+	value = sort_array[i, 1];
+	if(p_uuid == "skip") {
+		minigame.speakAll(gamename, string.concat("Skipped: ", string.number(value)));
+	} else {
+		minigame.speakAll(gamename, string.concat(amongus.getPlayerColorCode(p_uuid), player.getName(p_uuid), "§r ", string.number(value)));
+	}
+}
+//Auswertung der Votes
+if(sort_array_size == 0) {
+	message = "Nobody voted (Skipped).";
+	minigame.speakAll(gamename, message);
+	minigame.titleAll("Voting ended", message, 20, 60, 20);
+	continueGame();
+	goto("checkgame");
+} elseif(sort_array_size == 1) {
+	kick_uuid = sort_array[0, 0];
+} else {
+	value_0 = sort_array[0, 1];
+	value_1 = sort_array[1, 1];
+	if(value_0 > value_1) {
+		kick_uuid = sort_array[0, 0];
+	} else {
+		message = "No one ejected (Tie).";
+		minigame.speakAll(gamename, message);
+		minigame.titleAll("Voting ended", message, 20, 60, 20);
+		continueGame();
+		goto("checkgame");
+	}
+}
+if(kick_uuid == "skip") {
+	message = "No one ejected (Skipped).";
+	minigame.speakAll(gamename, message);
+	minigame.titleAll("Voting ended", message, 20, 60, 20);
+	continueGame();
+	goto("checkgame");
+}
+//Vollstreckung
+if(confirm_ejects) {
+	if(isImpostor(kick_uuid)) {
+		message = "§r was an §cimpostor§r.";
+	} else {
+		message = "§r was a §bcrewmate§r.";
+	}
+} else {
+	message = "§r was ejected.";
+}
+message = string.concat(amongus.getPlayerColorCode(kick_uuid), player.getName(kick_uuid), message);
+minigame.speakAll(gamename, message);
+list.add(ghosts, kick_uuid);
+kick_player = player.get(kick_uuid);
+stacks.clearIndex(kick_player, 0);
+stacks.clearIndex(kick_player, 1);
+stacks.clearIndex(kick_player, 3);
+stacks.clearIndex(kick_player, 4);
+entity.addEffect(kick_player, "invisibility", 999999, 1, false);
+amongus.removeEquip(kick_player);
+minigame.titleAll("Voting ended", message, 20, 60, 20);
+//Checkwin
+imps_alive = 0;
+crew_alive = 0;
+iter = iterator(player_list);
+while(hasNext(iter)) {
+	p_uuid = next(iter);
+	p = player.get(p_uuid);
+	if(!player.isGhost(p)) {
+		if(isImpostor(p)) {
+			imps_alive++;
+		} else {
+			crew_alive++;
+		}
+	}
+}
+if(imps_alive == 0) {
+	winners = "§bCrewmates";
+	goto("win");
+}
+if(imps_alive >= crew_alive) {
+	winners = "§cImpostors";
+	goto("win");
+}
+continueGame();
+goto("checkgame");
+
+@player_logout
+@player_giveup
+minigame.speakAll(gamename, string.concat(amongus.getPlayerColorCode(player), player.getName(player), " §rhas left the game."));
+player.setGamemode(player, "survival");
+script = script.getFromId(script_id);
+minigame.kickplayer(script, player);
+player.gameMute(player, false);
+if(isImpostor(player)) {
+	list.remove(impostors_list_2, player_uuid);
+}
+//Building-Perms wieder geben
+player_uuid = player.getUuid(player);
+if(list.contains(removed_perms, player_uuid)) {
+	list.remove(removed_perms, player_uuid);
+	perm.registerPlayer(player_uuid, 1);
+	perm.registerPlayer(player_uuid, 15);
+}
+if(freeplay) {
+	removeDeadBodies();
+	removeCamBodies();
+	minigame.kickAllPlayers(script);
+	minigame.term(script, gamesignloc);
+	term();
+}
+//checkwin
+imps_alive = 0;
+crew_alive = 0;
+iter = iterator(player_list);
+while(hasNext(iter)) {
+	p_uuid = next(iter);
+	p = player.get(p_uuid);
+	if(!player.isGhost(p)) {
+		if(isImpostor(p)) {
+			imps_alive++;
+		} else {
+			crew_alive++;
+		}
+	}
+}
+if(imps_alive == 0) {
+	winners = "§bCrewmates";
+	goto("win");
+}
+if(imps_alive >= crew_alive) {
+	winners = "§cImpostors";
+	goto("win");
+}
+if(!player.isGhost(player)) {
+	amongus.removeFromAdminTable(player);
+}
+amount_all_tasks = (amount_short + amount_common + amount_long) * crew_alive;
+pct = amount_done_tasks / amount_all_tasks;
+boss.setProgress(progress_bar, pct);
+if(meeting) {
+	//Vote des leavenden Spielers entfernen
+	vote_uuid = map.get(vote_count_map_2, player_uuid);
+	if(vote_uuid != null) {
+		votes = map.get(vote_count_map, vote_uuid) - 1;
+		if(votes == 0) {
+			map.remove(vote_count_map, vote_uuid);
+		} else {
+			map.add(vote_count_map, vote_uuid, votes);
+		}
+		map.remove(vote_count_map_2, player_uuid);
+	}
+	//Alle Votes entfernen, die auf den leavenden Spieler lauten
+	iter = map.iterator(vote_count_map_2);
+	while(hasNext(iter)) {
+		element = next(iter);
+		vote_uuid = map.getValue(element);
+		if(vote_uuid == player_uuid) {
+			//Spieler neu voten lassen
+			voter_uuid = map.getKey(element);
+			remove(iter);
+			map.remove(vote_count_map_2, voter_uuid);
+			//Vote-Menu aktualisieren
+			index = list.getIndexOf(all_list, voter_uuid);
+			voted_slot = index * 4;
+			setItemInVoteInv(voted_slot, air_item);
+		}
+	}
+	//Vote-Menu aktualisieren
+	index = list.getIndexOf(all_list, player_uuid);
+	voted_slot = index * 4;
+	setItemInVoteInv(voted_slot, zombie_head);
+}
+goto("checkgame");
+
+@entity_damage
+cancel = true;
+goto("checkgame");
+
+@player_data_tick
+if(var == "Discussion Time") {
+	stacks.set(player, 4, "km:skill33");
+	tick_time = vote_time * 20; //s
+	status.addTimed(player, 2, tick_time, "Voting Time");
+	data.setTimer(player, "Voting Time", tick_time - 20);
+	vote_inv = getVoteInv(player);
+	inv.open(vote_inv, player, "§cVOTE");
+	data.setTimer(player, "sound.vote.end.10", tick_time - 200);
+	data.setTimer(player, "sound.vote.end.5", tick_time - 100);
+	data.setTimer(player, "sound.vote.end.4", tick_time - 80);
+	data.setTimer(player, "sound.vote.end.3", tick_time - 60);
+	data.setTimer(player, "sound.vote.end.2", tick_time - 40);
+	data.setTimer(player, "sound.vote.end.1", tick_time - 20);
+	goto("checkgame");
+}
+if(!meeting) {
+	goto("checkgame");
+}
+if(var == "Voting Time") {
+	goto("score_evaluation");
+}
+if(var == "sound.vote.end.10") {
+	sound.spawnForPlayer(player, vote_ends_sound, master_sound_category);
+	goto("checkgame");
+}
+if(var == "sound.vote.end.5") {
+	sound.spawnForPlayer(player, vote_ends_sound, master_sound_category);
+	goto("checkgame");
+}
+if(var == "sound.vote.end.4") {
+	sound.spawnForPlayer(player, vote_ends_sound, master_sound_category);
+	goto("checkgame");
+}
+if(var == "sound.vote.end.3") {
+	sound.spawnForPlayer(player, vote_ends_sound, master_sound_category);
+	goto("checkgame");
+}
+if(var == "sound.vote.end.2") {
+	sound.spawnForPlayer(player, vote_ends_sound, master_sound_category);
+	goto("checkgame");
+}
+if(var == "sound.vote.end.1") {
+	sound.spawnForPlayer(player, vote_ends_sound, master_sound_category);
+	goto("checkgame");
+}
+goto("checkgame");
+
+@function_key
+player_uuid = player.getUuid(player);
+//cams
+if(player.isOnCam(player)) {
+	cam_number = map.get(cam_map, player_uuid);
+	number_of_cams = set.getSize(cams_locs);
+	if(key == 1) {
+		cam_number--;
+		if(cam_number < 0) {
+			cam_number = number_of_cams - 1;
+		}
+	} elseif(key == 2) {
+		cam_number++;
+		if(cam_number >= number_of_cams) {
+			cam_number = 0;
+		}
+	} elseif(key == 9) {
+		cam.leave(player);
+	} else {
+		goto("checkgame");
+	}
+	map.add(cam_map, player_uuid, cam_number);
+	goto("checkgame");
+}
+//meeting
+if(meeting) {
+	if(key == 5) {
+		if(data.getTimer(player, "Discussion Time") < 0) {
+			vote_inv = getVoteInv(player);
+			inv.open(vote_inv, player, "§cVOTE");
+		}
+	}
+	goto("checkgame");
+}
+//vents
+if(list.contains(vent_list, player_uuid)) {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	//vent button 1
+	if(key == 5) {
+		vent_leave(player);
+	} elseif(key == 6) {
+		vent_loc = map.get(vent_map_4, player_uuid);
+		a = map.get($vent_map_3, vent_loc);
+		vent_loc_1 = a[1];
+		if(vent_loc_1 != null) {
+			vent_enter(player, vent_loc_1);
+		}
+	} elseif(key == 7) {
+		//vent button 2
+		vent_loc = map.get(vent_map_4, player_uuid);
+		a = map.get($vent_map_3, vent_loc);
+		vent_loc_2 = a[3];
+		if(vent_loc_2 != null) {
+			vent_enter(player, vent_loc_2);
+		}
+	}
+	goto("checkgame");
+}
+//report body
+if(key == 1) {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	ent = player.getTargetEntity(player, 4, "net.minecraft.entity.monster.ZombieEntity");
+	if(ent == null) {
+		ent = entity.get(entity.getLocation(player), 4, "net.minecraft.entity.monster.ZombieEntity");
+		if(ent == null) {
+			msg.prefix(player, gamename, "No body detected.");
+			goto("checkgame");
+		}
+	}
+	found_player_uuid = map.get(report_map, ent);
+	reportBody(player, found_player_uuid);
+	goto("checkgame");
+}
+//call meeting
+if(key == 2) {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	if(loc.distance(entity.getLocation(player), meeting_button_loc) > 3) {
+		msg.prefix(player, gamename, "Too far away.");
+		goto("checkgame");
+	}
+	if(amongus.isAlert()) {
+		msg.prefix(player, gamename, "No meetings allowed while sabotaged.");
+		goto("checkgame");
+	}
+	callMeeting(player);
+	goto("checkgame");
+}
+if(isCrewmate(player)) {
+	goto("checkgame");
+}
+if(key == 4) {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	//kill crewmate
+	cooldown = data.getTimer(player, "Kill Cooldown");
+	if(cooldown == null || cooldown == -1) {
+		//Schaut der Spieler einen anderen Spieler an?
+		p = player.getTargetEntity(player, 4, "net.minecraft.entity.player.PlayerEntity");
+		if(p != null) {
+			//Angeschauten Spieler töten
+			if(!player.isOnCam(p) && !player.isGhost(p)) {
+				if(isCrewmate(p)) {
+					killCrewmate(player, p);
+					goto("checkwin");
+				}
+				msg.prefix(player, gamename, string.concat("Not a crewmate."));
+				goto("checkgame");
+			}
+		}
+		//Schaut der Spieler einen Kamera-Human an?
+		human = player.getTargetEntity(player, 4, "me.km.entities.EntityHuman");
+		if(human != null) {
+			p_uuid = map.get(cam_map_4, human);
+			if(p_uuid == null) {
+				entity.remove(human);
+				msg.prefix(player, gamename, string.concat("Fehlerhaftes Human-Entity entfernt."));
+				goto("checkgame");
+			}
+			p = player.get(p_uuid);
+			//Angeschauten Spieler töten
+			cam.leave(p);
+			if(isCrewmate(p)) {
+				killCrewmate(player, p);
+				goto("checkwin");
+			}
+			msg.prefix(player, gamename, string.concat("Not a crewmate."));
+			goto("checkgame");
+		}
+		//Spieler nearby suchen und töten
+		nearest_player = null;
+		lowest_dist = 10;
+		player_loc = entity.getLocation(player);
+		iter = iterator(player_list);
+		while(hasNext(iter)) {
+			p_uuid = next(iter);
+			if(p_uuid == player_uuid) {
+				continue;
+			}
+			p = player.get(p_uuid);
+			if(player.isGhost(p) || player.isOnCam(p)) {
+				continue;
+			}
+			if(isImpostor(p)) {
+				continue;
+			}
+			p_loc = entity.getLocation(p);
+			dist = loc.distance(player_loc, p_loc);
+			if(dist < 4 && dist < lowest_dist) {
+				nearest_player = p;
+				lowest_dist = dist;
+			}
+		}
+		if(nearest_player != null) {
+			if(isCrewmate(nearest_player)) {
+				killCrewmate(player, nearest_player);
+				goto("checkwin");
+			}
+			msg.prefix(player, gamename, string.concat("Not a crewmate."));
+			goto("checkgame");
+		}
+		//Human nearby suchen und töten
+		nearest_human = null;
+		lowest_dist = 10;
+		near_list = entity.near(player, 4);
+		iter = iterator(near_list);
+		while(hasNext(iter)) {
+			ent = next(iter);
+			if(entity.getType(ent) != "human") {
+				continue;
+			}
+			p_uuid = map.get(cam_map_4, ent);
+			p = player.get(p_uuid);
+			if(isImpostor(p)) {
+				continue;
+			}
+			ent_loc = entity.getLocation(ent);
+			dist = loc.distance(player_loc, ent_loc);
+			if(dist < lowest_dist) {
+				nearest_human = ent;
+				lowest_dist = dist;
+			}
+			if(nearest_player != null) {
+				if(isCrewmate(nearest_player)) {
+					killCrewmate(player, nearest_player);
+					goto("checkwin");
+				}
+				msg.prefix(player, gamename, string.concat("Not a crewmate."));
+				goto("checkgame");
+			}
+		}
+		msg.prefix(player, gamename, "No player targeted.");
+		goto("checkgame");
+	} else {
+		msg.prefix(player, gamename, string.concat("Remaining kill cooldown: ", string.number(math.roundDown(cooldown / 20)), "s"));
+	}
+	goto("checkgame");
+}
+//enter vent
+if(key == 5) {
+	if(player.isGhost(player)) {
+		goto("checkgame");
+	}
+	loc = player.getTarget(player, 5);
+	if(list.contains(all_vent_locs, loc)) {
+		cooldown = data.getTimer(player, "Kill Cooldown");
+		map.add(holded_kill_cooldown, player_uuid, cooldown);
+		amongus.removeEquip(player);
+		stacks.clearIndex(player, 3);
+		stacks.clearIndex(player, 7);
+		stacks.clearIndex(player, 8);
+		vent_enter(player, loc);
+		goto("checkgame");
+	}
+	player_loc = entity.getLocation(player);
+	iter = iterator(all_vent_center_locs);
+	while(hasNext(iter)) {
+		center_loc = next(iter);
+		if(loc.distance(player_loc, center_loc) < 2) {
+			vent_loc = map.get(vent_map_5, center_loc);
+			cooldown = data.getTimer(player, "Kill Cooldown");
+			map.add(holded_kill_cooldown, player_uuid, cooldown);
+			amongus.removeEquip(player);
+			stacks.clearIndex(player, 3);
+			stacks.clearIndex(player, 7);
+			stacks.clearIndex(player, 8);
+			vent_enter(player, vent_loc);
+			goto("checkgame");
+		}
+	}
+	msg.prefix(player, gamename, "No vent nearby.");
+	goto("checkgame");
+}
+//Keine Sabotagen während bestehender Sabotage möglich
+if(amongus.isAlert()) {
+	goto("checkgame");
+}
+cooldown = data.getTimer(player, "Sabotage Cooldown");
+if(cooldown != null && cooldown != -1) {
+	msg.prefix(player, gamename, string.concat("Remaining sabotage cooldown: ", string.number(math.roundDown(cooldown / 20)), "s"));
+	goto("checkgame");
+}
+//sabotage light
+if(key == 6) {
+	sabotage_light();
+	goto("checkgame");
+}
+//sabotage reactor
+if(key == 7) {
+	sabotage_reactor();
+	goto("checkgame");
+}
+//sabotage oxygen
+if(key == 8) {
+	sabotage_oxygen();
+	goto("checkgame");
+}
+//sabotage communication
+if(key == 9) {
+	sabotage_comms();
+	goto("checkgame");
+}
+goto("checkgame");
+
+@player_drop
+cancel = true;
+goto("checkgame");
+
+function setCrewmateIcons(player) {
+	stacks.clear(player);
+	stacks.set(player, 0, "km:skill32");
+	stacks.set(player, 1, "km:skill50");
+}
+
+function setImpostorIcons(player) {
+	stacks.clear(player);
+	stacks.set(player, 0, "km:skill32");
+	stacks.set(player, 1, "km:skill50");
+	stacks.set(player, 3, "km:skill48");
+	stacks.set(player, 4, "minecraft:iron_trapdoor");
+	stacks.set(player, 5, "km:skill47");
+	stacks.set(player, 6, "km:skill49");
+	stacks.set(player, 7, "km:skill46");
+	stacks.set(player, 8, "km:skill36");
+}
+
+function setImpostor(player) {
+	data.setTimer(player, "Kill Cooldown", $start_kill_cooldown * 20);
+	status.addTimed(player, 1, $start_kill_cooldown * 20, "Kill Cooldown");
+	player_uuid = player.getUuid(player);
+	map.add($roles, player_uuid, "impostor");
+	list.add($impostors_list, player_uuid);
+	list.add($impostors_list_2, player_uuid);
+	msg.prefix(player, $gamename, "You are §cImpostor!");
+	setImpostorIcons(player);
+	display.add(player, 0, "You are §cImpostor");
+	display.add(player, 1, "§cFake Tasks:");
+}
+
+function setCrewmate(player) {
+	map.add($roles, player.getUuid(player), "crewmate");
+	msg.prefix(player, $gamename, "You are §bCrewmate.");
+	setCrewmateIcons(player);
+	display.add(player, 0, "You are §bCrewmate");
+}
+
+function isImpostor(player_or_uuid) {
+	if(isPlayer(player_or_uuid)) {
+		player_or_uuid = player.getUuid(player_or_uuid);
+	}
+	role = map.get($roles, player_or_uuid);
+	if(role == "impostor") {
+		return true;
+	}
+	return false;
+}
+
+function isCrewmate(player_or_uuid) {
+	if(isPlayer(player_or_uuid)) {
+		player_or_uuid = player.getUuid(player_or_uuid);
+	}
+	role = map.get($roles, player_or_uuid);
+	if(role == "crewmate") {
+		return true;
+	}
+	return false;
+}
+
+function player.isGhost(player_or_uuid) {
+	if(isPlayer(player_or_uuid)) {
+		player_or_uuid = player.getUuid(player_or_uuid);
+	}
+	return list.contains($ghosts, player_or_uuid);
+}
+
+function tpAllMiddle(reporter) {
+	$vote_count_map = map.new(); //Wieviel Spieler haben einen Spieler gevoted
+	$vote_count_map_2 = map.new(); //Welcher Spieler hat für wen gevoted
+	$meeting = true;
+	$reactor_used = false;
+	removeDeadBodies();
+	amongus.clearAdminTable();
+	for(i = 0; i < list.getSize($player_list); i++) {
+		p_uuid = list.getIndex($player_list, i);
+		p = player.get(p_uuid);
+		createVoteInv(p, player.getUuid(reporter));
+		if(list.contains($vent_list, p_uuid)) {
+			vent_leave(p);
+		}
+		if(player.isOnCam(p)) {
+			cam.leave(p);
+		}
+		stacks.clear(p);
+		if(!player.isGhost(p)) {
+			entity.clearEffects(p);
+			entity.setName(p, player.getName(p));
+		}
+		entity.teleport(p, list.getIndex($spawn_locs, i));
+		time = $discuss_time * 20 + $vote_time * 20;
+		entity.addEffect(p, "jump_boost", time, 128, false);
+		player.setSpeed(p, 0);
+		inv.close(p);
+		status.addTimed(p, 2, $discuss_time * 20, "Discussion Time");
+		data.setTimer(p, "Discussion Time", $discuss_time * 20);
+	}
+}
+
+function fix_oxygen() {
+	if($oxygen_sabotaged) {
+		amongus.setAlert(false);
+		$oxygen_sabotaged = false;
+		minigame.displayRemoveAll(20);
+		setSaboCooldown(30);
+		sgoto(40, "scheduled_sabo_close");
+	}
+}
+
+function fix_light() {
+	amongus.setAlert(false);
+	$lights_sabotaged = false;
+	removeSaboParticles($fix_lights_par_loc_1, $fix_lights_par_loc_2);
+	iter = iterator($player_list);
+	while(hasNext(iter)) {
+		p_uuid = next(iter);
+		p = player.get(p_uuid);
+		display.remove(p, 20);
+		if(!player.isGhost(p)) {
+			if(!player.isOnCam(p)) {
+				entity.clearEffects(p);
+			}
+		}
+	}
+	setSaboCooldown(30);
+	switchLights(true);
+	sgoto(40, "scheduled_sabo_close");
+}
+
+function sabotage_oxygen() {
+	amongus.setAlert(true);
+	$oxygen_sabotaged = true;
+	$oxy_fixed_1 = false;
+	$oxy_fixed_2 = false;
+	$depletion_time = 30;
+	addSaboParticles($fix_o2_par_loc_1, $fix_o2_par_loc_2);
+	displaySabotage("§cO2/Admin: Oxygen Depleted in ", 0, 2, $depletion_time);
+	$oxy_code = math.random(10000, 99999);
+	sgoto(20, "oxygen_depletion");
+	iter = iterator($player_list);
+	while(hasNext(iter)) {
+		p_uuid = next(iter);
+		p = player.get(p_uuid);
+		title.send(p, text.new("§cSabotage!!!"), text.new("Oxygen Depletion"));
+	}
+	sgoto(20, "crit_sabo_sound_loop");
+}
+			
+@oxygen_depletion
+if(!oxygen_sabotaged) {
+	goto("checkgame");
+}
+depletion_time--;
+fixed = 0;
+if(oxy_fixed_1) {
+	fixed++;
+}
+if(oxy_fixed_2) {
+	fixed++;
+}
+displaySabotage("§cO2/Admin: Oxygen Depleted in ", fixed, 2, depletion_time);
+if(depletion_time == 0) {
+	if(freeplay) {
+		minigame.speakAll($gamename, "Normally the impostors would have just won because of the critical sabotage. Instead we just shut it off.");
+		removeSaboParticles(fix_o2_par_loc_1, fix_o2_par_loc_2);
+		fix_oxygen();
+	} else {
+		winners = "§cImpostors";
+		goto("win");
+	}
+	goto("checkgame");
+}
+sgoto(20, "oxygen_depletion");
+goto("checkgame");
+
+@crit_sabo_sound_loop
+if(!amongus.isAlert()) {
+	goto("checkgame");
+}
+iter = iterator(player_list);
+while(hasNext(iter)) {
+	p_uuid = next(iter);
+	p = player.get(p_uuid);
+	sound.spawnForPlayer(p, crit_sabo_sound, master_sound_category);
+}
+sgoto(20, "crit_sabo_sound_loop");
+goto("checkgame");
+
+function sabotage_reactor() {
+	amongus.setAlert(true);
+	$reactor_sabotaged = true;
+	$hold_reactor_1 = false;
+	$hold_reactor_2 = false;
+	addSaboParticles($fix_reactor_par_loc_1, $fix_reactor_par_loc_2);
+	$meltdown_time = 30;
+	displaySabotage("§cReactor: Reactor Meltdown in ", 0, 2, $meltdown_time);
+	sgoto(20, "meltdown");
+	iter = iterator($player_list);
+	while(hasNext(iter)) {
+		p_uuid = next(iter);
+		p = player.get(p_uuid);
+		title.send(p, text.new("§cSabotage!!!"), text.new("Reactor Meltdown"));
+	}
+	sgoto(20, "crit_sabo_sound_loop");
+}
+
+@meltdown
+if(!reactor_sabotaged) {
+	goto("checkgame");
+}
+meltdown_time--;
+holded = 0;
+if(hold_reactor_1) {
+	holded++;
+}
+if(hold_reactor_2) {
+	holded++;
+}
+displaySabotage("§cReactor: Reactor Meltdown in ", holded, 2, meltdown_time);
+if(meltdown_time == 0) {
+	if(freeplay) {
+		minigame.speakAll($gamename, "Normally the impostors would have just won because of the critical sabotage. Instead we just shut it off.");
+		fix_meltdown();
+	} else {
+		winners = "§cImpostors";
+		goto("win");
+	}
+	goto("checkgame");
+}
+sgoto(20, "meltdown");
+goto("checkgame");
+
+function setSaboCooldown(sabotage_cooldown) {
+	iter = iterator($impostors_list_2);
+	while(hasNext(iter)) {
+		p_uuid = next(iter);
+		p = player.get(p_uuid);
+		data.setTimer(p, "Sabotage Cooldown", sabotage_cooldown * 20);
+		status.addTimed(p, 2, sabotage_cooldown * 20, "Sabotage Cooldown");
+	}
+}
+
+function fix_meltdown() {
+	$reactor_sabotaged = false;
+	amongus.setAlert(false);
+	removeSaboParticles($fix_reactor_par_loc_1, $fix_reactor_par_loc_2);
+	minigame.displayRemoveAll(20);
+	setSaboCooldown(30);
+	sgoto(40, "scheduled_sabo_close");
+}
+
+function fix_comms() {
+	$comms_sabotaged = false;
+	amongus.setAlert(false);
+	removeSaboParticles($fix_comms_par_loc, null);
+	minigame.displayRemoveAll(20);
+	setSaboCooldown(30);
+	showTasks();
+	sgoto(40, "scheduled_sabo_close");
+}
+
+function sabotage_comms() {
+	amongus.setAlert(true);
+	$comms_sabotaged = true;
+	addSaboParticles($fix_comms_par_loc, null);
+	$comms_fix_freq = math.random(1, 64);
+	while($comms_fix_freq == 32) {
+		$comms_fix_freq = math.random(1, 64);
+	}
+	displaySabotage("§cComms Sabotaged", 1, 1, null);
+	boss.setTitle($progress_bar, text.new("COMMS DISABLED"));
+	boss.setProgress($progress_bar, 0);
+	hideTasks();
+}
+
+function hideTasks() {
+	iter = iterator($player_list);
+	while(hasNext(iter)) {
+		p_uuid = next(iter);
+		p = player.get(p_uuid);
+		if(isCrewmate(p) || $freeplay) {
+			for(i = 2; i < 19; i++) {
+				display.remove(p, i);
+			}
+		}
+	}
+}
+
+function showTasks() {
+	boss.setProgress($progress_bar, $amount_done_tasks / $amount_all_tasks);
+	boss.setTitle(text.new("TOTAL TASKS COMPLETED"));
+	iter = iterator($player_list);
+	while(hasNext(iter)) {
+		player_uuid = next(iter);
+		player = player.get(player_uuid);
+		if(isCrewmate(player) || $freeplay) {
+			set = map.get($player_tasks, player_uuid);
+			iterator(set);
+			task_iter = iterator(set);
+			while(hasNext(task_iter)) {
+				task_id = next(task_iter);
+				a = map.get($all_tasks, task_id);
+				room = a[0];
+				description = a[1];
+				step = task.getStep(player, task_id);
+				number_2 = a[3];
+				time = null;
+				if(time != null) {
+					color = "§e";
+				} elseif(step == 0) {
+					color = "§r";
+				} elseif(step == number_2) {
+					color = "§a";
+				} else {
+					color = "§e";
+				}
+				
+				if(step == 0) {
+					if(task_id == 2) {		
+						r = map.get($download_map_3, player_uuid);
+						room = map.get($download_map_2, list.getIndex($download_list_3, r));
+					} elseif(task_id == 12) {
+						r = map.get($empty_garb_map_3, player_uuid);
+						if(r == 0) {
+							room = "Cafeteria";
+						} else {
+							room = "O2";
+						}
+					}
+				}
+				if(task_id == 10) {
+					my_list = map.get($wires_map_4, player_uuid);
+					if(step == 3) {
+						wire_loc = list.getIndex(my_list, 2);
+					} else {
+						wire_loc = list.getIndex(my_list, step);
+					}
+					room = map.get($wires_map_3, wire_loc);
+				} elseif(task_id == 14) {
+					r = map.get($divert_pow_map_3, player_uuid);
+					room_2 = map.get($divert_pow_map, r);
+					description = string.concat("Divert power to ", room_2);
+					if(step != 0) {
+						room = room_2;
+					}
+				}
+				if((number_2 == 1 && time == null) || time == 0) {
+					display.add(player, task_id + 1, string.concat(color, room, ": ", description));
+				} elseif(time != null) {
+					display.add(player, task_id + 1, string.concat(color, room, ": ", description, " (", string.number(time), ")"));
+				} else {
+					display.add(player, task_id + 1, string.concat(color, room, ": ", description, " (", string.number(step), "/", string.number(number_2), ")"));
+				}
+			}
+		}
+	}
+}
+
+function sabotage_light() {
+	amongus.setAlert(true);
+	$lights_sabotaged = true;
+	addSaboParticles($fix_lights_par_loc_1, $fix_lights_par_loc_2);
+	iter = iterator($player_list);
+	while(hasNext(iter)) {
+		p_uuid = next(iter);
+		p = player.get(p_uuid);
+		if(!player.isOnCam(p)) {
+			if(isCrewmate(p)) {
+				if(!player.isGhost(p)) {
+					entity.addEffect(p, "blindness", 999999, 7, false);
+				}
+			} else {
+				entity.addEffect(p, "night_vision", 999999, 0, false);
+			}
+		}
+	}
+	displaySabotage("§cElectrical: Fix Lights", 1, 1, null);
+	inv.setItem($lights_inv, 0, read.item("minecraft:red_stained_glass_pane", 1, "§rOff"));
+	for(i = 1; i < 5; i++) {
+		r = math.random(0, 1);
+		if(r == 0) {
+			inv.setItem($lights_inv, i, read.item("minecraft:green_stained_glass_pane", 1, "§rOn"));
+		} else {
+			inv.setItem($lights_inv, i, read.item("minecraft:red_stained_glass_pane", 1, "§rOff"));
+		}
+	}
+	switchLights(false);
+}
+
+function displaySabotage(text, number_1, number_2, time) {
+	if(time == null) {
+		if(number_2 == 1) {
+			minigame.displayAll(20, text);
+		} else {
+			minigame.displayAll(20, string.concat(text, " (", string.number(number_1), "/", string.number(number_2), ")"));
+		}
+	} else {
+		if(number_2 == 1) {
+			minigame.displayAll(20, text, string.number(time));
+		} else {
+			minigame.displayAll(20, string.concat(text, string.number(time), " (", string.number(number_1), "/", string.number(number_2), ")"));
+		}
+	}
+}
+
+function callMeeting(reporter) {
+	reporter_uuid = player.getUuid(reporter);
+	amount = map.get($meeting_amounts, reporter_uuid);
+	if(amount <= 0) {
+		msg.prefix(reporter, $gamename, "You have no emergency meetings left.");
+		return;
+	}
+	cooldown = data.getTimer(reporter, "Meeting Cooldown");
+	if(cooldown == null || cooldown == -1) {
+		tpAllMiddle(reporter);
+		reporter_name = player.getName(reporter);
+		color_code = amongus.getPlayerColorCode(reporter);
+		minigame.titleAll("§cEMERGENY MEETING", string.concat("called by ", color_code, reporter_name), 20, 60, 20);
+		minigame.speakAll($gamename, string.concat(color_code, reporter_name, " §rcalls an emergency meeting!"));
+		new_amount = amount - 1;
+		map.add($meeting_amounts, reporter_uuid, new_amount);
+		msg.prefix(reporter, $gamename, string.concat("You have §c", string.number(new_amount), "§r emergeny meetings left."));
+	} else {
+		msg.prefix(reporter, $gamename, string.concat("Remaining meeting cooldown: ", string.number(math.roundDown(cooldown / 20)), "s"));
+	}
+}
+
+function reportBody(reporter, found_player_uuid) {
+	tpAllMiddle(reporter);
+	reporter_name = player.getName(reporter);
+	found_player_name = player.getName(found_player_uuid);
+	minigame.titleAll("§cREPORT", string.concat(reporter_name, " found ", found_player_name), 20, 60, 20);
+	minigame.speakAll($gamename, string.concat(amongus.getPlayerColorCode(reporter), reporter_name, " §rfound the body of ", amongus.getPlayerColorCode(found_player_uuid), found_player_name, "."));
+	if(amongus.isAlert()) {
+		if($lights_sabotaged) {
+			switchLights(true);
+		}
+		if($oxygen_sabotaged) {
+			fix_oxygen();
+		}
+		if($reactor_sabotaged) {
+			fix_meltdown();
+		}
+	}
+}
+
+function continueGame() {
+	$meeting = false;
+	iter = iterator($player_list);
+	while(hasNext(iter)) {
+		p_uuid = next(iter);
+		p = player.get(p_uuid);
+		inv.close(p);
+		if(player.isGhost(p)) {
+			entity.addEffect(p, "jump_boost", 0, 128, false);
+			player.setSpeed(p, $move_speed * 1.5);
+		} else {
+			entity.setName(p, "");
+			entity.clearEffects(p);
+			player.setSpeed(p, $move_speed);
+			if(isImpostor(p) && !player.isGhost(p)) {
+				data.setTimer(p, "Kill Cooldown", $kill_cooldown * 20);
+				status.addTimed(p, 1, $kill_cooldown * 20, "Kill Cooldown");
+				setImpostorIcons(p);
+			} else {
+				setCrewmateIcons(p);
+			}
+		}
+		status.remove(p, 2);
+		data.setTimer(p, "Voting Time", -1);
+		data.setTimer(p, "Meeting Cooldown", $meeting_cooldown * 20);
+		status.addTimed(p, 0, $meeting_cooldown * 20, "Meeting Cooldown");
+	}
+	if($lights_sabotaged) {
+		sabotage_light();
+ 	}
+}
+
+function killCrewmate(killer, crewmate) {
+	loc = entity.getLocation(crewmate);
+	sound.spawnForPlayer(killer, $kill_sound, $master_sound_category);
+	sound.spawnForPlayer(crewmate, $kill_sound, $master_sound_category);
+	killer_name = player.getName(killer);
+	killer_color_code = amongus.getPlayerColorCode(killer);
+	msg.prefix(crewmate, $gamename, string.concat(killer_color_code, killer_name, "§r killed you."));
+	msg.prefix(killer, $gamename, string.concat("You killed ", amongus.getPlayerColorCode(crewmate), player.getName(crewmate), "§r."));
+	//Killer zu Mord-Location teleportieren
+	entity.teleport(killer, loc);
+	data.setTimer(killer, "Kill Cooldown", $kill_cooldown * 20);
+	status.addTimed(killer, 1, $kill_cooldown * 20, "Kill Cooldown");
+	//Crewmate zum Geist machen
+	entity.clearEffects(crewmate);
+	entity.addEffect(crewmate, "invisibility", 999999, 1, false);
+	crew_uuid = player.getUuid(crewmate);
+	list.add($ghosts, crew_uuid);
+	stacks.clear(crewmate);
+	amongus.removeEquip(crewmate);
+	title.send(crewmate, text.new("§cKILLED!!!"), text.new(string.concat("by ", killer_color_code, killer_name)));
+	inv.close(crewmate);
+	$reactor_used = false;
+	sabotage.closedInv(crewmate);
+	player.setSpeed(crewmate, $move_speed * 1.5);
+	//Leiche an Mord-Location platzieren
+	ent = entity.spawn("zombie", loc, "{IsBaby:0}");
+	list.add($dead_bodies, ent);
+	map.add($report_map, ent, crew_uuid);
+	living.removeAi(ent);
+	entity.setName(ent, "");
+	living.setEquip(ent, "hand", $air_item);
+	entity.setSilent(ent, true);
+	color = amongus.getPlayerColor(crewmate);
+	amongus.forceEquip(ent, color);
+}
+
+function amongus.clearAdminTable() {
+	map.clear($admin_table_map);
+	map.clear($admin_table_map_2);
+}
+
+function amongus.removeFromAdminTable(player) {
+	player_uuid = player.getUuid(player);
+	room_id = map.get($admin_table_map, player_uuid);
+	if(room_id == null) {
+		return;
+	}
+	map.remove($admin_table_map, player_uuid);
+	map.add($admin_table_map_2, room_id, map.get($admin_table_map_2, room_id) - 1);
+}
+
+function removeCamBodies() {
+	iter = map.iterator($cam_map_3);
+	while(hasNext(iter)) {
+		element = next(iter);
+		entity.remove(map.getValue(element));
+	}
+}
+
+function removeDeadBodies() {
+	iter = iterator($dead_bodies);
+	while(hasNext(iter)) {
+		entity.remove(next(iter));
+	}
+}
+
+function registerTask(task_id, room, description, number_1, number_2) {
+	a = array.new(4);
+	a[0] = room;
+	a[1] = description;
+	a[2] = number_1;
+	a[3] = number_2;
+	map.add($all_tasks, task_id, a);
+}
+
+function giveTask(player, task_id, room, description, number_1, number_2, time) {
+	player_uuid = player.getUuid(player);
+	if(time != null) {
+		color = "§e";
+	} elseif(number_1 == 0) {
+		color = "§r";
+	} elseif(number_1 == number_2) {
+		sound.spawnForPlayer(player, $task_sound, $master_sound_category);
+		$amount_done_tasks++;
+		color = "§a";
+		if(!$comms_sabotaged) {
+			iter = iterator($player_list);
+			while(hasNext(iter)) {
+				p_uuid = next(iter);
+				p = player.get(p_uuid);
+				pct = $amount_done_tasks / $amount_all_tasks;
+				boss.setProgress($progress_bar, pct);
+				if(pct == 1) {
+					sgoto(2, "crewmate_win");
+				}
+			}
+		}
+	} else {
+		color = "§e";
+	}
+	step = task.getStep(player, task_id);
+	if(step == 0) {
+		if(task_id == 1) {
+			addTaskParticle(player, $get_fuel_par_loc);
+		} elseif(task_id == 2) {		
+			r = map.getOrDefault($download_map_3, player_uuid, math.random(0, 4));
+			map.add($download_map_3, player_uuid, r);
+			addTaskParticle(player, list.getIndex($download_list_4, r));
+			room = map.get($download_map_2, list.getIndex($download_list_3, r));
+		} elseif(task_id == 3) {
+			addTaskParticle(player, $prime_shields_par_loc);
+		} elseif(task_id == 4) {
+			addTaskParticle(player, $start_reactor_par_loc);
+		} elseif(task_id == 5) {
+			addTaskParticle(player, $unlock_manifolds_par_loc);
+		} elseif(task_id == 6) {
+			addTaskParticle(player, $chart_course_par_loc);
+		} elseif(task_id == 7) {
+			addTaskParticle(player, $steering_par_loc);
+		} elseif(task_id == 8 && time == null) {
+			addTaskParticle(player, $inspect_par_loc);
+		} elseif(task_id == 9) {
+			addTaskParticle(player, $calibrate_dist_par_loc);
+		} elseif(task_id == 11) {
+			addTaskParticle(player, $swipe_card_par_loc);
+		} elseif(task_id == 12) {
+			r = map.getOrDefault($empty_garb_map_3, player_uuid, math.random(0, 1));
+			map.add($empty_garb_map_3, player_uuid, r);
+			if(r == 0) {
+				addTaskParticle(player, $cafe_garb_par_loc);
+				room = "Cafeteria";
+			} else {
+				addTaskParticle(player, $o2_garb_par_loc);
+				room = "O2";
+			}
+		} elseif(task_id == 13) {
+			addTaskParticle(player, $clear_ast_par_loc);
+		} elseif(task_id == 15) {
+			addTaskParticle(player, $clean_o2_par_loc);
+		} elseif(task_id == 16) {
+			addTaskParticle(player, $scan_par_loc);
+		} elseif(task_id == 17) {
+			addTaskParticle(player, $ue_align_par_loc);
+			addTaskParticle(player, $le_align_par_loc);
+		}
+	}
+	if(task_id == 10) {
+		my_list = map.getOrDefault($wires_map_4, player_uuid, list.new());
+		if(step == 0) {
+			//Electrical > Storage > Admin > Navigation > Cafeteria > Security
+			//1.Wire
+			index_1 = math.random(0, 3);
+			wire_loc_1 = list.getIndex($wires_list_2, index_1);
+			list.add(my_list, wire_loc_1);
+			//2.Wire
+			index_2 = math.random(1 + index_1, 4);
+			wire_loc_2 = list.getIndex($wires_list_2, index_2);
+			while(list.contains(my_list, wire_loc_2)) {
+				index_2 = math.random(1 + index_1, 4);
+				wire_loc_2 = list.getIndex($wires_list_2, index_2);
+			}
+			list.add(my_list, wire_loc_2);
+			//3.Wire
+			index_3 = math.random(1 + index_2, 5);
+			wire_loc_3 = list.getIndex($wires_list_2, index_3);
+			while(list.contains(my_list, wire_loc_3)) {
+				index_3 = math.random(1 + index_2, 5);
+				wire_loc_3 = list.getIndex($wires_list_2, index_3);
+			}
+			list.add(my_list, wire_loc_3);
+			map.add($wires_map_4, player_uuid, my_list);
+		}
+		if(step < 3) {
+			wire_loc = list.getIndex(my_list, step);
+			room = map.get($wires_map_3, wire_loc);
+			addTaskParticle(player, map.get($wires_map_5, wire_loc));
+			if(step > 0) {
+				old_wire_loc = list.getIndex(my_list, step - 1);
+				removeTaskParticle(player, map.get($wires_map_5, old_wire_loc));
+			}
+		} else {
+			wire_loc = list.getIndex(my_list, 2);
+			removeTaskParticle(player, map.get($wires_map_5, wire_loc));
+		}
+	} elseif(task_id == 14) {
+		r = map.getOrDefault($divert_pow_map_3, player_uuid, math.random(22, 29));
+		map.add($divert_pow_map_3, player_uuid, r);
+		room_2 = map.get($divert_pow_map, r);
+		description = string.concat("Divert power to ", room_2);
+		if(step == 0) {
+			addTaskParticle(player, $elec_power_par_loc);
+		} else {
+			room = room_2;
+		}
+	}
+	if(!$comms_sabotaged) {
+		if((number_2 == 1 && time == null) || time == 0) {
+			display.add(player, task_id + 1, string.concat(color, room, " §8| ", color, description));
+		} elseif(time != null) {
+			display.add(player, task_id + 1, string.concat(color, room, " §8| ", color, description, " (", string.number(time), ")"));
+		} else {
+			display.add(player, task_id + 1, string.concat(color, room, " §8| ", color, description, " (", string.number(number_1), "/", string.number(number_2), ")"));
+		}
+	}
+	set = map.get($player_tasks, player_uuid);
+	if(set == null) {
+		set = set.new();
+	}
+	set.add(set, task_id);
+	map.add($player_tasks, player_uuid, set);
+}
+
+function sgoto_auto_close_inv(player_uuid) {
+	list.add($auto_close_list, player_uuid);
+	sgoto(40, "auto_close_inv");
+}
+
+@auto_close_inv
+p_uuid = list.getIndex(auto_close_list, 0);
+list.removeIndex(auto_close_list, 0);
+if(list.contains(auto_close_list_2, p_uuid)) {
+	list.remove(auto_close_list_2, p_uuid);
+} else {
+	inv.close(player.get(p_uuid));
+}
+goto("checkgame");
+
+function hasTask(player, task_id) {
+	player_uuid = player.getUuid(player);
+	set = map.getOrDefault($player_tasks, player_uuid, set.new());
+	return set.contains(set, task_id);
+}
+
+function addAstDirection(id, x, y) {
+	a = array.new(2);
+	a[0] = x;
+	a[1] = y;
+	$ast_directions[id] = a;
+}
+
+function addAstStartPos(slot, dir_id_1, dir_id_2, dir_id_3) {
+	list.add($ast_start_pos, slot);
+	my_list = list.new();
+	list.add(my_list, dir_id_1);
+	list.add(my_list, dir_id_2);
+	list.add(my_list, dir_id_3);
+	map.add($ast_start_pos_dirs, slot, my_list);
+}
+
+function getAstDirection(slot) {
+	my_list = map.get($ast_start_pos_dirs, slot);
+	dir_id = list.getIndex(my_list, math.random(0, 2));
+	a = $ast_directions[dir_id];
+	return a;
+}
+
+@loop
+iter = iterator(player_list);
+while(hasNext(iter)) {
+	p_uuid = next(iter);
+	p = player.get(p_uuid);
+	player.setHunger(p, 4);
+	player.setSaturation(p, 0);
+	color = amongus.getPlayerColor(p);
+	if(player.isGhost(p)) {
+		amongus.removeEquip(p);
+	} else {
+		if(!list.contains(vent_list, p_uuid)) {
+			if(!player.isOnCam(p)) {
+				amongus.equip(p, color);
+			}
+		}
+	}
+}
+sgoto(20, "loop");
+goto("checkgame");
+
+@imp_par_loop
+iter = iterator(impostors_list_2);
+while(hasNext(iter)) {
+	p_uuid_1 = next(iter);
+	p_1 = player.get(p_uuid_1);
+	iter_2 = iterator(impostors_list_2);
+	while(hasNext(iter_2)) {
+		p_uuid_2 = next(iter_2);
+		p_2 = player.get(p_uuid_2);
+		if(!player.isGhost(p_2)) {
+			p_2_loc = entity.getLocation(p_2);
+			loc.add(p_2_loc, 0, 2.3, 0);
+			particle.spawnPlayer(p_2_loc, imp_par, p_1);
+		}
+	}
+}
+sgoto(5, "imp_par_loop");
+goto("checkgame");
+
+@download_data_2
+player_uuid = player.getUuid(player);
+c = 0;
+inv.setItem(inv, c++, lime_glass);
+map.add(download_counter, player_uuid, c);
+list.add(download_list, player_uuid);
+map.add(download_map, player_uuid, inv);
+sgoto(20, "download_data");
+goto("checkgame");
+
+@download_data
+task_id = 2;
+player_uuid = list.getIndex(download_list, 0);
+inv = map.get(download_map, player_uuid);
+player = player.get(player_uuid);
+list.removeIndex(download_list, 0);
+c = map.get(download_counter, player_uuid);
+if(list.contains(download_list_2, player_uuid)) {
+	goto("checkgame");
+}
+inv.setItem(inv, c++, lime_glass);
+map.add(download_counter, player_uuid, c);
+if(c < 9) {
+	list.add(download_list, player_uuid);
+	map.add(download_map, player_uuid, inv);
+	sgoto(20, "download_data");
+} else {
+	inv.setItem(inv, 11, read.item("km:check_green", 1, "§rTask completed"));
+	map.remove(download_counter, player_uuid);
+	step = task.getStep(player, task_id);
+	step = task.stepIncrease(player, task_id);
+	if(step == 1) {
+		r = map.get(download_map_3, player_uuid);
+		removeTaskParticle(player, list.getIndex(download_list_4, r));
+		addTaskParticle(player, admin_upload_par_loc);
+	} else {
+		removeTaskParticle(player, admin_upload_par_loc);
+	}
+	giveTask(player, task_id, "Admin", "Upload Data", step, 2, null);
+	sgoto_auto_close_inv(player_uuid);
+}
+goto("checkgame");
+
+@draw_pattern_1
+player_uuid = list.getIndex(reactor_draw_list_1, 0);
+list.removeIndex(reactor_draw_list_1, 0);
+if(list.contains(reactor_block_list, player_uuid)) {
+	goto("checkgame");
+}
+reactor_array = reactor.get(player_uuid);
+inv = reactor.getInv(reactor_array);
+stage = reactor.getStage(reactor_array);
+for(i = 0; i <= stage; i++) {
+	inv.setItem(inv, i, green_glass);
+}
+reactor.setRightSide(inv, black_glass);
+player = player.get(player_uuid);
+list.add(reactor_draw_list_2, player_uuid);
+goto("draw_pattern_2");
+
+
+@draw_pattern_2
+player_uuid = list.getIndex(reactor_draw_list_2, 0);
+list.removeIndex(reactor_draw_list_2, 0);
+if(list.contains(reactor_block_list, player_uuid)) {
+	goto("checkgame");
+}
+reactor_array = reactor.get(player_uuid);
+inv = reactor.getInv(reactor_array);
+stage = reactor.getStage(reactor_array);
+counter = reactor.getCounter(reactor_array);
+pattern = reactor.getPattern(reactor_array);
+player = player.get(player_uuid);
+if(counter > stage) {
+	reactor.setCounter(reactor_array, 0);
+	reactor.setPhase(reactor_array, "click");
+	reactor.save(reactor_array, player);
+	reactor.setRightSide(inv, gray_glass);
+	goto("checkgame");
+}
+inv.setItem(inv, pattern[counter], blue_glass);
+counter++;
+reactor.setCounter(reactor_array, counter);
+reactor.save(reactor_array, player);
+if(counter < 6) {
+	list.add(reactor_draw_list_2, player_uuid);
+	list.add(reset_reactor_draw_list, player_uuid);
+	sgoto(10, "reset_reactor_draw");
+	sgoto(12, "draw_pattern_2");
+}
+goto("checkgame");
+
+@reset_reactor_draw
+player_uuid = list.getIndex(reset_reactor_draw_list, 0);
+list.removeIndex(reset_reactor_draw_list, 0);
+reactor_array = reactor.get(player_uuid);
+inv = reactor.getInv(reactor_array);
+counter = reactor.getCounter(reactor_array) - 1;
+pattern = reactor.getPattern(reactor_array);
+if(counter >= 0) {
+	inv.setItem(inv, pattern[counter], black_glass);
+	player = player.get(player_uuid);
+}
+goto("checkgame");
+
+@reset_reactor_click
+player_uuid = list.getIndex(reset_reactor_click_list, 0);
+slot = list.getIndex(reset_reactor_click_list_2, 0);
+list.removeIndex(reset_reactor_click_list, 0);
+list.removeIndex(reset_reactor_click_list_2, 0);
+if(list.contains(reactor_block_list, player_uuid)) {
+	goto("checkgame");
+}
+reactor_array = reactor.get(player_uuid);
+inv = reactor.getInv(reactor_array);
+inv.setItem(inv, slot, gray_glass);
+player = player.get(player_uuid);
+goto("checkgame");
+
+@unblock_start_reactor
+list.removeIndex(reactor_block_list, 0);
+goto("checkgame");
+
+@unblock_submit_scan
+list.removeIndex(submit_scan_list_2, 0);
+goto("checkgame");
+
+@unblock_calib_dist
+list.removeIndex(calibrate_dist_list_2, 0);
+goto("checkgame");
+
+@unblock_empty_garb
+list.removeIndex(empty_garb_list_2, 0);
+goto("checkgame");
+
+@unblock_download
+list.removeIndex(download_list_2, 0);
+goto("checkgame");
+
+@unblock_clear_ast
+list.removeIndex(clear_ast_list_2, 0);
+goto("checkgame");
+
+@new_reactor
+player_uuid = list.getIndex(reactor_false_click_list, 0);
+list.removeIndex(reactor_false_click_list, 0);
+reactor_array = reactor.get(player_uuid);
+inv = reactor.getInv(reactor_array);
+reactor.setHeader(inv, air_item);
+reactor.setLeftSide(inv, black_glass);
+reactor.setRightSide(inv, black_glass);
+player = player.get(player_uuid);
+reactor_array = array.new(5);
+reactor.setInv(reactor_array, inv);
+reactor.setStage(reactor_array, 0);
+reactor.setCounter(reactor_array, 0);
+reactor.setPattern(reactor_array);
+reactor.save(reactor_array, player);
+list.add(reactor_draw_list_1, player_uuid);
+sgoto(20, "draw_pattern_1");
+goto("checkgame");
+
+@false_reactor_click
+reactor.setHeader(inv, red_glass);
+reactor.setRightSide(inv, red_glass);
+list.add(reactor_block_list, player_uuid);
+list.add(reactor_false_click_list, player_uuid);
+sgoto(20, "unblock_start_reactor");
+sgoto(40, "new_reactor");
+goto("checkgame");
+
+@false_manifolds_click
+for(i = 0; i < 10; i++) {
+	inv.setItem(inv, i, read.item("minecraft:red_stained_glass_pane", item.getAmount(inv.getItem(inv, i))));
+}
+list.add(manifolds_list, inv);
+list.add(manifolds_list_2, player);
+sgoto(30, "redo_manifolds");
+goto("checkgame");
+
+@redo_manifolds
+inv = list.getIndex(manifolds_list, 0);
+player_uuid = player.getUuid(list.getIndex(manifolds_list_2, 0));
+list.removeIndex(manifolds_list, 0);
+list.removeIndex(manifolds_list_2, 0);
+map.remove(manifolds_counter, player_uuid);
+for(i = 0; i < 10; i++) {
+	inv.setItem(inv, i, read.item("minecraft:blue_stained_glass_pane", item.getAmount(inv.getItem(inv, i))));
+}
+goto("checkgame");
+
+@countdown_sample
+player_uuid = list.getIndex(sample_list, 0);
+player = player.get(player_uuid);
+time = list.getIndex(sample_list_2, 0) - 1;
+list.removeIndex(sample_list, 0);
+list.removeIndex(sample_list_2, 0);
+inv = map.get(sample_map, player_uuid);
+if(time == 58) {
+	inv.setItem(inv, 0, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, 5, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, 10, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+} elseif(time == 57) {
+	inv.setItem(inv, 1, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, 6, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, 11, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+} elseif(time == 56) {
+	inv.setItem(inv, 2, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, 7, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, 12, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+} elseif(time == 55) {
+	inv.setItem(inv, 3, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, 8, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, 13, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+} elseif(time == 54) {
+	inv.setItem(inv, 4, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, 9, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, 14, read.item("minecraft:blue_stained_glass_pane", 1, "§rSample"));
+}
+if(time == 0) {
+	inv.setItem(inv, 20, read.item("minecraft:gray_stained_glass_pane", 1, "§rSelect anomaly"));
+	r = math.random(0, 4);
+	inv.setItem(inv, r, read.item("minecraft:red_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, r + 5, read.item("minecraft:red_stained_glass_pane", 1, "§rSample"));
+	inv.setItem(inv, r + 10, read.item("minecraft:red_stained_glass_pane", 1, "§rSample"));
+	for(i = 15; i < 20; i++) {
+		inv.setItem(inv, i, read.item("minecraft:green_stained_glass_pane", 1, "§rSelect sample"));
+	}
+	giveTask(player, 8, "MedBay", "Inspect Sample", 0, 1, 0);
+	goto("checkgame");
+}
+giveTask(player, 8, "MedBay", "Inspect Sample", 0, 1, time);
+inv.setItem(inv, 20, read.item("minecraft:gray_stained_glass_pane", time, "§rGo grab a coffee"));
+list.add(sample_list, player_uuid);
+list.add(sample_list_2, time);
+sgoto(20, "countdown_sample");
+goto("checkgame");
+
+@calibrate_dist
+p_uuid = list.getIndex(calibrate_dist_list, 0);
+list.removeIndex(calibrate_dist_list, 0);
+if(list.contains(calibrate_dist_list_2, p_uuid)) {
+	goto("checkgame");
+}
+a = map.get(calibrate_dist_map, p_uuid);
+inv = a[1];
+index = a[3];
+stage = a[4];
+inv.setItem(inv, calibrate_dist_array[index++], air_item);
+if(index == 12) {
+	index = 0;
+}
+a[3] = index;
+if(stage == 0) {
+	inv.setItem(inv, calibrate_dist_array[index], yellow_glass);
+} elseif(stage == 1) {
+	inv.setItem(inv, calibrate_dist_array[index], blue_glass);
+} elseif(stage == 2) {
+	inv.setItem(inv, calibrate_dist_array[index], cyan_glass);
+}
+if(stage < 3) {
+	map.add(calibrate_dist_map, p_uuid, a);
+	list.add(calibrate_dist_list, p_uuid);
+	sgoto(7, "calibrate_dist");
+}
+goto("checkgame");
+
+@empty_garb
+p_uuid = list.getIndex(empty_garb_list, 0);
+list.removeIndex(empty_garb_list, 0);
+c = map.get(empty_garb_map, p_uuid);
+inv = map.get(empty_garb_map_2, p_uuid);
+if(list.contains(empty_garb_list_2, p_uuid)) {
+	goto("checkgame");
+}
+for(slot = 42; slot > 6; slot--) {
+	if(slot == 35) {
+		continue;
+	} elseif(slot > 35) {
+		inv.setItem(inv, slot, inv.getItem(inv, slot - 8));
+	} else {
+		inv.setItem(inv, slot, inv.getItem(inv, slot - 7));
+	}
+}
+p = player.get(p_uuid);
+if(++c == 5) {
+	step = task.stepIncrease(p, 12);
+	if(step == 1) {
+		addTaskParticle(p, stor_garb_par_loc);
+		r = map.get(empty_garb_map_3, player_uuid);
+		if(r == 0) {
+			removeTaskParticle(p, cafe_garb_par_loc);
+		} else {
+			removeTaskParticle(p, o2_garb_par_loc);
+		}
+	} else {
+		removeTaskParticle(p, stor_garb_par_loc);
+	}
+	inv.setItem(inv, 35, read.item("km:check_green", 1, "§rTask completed"));
+	map.remove(empty_garb_map, p_uuid);
+	
+	giveTask(p, 12, "Storage", "Empty Garbage", step, 2, null);
+	sgoto_auto_close_inv(p_uuid);
+} else {
+	map.add(empty_garb_map, p_uuid, c);
+	map.add(empty_garb_map_2, p_uuid, inv);
+	list.add(empty_garb_list, p_uuid);
+	sgoto(20, "empty_garb");
+}
+goto("checkgame");
+
+@clear_ast
+p_uuid = list.getIndex(clear_ast_list, 0);
+list.removeIndex(clear_ast_list, 0);
+if(list.contains(clear_ast_list_2, p_uuid)) {
+	if(list.getSize(clear_ast_list) == 0) {
+		goto("checkgame");
+	}
+}
+inv = map.get(clear_ast_map_3, p_uuid);
+my_list = map.get(clear_ast_map, p_uuid);
+iter = iterator(my_list);
+while(hasNext(iter)) {
+	a = next(iter);
+	slot = a[1];
+	x_dir = a[2];
+	y_dir = a[3];
+	reached_end = a[4];
+	speed = a[5];
+	speed_counter = a[6];
+	if(speed_counter == speed) {
+		inv.setItem(inv, slot, air_item);
+		if(reached_end) {
+			remove(iter);
+			continue;
+		}
+		slot += x_dir;
+		slot += (y_dir * 9);
+		a[1] = slot;
+		if(list.contains(ast_start_pos, slot)) {
+			a[4] = true;
+		}
+		inv.setItem(inv, slot, read.item("minecraft:bedrock", 1, "§rAsteroid"));
+		a[6] = 0;
+	} else {
+		a[6] = speed_counter + 1;
+	}
+}
+c = map.get(clear_ast_map_2, p_uuid) + 1;
+if(c == 3 && !list.contains(clear_ast_list_3, p_uuid)) {
+	c = 0;
+	//new asteroid
+	a = array.new(7);
+	slot = list.getIndex(ast_start_pos, math.random(0, 25));
+	a[1] = slot;
+	inv.setItem(inv, slot, read.item("minecraft:bedrock", 1, "§rAsteroid"));
+	b = getAstDirection(slot);
+	a[2] = b[0]; //x_dir
+	a[3] = b[1]; //y_dir
+	a[4] = false; //reached end
+	a[5] = math.random(1, 2); //speed
+	a[6] = 0; //speed counter
+	list.add(my_list, a);
+}
+map.add(clear_ast_map, p_uuid, my_list);
+map.add(clear_ast_map_2, p_uuid, c);
+list.add(clear_ast_list, p_uuid);
+sgoto(5, "clear_ast");
+goto("checkgame");
+
+function assignSeat(player) {
+	for(i = 0; i < 10; i++) {
+		if($seat_array[i] == null) {
+			entity.teleport(player, $lobbyspawnloc);
+			player_uuid = player.getUuid(player);
+			$seat_array[i] = player_uuid;
+			map.add($seat_map_index, player_uuid, i);
+			list.add($seat_list_join, player_uuid);
+			sgoto(10, "lobby_join_seat");
+			return;
+		}
+	}
+}
+
+@lobby_join_seat
+player_uuid = list.getIndex(seat_list_join, 0);
+list.removeIndex(seat_list_join, 0);
+i = map.get(seat_map_index, player_uuid);
+loc = list.getIndex(seat_locs, i);
+ent = entity.spawn("km:nobody", loc.mod(loc, 0.5, 0, 0.5), "{NoGravity:true}");
+map.add(seat_map, player_uuid, ent);
+player = player.get(player_uuid);
+if(player != null) {
+	entity.mount(player, ent);
+	list.add(seat_list_leave, player_uuid);
+	sgoto(60, "lobby_leave_seat");
+}
+goto("simplelobby");
+
+@lobby_leave_seat
+player_uuid = list.getIndex(seat_list_leave, 0);
+list.removeIndex(seat_list_leave, 0);
+leaveSeat(player_uuid);
+goto("simplelobby");
+
+function leaveSeat(player_or_uuid) {
+	if(isPlayer(player_or_uuid)) {
+		player_uuid = player.getUuid(player_or_uuid);
+	} else {
+		player_uuid = player_or_uuid;
+	}
+	for(i = 0; i < 10; i++) {
+		if($seat_array[i] == player_uuid) {
+			$seat_array[i] = null;
+			ent = map.get($seat_map, player_uuid);
+			if(ent != null) {
+				entity.remove(ent);
+				map.remove($seat_map, player_uuid);
+			}
+		}
+	}
+}
+
+@submit_scan
+p_uuid = list.getIndex(submit_scan_list, 0);
+list.removeIndex(submit_scan_list, 0);
+if(list.contains(submit_scan_list_2, p_uuid)) {
+	goto("checkgame");
+}
+c = map.get(submit_scan_map, p_uuid);
+inv = map.get(submit_scan_map_2, p_uuid);
+p = player.get(p_uuid);
+if(c == 0) {
+	inv.setItem(inv, 1, lime_glass);
+	inv.setItem(inv, 2, lime_glass);
+	inv.setItem(inv, 3, lime_glass);
+	inv.setItem(inv, 4, lime_glass);
+	inv.setItem(inv, 5, lime_glass);
+} elseif(c == 1) {
+	inv.setItem(inv, 0, read.item("minecraft:black_stained_glass_pane", 1, string.concat("§rID: ", string.toUpperCase(amongus.getPlayerColor(p), "P0"))));
+	inv.setItem(inv, 1, air_item);
+	inv.setItem(inv, 2, air_item);
+	inv.setItem(inv, 3, air_item);
+	inv.setItem(inv, 4, air_item);
+	inv.setItem(inv, 5, air_item);
+	inv.setItem(inv, 7, lime_glass);
+	inv.setItem(inv, 8, lime_glass);
+	inv.setItem(inv, 10, lime_glass);
+	inv.setItem(inv, 11, lime_glass);
+	inv.setItem(inv, 31, green_glass);
+} elseif(c == 2) {
+	inv.setItem(inv, 7, air_item);
+	inv.setItem(inv, 8, air_item);
+	inv.setItem(inv, 10, air_item);
+	inv.setItem(inv, 11, air_item);
+	inv.setItem(inv, 13, lime_glass);
+	inv.setItem(inv, 14, lime_glass);
+	inv.setItem(inv, 16, lime_glass);
+	inv.setItem(inv, 17, lime_glass);
+} elseif(c == 3) {
+	inv.setItem(inv, 6, read.item("minecraft:black_stained_glass_pane", 1, "§rHT: 3' 6''"));
+	inv.setItem(inv, 13, air_item);
+	inv.setItem(inv, 14, air_item);
+	inv.setItem(inv, 16, air_item);
+	inv.setItem(inv, 17, air_item);
+	inv.setItem(inv, 19, lime_glass);
+	inv.setItem(inv, 20, lime_glass);
+	inv.setItem(inv, 22, lime_glass);
+	inv.setItem(inv, 23, lime_glass);
+	inv.setItem(inv, 32, green_glass);
+} elseif(c == 4) {
+	inv.setItem(inv, 19, air_item);
+	inv.setItem(inv, 20, air_item);
+	inv.setItem(inv, 22, air_item);
+	inv.setItem(inv, 23, air_item);
+	inv.setItem(inv, 25, lime_glass);
+	inv.setItem(inv, 26, lime_glass);
+	inv.setItem(inv, 28, lime_glass);
+	inv.setItem(inv, 29, lime_glass);
+} elseif(c == 5) {
+	inv.setItem(inv, 12, read.item("minecraft:black_stained_glass_pane", 1, "§rWT: 92 lbs"));
+	inv.setItem(inv, 25, air_item);
+	inv.setItem(inv, 26, air_item);
+	inv.setItem(inv, 28, air_item);
+	inv.setItem(inv, 29, air_item);
+	inv.setItem(inv, 19, lime_glass);
+	inv.setItem(inv, 20, lime_glass);
+	inv.setItem(inv, 22, lime_glass);
+	inv.setItem(inv, 23, lime_glass);
+	inv.setItem(inv, 33, green_glass);
+} elseif(c == 6) {
+	inv.setItem(inv, 19, air_item);
+	inv.setItem(inv, 20, air_item);
+	inv.setItem(inv, 22, air_item);
+	inv.setItem(inv, 23, air_item);
+	inv.setItem(inv, 13, lime_glass);
+	inv.setItem(inv, 14, lime_glass);
+	inv.setItem(inv, 16, lime_glass);
+	inv.setItem(inv, 17, lime_glass);
+} elseif(c == 7) {
+	inv.setItem(inv, 18, read.item("minecraft:black_stained_glass_pane", 1, string.concat("§rC: ",  string.toUpperCase(amongus.getPlayerColor(p)))));
+	inv.setItem(inv, 13, air_item);
+	inv.setItem(inv, 14, air_item);
+	inv.setItem(inv, 16, air_item);
+	inv.setItem(inv, 17, air_item);
+	inv.setItem(inv, 7, lime_glass);
+	inv.setItem(inv, 8, lime_glass);
+	inv.setItem(inv, 10, lime_glass);
+	inv.setItem(inv, 11, lime_glass);
+	inv.setItem(inv, 34, green_glass);
+} elseif(c == 8) {
+	inv.setItem(inv, 7, air_item);
+	inv.setItem(inv, 8, air_item);
+	inv.setItem(inv, 10, air_item);
+	inv.setItem(inv, 11, air_item);
+	inv.setItem(inv, 1, lime_glass);
+	inv.setItem(inv, 2, lime_glass);
+	inv.setItem(inv, 3, lime_glass);
+	inv.setItem(inv, 4, lime_glass);
+	inv.setItem(inv, 5, lime_glass);
+} elseif(c == 9) {
+	inv.setItem(inv, 24, read.item("minecraft:black_stained_glass_pane", 1, "§rBT: O-"));
+	inv.setItem(inv, 1, air_item);
+	inv.setItem(inv, 2, air_item);
+	inv.setItem(inv, 3, air_item);
+	inv.setItem(inv, 4, air_item);
+	inv.setItem(inv, 5, air_item);
+	inv.setItem(inv, 35, green_glass);
+} else {
+	inv.setItem(inv, 30, read.item("km:check_green", 1, "§rTask completed"));
+	removeTaskParticle(p, scan_par_loc);
+	step = task.stepIncrease(p, 16);
+	giveTask(p, 16, "MedBay", "Submit Scan", 1, 1, null);
+	sgoto_auto_close_inv(p_uuid);
+	goto("checkgame");
+}
+map.add(submit_scan_map, p_uuid, c + 1);
+list.add(submit_scan_list, p_uuid);
+sgoto(20, "submit_scan");
+goto("checkgame");
+
+function set_engine(player, inv, direction) {
+	player_uuid = player.getUuid(player);
+	pos = map.get($align_engine_map, player_uuid);
+	if(direction == "up") {
+		new_pos = pos + 1;
+	} elseif(direction == "down") {
+		new_pos = pos - 1;
+	} else {
+		new_pos = pos;
+	}
+	if(new_pos < 0 || new_pos > 10) {
+		return false;
+	}
+	map.add($align_engine_map, player_uuid, new_pos);
+	//remove old pattern
+	temp_list = $align_engine_array[pos];
+	iter = iterator(temp_list);
+	while(hasNext(iter)) {
+		inv.setItem(inv, next(iter), $air_item);
+	}
+	//set new pattern
+	temp_list = $align_engine_array[new_pos];
+	iter = iterator(temp_list);
+	while(hasNext(iter)) {
+		slot = next(iter);
+		if(slot < 18 || slot > 26) {
+			inv.setItem(inv, slot, $red_glass);
+		} else {
+			inv.setItem(inv, slot, $green_glass);
+		}
+	}
+	if(new_pos == 5) {
+		return true;
+	}
+	return false;
+}
+
+function cam.enter(player) {
+	if(player.isOnCam(player)) {
+		return;
+	}
+	entity.clearEffects(player);
+	entity.addEffect(player, "invisibility", 999999, 1, false);
+	entity.addEffect(player, "night_vision", 999999, 0, false);
+	entity.setGravity(player, false);
+	player_uuid = player.getUuid(player);
+	list.add($cam_list, player_uuid);
+	stacks.set(player, 0, "km:arrow_left");
+	stacks.set(player, 1, "km:arrow_right");
+	stacks.set(player, 8, "km:cross_red");
+	if(!player.isGhost(player)) {
+		amongus.removeEquip(player);
+	}
+	if(isImpostor(player)) {
+		stacks.clearIndex(player, 3);
+		stacks.clearIndex(player, 4);
+		stacks.clearIndex(player, 5);
+		stacks.clearIndex(player, 6);
+		stacks.clearIndex(player, 7);
+		cooldown = data.getTimer(player, "Kill Cooldown");
+		map.add($holded_kill_cooldown, player_uuid, cooldown);
+	}
+	if($cam_loop == false) {
+		$cam_loop = true;
+		sgoto(10, "cam_tp_loop");
+	}
+}
+
+function cam.leave(player) {
+	player_uuid = player.getUuid(player);
+	list.remove($cam_list, player_uuid);
+	map.remove($cam_map, player_uuid);
+	ent = map.get($cam_map_3, player_uuid);
+	if(ent != null) {
+		map.remove($cam_map_3, ent);
+		map.remove($cam_map_4, ent);
+		entity.remove(ent);
+	}
+	entity.clearEffects(player);
+	entity.setGravity(player, true);
+	entity.teleport(player, map.get($cam_map_2, player_uuid));
+	if(list.getSize($cam_list) == 0) {
+		$cam_loop = false;
+	}
+	if(player.isGhost(player)) {
+		entity.addEffect(player, "invisibility", 999999, 1, false);
+		stacks.clear(player);
+	} else {
+		color = amongus.getPlayerColor(player);
+		amongus.equip(player, color);
+		setCrewmateIcons(player);
+		if(isImpostor(player)) {
+			setImpostorIcons(player);
+		} else {
+			stacks.clearIndex(player, 8);
+		}
+		if($lights_sabotaged) {
+			if(isCrewmate(player)) {
+				entity.addEffect(player, "blindness", 999999, 7, false);
+			} else {
+				entity.addEffect(player, "night_vision", 999999, 0, false);
+			}
+		}
+	}
+}
+
+function player.isOnCam(player) {
+	player_uuid = player.getUuid(player);
+	return list.contains($cam_list, player_uuid);
+}
+
+@cam_tp_loop
+show_cam_pars = false;
+iter = iterator(cam_list);
+while(hasNext(iter)) {
+	p_uuid = next(iter);
+	p = player.get(p_uuid);
+	cam_number = map.get(cam_map, p_uuid);
+	tp_loc = list.getIndex(cams_locs_tp, cam_number);
+	entity.teleport(p, tp_loc);
+	if(isImpostor(p)) {
+		cooldown = map.getOrDefault(holded_kill_cooldown, player_uuid, -1);
+		if(cooldown != -1) {
+			data.setTimer(p, "Kill Cooldown", cooldown);
+			status.addTimed(p, 1, cooldown, "Kill Cooldown");
+		}
+	}
+	if(!player.isGhost(p)) {
+		show_cam_pars = true;
+	}
+}
+if(show_cam_pars) {
+	iter = iterator(cams_par_locs);
+	while(hasNext(iter)) {
+		particle.spawn(next(iter), cam_par);
+	}
+}
+if(cam_loop) {
+	sgoto(10, "cam_tp_loop");
+}
+goto("checkgame");
+
+function vent_enter(player, vent_loc) {
+	tp_loc = map.get($vent_map, vent_loc);
+	entity.teleport(player, tp_loc);
+	entity.addEffect(player, "invisibility", 999999, 1, false);
+	player_uuid = player.getUuid(player);
+	map.add($vent_map_2, player_uuid, tp_loc);
+	map.add($vent_map_4, player_uuid, vent_loc);
+	a = map.get($vent_map_3, vent_loc);
+	icon_1 = a[0];
+	icon_2 = a[2];
+	if(icon_1 == null) {
+		stacks.clearIndex(player, 5);
+	} else {
+		stacks.set(player, 5, icon_1);
+	}
+	if(!list.contains($vent_list, player_uuid)) {
+		list.add($vent_list, player_uuid);
+	}
+	if(icon_2 == null) {
+		stacks.clearIndex(player, 6);
+	} else {
+		stacks.set(player, 6, icon_2);
+	}
+	if($vent_loop == false) {
+		$vent_loop = true;
+		sgoto(10, "vent_tp_loop");
+	}
+}
+
+function vent_leave(player) {
+	player_uuid = player.getUuid(player);
+	list.remove($vent_list, player_uuid);
+	map.remove($vent_map_2, player_uuid);
+	map.remove($vent_map_4, player_uuid);
+	entity.clearEffects(player);
+	if($lights_sabotaged) {
+		entity.addEffect(player, "night_vision", 999999, 0, false);
+	}
+	if(list.getSize($vent_list) == 0) {
+		$vent_loop = false;
+	}
+	color = amongus.getPlayerColor(player);
+	amongus.equip(player, color);
+	setImpostorIcons(player);
+}
+
+@vent_tp_loop
+iter = iterator(vent_list);
+while(hasNext(iter)) {
+	p_uuid = next(iter);
+	p = player.get(p_uuid);
+	tp_loc = map.get(vent_map_2, p_uuid);
+	entity.teleport(p, tp_loc);
+	if(isImpostor(p)) {
+		cooldown = map.getOrDefault(holded_kill_cooldown, player_uuid, -1);
+		if(cooldown != -1) {
+			data.setTimer(p, "Kill Cooldown", cooldown);
+			status.addTimed(p, 1, cooldown, "Kill Cooldown");
+		}
+	}
+}
+if(vent_loop) {
+	sgoto(10, "vent_tp_loop");
+}
+goto("checkgame");
+
+@space_loop
+loc_iter = iterator(space_locs);
+while(hasNext(loc_iter)) {
+	particle.spawn(next(loc_iter), space_par);
+}
+sgoto(50, "space_loop");
+goto("checkgame");
+
+@task_part_loop
+iter = iterator(player_list);
+while(hasNext(iter)) {
+	p_uuid = next(iter);
+	p = player.get(p_uuid);
+	my_list = map.get(task_part_map, p_uuid);
+	if(my_list != null) {
+		loc_iter = iterator(my_list);
+		while(hasNext(loc_iter)) {
+			particle.spawnPlayer(next(loc_iter), task_par, p, 1, 0, 0.05, 0.05, 0.05);
+		}
+	}
+}
+sgoto(10, "task_part_loop");
+goto("checkgame");
+
+function addSaboParticles(location1, location2) {
+	list.add($sabo_par_list, location1);
+	if(location2 != null) {
+		list.add($sabo_par_list, location2);
+	}
+	sgoto(10, "sabo_par_loop");
+}
+
+function removeSaboParticles(location1, location2) {
+	list.remove($sabo_par_list, location1);
+	if(location2 != null) {
+		list.remove($sabo_par_list, location2);
+	}
+}
+
+@sabo_par_loop
+if(!amongus.isAlert()) {
+	goto("checkgame");
+}
+loc_iter = iterator(sabo_par_list);
+while(hasNext(loc_iter)) {
+	particle.spawn(next(loc_iter), sabo_par);
+}
+sgoto(10, "sabo_par_loop");
+goto("checkgame");
+
+function addTaskParticle(player, location) {
+	if(isCrewmate(player) || $freeplay) {
+		player_uuid = player.getUuid(player);
+		my_list = map.get($task_part_map, player_uuid);
+		if(my_list == null) {
+			my_list = list.new();
+			map.add($task_part_map, player_uuid, my_list);
+		}
+		list.add(my_list, location);
+	}
+}
+
+function removeTaskParticle(player, location) {
+	player_uuid = player.getUuid(player);
+	my_list = map.get($task_part_map, player_uuid);
+	if(my_list == null) {
+		my_list = list.new();
+		map.add($task_part_map, player_uuid, my_list);
+	}
+	list.remove(my_list, location);
+}
+
+function reactor.setHeader(inv, item) {
+	for(i = 0; i < 5; i++) {
+		inv.setItem(inv, i, item);
+	}
+}
+
+function reactor.setLeftSide(inv, item) {
+	inv.setItem(inv, 5, item);
+	inv.setItem(inv, 6, item);
+	inv.setItem(inv, 7, item);
+	inv.setItem(inv, 11, item);
+	inv.setItem(inv, 12, item);
+	inv.setItem(inv, 13, item);
+	inv.setItem(inv, 17, item);
+	inv.setItem(inv, 18, item);
+	inv.setItem(inv, 19, item);
+}
+
+function reactor.setRightSide(inv, item) {
+	inv.setItem(inv, 8, item);
+	inv.setItem(inv, 9, item);
+	inv.setItem(inv, 10, item);
+	inv.setItem(inv, 14, item);
+	inv.setItem(inv, 15, item);
+	inv.setItem(inv, 16, item);
+	inv.setItem(inv, 20, item);
+	inv.setItem(inv, 21, item);
+	inv.setItem(inv, 22, item);
+}
+
+function reactor.get(player_or_uuid) {
+	if(isPlayer(player_or_uuid)) {
+		player_or_uuid = player.getUuid(player_or_uuid);
+	}
+	reactor_array = map.get($start_reactor_map, player_or_uuid);
+	return reactor_array;
+}
+
+function reactor.save(reactor_array, player) {
+	player_uuid = player.getUuid(player);
+	map.add($start_reactor_map, player_uuid, reactor_array);
+}
+
+function reactor.setInv(reactor_array, inv) {
+	reactor_array[0] = inv;
+}
+
+function reactor.getInv(reactor_array) {
+	return reactor_array[0];
+}
+
+function reactor.setStage(reactor_array, stage) {
+	reactor_array[1] = stage;
+}
+
+function reactor.getStage(reactor_array) {
+	return reactor_array[1];
+}
+
+function reactor.setCounter(reactor_array, counter) {
+	reactor_array[2] = counter;
+}
+
+function reactor.getCounter(reactor_array) {
+	return reactor_array[2];
+}
+
+function reactor.setPattern(reactor_array) {
+	pattern = array.new(5);
+	for(i = 0; i < 5; i++) {
+		r = math.random(1, 9);
+		if(r < 4) {
+			r += 4;
+		} elseif(r < 7) {
+			r += 7;
+		} else {
+			r += 10;
+		}
+		pattern[i] = r;
+	}
+	reactor_array[3] = pattern;
+}
+
+function reactor.getPattern(reactor_array) {
+	return reactor_array[3];
+}
+
+function reactor.setPhase(reactor_array, phase) {
+	reactor_array[4] = phase;
+}
+
+function reactor.getPhase(reactor_array) {
+	return reactor_array[4];
+}
+
+function sabotage.holdReactor(inv, hold) {
+	if(hold) {
+		item = $lime_glass;
+	} else {
+		item = $red_glass;
+	}
+	for(i = 0; i < 54; i++) {
+		inv.setItem(inv, i, item);
+	}
+}
+
+function switchLights(boolean) {
+	if(boolean) {
+		item = "minecraft:sea_lantern";
+	} else {
+		item = "minecraft:smooth_stone";
+	}
+	iter = iterator($lights_locs);
+	while(hasNext(iter)) {
+		block.set(next(iter), item);
+	}
+}
+
+@draw_comms
+player_uuid = list.getIndex(comms_state_list, 0);
+list.removeIndex(comms_state_list, 0);
+if(!comms_sabotaged) {
+	goto("checkgame");
+}
+inv = map.get(comms_inv_map, player_uuid);
+if(inv == null) {
+	goto("checkgame");
+}	
+comms_state = map.get(comms_state_map, player_uuid);
+counter = map.getOrDefault(comms_counter_map, player_uuid, 0);
+if(comms_state == 0) {
+	//worst
+	for(i = 26; i >= 9; i--) {
+		inv.setItem(inv, i, inv.getItem(inv, i - 1));
+	}
+	if(counter == 1) {
+		counter = 0;
+	} else {
+		inv.setItem(inv, 9, red_glass);
+		counter++;
+	}
+} elseif(comms_state == 1) {
+	//close
+	for(i = 26; i >= 0; i--) {
+		inv.setItem(inv, i, inv.getItem(inv, i - 1));
+	}
+	if(counter == 3) {
+		inv.setItem(inv, 0, yellow_glass);
+		inv.setItem(inv, 18, air_item);
+		counter = 0;
+	} elseif(counter == 2) {
+		inv.setItem(inv, 9, yellow_glass);
+		counter++;
+	} else {
+		counter++;
+	}
+} elseif(comms_state == 2) {
+	//correct
+	for(i = 35; i >= 0; i--) {
+		inv.setItem(inv, i, inv.getItem(inv, i - 1));
+	}
+	if(counter == 5) {
+		inv.setItem(inv, 0, lime_glass);
+		counter = 0;
+	} elseif(counter == 4) {
+		inv.setItem(inv, 9, lime_glass);
+		inv.setItem(inv, 27, air_item);
+		counter++;
+	} elseif(counter == 2) {
+		inv.setItem(inv, 9, air_item);
+		inv.setItem(inv, 27, lime_glass);
+		counter++;
+	} elseif(counter == 0) {
+		inv.setItem(inv, 9, lime_glass);
+		inv.setItem(inv, 27, air_item);
+		counter++;
+	} else {
+		counter++;
+	}
+}
+map.add(comms_counter_map, player_uuid, counter);
+list.add(comms_state_list, player_uuid);
+sgoto(5, "draw_comms");
+goto("checkgame");
+
+function comms.drawCorrect(inv, player) {
+	player_uuid = player.getUuid(player);
+	map.add($comms_state_map, player_uuid, 2);
+	map.remove($comms_counter_map, player_uuid);
+	for(i = 0; i < 36; i++) {
+		inv.setItem(inv, i, $air_item);
+	}
+	inv.setItem(inv, 0, $lime_glass);
+	inv.setItem(inv, 6, $lime_glass);
+	inv.setItem(inv, 10, $lime_glass);
+	inv.setItem(inv, 14, $lime_glass);
+	inv.setItem(inv, 16, $lime_glass);
+	inv.setItem(inv, 20, $lime_glass);
+	inv.setItem(inv, 22, $lime_glass);
+	inv.setItem(inv, 26, $lime_glass);
+	inv.setItem(inv, 30, $lime_glass);
+}
+
+function comms.drawClose(inv, player)  {
+	player_uuid = player.getUuid(player);
+	map.add($comms_state_map, player_uuid, 1);
+	map.remove($comms_counter_map, player_uuid);
+	for(i = 0; i < 36; i++) {
+		inv.setItem(inv, i, $air_item);
+	}
+	inv.setItem(inv, 0, $yellow_glass);
+	inv.setItem(inv, 4, $yellow_glass);
+	inv.setItem(inv, 8, $yellow_glass);
+	inv.setItem(inv, 10, $yellow_glass);
+	inv.setItem(inv, 12, $yellow_glass);
+	inv.setItem(inv, 14, $yellow_glass);
+	inv.setItem(inv, 16, $yellow_glass);
+	inv.setItem(inv, 20, $yellow_glass);
+	inv.setItem(inv, 24, $yellow_glass);
+}
+
+function comms.drawWorst(inv, player) {
+	player_uuid = player.getUuid(player);
+	map.add($comms_state_map, player_uuid, 0);
+	map.remove($comms_counter_map, player_uuid);
+	for(i = 0; i < 9; i++) {
+		inv.setItem(inv, i, $air_item);
+	}
+	for(i = 27; i < 36; i++) {
+		inv.setItem(inv, i, $air_item);
+	}
+	for(i = 9; i < 27; i = i + 2) {
+		inv.setItem(inv, i, $air_item);
+	}
+	for(i = 10; i < 27; i = i + 2) {
+		inv.setItem(inv, i, $red_glass);
+	}
+}
+
+@scheduled_fix_comms
+player_uuid = list.getIndex(comms_fix_list, 0);
+list.removeIndex(comms_fix_list, 0);
+time = map.get(comms_fix_map, player_uuid);
+if(time == null) {
+	goto("checkgame");
+}
+if(time.getMillis() - time <= 2000) {
+	fix_comms();
+}
+goto("checkgame");
+
+function sabotage.openedInv(player) {
+	list.add($sabo_list, player.getUuid(player));
+}
+
+function sabotage.closedInv(player) {
+	list.remove($sabo_list, player.getUuid(player));
+}
+
+function sabotage.closeInvs() {
+	iter = iterator($sabo_list);
+	while(hasNext(iter)) {
+		inv.close(player.get(next(iter)));
+	}
+}
+
+@scheduled_sabo_close
+sabotage.closeInvs();
+goto("checkgame");
+
+function task.stepIncrease(player, task_id) {
+	player_uuid = player.getUuid(player);
+	map = map.get($task_steps, player_uuid);
+	if(map == null) {
+		map = map.new();
+	}
+	step = map.getOrDefault(map, task_id, 0) + 1;
+	map.add(map, task_id, step);
+	map.add($task_steps, player_uuid, map);
+	return step;
+}
+
+function task.getStep(player, task_id) {
+	map = map.get($task_steps, player.getUuid(player));
+	if(map == null) {
+		return 0;
+	}
+	return map.getOrDefault(map, task_id, 0);
+}
+
+function task.resetSteps(player) {
+	map.add($task_steps, player.getUuid(player), map.new());
+}
+
+function amongus.setPlayerColor(player, color) {
+	player_uuid = player.getUuid(player);
+	map.add($player_colors, player_uuid, color);
+}
+
+function amongus.getPlayerColor(player_or_uuid) {
+	if(isPlayer(player_or_uuid)) {
+		player_or_uuid = player.getUuid(player_or_uuid);
+	}
+	return map.get($player_colors, player_or_uuid);
+}
+
+function amongus.getPlayerColorCode(player_or_uuid) {
+	color = amongus.getPlayerColor(player_or_uuid);
+	return map.getOrDefault($color_code_map, color, "§r");
+}
+
+function amongus.isUsedPlayerColor(color) {
+	iter = map.iterator($player_colors);
+	while(hasNext(iter)) {
+		element = next(iter);
+		value = map.getValue(element);
+		if(value == color) {
+			return true;
+		}
+	}
+	return false;
+}
+
+function amongus.removeEquip(player) {
+	living.setEquip(player, "head", $air_item);
+	living.setEquip(player, "chest", $air_item);
+	living.setEquip(player, "legs", $air_item);
+	living.setEquip(player, "feet", $air_item);
+}
+
+function amongus.forceEquip(entity, color) {
+	color_code = map.get($cloth_code_map, color);
+	item = read.item(string.concat("{id:\"minecraft:leather_helmet\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+	item.addFlag(item, "HIDE_ATTRIBUTES");
+	living.setEquip(entity, "head", item);
+	item = read.item(string.concat("{id:\"minecraft:leather_chestplate\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+	item.addFlag(item, "HIDE_ATTRIBUTES");
+	living.setEquip(entity, "chest", item);
+	item = read.item(string.concat("{id:\"minecraft:leather_leggings\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+	item.addFlag(item, "HIDE_ATTRIBUTES");
+	living.setEquip(entity, "legs", item);
+	item = read.item(string.concat("{id:\"minecraft:leather_boots\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+	item.addFlag(item, "HIDE_ATTRIBUTES");
+	living.setEquip(entity, "feet", item);
+}
+
+function amongus.equip(entity, color) {
+	color_code = map.get($cloth_code_map, color);
+	if(item.getType(living.getEquip(entity, "head")) == "minecraft:air") {
+		item = read.item(string.concat("{id:\"minecraft:leather_helmet\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+		item.addFlag(item, "HIDE_ATTRIBUTES");
+		living.setEquip(entity, "head", item);
+	}
+	if(item.getType(living.getEquip(entity, "chest")) == "minecraft:air") {
+		item = read.item(string.concat("{id:\"minecraft:leather_chestplate\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+		item.addFlag(item, "HIDE_ATTRIBUTES");
+		living.setEquip(entity, "chest", item);
+	}
+	if(item.getType(living.getEquip(entity, "legs")) == "minecraft:air") {
+		item = read.item(string.concat("{id:\"minecraft:leather_leggings\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+		item.addFlag(item, "HIDE_ATTRIBUTES");
+		living.setEquip(entity, "legs", item);
+	}
+	if(item.getType(living.getEquip(entity, "feet")) == "minecraft:air") {
+		item = read.item(string.concat("{id:\"minecraft:leather_boots\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
+		item.addFlag(item, "HIDE_ATTRIBUTES");
+		living.setEquip(entity, "feet", item);
+	}
+}
+
+function createVoteInv(player, reporter_uuid) {
+	//inv = inv.new("232202322 232202322 232202322 232202322 232202322 032200000");
+	inv = inv.new("232202322232202322232202322232202322232202322032200000");
+	index = 1;
+	iter = iterator($all_list);	
+	while(hasNext(iter)) {
+		p_uuid = next(iter);
+		p_name = player.getName(p_uuid);
+		head = player.getHead(p_uuid, p_name);
+		if(player.isGhost(p_uuid)) {
+			item.setName(head, string.concat("§r", amongus.getPlayerColorCode(p_uuid), p_name));
+			inv.setItem(inv, index - 1, $zombie_head);
+		} else {
+			item.setName(head, string.concat("§rVote for ", amongus.getPlayerColorCode(p_uuid), p_name));
+			if(p_uuid == reporter_uuid) {
+				item.setAmount(head, 2);
+			}
+		}
+		inv.setItem(inv, index, head);
+		index = index + 4;
+	}
+	inv.setItem(inv, 40, read.item("km:return_green", 1, "§rSkip Vote"));
+	map.add($vote_inv_map, player.getUuid(player), inv);
+}
+
+function getVoteInv(player) {
+	return map.get($vote_inv_map, player.getUuid(player));
+}
+
+function setItemInVoteInv(slot, item) {
+	iter = iterator($player_list);
+	while(hasNext(iter)) {
+		p = player.get(next(iter));
+		inv = getVoteInv(p);
+		inv.setItem(inv, slot, item);
+	}
+}
+
+function amongus.isAlert() {
+	return $alert;
+}
+
+function amongus.setAlert(bool) {
+	$alert = bool;
+}
+
+function addVentIcons(vent_loc, icon_1, vent_tp_loc_1, icon_2, vent_tp_loc_2) {
+	a = array.new(4);
+	a[0] = icon_1;
+	a[1] = vent_tp_loc_1;
+	a[2] = icon_2;
+	a[3] = vent_tp_loc_2;
+	map.add($vent_map_3, vent_loc, a);
+}
+
+@crewmate_win
+winners = "§bCrewmates";
+if(freeplay) {
+	endtime = time.getMillis();
+	
+	p_uuid = list.getIndex(player_list, 0);
+	p = player.get(p_uuid);
+	time = math.round((endtime - starttime) / 1000);
+	last_record = ranking.getPoints(rankingtable, p);
+	if(last_record == 0 || time < last_record) {
+		record = time;
+		diff = last_record - time;
+	} else {
+		record = last_record;
+	}
+	ranking.setPoints(rankingtable, p, record);
+	mins = math.roundDown(time / 60);
+	secs = math.roundComma(time % 60, 2);
+	rec_mins = math.roundDown(record / 60);
+	rec_secs = math.roundComma(record % 60, 2);
+
+	minigame.statsHeader(p, gamename, "§e");
+	minigame.statsLine(p, "§e", "Time", string.concat(string.number(mins), " min ", string.number(secs), " s"));
+	minigame.statsLine(p, "§e", "Your record", string.concat(string.number(rec_mins), " min ", string.number(rec_secs), " s"));
+	if(diff != null) {
+		msg(p, " §e- §rBeat own record by §e", string.concat(string.number(diff), " s"));
+	}
+}
+goto("win");
+
+@checkwin
+imps_alive = 0;
+crew_alive = 0;
+iter = iterator(player_list);
+while(hasNext(iter)) {
+	p_uuid = next(iter);
+	p = player.get(p_uuid);
+	if(!player.isGhost(p)) {
+		if(isImpostor(p)) {
+			imps_alive++;
+		} else {
+			crew_alive++;
+		}
+	}
+}
+if(imps_alive == 0) {
+	winners = "§bCrewmates";
+	goto("win");
+}
+if(imps_alive >= crew_alive) {
+	winners = "§cImpostors";
+	goto("win");
+}
+goto("checkgame");
+
+@win
+imp_string = "";
+iter = iterator(impostors_list);
+while(hasNext(iter)) {
+	p_uuid = next(iter);
+	p_name = player.getName(p_uuid);
+	p = player.get(p_uuid);
+	string = string.concat(amongus.getPlayerColorCode(p_uuid), p_name);
+	if(imp_string == "") {
+		imp_string = string;
+	} else {
+		imp_string = string.concat(imp_string, ", ", string);
+	}
+	if(winners == "§cImpostors") {
+		money.addBoost(p, 128);
+	} else {
+		money.addBoost(p, 32);
+	}
+}
+iter = iterator(player_list);
+while(hasNext(iter)) {
+	p_uuid = next(iter);
+	p = player.get(p_uuid);
+	msg.prefix(p, $gamename, string.concat("The ", winners, "§r have won the game."));
+	msg.prefix(p, $gamename, string.concat("§4Impostors: §r", imp_string));
+	inv.close(p);
+	player.gameMute(p, false);
+	if(winners == "§bCrewmates") {
+		money.addBoost(p, 128);
+	} else {
+		money.addBoost(p, 32);
+	}
+}
+//Building-Perms wieder geben
+for(i = 0; i < list.getSize(removed_perms); i++) {
+	player_uuid = list.getIndex(removed_perms, i);
+	perm.registerPlayer(player_uuid, 1);
+	perm.registerPlayer(player_uuid, 15);
+}
+script = script.getFromId(script_id);
+minigame.kickAllPlayers(script);
+minigame.term(script, gamesignloc);
+term();

+ 619 - 0
minigames/among_us/among_us_map1.txt

@@ -0,0 +1,619 @@
+gamesworld = world.getGames();
+lobbyspawnloc = loc.new(gamesworld, 906, 84, 945);
+mapname = "The Skeld";
+manual_start = true;
+
+multi_minplayers = 2;
+minplayers = 1;
+maxplayers = 10;
+gamesignloc = minigame.getSignLoc("among_us_sign1");
+start_sign_loc = loc.new(gamesworld, 904, 85, 948);
+
+amount_meetings = 1;
+amount_meetings_min = 0;
+amount_meetings_max = 5;
+meeting_cooldown = 15; //s
+meeting_cooldown_min = 10; //s
+meeting_cooldown_max = 50; //s
+kill_cooldown = 30; //s
+kill_cooldown_min = 10; //s
+kill_cooldown_max = 60; //s
+start_kill_cooldown = 10; //s
+discuss_time = 10; //s
+discuss_time_min = 5; //s
+discuss_time_max = 90; //s
+vote_time = 90; //s
+vote_time_min = 20; //s
+vote_time_max = 180; //s
+confirm_ejects = true;
+move_speed = 1.25;
+move_speed_min = 0.25;
+move_speed_max = 5;
+amount_impostors = 1;
+amount_impostors_min = 1;
+amount_impostors_max = 2;
+amount_short = 3;
+amount_short_min = 1;
+amount_short_max = 9;
+amount_common = 1;
+amount_common_min = 0;
+amount_common_max = 2;
+amount_long = 2;
+amount_long_min = 0;
+amount_long_max = 6;
+
+seat_array = array.new(10);
+seat_map = map.new();
+seat_map_index = map.new();
+seat_locs = list.new();
+seat_list_join = list.new();
+seat_list_leave = list.new();
+list.add(seat_locs, loc.new(gamesworld, 902, 84, 943));
+list.add(seat_locs, loc.new(gamesworld, 903, 84, 943));
+list.add(seat_locs, loc.new(gamesworld, 904, 84, 943));
+list.add(seat_locs, loc.new(gamesworld, 905, 84, 943));
+list.add(seat_locs, loc.new(gamesworld, 906, 84, 943));
+list.add(seat_locs, loc.new(gamesworld, 907, 84, 944));
+list.add(seat_locs, loc.new(gamesworld, 907, 84, 945));
+list.add(seat_locs, loc.new(gamesworld, 907, 84, 946));
+list.add(seat_locs, loc.new(gamesworld, 907, 84, 947));
+list.add(seat_locs, loc.new(gamesworld, 907, 84, 948));
+goto("game_core");
+
+@init_map_specific
+admin_table_loc = loc.new(gamesworld, 3089, 108, 3970);
+//admin_table_inv = inv.new("023332320 030203230 232003232 030203030 023332320 000000200");
+admin_table_inv = inv.new("023332320030203230232003232030203030023332320000000200", text.new("§cAdmin Table"));
+inv.setItem(admin_table_inv, 0, read.item("minecraft:blue_stained_glass_pane", 1, "§rUpper Engine"));
+inv.setItem(admin_table_inv, 4, read.item("minecraft:blue_stained_glass_pane", 1, "§rCafeteria"));
+inv.setItem(admin_table_inv, 6, read.item("minecraft:blue_stained_glass_pane", 1, "§rWeapons"));
+inv.setItem(admin_table_inv, 8, read.item("minecraft:blue_stained_glass_pane", 1, "§rMedBay"));
+inv.setItem(admin_table_inv, 10, read.item("minecraft:blue_stained_glass_pane", 1, "§rO2"));
+inv.setItem(admin_table_inv, 12, read.item("minecraft:blue_stained_glass_pane", 1, "§rReactor"));
+inv.setItem(admin_table_inv, 14, read.item("minecraft:blue_stained_glass_pane", 1, "§rSecurity"));
+inv.setItem(admin_table_inv, 16, read.item("minecraft:blue_stained_glass_pane", 1, "§rAdmin"));
+inv.setItem(admin_table_inv, 18, read.item("minecraft:blue_stained_glass_pane", 1, "§rNavigation"));
+inv.setItem(admin_table_inv, 20, read.item("minecraft:blue_stained_glass_pane", 1, "§rElectrical"));
+inv.setItem(admin_table_inv, 23, read.item("minecraft:blue_stained_glass_pane", 1, "§rLower Engine"));
+inv.setItem(admin_table_inv, 27, read.item("minecraft:blue_stained_glass_pane", 1, "§rStorage"));
+inv.setItem(admin_table_inv, 29, read.item("minecraft:blue_stained_glass_pane", 1, "§rShields"));
+inv.setItem(admin_table_inv, 30, read.item("minecraft:blue_stained_glass_pane", 1, "§rCommunications"));
+
+meeting_button_loc = loc.new(gamesworld, 3080, 109, 3950);
+fix_lights_loc_1 = loc.new(gamesworld, 3063, 109, 3975);
+fix_lights_loc_2 = loc.new(gamesworld, 3064, 109, 3975);
+fix_lights_par_loc_1 = loc.new(gamesworld, 3063.5, 109.5, 3975.5);
+fix_lights_par_loc_2 = loc.new(gamesworld, 3064.5, 109.5, 3975.5);
+fix_comms_loc = loc.new(gamesworld, 3088, 109, 3987);
+fix_comms_par_loc = loc.new(gamesworld, 3088.5, 109.5, 3987);
+fix_reactor_loc_1 = loc.new(gamesworld, 3037, 109, 3971);
+fix_reactor_loc_2 = loc.new(gamesworld, 3037, 109, 3955);
+fix_reactor_par_loc_1 = loc.new(gamesworld, 3037.5, 109.5, 3971.5);
+fix_reactor_par_loc_2 = loc.new(gamesworld, 3037.5, 109.5, 3955.5);
+fix_o2_loc_1 = loc.new(gamesworld, 3093, 108, 3958);
+fix_o2_loc_2 = loc.new(gamesworld, 3094, 109, 3965);
+fix_o2_par_loc_1 = loc.new(gamesworld, 3093.5, 108.5, 3958.5);
+fix_o2_par_loc_2 = loc.new(gamesworld, 3094.4, 109.5, 3965.5);
+prime_shields_loc = loc.new(gamesworld, 3095, 109, 3982);
+start_reactor_loc = loc.new(gamesworld, 3037, 108, 3963);
+unlock_manifolds_loc = loc.new(gamesworld, 3034, 109, 3959);
+chart_course_loc = loc.new(gamesworld, 3114, 108, 3958);
+steering_loc = loc.new(gamesworld, 3115, 108, 3961);
+calibrate_dist_loc = loc.new(gamesworld, 3073, 109, 3969);
+swipe_card_loc = loc.new(gamesworld, 3092, 108, 3970);
+clean_o2_loc = loc.new(gamesworld, 3091, 109, 3960);
+ue_align_loc = loc.new(gamesworld, 3044, 109, 3953);
+le_align_loc = loc.new(gamesworld, 3044, 109, 3979);
+cafe_garb_loc = loc.new(gamesworld, 3090, 109, 3947);
+o2_garb_loc = loc.new(gamesworld, 3091, 109, 3962);
+stor_garb_loc = loc.new(gamesworld, 3083, 109, 3987);
+get_fuel_loc = loc.new(gamesworld, 3077, 108, 3983);
+upper_engine_loc = loc.new(gamesworld, 3043, 108, 3953);
+lower_engine_loc = loc.new(gamesworld, 3043, 108, 3979);
+
+get_fuel_par_loc = loc.new(gamesworld, 3077.5, 109.2, 3983.5);
+upper_engine_par_loc = loc.new(gamesworld, 3043.5, 109.2, 3953.5);
+lower_engine_par_loc = loc.new(gamesworld, 3043.5, 109.2, 3979.5);
+prime_shields_par_loc = loc.new(gamesworld, 3095.4, 109.5, 3982.5);
+start_reactor_par_loc = loc.new(gamesworld, 3037.6, 109.2, 3963.5);
+unlock_manifolds_par_loc = loc.new(gamesworld, 3034.5, 109.5, 3959.5);
+chart_course_par_loc = loc.new(gamesworld, 3114.5, 109.2, 3958.5);
+steering_par_loc = loc.new(gamesworld, 3115.5, 109.2, 3961.5);
+calibrate_dist_par_loc = loc.new(gamesworld, 3073.5, 109.5, 3969.5);
+swipe_card_par_loc = loc.new(gamesworld, 3092.5, 109.2, 3970.5);
+clean_o2_par_loc = loc.new(gamesworld, 3091.5, 109.5, 3960.5);
+ue_align_par_loc = loc.new(gamesworld, 3044.5, 109.5, 3953.5);
+le_align_par_loc = loc.new(gamesworld, 3044.5, 109.5, 3979.5);
+cafe_garb_par_loc = loc.new(gamesworld, 3090.5, 109.5, 3947.5);
+o2_garb_par_loc = loc.new(gamesworld, 3091.5, 109.5, 3962.5);
+stor_garb_par_loc = loc.new(gamesworld, 3083.5, 109.5, 3987.5);
+clear_ast_par_loc = loc.new(gamesworld, 3098, 109.2, 3949);
+
+clear_ast_locs = set.new();
+set.add(clear_ast_locs, loc.new(gamesworld, 3097, 108, 3949));
+set.add(clear_ast_locs, loc.new(gamesworld, 3097, 109, 3948));
+set.add(clear_ast_locs, loc.new(gamesworld, 3098, 109, 3948));
+set.add(clear_ast_locs, loc.new(gamesworld, 3098, 109, 3949));
+
+inspect_par_loc = loc.new(gamesworld, 3071, 110, 3964.5);
+inspect_sample_locs = set.new();
+set.add(inspect_sample_locs, loc.new(gamesworld, 3071, 109, 3963));
+set.add(inspect_sample_locs, loc.new(gamesworld, 3071, 109, 3964));
+set.add(inspect_sample_locs, loc.new(gamesworld, 3071, 109, 3965));
+set.add(inspect_sample_locs, loc.new(gamesworld, 3071, 110, 3963));
+set.add(inspect_sample_locs, loc.new(gamesworld, 3071, 110, 3964));
+set.add(inspect_sample_locs, loc.new(gamesworld, 3071, 110, 3965));
+
+scan_par_loc = loc.new(gamesworld, 3068, 109.5, 3964);
+med_scan_locs = set.new();
+set.add(med_scan_locs, loc.new(gamesworld, 3067, 108, 3963));
+set.add(med_scan_locs, loc.new(gamesworld, 3068, 108, 3963));
+set.add(med_scan_locs, loc.new(gamesworld, 3067, 108, 3964));
+set.add(med_scan_locs, loc.new(gamesworld, 3068, 108, 3964));
+
+spawn_locs = list.new();
+list.add(spawn_locs, loc.new(gamesworld, 3077.5, 109, 3948.5, -57, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3077.5, 109, 3950.5, -90, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3077.5, 109, 3952.5, -124, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3083.5, 109, 3948.5, 57, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3083.5, 109, 3950.5, 90, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3083.5, 109, 3952.5, 124, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3079.5, 109, 3953.5, -162, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3081.5, 109, 3953.5, 162, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3079.5, 109, 3947.5, -19, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3081.5, 109, 3947.5, 19, 0.0001));
+
+elec_power_loc = loc.new(gamesworld, 3065, 109, 3967);
+comm_power_loc = loc.new(gamesworld, 3092, 109, 3982);
+le_power_loc = loc.new(gamesworld, 3044, 109, 3971);
+ue_power_loc = loc.new(gamesworld, 3046, 109, 3944);
+navi_power_loc = loc.new(gamesworld, 3109, 109, 3956);
+o2_power_loc = loc.new(gamesworld, 3094, 109, 3957);
+weap_power_loc = loc.new(gamesworld, 3100, 109, 3950);
+secu_power_loc = loc.new(gamesworld, 3058, 109, 3959);
+shie_power_loc = loc.new(gamesworld, 3102, 109, 3972);
+
+elec_power_par_loc = loc.new(gamesworld, 3065.5, 109.5, 3968.2);
+comm_power_par_loc = loc.new(gamesworld, 3091.8, 109.5, 3982.5);
+le_power_par_loc = loc.new(gamesworld, 3044.5, 109.5, 3972.2);
+ue_power_par_loc = loc.new(gamesworld, 3046.5, 109.5, 3945.2);
+navi_power_par_loc = loc.new(gamesworld, 3109.5, 109.5, 3957.2);
+o2_power_par_loc = loc.new(gamesworld, 3094.5, 109.5, 3958.2);
+weap_power_par_loc = loc.new(gamesworld, 3099.8, 109.5, 3950.5);
+secu_power_par_loc = loc.new(gamesworld, 3057.8, 109.5, 3959.5);
+shie_power_par_loc = loc.new(gamesworld, 3102.5, 109.5, 3973.5);
+
+divert_pow_map = map.new();
+map.add(divert_pow_map, 22, "Upper Engine");
+map.add(divert_pow_map, 23, "Lower Engine");
+map.add(divert_pow_map, 24, "Weapons");
+map.add(divert_pow_map, 25, "Shields");
+map.add(divert_pow_map, 26, "Navigation");
+map.add(divert_pow_map, 27, "Communications");
+map.add(divert_pow_map, 28, "O2");
+map.add(divert_pow_map, 29, "Security");
+map.add(divert_pow_map, 30, "Just for symmetric");
+
+divert_pow_map_2 = map.new();
+map.add(divert_pow_map_2, 22, ue_power_loc);
+map.add(divert_pow_map_2, 23, le_power_loc);
+map.add(divert_pow_map_2, 24, weap_power_loc);
+map.add(divert_pow_map_2, 25, shie_power_loc);
+map.add(divert_pow_map_2, 26, navi_power_loc);
+map.add(divert_pow_map_2, 27, comm_power_loc);
+map.add(divert_pow_map_2, 28, o2_power_loc);
+map.add(divert_pow_map_2, 29, secu_power_loc);
+
+divert_pow_map_4 = map.new();
+map.add(divert_pow_map_4, 22, ue_power_par_loc);
+map.add(divert_pow_map_4, 23, le_power_par_loc);
+map.add(divert_pow_map_4, 24, weap_power_par_loc);
+map.add(divert_pow_map_4, 25, shie_power_par_loc);
+map.add(divert_pow_map_4, 26, navi_power_par_loc);
+map.add(divert_pow_map_4, 27, comm_power_par_loc);
+map.add(divert_pow_map_4, 28, o2_power_par_loc);
+map.add(divert_pow_map_4, 29, secu_power_par_loc);
+
+elec_wires_loc = loc.new(gamesworld, 3068, 109, 3968);
+stor_wires_loc = loc.new(gamesworld, 3077, 109, 3969);
+admin_wires_loc = loc.new(gamesworld, 3083, 109, 3964);
+navi_wires_loc = loc.new(gamesworld, 3106, 109, 3959);
+cafe_wires_loc = loc.new(gamesworld, 3072, 109, 3942);
+secu_wires_loc = loc.new(gamesworld, 3050, 109, 3961);
+
+elec_wires_par_loc = loc.new(gamesworld, 3068.5, 109.5, 3969.2);
+stor_wires_par_loc = loc.new(gamesworld, 3077.5, 109.5, 3970.2);
+admin_wires_par_loc = loc.new(gamesworld, 3083.5, 109.5, 3965.2);
+navi_wires_par_loc = loc.new(gamesworld, 3106.5, 109.5, 3960.2);
+cafe_wires_par_loc = loc.new(gamesworld, 3072.5, 109.5, 3943.2);
+secu_wires_par_loc = loc.new(gamesworld, 3050.5, 109.5, 3962.2);
+
+wires_list_2 = list.new();
+list.addAll(wires_list_2, elec_wires_loc, stor_wires_loc, admin_wires_loc, navi_wires_loc, cafe_wires_loc, secu_wires_loc);
+
+wires_map_3 = map.new();
+map.add(wires_map_3, elec_wires_loc, "Electrical");
+map.add(wires_map_3, stor_wires_loc, "Storage");
+map.add(wires_map_3, admin_wires_loc, "Admin");
+map.add(wires_map_3, navi_wires_loc, "Navigation");
+map.add(wires_map_3, cafe_wires_loc, "Cafeteria");
+map.add(wires_map_3, secu_wires_loc, "Security");
+
+wires_map_5 = map.new();
+map.add(wires_map_5, elec_wires_loc, elec_wires_par_loc);
+map.add(wires_map_5, stor_wires_loc, stor_wires_par_loc);
+map.add(wires_map_5, admin_wires_loc, admin_wires_par_loc);
+map.add(wires_map_5, navi_wires_loc, navi_wires_par_loc);
+map.add(wires_map_5, cafe_wires_loc, cafe_wires_par_loc);
+map.add(wires_map_5, secu_wires_loc, secu_wires_par_loc);
+
+admin_vent_tp_loc = loc.new(gamesworld, 3086.5, 108, 3973.5, -135, 0.0001); //1
+weap_vent_tp_loc = loc.new(gamesworld, 3096.5, 108, 3946.5, -10, 0.0001); //2
+navi_1_vent_tp_loc = loc.new(gamesworld, 3109.5, 108, 3957.5, -90, 0.0001); //2
+navi_2_vent_tp_loc = loc.new(gamesworld, 3109.5, 108, 3965.5, -90, 0.0001); //3
+shie_vent_tp_loc = loc.new(gamesworld, 3099.5, 108, 3982.5, 145, 50); //3
+med_vent_tp_loc = loc.new(gamesworld, 3061.5, 108, 3962.5, -90, 0.0001); //4
+ue_vent_tp_loc = loc.new(gamesworld, 3049.5, 108, 3946.5, 45, 0.0001); //5
+le_vent_tp_loc = loc.new(gamesworld, 3049.5, 108, 3980.5, 135, 0.0001); //6
+secu_vent_tp_loc = loc.new(gamesworld, 3057.5, 108, 3966.5, 140, 0.0001); //4
+elec_vent_tp_loc = loc.new(gamesworld, 3063.5, 108, 3968.5, -45, 0.0001); //4
+reac_1_vent_tp_loc = loc.new(gamesworld, 3036.5, 108, 3957.5, -70, 0.0001); //5
+reac_2_vent_tp_loc = loc.new(gamesworld, 3039.5, 108, 3967.5, 135, 0.0001); //6
+hall_vent_tp_loc = loc.new(gamesworld, 3098.5, 108, 3964.5, -45, 0.0001); //3
+cafe_vent_tp_loc = loc.new(gamesworld, 3089.5, 108, 3954.5, 115, 0.0001); //3
+
+admin_vent_loc = loc.new(gamesworld, 3086, 107, 3973); //1
+weap_vent_loc = loc.new(gamesworld, 3096, 107, 3946); //2
+navi_1_vent_loc = loc.new(gamesworld, 3109, 107, 3957);//2
+navi_2_vent_loc = loc.new(gamesworld, 3109, 107, 3965); //3
+shie_vent_loc = loc.new(gamesworld, 3099, 107, 3982); //3
+med_vent_loc = loc.new(gamesworld, 3061, 107, 3962); //4
+ue_vent_loc = loc.new(gamesworld, 3049, 107, 3946); //5
+le_vent_loc = loc.new(gamesworld, 3049, 107, 3980); //6
+secu_vent_loc = loc.new(gamesworld, 3057, 107, 3966); //4
+elec_vent_loc = loc.new(gamesworld, 3063, 107, 3968); //4
+reac_1_vent_loc = loc.new(gamesworld, 3036, 107, 3957); //5
+reac_2_vent_loc = loc.new(gamesworld, 3039, 107, 3967); //6
+hall_vent_loc = loc.new(gamesworld, 3098, 107, 3964); //3
+cafe_vent_loc = loc.new(gamesworld, 3089, 107, 3954); //3
+
+all_vent_locs = list.new();
+list.addAll(all_vent_locs, admin_vent_loc, weap_vent_loc, navi_1_vent_loc, navi_2_vent_loc, shie_vent_loc, med_vent_loc, ue_vent_loc, le_vent_loc, secu_vent_loc, elec_vent_loc, reac_1_vent_loc, reac_2_vent_loc, hall_vent_loc, cafe_vent_loc);
+
+all_vent_tp_locs = list.new();
+list.addAll(all_vent_tp_locs, admin_vent_tp_loc, weap_vent_tp_loc, navi_1_vent_tp_loc, navi_2_vent_tp_loc, shie_vent_tp_loc, med_vent_tp_loc, ue_vent_tp_loc, le_vent_tp_loc, secu_vent_tp_loc, elec_vent_tp_loc, reac_1_vent_tp_loc, reac_2_vent_tp_loc, hall_vent_tp_loc, cafe_vent_tp_loc);
+
+vent_map = map.new();
+map.add(vent_map, admin_vent_loc, admin_vent_tp_loc);
+map.add(vent_map, weap_vent_loc, weap_vent_tp_loc);
+map.add(vent_map, navi_1_vent_loc, navi_1_vent_tp_loc);
+map.add(vent_map, navi_2_vent_loc, navi_2_vent_tp_loc);
+map.add(vent_map, shie_vent_loc, shie_vent_tp_loc);
+map.add(vent_map, med_vent_loc, med_vent_tp_loc);
+map.add(vent_map, ue_vent_loc, ue_vent_tp_loc);
+map.add(vent_map, le_vent_loc, le_vent_tp_loc);
+map.add(vent_map, secu_vent_loc, secu_vent_tp_loc);
+map.add(vent_map, elec_vent_loc, elec_vent_tp_loc);
+map.add(vent_map, reac_1_vent_loc, reac_1_vent_tp_loc);
+map.add(vent_map, reac_2_vent_loc, reac_2_vent_tp_loc);
+map.add(vent_map, hall_vent_loc, hall_vent_tp_loc);
+map.add(vent_map, cafe_vent_loc, cafe_vent_tp_loc);
+
+vent_map_5 = map.new();
+all_vent_center_locs = list.new();
+for(i = 0; i < list.getSize(all_vent_locs); i++) {
+	loc = list.getIndex(all_vent_locs, i);
+	center_loc = loc.mod(loc, 0.5, 1, 0.5);
+	list.add(all_vent_center_locs, center_loc);
+	map.add(vent_map_5, center_loc, loc);
+}
+
+item_arrow_left = item.custom.create("ARROW_LEFT", 1, null, null);
+item_arrow_right = item.custom.create("ARROW_RIGHT", 1, null, null);
+item_arrow_up = item.custom.create("ARROW_UP", 1, null, null);
+item_arrow_down = item.custom.create("ARROW_DOWN", 1, null, null);
+
+vent_map_3 = map.new();
+addVentIcons(cafe_vent_loc, item_arrow_left, admin_vent_loc, item_arrow_down, hall_vent_loc);
+addVentIcons(weap_vent_loc, item_arrow_up, navi_1_vent_loc, null, null);
+addVentIcons(navi_1_vent_loc, item_arrow_left, weap_vent_loc, null, null);
+addVentIcons(navi_2_vent_loc, null, null, item_arrow_right, shie_vent_loc);
+addVentIcons(hall_vent_loc, item_arrow_down, cafe_vent_loc, item_arrow_right, admin_vent_loc);
+addVentIcons(shie_vent_loc, null, null, item_arrow_right, navi_2_vent_loc);
+addVentIcons(admin_vent_loc, item_arrow_right, hall_vent_loc, item_arrow_left, cafe_vent_loc);
+addVentIcons(ue_vent_loc, null, null, item_arrow_up, reac_1_vent_loc);
+addVentIcons(reac_1_vent_loc, item_arrow_left, ue_vent_loc, null, null);
+addVentIcons(reac_2_vent_loc, null, null, item_arrow_down, le_vent_loc);
+addVentIcons(le_vent_loc, null, null, item_arrow_up, reac_2_vent_loc);
+addVentIcons(secu_vent_loc, item_arrow_down, elec_vent_loc, item_arrow_right, med_vent_loc);
+addVentIcons(med_vent_loc, arrow_downsecu_vent_loc, item_arrow_right, elec_vent_loc);
+addVentIcons(elec_vent_loc, item_arrow_left, med_vent_loc, item_arrow_down, secu_vent_loc);
+
+move_id_le = event.addMoveData(loc.new(gamesworld, 3051, 108, 3982), loc.new(gamesworld, 3042, 113, 3972), 10, -1); //Lower Engine
+move_id_sec = event.addMoveData(loc.new(gamesworld, 3054, 108, 3967), loc.new(gamesworld, 3058, 111, 3958), 10, -1); //Security
+move_id_ue = event.addMoveData(loc.new(gamesworld, 3051, 108, 3955), loc.new(gamesworld, 3042, 113, 3945), 10, -1); //Upper Engine
+move_id_reac = event.addMoveData(loc.new(gamesworld, 3041.9, 108, 3955.1), loc.new(gamesworld, 3033, 114, 3971.9), 10, -1); //Reactor
+move_id_o2 = event.addMoveData(loc.new(gamesworld, 3091.1, 108, 3957.1), loc.new(gamesworld, 3095, 111, 3963), 10, -1); //O2
+move_id_navi = event.addMoveData(loc.new(gamesworld, 3109, 108, 3957), loc.new(gamesworld, 3117, 111, 3966), 10, -1); //Navigation
+move_id_weap = event.addMoveData(loc.new(gamesworld, 3100, 108, 3954), loc.new(gamesworld, 3095, 111, 3946), 10, -1); //Weapons
+move_id_shie = event.addMoveData(loc.new(gamesworld, 3104, 108, 3973), loc.new(gamesworld, 3095, 111, 3983), 10, -1); //Shields
+move_id_comm = event.addMoveData(loc.new(gamesworld, 3092, 108, 3982), loc.new(gamesworld, 3086, 111, 3988), 10, -1); //Communications
+move_id_stor1 = event.addMoveData(loc.new(gamesworld, 3084, 108, 3988), loc.new(gamesworld, 3073.1, 115, 3971.1), 10, -1); //Storage1
+move_id_stor2 = event.addMoveData(loc.new(gamesworld, 3084, 108, 3972), loc.new(gamesworld, 3075.1, 115, 3970.1), 10, -1); //Storage2
+move_id_elec1 = event.addMoveData(loc.new(gamesworld, 3063, 108, 3979), loc.new(gamesworld, 3071.9, 111, 3968), 10, -1); //Electrical1
+move_id_elec2 = event.addMoveData(loc.new(gamesworld, 3071.9, 108, 3971.9), loc.new(gamesworld, 3073.9, 111, 3968), 10, -1); //Electrical2
+move_id_med1 = event.addMoveData(loc.new(gamesworld, 3069.9, 108, 3966), loc.new(gamesworld, 3060, 111, 3955), 10, -1); //MedBay1
+move_id_med2 = event.addMoveData(loc.new(gamesworld, 3069.9, 108, 3966), loc.new(gamesworld, 3072, 111, 3961), 10, -1); //MedBay2
+move_id_cafe = event.addMoveData(loc.new(gamesworld, 3071.1, 108, 3940), loc.new(gamesworld, 3090.9, 112, 3961.9), 10, -1); //Cafeteria
+move_id_admin = event.addMoveData(loc.new(gamesworld, 3086, 108, 3965), loc.new(gamesworld, 3096, 111, 3974), 10, -1); //Admin
+
+event.addMoveData(loc.new(gamesworld, 3054, 108, 3971.9), loc.new(gamesworld, 3042, 111, 3955.1), 10, -1); //Gang vor Security
+event.addMoveData(loc.new(gamesworld, 3051, 108, 3950), loc.new(gamesworld, 3071, 111, 3955), 10, -1); //Gang vor MedBay
+event.addMoveData(loc.new(gamesworld, 3091, 108, 3949), loc.new(gamesworld, 3095, 111, 3952), 10, -1); //Gang von Cafeteria to Weapons
+event.addMoveData(loc.new(gamesworld, 3079, 108, 3962), loc.new(gamesworld, 3086, 111, 3970), 10, -1); //Gang vor Admin
+event.addMoveData(loc.new(gamesworld, 3084, 108, 3976), loc.new(gamesworld, 3095, 111, 3982), 10, -1); //Gang vor Communications
+event.addMoveData(loc.new(gamesworld, 3109, 108, 3954), loc.new(gamesworld, 3096, 111, 3973), 10, -1); //Gang vor Navigation
+event.addMoveData(loc.new(gamesworld, 3073, 108, 3984), loc.new(gamesworld, 3056, 111, 3979), 10, -1); //Gang vor Electrical1
+event.addMoveData(loc.new(gamesworld, 3059, 108, 3975), loc.new(gamesworld, 3051, 111, 3980), 10, -1); //Gang vor Electrical2
+
+move_id_map = map.new();
+map.add(move_id_map, move_id_le, "§4§lLower Engine");
+map.add(move_id_map, move_id_sec, "§4§lSecurity");
+map.add(move_id_map, move_id_ue, "§4§lUpper Engine");
+map.add(move_id_map, move_id_reac, "§4§lReactor");
+map.add(move_id_map, move_id_o2, "§4§lO2");
+map.add(move_id_map, move_id_navi, "§4§lNavigation");
+map.add(move_id_map, move_id_weap, "§4§lWeapons");
+map.add(move_id_map, move_id_shie, "§4§lShields");
+map.add(move_id_map, move_id_comm, "§4§lCommunications");
+map.add(move_id_map, move_id_stor1, "§4§lStorage");
+map.add(move_id_map, move_id_stor2, "§4§lStorage");
+map.add(move_id_map, move_id_elec1, "§4§lElectrical");
+map.add(move_id_map, move_id_elec2, "§4§lElectrical");
+map.add(move_id_map, move_id_admin, "§4§lAdmin");
+map.add(move_id_map, move_id_med1, "§4§lMedBay");
+map.add(move_id_map, move_id_med2, "§4§lMedBay");
+map.add(move_id_map, move_id_cafe, "§4§lCafeteria");
+
+admin_upload_loc = loc.new(gamesworld, 3086, 109, 3964);
+cafe_download_loc = loc.new(gamesworld, 3088, 109, 3944);
+weap_download_loc = loc.new(gamesworld, 3096, 109, 3945);
+comm_download_loc = loc.new(gamesworld, 3086, 109, 3981);
+elec_download_loc = loc.new(gamesworld, 3063, 109, 3967);
+navi_download_loc = loc.new(gamesworld, 3111, 109, 3956);
+
+admin_upload_par_loc = loc.new(gamesworld, 3086.5, 109.5, 3965.2);
+cafe_download_par_loc = loc.new(gamesworld, 3088.5, 109.5, 3945.2);
+weap_download_par_loc = loc.new(gamesworld, 3096.5, 109.5, 3946.2);
+comm_download_par_loc = loc.new(gamesworld, 3086.5, 109.5, 3982.2);
+elec_download_par_loc = loc.new(gamesworld, 3063.5, 109.5, 3968.2);
+navi_download_par_loc = loc.new(gamesworld, 3111.5, 109.5, 3957.2);
+
+download_map_2 = map.new();
+map.add(download_map_2, cafe_download_loc, "§rCafeteria");
+map.add(download_map_2, weap_download_loc, "§rWeapons");
+map.add(download_map_2, comm_download_loc, "§rCommunications");
+map.add(download_map_2, elec_download_loc, "§rElectrical");
+map.add(download_map_2, navi_download_loc, "§rNavigation");
+
+download_list_3 = list.new();
+list.addAll(download_list_3, cafe_download_loc, weap_download_loc, comm_download_loc, elec_download_loc, navi_download_loc);
+
+download_list_4 = list.new();
+list.addAll(download_list_4, cafe_download_par_loc, weap_download_par_loc, comm_download_par_loc, elec_download_par_loc, navi_download_par_loc);
+
+space_locs = list.new();
+//cafeteria
+list.add(space_locs, loc.new(gamesworld, 3074.5, 109.5, 3939.5));
+list.add(space_locs, loc.new(gamesworld, 3075.5, 110, 3938.5));
+list.add(space_locs, loc.new(gamesworld, 3079, 110.4, 3939));
+list.add(space_locs, loc.new(gamesworld, 3078.5, 110, 3938.5));
+list.add(space_locs, loc.new(gamesworld, 3081.5, 109.5, 3939.5));
+list.add(space_locs, loc.new(gamesworld, 3083.5, 110, 3939.5));
+//weapons
+list.add(space_locs, loc.new(gamesworld, 3105, 106.5, 3940));
+list.add(space_locs, loc.new(gamesworld, 3105.5, 107.5, 3943));
+list.add(space_locs, loc.new(gamesworld, 3105.5, 108.5, 3948));
+list.add(space_locs, loc.new(gamesworld, 3100, 110, 3943));
+list.add(space_locs, loc.new(gamesworld, 3098, 107, 3942));
+//navi left window
+list.add(space_locs, loc.new(gamesworld, 3112, 108, 3952));
+list.add(space_locs, loc.new(gamesworld, 3114, 110.5, 3953));
+list.add(space_locs, loc.new(gamesworld, 3116.5, 110, 3956.5));
+list.add(space_locs, loc.new(gamesworld, 3116.5, 109, 3953.5));
+list.add(space_locs, loc.new(gamesworld, 3116, 110.5, 3954));
+//navi mid window
+list.add(space_locs, loc.new(gamesworld, 3118.5, 109.5, 3963.5));
+list.add(space_locs, loc.new(gamesworld, 3118, 109.5, 3961.5));
+list.add(space_locs, loc.new(gamesworld, 3119, 109.5, 3961));
+list.add(space_locs, loc.new(gamesworld, 3118, 109, 3960));
+list.add(space_locs, loc.new(gamesworld, 3119, 111, 3959));
+list.add(space_locs, loc.new(gamesworld, 3119, 111, 3962.5));
+//navi right window
+list.add(space_locs, loc.new(gamesworld, 3112, 108, 3970));
+list.add(space_locs, loc.new(gamesworld, 3114, 110.5, 3969));
+list.add(space_locs, loc.new(gamesworld, 3116.5, 110, 3965.5));
+list.add(space_locs, loc.new(gamesworld, 3116.5, 109, 3968.5));
+list.add(space_locs, loc.new(gamesworld, 3116, 110.5, 3968));
+
+lights_locs = list.new();
+//Hallway between Engines
+list.add(lights_locs, loc.new(gamesworld, 3043, 111, 3963));
+list.add(lights_locs, loc.new(gamesworld, 3044, 111, 3963));
+list.add(lights_locs, loc.new(gamesworld, 3050, 111, 3963));
+list.add(lights_locs, loc.new(gamesworld, 3051, 111, 3963));
+list.add(lights_locs, loc.new(gamesworld, 3047, 111, 3958));
+list.add(lights_locs, loc.new(gamesworld, 3047, 111, 3959));
+list.add(lights_locs, loc.new(gamesworld, 3047, 111, 3967));
+list.add(lights_locs, loc.new(gamesworld, 3047, 111, 3968));
+//UE
+list.add(lights_locs, loc.new(gamesworld, 3043, 113, 3947));
+list.add(lights_locs, loc.new(gamesworld, 3044, 113, 3947));
+list.add(lights_locs, loc.new(gamesworld, 3047, 113, 3947));
+list.add(lights_locs, loc.new(gamesworld, 3048, 113, 3947));
+list.add(lights_locs, loc.new(gamesworld, 3043, 113, 3953));
+list.add(lights_locs, loc.new(gamesworld, 3044, 113, 3953));
+list.add(lights_locs, loc.new(gamesworld, 3047, 113, 3953));
+list.add(lights_locs, loc.new(gamesworld, 3048, 113, 3953));
+//LE
+list.add(lights_locs, loc.new(gamesworld, 3043, 113, 3973));
+list.add(lights_locs, loc.new(gamesworld, 3044, 113, 3973));
+list.add(lights_locs, loc.new(gamesworld, 3047, 113, 3973));
+list.add(lights_locs, loc.new(gamesworld, 3048, 113, 3973));
+list.add(lights_locs, loc.new(gamesworld, 3043, 113, 3979));
+list.add(lights_locs, loc.new(gamesworld, 3044, 113, 3979));
+list.add(lights_locs, loc.new(gamesworld, 3047, 113, 3979));
+list.add(lights_locs, loc.new(gamesworld, 3048, 113, 3979));
+//Hallway Electrical
+list.add(lights_locs, loc.new(gamesworld, 3053, 111, 3976));
+list.add(lights_locs, loc.new(gamesworld, 3054, 111, 3976));
+list.add(lights_locs, loc.new(gamesworld, 3057, 111, 3978));
+list.add(lights_locs, loc.new(gamesworld, 3057, 111, 3979));
+list.add(lights_locs, loc.new(gamesworld, 3060, 111, 3982));
+list.add(lights_locs, loc.new(gamesworld, 3061, 111, 3982));
+list.add(lights_locs, loc.new(gamesworld, 3067, 111, 3982));
+list.add(lights_locs, loc.new(gamesworld, 3068, 111, 3982));
+//Electrical
+list.add(lights_locs, loc.new(gamesworld, 3064, 111, 3970));
+list.add(lights_locs, loc.new(gamesworld, 3064, 111, 3971));
+list.add(lights_locs, loc.new(gamesworld, 3064, 111, 3975));
+list.add(lights_locs, loc.new(gamesworld, 3064, 111, 3976));
+list.add(lights_locs, loc.new(gamesworld, 3069, 111, 3970));
+list.add(lights_locs, loc.new(gamesworld, 3069, 111, 3971));
+list.add(lights_locs, loc.new(gamesworld, 3069, 111, 3975));
+list.add(lights_locs, loc.new(gamesworld, 3069, 111, 3976));
+//Storage
+list.add(lights_locs, loc.new(gamesworld, 3076, 113, 3972));
+list.add(lights_locs, loc.new(gamesworld, 3076, 113, 3976));
+list.add(lights_locs, loc.new(gamesworld, 3076, 113, 3980));
+list.add(lights_locs, loc.new(gamesworld, 3076, 113, 3984));
+list.add(lights_locs, loc.new(gamesworld, 3080, 113, 3972));
+list.add(lights_locs, loc.new(gamesworld, 3080, 113, 3976));
+list.add(lights_locs, loc.new(gamesworld, 3080, 113, 3980));
+list.add(lights_locs, loc.new(gamesworld, 3080, 113, 3984));
+//Communications
+list.add(lights_locs, loc.new(gamesworld, 3088, 111, 3984));
+list.add(lights_locs, loc.new(gamesworld, 3088, 111, 3985));
+list.add(lights_locs, loc.new(gamesworld, 3089, 111, 3984));
+list.add(lights_locs, loc.new(gamesworld, 3089, 111, 3985));
+//Hallway Communications
+list.add(lights_locs, loc.new(gamesworld, 3086, 111, 3977));
+list.add(lights_locs, loc.new(gamesworld, 3087, 111, 3977));
+list.add(lights_locs, loc.new(gamesworld, 3091, 111, 3977));
+list.add(lights_locs, loc.new(gamesworld, 3092, 111, 3977));
+//Shields
+list.add(lights_locs, loc.new(gamesworld, 3096, 111, 3975));
+list.add(lights_locs, loc.new(gamesworld, 3096, 111, 3976));
+list.add(lights_locs, loc.new(gamesworld, 3096, 111, 3980));
+list.add(lights_locs, loc.new(gamesworld, 3096, 111, 3981));
+list.add(lights_locs, loc.new(gamesworld, 3099, 111, 3975));
+list.add(lights_locs, loc.new(gamesworld, 3099, 111, 3976));
+list.add(lights_locs, loc.new(gamesworld, 3099, 111, 3980));
+list.add(lights_locs, loc.new(gamesworld, 3099, 111, 3981));
+list.add(lights_locs, loc.new(gamesworld, 3102, 111, 3975));
+list.add(lights_locs, loc.new(gamesworld, 3102, 111, 3976));
+//Navigation
+list.add(lights_locs, loc.new(gamesworld, 3110, 111, 3958));
+list.add(lights_locs, loc.new(gamesworld, 3111, 111, 3958));
+list.add(lights_locs, loc.new(gamesworld, 3110, 111, 3961));
+list.add(lights_locs, loc.new(gamesworld, 3111, 111, 3961));
+list.add(lights_locs, loc.new(gamesworld, 3112, 111, 3961));
+list.add(lights_locs, loc.new(gamesworld, 3110, 111, 3964));
+list.add(lights_locs, loc.new(gamesworld, 3111, 111, 3964));
+//Hallway Navigation
+list.add(lights_locs, loc.new(gamesworld, 3104, 111, 3961));
+list.add(lights_locs, loc.new(gamesworld, 3105, 111, 3961));
+list.add(lights_locs, loc.new(gamesworld, 3101, 111, 3964));
+list.add(lights_locs, loc.new(gamesworld, 3101, 111, 3965));
+list.add(lights_locs, loc.new(gamesworld, 3099, 111, 3969));
+list.add(lights_locs, loc.new(gamesworld, 3099, 111, 3970));
+list.add(lights_locs, loc.new(gamesworld, 3100, 111, 3959));
+list.add(lights_locs, loc.new(gamesworld, 3101, 111, 3959));
+list.add(lights_locs, loc.new(gamesworld, 3097, 111, 3956));
+list.add(lights_locs, loc.new(gamesworld, 3097, 111, 3957));
+//O2
+list.add(lights_locs, loc.new(gamesworld, 3092, 111, 3961));
+list.add(lights_locs, loc.new(gamesworld, 3093, 111, 3961));
+//Weapons
+list.add(lights_locs, loc.new(gamesworld, 3097, 111, 3948));
+list.add(lights_locs, loc.new(gamesworld, 3097, 111, 3949));
+list.add(lights_locs, loc.new(gamesworld, 3097, 111, 3951));
+list.add(lights_locs, loc.new(gamesworld, 3097, 111, 3952));
+//Hallway Weapons
+list.add(lights_locs, loc.new(gamesworld, 3092, 111, 3950));
+list.add(lights_locs, loc.new(gamesworld, 3093, 111, 3950));
+//Cafeteria
+list.add(lights_locs, loc.new(gamesworld, 3085, 112, 3944));
+list.add(lights_locs, loc.new(gamesworld, 3085, 112, 3945));
+list.add(lights_locs, loc.new(gamesworld, 3085, 112, 3950));
+list.add(lights_locs, loc.new(gamesworld, 3085, 112, 3951));
+list.add(lights_locs, loc.new(gamesworld, 3085, 112, 3956));
+list.add(lights_locs, loc.new(gamesworld, 3085, 112, 3957));
+list.add(lights_locs, loc.new(gamesworld, 3079, 112, 3944));
+list.add(lights_locs, loc.new(gamesworld, 3079, 112, 3945));
+list.add(lights_locs, loc.new(gamesworld, 3079, 112, 3950));
+list.add(lights_locs, loc.new(gamesworld, 3079, 112, 3951));
+list.add(lights_locs, loc.new(gamesworld, 3079, 112, 3956));
+list.add(lights_locs, loc.new(gamesworld, 3079, 112, 3957));
+list.add(lights_locs, loc.new(gamesworld, 3073, 112, 3944));
+list.add(lights_locs, loc.new(gamesworld, 3073, 112, 3945));
+list.add(lights_locs, loc.new(gamesworld, 3073, 112, 3950));
+list.add(lights_locs, loc.new(gamesworld, 3073, 112, 3951));
+list.add(lights_locs, loc.new(gamesworld, 3073, 112, 3956));
+list.add(lights_locs, loc.new(gamesworld, 3073, 112, 3957));
+//Hallway Admin
+list.add(lights_locs, loc.new(gamesworld, 3080, 111, 3966));
+list.add(lights_locs, loc.new(gamesworld, 3081, 111, 3966));
+//Admin
+list.add(lights_locs, loc.new(gamesworld, 3088, 111, 3966));
+list.add(lights_locs, loc.new(gamesworld, 3089, 111, 3966));
+list.add(lights_locs, loc.new(gamesworld, 3092, 111, 3966));
+list.add(lights_locs, loc.new(gamesworld, 3093, 111, 3966));
+list.add(lights_locs, loc.new(gamesworld, 3088, 111, 3969));
+list.add(lights_locs, loc.new(gamesworld, 3089, 111, 3969));
+list.add(lights_locs, loc.new(gamesworld, 3092, 111, 3969));
+list.add(lights_locs, loc.new(gamesworld, 3093, 111, 3969));
+list.add(lights_locs, loc.new(gamesworld, 3088, 111, 3972));
+list.add(lights_locs, loc.new(gamesworld, 3089, 111, 3972));
+list.add(lights_locs, loc.new(gamesworld, 3092, 111, 3972));
+list.add(lights_locs, loc.new(gamesworld, 3093, 111, 3972));
+//Hallway MedBay
+list.add(lights_locs, loc.new(gamesworld, 3055, 111, 3950));
+list.add(lights_locs, loc.new(gamesworld, 3056, 111, 3950));
+list.add(lights_locs, loc.new(gamesworld, 3060, 111, 3950));
+list.add(lights_locs, loc.new(gamesworld, 3061, 111, 3950));
+list.add(lights_locs, loc.new(gamesworld, 3065, 111, 3950));
+list.add(lights_locs, loc.new(gamesworld, 3066, 111, 3950));
+//MedBay
+list.add(lights_locs, loc.new(gamesworld, 3067, 111, 3956));
+list.add(lights_locs, loc.new(gamesworld, 3067, 111, 3957));
+list.add(lights_locs, loc.new(gamesworld, 3067, 111, 3960));
+list.add(lights_locs, loc.new(gamesworld, 3067, 111, 3961));
+list.add(lights_locs, loc.new(gamesworld, 3064, 111, 3956));
+list.add(lights_locs, loc.new(gamesworld, 3064, 111, 3957));
+list.add(lights_locs, loc.new(gamesworld, 3064, 111, 3960));
+list.add(lights_locs, loc.new(gamesworld, 3064, 111, 3961));
+list.add(lights_locs, loc.new(gamesworld, 3061, 111, 3956));
+list.add(lights_locs, loc.new(gamesworld, 3061, 111, 3957));
+list.add(lights_locs, loc.new(gamesworld, 3061, 111, 3960));
+list.add(lights_locs, loc.new(gamesworld, 3061, 111, 3961));
+
+cams_locs = set.new();
+set.add(cams_locs, loc.new(gamesworld, 3055, 109, 3957));
+set.add(cams_locs, loc.new(gamesworld, 3056, 109, 3957));
+set.add(cams_locs, loc.new(gamesworld, 3055, 110, 3957));
+set.add(cams_locs, loc.new(gamesworld, 3056, 110, 3957));
+
+cams_locs_tp = list.new();
+list.add(cams_locs_tp, loc.new(gamesworld, 3046, 109.2, 3964.7, -137, 73)); //Reactor
+list.add(cams_locs_tp, loc.new(gamesworld, 3063.3, 109.2, 3952, 180, 80)); //MedBay
+list.add(cams_locs_tp, loc.new(gamesworld, 3079.3, 109.2, 3968, 180, 75)); //Admin
+list.add(cams_locs_tp, loc.new(gamesworld, 3102.5, 109.2, 3963, 157, 70)); //Navigation
+
+cams_par_locs = list.new();
+list.add(cams_par_locs, loc.new(gamesworld, 3045.5, 110.5, 3962.5)); //Reactor
+list.add(cams_par_locs, loc.new(gamesworld, 3065.5, 110.5, 3949.5)); //MedBay
+list.add(cams_par_locs, loc.new(gamesworld, 3082.5, 110.5, 3965.5)); //Admin
+list.add(cams_par_locs, loc.new(gamesworld, 3103.5, 110.5, 3960.5)); //Navigation
+
+return;

+ 3 - 0
minigames/fastbridge/fastbridge.txt

@@ -72,6 +72,9 @@ if(countdown == 0) {
 
 @checkstart
 wait();
+if(!player.hasMinigameId(player, script_id)) {
+	goto("checkstart");
+}
 if(event == "block_click") {
 	cancel = true;
 	goto("checkstart");

+ 4 - 0
minigames/gamecenter.txt

@@ -47,6 +47,9 @@ minigame.addSign("rmmaploc2", false, loc.new(gamesworld, -411, 158, -43), "minig
 minigame.addSign("rmmaploc3", false, loc.new(gamesworld, -411, 158, -42), "minigames/ragemode/ragemode", "minigames/ragemode/rmmap3", false);
 minigame.addSign("rmmaploc4", false, loc.new(gamesworld, -411, 157, -44), "minigames/ragemode/ragemode", "minigames/ragemode/rmmap4", false);
 minigame.addSign("rmmaploc5", false, loc.new(gamesworld, -411, 157, -43), "minigames/ragemode/ragemode", "minigames/ragemode/rmmap5", false);
+minigame.addSign("sfsign1", true, loc.new(gamesworld, -398, 158, -47), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap1", true);
+minigame.addSign("sfsign2", true, loc.new(gamesworld, -398, 157, -47), "minigames/sammelfieber/sfranked", "minigames/sammelfieber/sfmap2", true);
+minigame.addSign("sfsign3", false, loc.new(gamesworld, -399, 158, -47), "minigames/sammelfieber/sammelfieber", "minigames/sammelfieber/sfmap3", false);
 minigame.addSign("buttonssign1", true, loc.new(gamesworld, -399, 158, -65), "minigames/buttons/buttons", "minigames/buttons/buttonsmap1", true);
 minigame.addSign("buttonssign2", true, loc.new(gamesworld, -398, 158, -65), "minigames/buttons/buttons", "minigames/buttons/buttonsmap2", true);
 minigame.addSign("spleefsign1", true, loc.new(gamesworld, -419, 156, -40), "minigames/spleef/spleef", "minigames/spleef/spleefmap1", false);
@@ -84,6 +87,7 @@ minigame.addSign("snowsign2", true, loc.new(gamesworld, -420, 158, -40), "miniga
 minigame.addSign("among_us_sign1", false, loc.new(gamesworld, -417, 157, -41), "minigames/among_us/among_us", "minigames/among_us/among_us_map1", false);
 minigame.addSign("jr_sign_4D_1", true, loc.new(gamesworld, -396, 156, -51), "minigames/jumpnrun/4d/4d_j_r_core", "minigames/jumpnrun/4d/4d_j_r_map1", true);
 minigame.addSign("jr_sign_4D_3", true, loc.new(gamesworld, -396, 156, -49), "minigames/jumpnrun/4d/4d_j_r_core", "minigames/jumpnrun/4d/4d_j_r_map3", true);
+minigame.addSign("s_sign_4D_1", true, loc.new(gamesworld, -396, 156, -50), "minigames/jumpnrun/4d/3d_shadow/shadow_jump_core", "minigames/jumpnrun/4d/3d_shadow/3d_s_map1", true);
 setScriptVar("gamesigns", gamesignsmap);
 
 amongus_head = read.item("{Count:1b,id:'minecraft:player_head',tag:{SkullOwner:{Id:[I;1974515746,1982350500,-1169583430,618614082],Properties:{textures:[{Signature:'RO9IGJ16KwIM79JS04eY82CRaWXDEkIqtz4xA8odVaP0Uk4Ox1sHRa69Hh1V2Zo5KRGJ1dDNECvf0XHmzFn9xcDwXmGsk9HC/t2Ndxe2jLebtJk7Ytl3/kFsNQgluS/TikWkF1MgPnucQ/M0ftggu4B1c6SE4Hat0HAIGuhgC8+2jwrTcgDxWeKy9uO4ibopjDR8+S89XzYAPqqqf2CZtZnUP28DNR7pa2uJIT5+/kP3y6euRN+VOOAdTKLUnlfiCZTOxanIkDnC20tVvQQz5lPIGH18rq+9YIF/jok0G3zqWXCgiWk24QogYQErRa9h040sg7ganrC5A5iHBwzHmvzN8k9T/XXu2gDyKih5mzb2EAOxV+pe9HfG1qIZHDhjH8+2vLsUzUDpUINQPorYJ+Qk/YnWPc38EwW4H6byneDGP1xSHmcd5SnTeGYuyXHgHs9I55u5wxTxhZref3/BkS4vIL7w5tkc4YWHOU5HbEmdillLnc0Pepk7JxYLBcnSCcRdhvRPZ3ajGEPKfDwx0RgeZsah4+MFOWi8lXOcpBwnaqpNUYRNgLAahMpuyAUUHZ17Urd6hEadbrWttDFuTO+oHBH45Ueu0vD4pgdXjP1SHZWyPvQVVKRph4eF7xVtobHGkQeJk0u7DFx2Yn+XiPmflQWBGa/oYfitYayO4Kw=',Value:'ewogICJ0aW1lc3RhbXAiIDogMTYwMzk4NTQxMjIxNCwKICAicHJvZmlsZUlkIiA6ICIwNjEzY2I1Y2QxYjg0M2JjYjI4OTk1NWU4N2QzMGEyYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJicmVhZGxvYWZzcyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9kNWEzNjhlNGI1MTc3NTljNTZhN2Q0ZDUxMWU1YmM5ZTNkOWVlNDA1Yzc5ZGFiNzZlY2IwMDdhYjBjYTg3ODc4IgogICAgfQogIH0KfQ=='}]}}}}");

+ 16 - 0
minigames/jumpnrun/4d/3d_shadow/3d_s_map1.txt

@@ -0,0 +1,16 @@
+gamesignloc = minigame.getSignLoc("s_sign_4D_1");
+
+games = world.getGames();
+Edge_1 = loc.new(games,-5, 88,-4017);//immer kleiner/negativer
+Edge_2 = loc.new(games, 4, 97,-4008);//als Edge_2
+Edge_3 = loc.new(games,-5, 99,-4017);//startpunkt zum pasten (negativster wert)
+
+Start_Pos = loc.new(games,-4.5, 99,-4016.5);
+
+loc1 = loc.new(games, 4, 107,-4008);
+loc2 = loc.new(games, 5, 108,-4007);
+
+Layer_amount = 10;
+Layer_difference_X = 0;
+Layer_difference_Y = 11;
+Layer_difference_Z = 0;

+ 366 - 0
minigames/jumpnrun/4d/3d_shadow/shadow_jump_core.txt

@@ -0,0 +1,366 @@
+sign.started(gamesignloc);
+event.load("block_click");
+event.load("entity_damage");
+event.load("player_move");
+event.load("player_quit");
+event.load("player_giveup");
+event.load("minigame_join");
+event.load("block_break");
+
+games = world.getGames();
+
+gamename = "§ashadowjump";
+
+maxplayers = 1;
+
+air_material = material.get("AIR");
+
+x1 = loc.getX(Edge_1);
+x2 = loc.getX(Edge_2);
+x3 = loc.getX(Edge_3);
+x4 = x3 + x2 - x1;
+Spawn_X = loc.getX(Start_Pos)-0.5;
+
+y1 = loc.getY(Edge_1);
+y2 = loc.getY(Edge_2);
+y3 = loc.getY(Edge_3);
+y4 = y3 + y2 - y1;
+Spawn_Y = loc.getY(Start_Pos);
+
+z1 = loc.getZ(Edge_1);
+z2 = loc.getZ(Edge_2);
+z3 = loc.getZ(Edge_3);
+z4 = z3 + z2 - z1;
+Spawn_Z = loc.getZ(Start_Pos)-0.5;
+
+//XYZ -> WYZ -> XYW -> XYZ
+Dimension_Blocks = list.new();
+
+event.addMoveData(loc1, loc2, -1, -1);
+
+currently_active_dimensions = 0; //0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+difference_array = array.new(6);
+difference_array[0] = Layer_amount;
+difference_array[1] = x2-x1;
+difference_array[2] = z2-z2;
+difference_array[3] = Layer_amount;
+difference_array[4] = x2-x1;
+difference_array[5] = z2-z2;
+
+@wait
+wait();
+
+if(event == "block_click"){
+	if(slot.isoffhand(hand)){
+		goto("wait");
+	}
+	if(action == "PHYSICAL"){
+		goto("wait");
+	}
+	player_hand = living.getHand(player);
+	if(!item.hasName(player_hand)){
+		goto("wait");
+	}
+	item_name = string.text(item.getName(player_hand));
+	if(item_name == "Turn down"){
+		goto("dimensional_turn_down");
+	}
+	if(item_name == "Turn up"){
+		goto("dimensional_turn_up");
+	}
+	goto("wait");
+}
+
+if(event == "entity_damage") {
+	if(!isPlayer(entity)) {
+		goto("wait");
+	}
+	player = entity;
+}
+
+if(!player.hasMinigameId(player, script_id)) {
+	goto("wait");
+}
+
+if(event == "block_break"){
+	cancel = true;
+	goto("wait");
+}
+
+if(event == "entity_damage") {
+	cancel = true;
+	goto("wait");
+}
+
+if(event == "minigame_join"){
+	msg.prefix(player, $gamename, "Game is Loading, please be patient.");
+	entity.teleport(player, Start_Pos);
+	player.clearInventory(player);
+	player_inv = player.getInv(player);
+	waitfor(10);
+	currently_active_dimensions = 0;
+	inv.setItem(player_inv, 0, item.custom.create("ARROW_LEFT",1,"Turn down","Interdimensionally"));
+	inv.setItem(player_inv, 1, item.custom.create("ARROW_RIGHT",1,"Turn up","Interdimensionally"));
+	dim_bossbar = boss.create("XYZ", "GREEN", "SOLID");
+	boss.addPlayer(dim_bossbar, player);
+	boss.setTitle(dim_bossbar, "XYZ");
+	c = 0;
+	for(layer_var = 0; layer_var < Layer_amount; layer_var++){
+		x_d = layer_var * Layer_difference_X;
+		y_d = layer_var * Layer_difference_Y;
+		z_d = layer_var * Layer_difference_Z;
+		for(x = x1 - x_d; x <= x2 - x_d; x++){
+			for(y = y1 - y_d; y <= y2 - y_d; y++){
+				for(z = z1 - z_d; z <= z2 - z_d; z++){
+					c++;
+					if(c > 500){
+						c = 0;
+						waitfor(2);
+					}
+					temp_block = block.get(loc.new(games, x, y, z));
+					if(!block.isAir(temp_block)){
+						D_Array = array.new(4);
+						D_Array[0] = x - x1 + x_d;//X
+						D_Array[1] = y - y1 + y_d;//Y
+						D_Array[2] = z - z1 + z_d;//Z
+						D_Array[3] = layer_var;//W
+						temp_array = array.new(2);
+						temp_array[0] = D_Array;
+						temp_array[1] = block.getType(temp_block);
+						list.add(Dimension_Blocks, temp_array);//Dimensional_Blocks -> Koords4D,Block
+					}
+				}
+			}
+		}
+	}
+	Active_Blocks = place_blocks(Dimension_Blocks);
+	msg.prefix(player, $gamename, "Game has loaded.");
+	//snuvi.debug(list.getSize(Dimension_Blocks));
+	goto("wait");
+}
+
+if(event == "player_move"){
+	//if(current_layer[1] == finish_layer){
+	game_stop("You did it!");
+	//}
+	goto("wait");
+}
+
+if(event == "player_quit"){
+	game_stop(null);
+}
+
+if(event == "player_giveup"){
+	game_stop("You left :(");
+}
+goto("wait");
+
+@dimensional_turn_up
+temp_player_loc = entity.getLocation(player);
+round_x = math.roundDown(loc.getX(temp_player_loc));
+round_y = math.roundDown(loc.getY(temp_player_loc));
+round_z = math.roundDown(loc.getZ(temp_player_loc));
+stood_on_block_loc = loc.new(loc.getWorld(temp_player_loc), round_x, round_y-1, round_z);
+if(block.getType == air_material){
+	goto("wait");
+}
+if(y3 > round_y){
+	goto("wait");
+}
+if(y3 == round_y){
+	if(currently_active_dimensions%2 == 1){
+		temp_layer = round_z-Spawn_Z;
+	}
+	else{
+		temp_layer = round_x-Spawn_X;
+	}
+}
+else{
+	if(map.contains(Active_Blocks, stood_on_block_loc)){
+		temp_layer = map.get(Active_Blocks, stood_on_block_loc);
+	}
+	else{
+		goto("wait");
+	}
+}
+if(currently_active_dimensions == 0){//XYZ to WYZ
+	currently_active_dimensions++;//0 = W, 1 = X, 2 = Z
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}elseif(currently_active_dimensions == 1){//WYZ to WYX
+	currently_active_dimensions++;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}elseif(currently_active_dimensions == 2){//WYX to ZYX
+	currently_active_dimensions++;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}elseif(currently_active_dimensions == 3){//ZYX to ZYW
+	currently_active_dimensions++;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}elseif(currently_active_dimensions == 4){//ZYW to XYW
+	currently_active_dimensions++;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}elseif(currently_active_dimensions == 5){//XYW to XYZ
+	currently_active_dimensions = 0;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}
+remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+Active_Blocks = place_blocks(Dimension_Blocks);
+dim.bossbar.update(currently_active_dimensions);
+goto("wait");
+
+@dimensional_turn_down
+temp_player_loc = entity.getLocation(player);
+round_x = math.roundDown(loc.getX(temp_player_loc));
+round_y = math.roundDown(loc.getY(temp_player_loc));
+round_z = math.roundDown(loc.getZ(temp_player_loc));
+stood_on_block_loc = loc.new(loc.getWorld(temp_player_loc), round_x, round_y-1, round_z);
+if(block.getType == air_material){
+	goto("wait");
+}
+if(y3 > round_y){
+	goto("wait");
+}
+if(y3 == round_y){
+	if(currently_active_dimensions%2 == 1){
+		temp_layer = round_x-Spawn_X;
+	}
+	else{
+		temp_layer = round_z-Spawn_Z;
+	}
+}
+else{
+	if(map.contains(Active_Blocks, stood_on_block_loc)){
+		temp_layer = map.get(Active_Blocks, stood_on_block_loc);
+	}
+	else{
+		goto("wait");
+	}
+}
+if(currently_active_dimensions == 0){//XYZ to XYW
+	currently_active_dimensions = 5;//0 = W, 1 = X, 2 = Z, 3 = W, 4 = X, 5 = Z
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}elseif(currently_active_dimensions == 1){//WYZ to XYZ
+	currently_active_dimensions--;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}elseif(currently_active_dimensions == 2){//WYX to WYZ
+	currently_active_dimensions--;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}elseif(currently_active_dimensions == 3){//ZYX to WYX
+	currently_active_dimensions--;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}elseif(currently_active_dimensions == 4){//ZYW to ZYX
+	currently_active_dimensions--;
+	entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
+}elseif(currently_active_dimensions == 5){//XYW to ZYW
+	currently_active_dimensions--;
+	entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
+}
+remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+Active_Blocks = place_blocks(Dimension_Blocks);
+dim.bossbar.update(currently_active_dimensions);
+goto("wait");
+
+function remove_blocks(){
+	c = 0;
+	iterator = map.iterator($Active_Blocks);
+	while(hasnext(iterator)){
+		if(c > 750){
+			c = 0;
+			waitfor(2);
+		}
+		element = next(iterator);
+		Block = block.get(map.getKey(element));
+		block.setMaterial(Block, $air_material, false);
+	}
+}
+
+function place_blocks(Dimension_Blocks){
+	c = 0;
+	temp_a_d = $currently_active_dimensions;
+	Active_Blocks = map.new();
+	for(a = 0; a < list.getSize(Dimension_Blocks); a++){
+		c++;
+		if(c > 750){
+			c = 0;
+			waitfor(2);
+		}
+		temp_array = list.getIndex(Dimension_Blocks, a);
+		D_Array = temp_array[0];//temp_array[1] ist der Block-Type, bei remove egal. D_Array[0] = x, D_Array[1] = y, D_Array[2] = z, D_Array[3] = w
+		//0 = XYZ, 1 = WYZ, 2 = XYW
+		//x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
+		X_place = 0;
+		Y_place = -1;
+		Z_place = 0;
+		if(temp_a_d == 0){//0 = XYZ
+			X_place = D_Array[0];
+			Y_place = D_Array[1];
+			Z_place = D_Array[2];
+			background_coordinate = D_Array[3];
+		}elseif(temp_a_d == 1){//1 = WYZ
+			X_place = D_Array[3];
+			Y_place = D_Array[1];
+			Z_place = D_Array[2];
+			background_coordinate = D_Array[0];
+		}elseif(temp_a_d == 2){//2 = WYX
+			X_place = D_Array[3];
+			Y_place = D_Array[1];
+			Z_place = D_Array[0];
+			background_coordinate = D_Array[2];
+		}elseif(temp_a_d == 3){//3 = ZYX
+			X_place = D_Array[2];
+			Y_place = D_Array[1];
+			Z_place = D_Array[0];
+			background_coordinate = D_Array[3];
+		}elseif(temp_a_d == 4){//4 = ZYW
+			X_place = D_Array[2];
+			Y_place = D_Array[1];
+			Z_place = D_Array[3];
+			background_coordinate = D_Array[0];
+		}elseif(temp_a_d == 5){//5 = XYW
+			X_place = D_Array[0];
+			Y_place = D_Array[1];
+			Z_place = D_Array[3];
+			background_coordinate = D_Array[2];
+		}
+		if(Y_place > -1){
+			X_place = X_place + $x3;
+			Y_place = Y_place + $y3;
+			Z_place = Z_place + $z3;
+			if(X_place < $x4+1 && Y_place < $y4+1 && Z_place < $z4+1){
+				temp_loc = loc.new($games,X_place,Y_place,Z_place);
+				block.setmaterial(block.get(temp_loc), temp_array[1]);
+				map.add(Active_Blocks, temp_loc, background_coordinate);
+			}
+		}
+	}
+	return(Active_Blocks);
+}
+
+function game_stop(message){
+	boss.removeAll($dim_bossbar);
+	remove_blocks();
+	if(message != null){
+		msg.prefix($player, $gamename, message);
+	}
+	script = script.getFromId($script_id);
+	minigame.kickPlayer(script, $player);
+	minigame.term(script, $gamesignloc);
+	term();
+}
+
+function dim.bossbar.update(currently_active_dimensions){//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
+	if(currently_active_dimensions == 0){
+		Dimensions_String = "XYZ";
+	}elseif(currently_active_dimensions == 1){
+		Dimensions_String = "WYZ";
+	}elseif(currently_active_dimensions == 2){
+		Dimensions_String = "WYX";
+	}elseif(currently_active_dimensions == 3){
+		Dimensions_String = "ZYX";
+	}elseif(currently_active_dimensions == 4){
+		Dimensions_String = "ZYW";
+	}elseif(currently_active_dimensions == 5){
+		Dimensions_String = "XYW";
+	}
+	boss_string = (string.concat(Dimensions_String));
+	boss.setTitle($dim_bossbar, boss_string);
+}

+ 4 - 0
minigames/jumpnrun/4d/4d_j_r_core.txt

@@ -161,6 +161,7 @@ if(event == "player_giveup"){
 goto("wait");
 
 @remove_layer
+temp_player_loc = entity.getLocation(player);
 if(current_layer[currently_active_dimensions] <= 0 || current_layer[currently_active_dimensions] > difference_array[currently_active_dimensions] - 1){
 	if(current_layer[currently_active_dimensions] == 0){
 		current_layer[currently_active_dimensions] = -1;
@@ -179,9 +180,11 @@ if(currently_active_dimensions < 3){
 }else{
 	current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions]; 
 }
+entity.teleport(player,loc.mod(temp_player_loc, 0, 0.1, 0));
 goto("wait");
 
 @add_layer
+temp_player_loc = entity.getLocation(player);
 if(current_layer[currently_active_dimensions] >= difference_array[currently_active_dimensions] - 1 || current_layer[currently_active_dimensions] < -1){
 	if(current_layer[currently_active_dimensions] == difference_array[currently_active_dimensions] - 1){
 		remove_blocks();
@@ -199,6 +202,7 @@ if(currently_active_dimensions < 3){
 }else{
 	current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions]; 
 }
+entity.teleport(player,loc.mod(temp_player_loc, 0, 0.1, 0));
 goto("wait");
 
 @dimensional_turn_up

+ 2 - 2
minigames/knockfight/knockfight.txt

@@ -99,7 +99,7 @@ if(damage_type == "outOfWorld") {
 	gosub("updatedisplay");
 	if(new_lifes == 0) {
 		minigame.speakAll(gamename, string.concat("§6", player_name, " §rhas been eliminated."));
-		money.addBoost(player, 32);
+		//money.addBoost(player, 32);
 		goto("leavegame");
 	}
 }
@@ -175,7 +175,7 @@ gosub("updatedisplay");
 showstats(player, false);
 if(list.getSize(player_list) < minplayers) {
 	winner = player.get(list.getIndex(player_list, 0));
-	money.addBoost(winner, 128);
+	//money.addBoost(winner, 128);
 	showstats(winner, true);
 	minigame.kickPlayer(script, winner);
 	minigame.term(script, gamesignloc);

+ 3 - 0
minigames/rebuild/rebuild.txt

@@ -87,6 +87,9 @@ if(countdown == 0) {
 
 @checkstart
 wait();
+if(!player.hasMinigameId(player, script_id)) {
+	goto("checkstart");
+}
 if(event == "block_click") {
 	cancel = true;
 	goto("checkstart");

+ 354 - 0
minigames/sammelfieber/sammelfieber.txt

@@ -0,0 +1,354 @@
+carved_pumpkin = read.item("carved_pumpkin");
+leaves_tag = block.getTag("minecraft:leaves");
+
+gosub("setstart");
+step = 1;
+gamename = "§aSammelfieber";
+no_core_reset = true;
+
+templist = list.new();
+list.add(templist, items1);
+list.add(templist, items2);
+list.add(templist, items3);
+list.add(templist, items4);
+for(h = 0; h < list.getSize(templist); h++) {
+	list = list.getIndex(templist, h);
+	for(i = 0; i < list.getSize(list); i++) {
+		item_type = list.getIndex(list, i);
+		mat = material.get(item_type);
+		if(mat == null) {
+			minigame.speakAll(gamename, item_type);
+			minigame.speakAll(gamename, "False Item found. Game termed. Inform marvinius.");
+			term();
+		}
+	}
+}
+goto("simplelobby");
+
+@specificLobbyHandling
+if(event == "minigame_join") {
+	if(init_signs == null) {
+		sign.setString(sign_min_loc, 2, string.number(min));
+		sign.setString(sign_amount_loc, 2, string.number(amount_nextitems));
+		init_signs = true;
+	}
+	return;
+}
+if(event == "block_click") {
+	if(hand == "offhand") {
+		return;
+	}
+	if(block_loc == plus_min_loc) {
+		if(min < max_mins) {
+			min++;
+		}
+		block.setSign(sign_min_loc, 2, string.number(min));
+		return;
+	}
+	if(block_loc == minus_min_loc) {
+		if(min > 1) {
+			min--;
+		}
+		block.setSign(sign_min_loc, 2, string.number(min));
+		return;
+	}
+	if(block_loc == plus_amount_loc) {
+		if(amount_nextitems < max_nextitems) {
+			amount_nextitems++;
+		}
+		block.setSign(sign_amount_loc, 2, string.number(amount_nextitems));
+		return;
+	}
+	if(block_loc == minus_amount_loc) {
+		if(amount_nextitems > 1) {
+			amount_nextitems--;
+		}
+		block.setSign(sign_amount_loc, 2, string.number(amount_nextitems));
+		return;
+	}
+}
+return;
+
+@finalstart
+player_list = minigame.getPlayers(script_id);
+minigame.speakAll(gamename, "The game has started.");
+
+whole_secs = min * 60 + sec;
+time_phase_1 = whole_secs / 4 * 3;
+time_phase_2 = whole_secs / 4 * 2;
+time_phase_3 = whole_secs / 4;
+
+timer_string = concat("§bTimer: §r", string.number(min), " min 0", string.number(sec), " s");
+
+iter = list.iterator(player_list);
+while(hasNext(iter)) {
+	player = player.get(next(iter));
+	entity.teleport(player, spawn_loc);
+	player.setGamemode(player, "survival");
+	player.setFly(player, false);
+	entity.cleareffects(player);
+	living.setHealth(player, 20);
+	player.setHunger(player, 20);
+	player.setSaturation(player, 5);
+	player.clearInventory(player);
+	display.reset(player);
+	display.add(player, 1, gamename);
+	display.add(player, 2, timer_string);
+	display.add(player, 3, "§bFound Items: §r0");
+	display.add(player, 4, "§bNext Items:"); 
+	entity.addEffect(player, "speed", min * 60 * 20, 1);
+}
+
+event.load("bucket_use");
+event.load("living_pickup");
+event.load("craft");
+
+farmtypes = list.new();
+list.add(farmtypes, "minecraft:carrots");
+list.add(farmtypes, "minecraft:melon_stem");
+list.add(farmtypes, "minecraft:potatoes");
+list.add(farmtypes, "minecraft:wheat");
+
+player_blocks = set.new();
+set.add(player_blocks, "minecraft:crafting_table");
+set.add(player_blocks, "minecraft:furnace");
+set.add(player_blocks, "minecraft:chest");
+	
+nextitems = list.new();
+founditems = list.new();
+player_blocks_placed = set.new();
+resetlist_type = list.new();
+resetlist_loc = list.new();
+resetlistdouble_type = list.new();
+resetlistdouble_loc = list.new();
+resetlistdouble_loc2 = list.new();
+
+sgoto(2, "tick");
+
+for(h = 0; h < amount_nextitems; h++) {
+	gosub("newitem");
+}
+
+minigame.speakAll(gamename, "Collect as many shown items as you can.");
+minigame.speakAll(gamename, "Drop and collect not counted items again.");
+
+@wait
+wait();
+if(event == "living_pre_hurt") {
+	if(!isPlayer(living_entity)) {
+		goto("wait");
+	}
+	player = living_entity;
+}
+if(player.hasMinigameId(player, script_id)) {
+	ignoreGoto(event);
+}
+goto("wait");
+
+@block_click
+if(action == "right") {
+	if(set.contains(player_blocks, block_type)) {
+		goto("wait");
+	}
+	if(hand == "MAIN_HAND") {
+		hand = "hand";
+	} else {
+		hand = "offhand";
+	}
+	item_type = item.getType(living.getEquip(player, hand));
+	if(set.contains(player_blocks, item_type)) {
+		goto("wait");
+	}
+	cancel = true;
+	if(block_type == "minecraft:pumpkin" && item_type == "minecraft:shears") {
+		item.drop(block_loc, carved_pumpkin);
+	}
+}
+goto("wait");
+
+@living_pre_hurt
+cancel = true;
+goto("wait");
+
+@block_break
+cancel = false;
+if(set.contains(player_blocks, block_type)) {
+	goto("wait");
+}
+if(block.hasTag(leaves_tag, block.get(block_loc))) {
+	split_list = text.split("_", block_type);
+	drop_type = concat(text.concatList(split_list, "_", 0, list.getSize(split_list) - 2), "_sapling");
+	item.drop(block_loc, read.item(drop_type));
+}
+if(block.isBisected(block)) {
+	if(block.getBisectedHalf(block) == "BOTTOM") {
+		loc = block_loc;
+		loc2 = loc.mod(block_loc, 0, 1, 0);
+	} else {
+		loc = loc.mod(block_loc, 0, -1, 0);
+		loc2 = block_loc;
+	}
+	list.add(resetlistdouble_type, block_type);
+	list.add(resetlistdouble_loc, loc);
+	list.add(resetlistdouble_loc2, loc2);
+	sgoto(2, "doubleresetblock");
+	goto("wait");
+}
+if(block_type == "minecraft:vine") {
+	cancel = true;
+	goto("wait");
+}
+if(block_type == "minecraft:sugar_cane") {
+	cancel = true;
+	item.drop(block_loc, read.item("sugar_cane"));
+	goto("wait");
+}
+if(block_type == "minecraft:farmland") {
+	cancel = true;
+	goto("wait");
+}
+list.add(resetlist_type, block_type);
+list.add(resetlist_loc, block_loc);
+sgoto(2, "resetblock");
+goto("wait");
+
+@bucket_use
+cancel = true;
+goto("wait");
+
+@block_place
+cancel = true;
+if(set.contains(player_blocks, block_type)) {
+	cancel = false;
+	set.add(player_blocks_placed, block_loc);
+}
+goto("wait");
+
+@doubleresetblock
+btype = list.getIndex(resetlistdouble_type, 0);
+loc = list.getIndex(resetlistdouble_loc, 0);
+loc2 = list.getIndex(resetlistdouble_loc2, 0);
+list.removeIndex(resetlistdouble_type, 0);
+list.removeIndex(resetlistdouble_loc, 0);
+list.removeIndex(resetlistdouble_loc2, 0);
+block.set(loc, concat(btype, "[half=lower]"));
+block.set(loc2, concat(btype, "[half=upper]"));
+goto("wait");
+
+@resetblock
+btype = list.getIndex(resetlist_type, 0);
+bloc = list.getIndex(resetlist_loc, 0);
+list.removeIndex(resetlist_type, 0);
+list.removeIndex(resetlist_loc, 0);
+if(list.contains(farmtypes, btype)) {
+	block.set(bloc, concat(btype, "[age=7]"));
+} else {
+	block.set(bloc, btype);
+}
+goto("wait");
+
+@tick
+if(sec == 0) {
+	sec = 59;
+	min--;
+	if(min == -1) {
+		goto("endgame");
+	}
+} else {
+	sec--;
+	if(sec < 10) {
+		minigame.displayAll(2, concat("§bTimer: §r", string.number(min), " min 0", string.number(sec), " s"));
+	} else {
+		minigame.displayAll(2, concat("§bTimer: §r", string.number(min), " min ", string.number(sec), " s"));
+	}
+	if(min == 0) {
+		if(sec == 30) {
+			minigame.speakAll(gamename, "30 seconds left!");
+		} elseif(sec == 10) {
+			minigame.speakAll(gamename, "10 seconds left!");
+		} elseif(sec == 5) {
+			minigame.speakAll(gamename, "5 seconds left!");
+		}
+	}
+}
+sgoto(20, "tick");
+goto("wait");
+
+@living_pickup
+item = item.entity.get(item_entity);
+@craft
+itype = item.getType(item);
+if(list.contains(nextitems, itype)) {
+	list.add(founditems, itype);
+	list.remove(nextitems, itype);
+	minigame.displayAll(3, concat("§bFound Items: §r", string.number(list.getSize(founditems))));
+	gosub("newitem");
+}
+goto("wait");
+
+@newitem
+atm_time = min * 60 + sec;
+if(atm_time < time_phase_1) {
+	if(step == 1) {
+		for(i = 0; i < list.getSize(items2); i++) {
+			list.add(items1, list.getIndex(items2, i));
+		}
+		step = 2;
+	}
+	if(atm_time < time_phase_2) {
+		if(step == 2) {
+			for(i = 0; i < list.getSize(items3); i++) {
+				list.add(items1, list.getIndex(items3, i));
+			}
+			step = 3;
+		}
+		if(atm_time < time_phase_3) {
+			if(step == 3) {
+				for(i = 0; i < list.getSize(items4); i++) {
+					list.add(items1, list.getIndex(items4, i));
+				}
+				step = 4;
+			}
+		}
+	}
+}
+items1_size = list.getSize(items1);
+if(items1_size == 0) {
+	return;
+}
+randomitemstring = list.getIndex(items1, math.random(0, items1_size - 1));
+list.remove(items1, randomitemstring);
+list.add(nextitems, randomitemstring);
+for(i = 0; i < list.getSize(nextitems); i++) {
+	type = list.getIndex(nextitems, i);
+	minigame.displayAll(5 + i, text.replace(type, "minecraft:", ""));
+}
+return;
+
+@player_logout
+@player_giveup
+script = script.getFromId(script_id);
+minigame.kickplayer(script, player);
+if(list.getSize(player_list) == 0) {
+	goto("endcore");
+}
+goto("wait");
+
+@endgame
+yetfound = list.getSize(founditems);
+script = script.getFromId(script_id);
+iter = list.iterator(player_list);
+while(hasNext(iter)) {
+	player = player.get(next(iter));
+	minigame.statsHeader(player, $gamename, "§e");
+	minigame.statsLine(player, "§e", "Found Items", string.number(yetfound));
+}
+@endcore
+iter = set.iterator(player_blocks_placed);
+while(hasNext(iter)) {
+	block.set(next(iter), "minecraft:air");
+}
+entity.removeAll("net.minecraft.entity.item.ItemEntity", middleloc, radius);
+minigame.kickAllPlayers(script);
+minigame.term(script, gamesignloc);
+term();

+ 329 - 0
minigames/sammelfieber/sammelfieberitems.txt

@@ -0,0 +1,329 @@
+items1 = list.new();
+list.add(items1, "wheat");
+list.add(items1, "bread");
+list.add(items1, "dirt");
+list.add(items1, "coarse_dirt");
+list.add(items1, "sand");
+list.add(items1, "red_sand");
+list.add(items1, "stone");
+list.add(items1, "granite");
+list.add(items1, "polished_granite");
+list.add(items1, "diorite");
+list.add(items1, "polished_diorite");
+list.add(items1, "andesite");
+list.add(items1, "polished_andesite");
+list.add(items1, "cobblestone");
+list.add(items1, "oak_planks");
+list.add(items1, "spruce_planks");
+list.add(items1, "birch_planks");
+list.add(items1, "jungle_planks");
+list.add(items1, "acacia_planks");
+list.add(items1, "dark_oak_planks");
+list.add(items1, "oak_sapling");
+list.add(items1, "spruce_sapling");
+list.add(items1, "birch_sapling");
+list.add(items1, "jungle_sapling");
+list.add(items1, "acacia_sapling");
+list.add(items1, "dark_oak_sapling");
+list.add(items1, "gravel");
+list.add(items1, "oak_log");
+list.add(items1, "spruce_log");
+list.add(items1, "birch_log");
+list.add(items1, "jungle_log");
+list.add(items1, "acacia_log");
+list.add(items1, "dark_oak_log");
+list.add(items1, "dandelion");
+list.add(items1, "poppy", "Mohn");
+list.add(items1, "blue_orchid");
+list.add(items1, "allium");
+list.add(items1, "azure_bluet");
+list.add(items1, "red_tulip");
+list.add(items1, "orange_tulip");
+list.add(items1, "white_tulip");
+list.add(items1, "pink_tulip");
+list.add(items1, "oxeye_daisy");
+list.add(items1, "sandstone");
+list.add(items1, "red_sandstone");
+list.add(items1, "grass");
+list.add(items1, "brown_mushroom");
+list.add(items1, "red_mushroom");
+list.add(items1, "crafting_table");
+list.add(items1, "furnace");
+list.add(items1, "cactus");
+list.add(items1, "pumpkin");
+list.add(items1, "stick");
+list.add(items1, "wooden_sword");
+list.add(items1, "wooden_shovel");
+list.add(items1, "wooden_pickaxe");
+list.add(items1, "stone_sword");
+list.add(items1, "stone_shovel");
+list.add(items1, "stone_pickaxe");
+list.add(items1, "stone_axe");
+list.add(items1, "red_dye");
+list.add(items1, "cocoa_beans");
+list.add(items1, "light_gray_dye");
+list.add(items1, "pink_dye");
+list.add(items1, "yellow_dye");
+list.add(items1, "light_blue_dye");
+list.add(items1, "magenta_dye");
+list.add(items1, "orange_dye");
+list.add(items1, "sugar");
+list.add(items1, "melon");
+list.add(items1, "melon_slice");
+list.add(items1, "pumpkin_seeds");
+list.add(items1, "melon_seeds");
+list.add(items1, "carrot");
+list.add(items1, "potato");
+list.add(items1, "poisonous_potato");
+list.add(items1, "oak_trapdoor");
+list.add(items1, "oak_button");
+list.add(items1, "sugar_cane");
+
+items2 = list.new();
+list.add(items2, "white_wool");
+list.add(items2, "bowl");
+list.add(items2, "paper");
+list.add(items2, "fishing_rod");
+list.add(items2, "iron_ore");
+list.add(items2, "iron_ingot");
+list.add(items2, "glass");
+list.add(items2, "chiseled_sandstone");
+list.add(items2, "cut_sandstone");
+list.add(items2, "smooth_sandstone");
+list.add(items2, "chiseled_red_sandstone");
+list.add(items2, "cut_red_sandstone");
+list.add(items2, "smooth_red_sandstone");
+list.add(items2, "red_sandstone_stairs");
+list.add(items2, "red_sandstone_slab");
+list.add(items2, "stone_slab");
+list.add(items2, "sandstone_slab");
+list.add(items2, "cobblestone_slab");
+list.add(items2, "stone_brick_slab");
+list.add(items2, "mossy_cobblestone");
+list.add(items2, "chest");
+list.add(items2, "ladder");
+list.add(items2, "lever");
+list.add(items2, "oak_pressure_plate");
+list.add(items2, "spruce_pressure_plate");
+list.add(items2, "birch_pressure_plate");
+list.add(items2, "jungle_pressure_plate");
+list.add(items2, "acacia_pressure_plate");
+list.add(items2, "dark_oak_pressure_plate");
+list.add(items2, "snow_block");
+list.add(items2, "snowball");
+list.add(items2, "bow");
+list.add(items2, "coal");
+list.add(items2, "charcoal");
+list.add(items2, "oak_stairs");
+list.add(items2, "spruce_stairs");
+list.add(items2, "birch_stairs");
+list.add(items2, "jungle_stairs");
+list.add(items2, "acacia_stairs");
+list.add(items2, "dark_oak_stairs");
+list.add(items2, "stone_stairs");
+list.add(items2, "cobblestone_stairs");
+list.add(items2, "clay_ball");
+list.add(items2, "oak_fence_gate");
+list.add(items2, "spruce_fence_gate");
+list.add(items2, "birch_fence_gate");
+list.add(items2, "jungle_fence_gate");
+list.add(items2, "dark_oak_fence_gate");
+list.add(items2, "acacia_fence_gate");
+list.add(items2, "oak_fence");
+list.add(items2, "spruce_fence");
+list.add(items2, "birch_fence");
+list.add(items2, "jungle_fence");
+list.add(items2, "dark_oak_fence");
+list.add(items2, "acacia_fence");
+list.add(items2, "orange_stained_glass");
+list.add(items2, "magenta_stained_glass");
+list.add(items2, "light_blue_stained_glass");
+list.add(items2, "yellow_stained_glass");
+list.add(items2, "pink_stained_glass");
+list.add(items2, "light_gray_stained_glass");
+list.add(items2, "brown_stained_glass");
+list.add(items2, "red_stained_glass");
+list.add(items2, "orange_stained_glass_pane");
+list.add(items2, "magenta_stained_glass_pane");
+list.add(items2, "light_blue_stained_glass_pane");
+list.add(items2, "yellow_stained_glass_pane");
+list.add(items2, "pink_stained_glass_pane");
+list.add(items2, "light_gray_stained_glass_pane");
+list.add(items2, "brown_stained_glass_pane");
+list.add(items2, "red_stained_glass_pane");
+list.add(items2, "white_carpet");
+list.add(items2, "orange_carpet");
+list.add(items2, "magenta_carpet");
+list.add(items2, "light_blue_carpet");
+list.add(items2, "yellow_carpet");
+list.add(items2, "pink_carpet");
+list.add(items2, "light_gray_carpet");
+list.add(items2, "brown_carpet");
+list.add(items2, "red_carpet");
+list.add(items2, "green_dye");
+list.add(items2, "stone_bricks");
+list.add(items2, "glass_pane");
+list.add(items2, "oak_slab");
+list.add(items2, "spruce_slab");
+list.add(items2, "birch_slab");
+list.add(items2, "jungle_slab");
+list.add(items2, "acacia_slab");
+list.add(items2, "dark_oak_slab");
+list.add(items2, "sandstone_stairs");
+list.add(items2, "cobblestone_wall");
+list.add(items2, "spruce_door");
+list.add(items2, "birch_door");
+list.add(items2, "jungle_door");
+list.add(items2, "acacia_door");
+list.add(items2, "dark_oak_door");
+list.add(items2, "red_bed");
+list.add(items2, "cookie");
+list.add(items2, "shears");
+list.add(items2, "string");
+list.add(items2, "wooden_hoe");
+list.add(items2, "stone_hoe");
+list.add(items2, "flint");
+list.add(items2, "painting");
+list.add(items2, "oak_sign");
+list.add(items2, "oak_door");
+list.add(items2, "oak_boat");
+list.add(items2, "shield");
+
+items3 = list.new();
+list.add(items3, "bucket");
+list.add(items3, "minecart");
+list.add(items3, "iron_door");
+list.add(items3, "redstone");
+list.add(items3, "coal_block");
+list.add(items3, "iron_block");
+list.add(items3, "gold_ore");
+list.add(items3, "gold_ingot");
+list.add(items3, "oak_leaves");
+list.add(items3, "spruce_leaves");
+list.add(items3, "birch_leaves");
+list.add(items3, "jungle_leaves");
+list.add(items3, "acacia_leaves");
+list.add(items3, "dark_oak_leaves");
+list.add(items3, "lapis_block");
+list.add(items3, "brick_slab");
+list.add(items3, "torch");
+list.add(items3, "stone_button");
+list.add(items3, "stone_pressure_plate");
+list.add(items3, "redstone_torch");
+list.add(items3, "iron_shovel");
+list.add(items3, "iron_pickaxe");
+list.add(items3, "iron_axe");
+list.add(items3, "iron_sword");
+list.add(items3, "flint_and_steel");
+list.add(items3, "diamond");
+list.add(items3, "clay");
+list.add(items3, "jack_o_lantern");
+list.add(items3, "green_stained_glass");
+list.add(items3, "green_stained_glass_pane");
+list.add(items3, "green_carpet");
+list.add(items3, "lapis_lazuli");
+list.add(items3, "purple_dye");
+list.add(items3, "cyan_dye");
+list.add(items3, "cracked_stone_bricks");
+list.add(items3, "chiseled_stone_bricks");
+list.add(items3, "iron_bars");
+list.add(items3, "tripwire_hook");
+list.add(items3, "mossy_cobblestone_wall");
+list.add(items3, "light_weighted_pressure_plate");
+list.add(items3, "iron_trapdoor");
+list.add(items3, "iron_helmet");
+list.add(items3, "iron_chestplate");
+list.add(items3, "iron_leggings");
+list.add(items3, "iron_boots");
+list.add(items3, "iron_hoe");
+list.add(items3, "mushroom_stew");
+list.add(items3, "bricks");
+list.add(items3, "gold_nugget");
+list.add(items3, "glass_bottle");
+list.add(items3, "cauldron");
+list.add(items3, "map");
+list.add(items3, "baked_potato");
+list.add(items3, "carrot_on_a_stick");
+list.add(items3, "armor_stand");
+list.add(items3, "flower_pot");
+list.add(items3, "orange_wool");
+list.add(items3, "magenta_wool");
+list.add(items3, "light_blue_wool");
+list.add(items3, "yellow_wool");
+list.add(items3, "pink_wool");
+list.add(items3, "light_gray_wool");
+list.add(items3, "brown_wool");
+list.add(items3, "green_wool");
+list.add(items3, "red_wool");
+
+items4 = list.new();
+list.add(items4, "glistering_melon_slice");
+list.add(items4, "chest_minecart");
+list.add(items4, "furnace_minecart");
+list.add(items4, "compass");
+list.add(items4, "golden_carrot");
+list.add(items4, "hopper_minecart");
+list.add(items4, "repeater");
+list.add(items4, "golden_helmet");
+list.add(items4, "golden_chestplate");
+list.add(items4, "golden_leggings");
+list.add(items4, "golden_boots");
+list.add(items4, "golden_sword");
+list.add(items4, "golden_shovel");
+list.add(items4, "golden_pickaxe");
+list.add(items4, "golden_axe");
+list.add(items4, "gold_block");
+list.add(items4, "dispenser");
+list.add(items4, "note_block");
+list.add(items4, "rail");
+list.add(items4, "powered_rail");
+list.add(items4, "detector_rail");
+list.add(items4, "piston");
+list.add(items4, "obsidian");
+list.add(items4, "diamond_block");
+list.add(items4, "cyan_wool");
+list.add(items4, "purple_wool");
+list.add(items4, "blue_wool");
+list.add(items4, "diamond_sword");
+list.add(items4, "diamond_shovel");
+list.add(items4, "diamond_pickaxe");
+list.add(items4, "diamond_axe");
+list.add(items4, "jukebox");
+list.add(items4, "cyan_stained_glass_pane");
+list.add(items4, "purple_stained_glass_pane");
+list.add(items4, "blue_stained_glass_pane");
+list.add(items4, "cyan_stained_glass");
+list.add(items4, "purple_stained_glass");
+list.add(items4, "blue_stained_glass");
+list.add(items4, "terracotta");
+list.add(items4, "orange_terracotta");
+list.add(items4, "magenta_terracotta");
+list.add(items4, "light_blue_terracotta");
+list.add(items4, "yellow_terracotta");
+list.add(items4, "pink_terracotta");
+list.add(items4, "light_gray_terracotta");
+list.add(items4, "cyan_terracotta");
+list.add(items4, "purple_terracotta");
+list.add(items4, "blue_terracotta");
+list.add(items4, "brown_terracotta");
+list.add(items4, "green_terracotta");
+list.add(items4, "red_terracotta");
+list.add(items4, "cyan_carpet");
+list.add(items4, "purple_carpet");
+list.add(items4, "blue_carpet");
+list.add(items4, "brick_stairs");
+list.add(items4, "stone_brick_stairs");
+list.add(items4, "emerald_block");
+list.add(items4, "anvil");
+list.add(items4, "trapped_chest");
+list.add(items4, "heavy_weighted_pressure_plate");
+list.add(items4, "redstone_block");
+list.add(items4, "hopper");
+list.add(items4, "activator_rail");
+list.add(items4, "dropper");
+list.add(items4, "diamond_helmet");
+list.add(items4, "diamond_chestplate");
+list.add(items4, "diamond_leggings");
+list.add(items4, "diamond_boots");
+list.add(items4, "diamond_hoe");
+list.add(items4, "golden_hoe");

+ 6 - 0
minigames/sammelfieber/sfmap1.txt

@@ -0,0 +1,6 @@
+gamesworld = world.getGames();
+spawn_loc = loc.new(gamesworld, -7897, 63, -111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign1");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, -111);
+maxplayers = 1;

+ 6 - 0
minigames/sammelfieber/sfmap2.txt

@@ -0,0 +1,6 @@
+gamesworld = world.getGames();
+spawn_loc = loc.new(gamesworld, -7897, 63, 889, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign2");
+radius = 200;
+middleloc = loc.new(gamesworld, -7897, 63, 889);
+maxplayers = 1;

+ 23 - 0
minigames/sammelfieber/sfmap3.txt

@@ -0,0 +1,23 @@
+specific_lobby_handling = true;
+gamesworld = world.getGames();
+spawn_loc = loc.new(gamesworld, -6897, 63, -111, -90, 0);
+gamesignloc = minigame.getSignLoc("sfsign3");
+radius = 200;
+middleloc = loc.new(gamesworld, -6897, 63, -111);
+mapname = "Free Settings";
+lobbyspawnloc = loc.new(gamesworld, 1013.5, 85, 991.5, 180, 0.0001);
+minplayers = 1;
+maxplayers = 4;
+min = 16;
+sec = 0;
+max_mins = 30;
+amount_nextitems = 3;
+max_nextitems = 10;
+
+plus_min_loc = loc.new(gamesworld, 1012, 86, 985);
+minus_min_loc = loc.new(gamesworld, 1012, 84, 985);
+sign_min_loc = loc.new(gamesworld, 1012, 85, 985);
+
+plus_amount_loc = loc.new(gamesworld, 1013, 86, 985);
+minus_amount_loc = loc.new(gamesworld, 1013, 84, 985);
+sign_amount_loc = loc.new(gamesworld, 1013, 85, 985);

+ 361 - 0
minigames/sammelfieber/sfranked.txt

@@ -0,0 +1,361 @@
+pumpkin_mat = material.get("pumpkin");
+shears_mat = material.get("shears");
+vine_mat = material.get("vine");
+sugar_cane_mat = material.get("sugar_cane");
+farmland_mat = material.get("farmland");
+carved_pumpkin = item.new(material.get("carved_pumpkin"));
+sugar_cane = item.new(sugar_cane_mat);
+
+gosub("setstart");
+step = 1;
+gamename = "§aSammelfieber";
+rankingtable = "sfsingle";
+game_short = "sfsingle";
+sign.started(gamesignloc);
+
+event.load("bucket_use");
+event.load("living_pickup");
+event.load("craft");
+
+min = 16;
+sec = 0;
+timer_string = string.concat("§bTimer: §r", string.number(min), " min 0", string.number(sec), " s");
+
+farmtypes = list.new();
+list.add(farmtypes, material.get("minecraft:carrots"));
+list.add(farmtypes, material.get("minecraft:melon_stem"));
+list.add(farmtypes, material.get("minecraft:potatoes"));
+list.add(farmtypes, material.get("minecraft:wheat"));
+
+player_blocks = set.new();
+set.add(player_blocks, material.get("minecraft:crafting_table"));
+set.add(player_blocks, material.get("minecraft:furnace"));
+set.add(player_blocks, material.get("minecraft:chest"));
+
+saplings = map.new();
+map.add(saplings, material.get("oak_leaves"), item.new(material.get("oak_sapling")));
+map.add(saplings, material.get("spruce_leaves"), item.new(material.get("spruce_sapling")));
+map.add(saplings, material.get("birch_leaves"), item.new(material.get("birch_sapling")));
+map.add(saplings, material.get("jungle_leaves"), item.new(material.get("jungle_sapling")));
+map.add(saplings, material.get("acacia_leaves"), item.new(material.get("acacia_sapling")));
+map.add(saplings, material.get("dark_oak_leaves"), item.new(material.get("dark_oak_sapling")));
+
+nextitems = list.new();
+founditems = list.new();
+player_blocks_placed = set.new();
+resetlist_type = list.new();
+resetlist_block = list.new();
+resetlist_data = list.new();
+resetlist_block_2 = list.new();
+resetlistdouble_data = list.new();
+resetlistdouble_data_2 = list.new();
+resetlistdouble_block = list.new();
+resetlistdouble_block2 = list.new();
+
+sgoto(2, "tick");
+
+minigame.speakAll(gamename, "Collect as many shown items as you can.");
+minigame.speakAll(gamename, "Drop and collect not counted items again.");
+
+@wait
+wait();
+if(event == "living_pickup") {
+	if(!isPlayer(living_entity)) {
+		goto("wait");
+	}
+	player = living_entity;
+}
+if(event == "entity_damage") {
+	if(!isPlayer(entity)) {
+		goto("wait");
+	}
+	player = entity;
+}
+if(player.hasMinigameId(player, script_id)) {
+	ignoreGoto(event);
+}
+goto("wait");
+
+@minigame_join
+templist = list.new();
+list.add(templist, items1);
+list.add(templist, items2);
+list.add(templist, items3);
+list.add(templist, items4);
+for(h = 0; h < list.getSize(templist); h++) {
+	list = list.getIndex(templist, h);
+	for(i = 0; i < list.getSize(list); i++) {
+		item_type = list.getIndex(list, i);
+		mat = material.get(item_type);
+		if(mat == null) {
+			minigame.speakAll(gamename, item_type);
+			minigame.speakAll(gamename, "False Item found. Game termed. Inform marvinius.");
+			term();
+		}
+	}
+}
+
+player_list = minigame.getPlayers(script_id);
+minigame.speakAll(gamename, "The game has started.");
+
+iter = iterator(player_list);
+while(hasNext(iter)) {
+	player = player.get(next(iter));
+	entity.teleport(player, spawn_loc);
+	player.setGamemode(player, "SURVIVAL");
+	player.setFly(player, false);
+	living.cleareffects(player);
+	living.setHealth(player, 20);
+	player.setHunger(player, 20);
+	player.setSaturation(player, 5);
+	player.clearInventory(player);
+	sb.add(player, 99, gamename);
+	sb.add(player, 98, timer_string);
+	sb.add(player, 97, "§bFound Items: §r0");
+	sb.add(player, 96, "§bNext Items:"); 
+	sb.add(player, 92, sb.getSpacer());
+	living.addEffect(player, "SPEED", 19200, 1);
+}
+
+for(h = 0; h < 3; h++) {
+	gosub("newitem");
+}
+goto("wait");
+
+@block_click
+if(action == "RIGHT_CLICK_BLOCK") {
+	block_type = block.getType(block);
+	if(set.contains(player_blocks, block_type)) {
+		goto("wait");
+	}
+	if(slot.isHand(hand)) {
+		item_type = item.getType(living.getHand(player));
+	} else {
+		item_type = item.getType(living.getOffHand(player));
+	}
+	if(set.contains(player_blocks, item_type)) {
+		goto("wait");
+	}
+	cancel = true;
+	if(block_type == pumpkin_mat && item_type == shears_mat) {
+		block_loc = block.getLocation(block);
+		item.drop(block_loc, carved_pumpkin);
+	}
+}
+goto("wait");
+
+@entity_damage
+if(isPlayer(entity)) {
+	cancel = true;
+}
+goto("wait");
+
+@block_break
+cancel = false;
+block_type = block.getType(block);
+if(set.contains(player_blocks, block_type)) {
+	goto("wait");
+}
+block_loc = block.getLocation(block);
+if(block.isLeaves(block)) {
+	sapling = map.get(saplings, block_type);
+	item.drop(sapling, block_loc);
+}
+if(block.isBisected(block)) {
+	if(block.getBisectedHalf(block) == "BOTTOM") {
+		b = block;
+		b2 = block.mod(block, 0, 1, 0);
+	} else {
+		b = block.mod(block, 0, -1, 0);
+		b2 = block;
+	}
+	list.add(resetlistdouble_data, block.getData(b));
+	list.add(resetlistdouble_data_2, block.getData(b2));
+	list.add(resetlistdouble_block, b);
+	list.add(resetlistdouble_block2, b2);
+	sgoto(2, "doubleresetblock");
+	goto("wait");
+}
+if(block_type == vine_mat) {
+	cancel = true;
+	goto("wait");
+}
+if(block_type == sugar_cane_mat) {
+	cancel = true;
+	item.drop(sugar_cane, block_loc);
+	goto("wait");
+}
+if(block_type == farmland_mat) {
+	cancel = true;
+	goto("wait");
+}
+if(list.contains(farmtypes, block_type)) {
+	list.add(resetlist_data, block.getData(block));
+	list.add(resetlist_block_2, block);
+	sgoto(2, "resetblock_data");
+} else {
+	list.add(resetlist_type, block_type);
+	list.add(resetlist_block, block);
+	sgoto(2, "resetblock");
+}
+goto("wait");
+
+@bucket_use
+cancel = true;
+goto("wait");
+
+@block_place
+cancel = true;
+block_type = block.getType(block);
+if(set.contains(player_blocks, block_type)) {
+	cancel = false;
+	set.add(player_blocks_placed, block);
+}
+goto("wait");
+
+@doubleresetblock
+bdata = list.getIndex(resetlistdouble_data, 0);
+bdata2 = list.getIndex(resetlistdouble_data_2, 0);
+b = list.getIndex(resetlistdouble_block, 0);
+b2 = list.getIndex(resetlistdouble_block2, 0);
+list.removeIndex(resetlistdouble_data, 0);
+list.removeIndex(resetlistdouble_data_2, 0);
+list.removeIndex(resetlistdouble_block, 0);
+list.removeIndex(resetlistdouble_block2, 0);
+block.setData(b, bdata);
+block.setData(b2, bdata2);
+goto("wait");
+
+@resetblock
+btype = list.getIndex(resetlist_type, 0);
+b = list.getIndex(resetlist_block, 0);
+list.removeIndex(resetlist_type, 0);
+list.removeIndex(resetlist_block, 0);
+if(list.contains(farmtypes, btype)) {
+	block.setData(b, read.blockData(string.replace(string.blockData(btype), "age=.", "age=7")));
+} else {
+	block.setMaterial(b, btype);
+}
+goto("wait");
+
+@resetblock_data
+bdata = list.getIndex(resetlist_data, 0);
+b = list.getIndex(resetlist_block_2, 0);
+list.removeIndex(resetlist_data, 0);
+list.removeIndex(resetlist_block_2, 0);
+block.setData(b, read.blockData(string.replace(string.blockData(bdata), "age=.", "age=7")));
+goto("wait");
+
+@tick
+if(sec == 0) {
+	sec = 59;
+	min--;
+	if(min == -1) {
+		goto("endgame");
+	}
+} else {
+	sec--;
+	if(sec < 10) {
+		minigame.displayAll(98, string.concat("§bTimer: §r", string.number(min), " min 0", string.number(sec), " s"));
+	} else {
+		minigame.displayAll(98, string.concat("§bTimer: §r", string.number(min), " min ", string.number(sec), " s"));
+	}
+	if(min == 0) {
+		if(sec == 30) {
+			minigame.speakAll(gamename, "30 seconds left!");
+		} elseif(sec == 10) {
+			minigame.speakAll(gamename, "10 seconds left!");
+		} elseif(sec == 5) {
+			minigame.speakAll(gamename, "5 seconds left!");
+		}
+	}
+}
+sgoto(20, "tick");
+goto("wait");
+
+@living_pickup
+item = item.entity.get(item_entity);
+@craft
+itype = item.getType(item);
+if(list.contains(nextitems, itype)) {
+	list.add(founditems, itype);
+	list.remove(nextitems, itype);
+	minigame.displayAll(97, string.concat("§bFound Items: §r", string.number(list.getSize(founditems))));
+	gosub("newitem");
+}
+goto("wait");
+
+@newitem
+if(min < 12) {
+	if(step == 1) {
+		for(i = 0; i < list.getSize(items2); i++) {
+			list.add(items1, list.getIndex(items2, i));
+		}
+		step = 2;
+	}
+	if(min < 8) {
+		if(step == 2) {
+			for(i = 0; i < list.getSize(items3); i++) {
+				list.add(items1, list.getIndex(items3, i));
+			}
+			step = 3;
+		}
+		if(min < 4) {
+			if(step == 3) {
+				for(i = 0; i < list.getSize(items4); i++) {
+					list.add(items1, list.getIndex(items4, i));
+				}
+				step = 4;
+			}
+		}
+	}
+}
+
+items1_size = list.getSize(items1);
+if(items1_size == 0) {
+	return;
+}
+randomitemstring = list.getIndex(items1, math.random(0, items1_size - 1));
+list.remove(items1, randomitemstring);
+list.add(nextitems, material.get(randomitemstring));
+for(i = 0; i < list.getSize(nextitems); i++) {
+	type_string = string(list.getIndex(nextitems, i));
+	minigame.displayAll(95 - i, type_string);
+}
+return;
+
+@endgame
+yetfound = list.getSize(founditems);
+iter = iterator(player_list);
+while(hasNext(iter)) {
+	player = player.get(next(iter));
+	player_id = player.getId(player);
+	playedgames = minigame.getPlayed(player_id, game_short) + 1;
+	minigame.setPlayed(player_id, game_short, playedgames);
+	last_record = ranking.getPoints(rankingtable, player_id);
+	if(last_record < yetfound) {
+		diff = yetfound - last_record;
+		last_record = yetfound;
+	}
+	ranking.setPoints(rankingtable, player_id, last_record);
+	
+	minigame.statsHeader(player, $gamename, "§e");
+	minigame.statsLine(player, "§e", "Found Items", string.number(yetfound));
+	if(diff != null) {
+		msg(player, text.new(string.concat(" §e- §rBeat own record by §e", string.number(diff))));
+	}
+	minigame.statsLine(player, "§e", "Played games", string.number(playedgames));
+	//money.addBoost(player, yetfound / 2);
+}
+@player_logout
+@player_giveup
+script = script.getFromId(script_id);
+iter = iterator(player_blocks_placed);
+air = material.getAir();
+while(hasNext(iter)) {
+	block.setMaterial(next(iter), air);
+}
+minigame.clearItems(middleloc, radius);
+minigame.kickplayer(script, player);
+minigame.term(script, gamesignloc);
+term();

+ 11 - 39
minigames/snowfight/snowfight.txt

@@ -39,8 +39,8 @@ map.add(team_lists, 3, list.new());
 players = map.new(); //Alle Spieler (key) des Spiels und deren Teamzugehörigkeit (value)
 allteams = list.new(); //Alle Teams, die noch im Spiel sind
 waiters = list.new(); //Spieler in der Lobby ohne Teamzugehörigkeit
+spawn_prot = list.new();
 lifes = map.new();
-nerf_map = map.new();
 kills_map = map.new();
 deaths_map = map.new();
 cooldown_map = map.new();
@@ -53,7 +53,6 @@ goto("simplelobby");
 player_name = player.getName(player);
 if(event == "minigame_join") {
 	list.add(waiters, player_name);
-	map.add(nerf_map, player_name, 0);
 	map.add(kills_map, player_name, 0);
 	map.add(deaths_map, player_name, 0);
 	living.setHealth(player, 20);
@@ -192,43 +191,6 @@ if(player.hasMinigameId(player, script_id)) {
 }
 goto("checkgame");
 
-@block_click
-if(slot.isOffHand(hand)) {
-	goto("checkgame");
-}
-if(action != "RIGHT_CLICK_AIR") {
-	goto("checkgame");
-}
-player_item_type = item.getType(living.getHand(player));
-if(player_item_type == snowball) {
-	for(i = 0; i < list.getSize(allteams); i++) {
-		temp_team = list.getIndex(allteams, i);
-		teamlist = map.get(team_lists, temp_team);
-		if(!list.contains(teamlist, player_name)) {
-			loc = map.get(spawnlocs, i);
-			if(loc.distance(loc, entity.getLocation(player)) < nerfradius) {
-				team = map.get(players, player_name);
-				living.addEffect(player, "WITHER", 200, 8);
-				living.addEffect(player, "SLOW", 100, 3);
-				nerf_counter = map.get(nerf_map, player_name);
-				map.add(nerf_map, player_name, nerf_counter + 1);
-				if(nerf_counter == 10) {
-					map.add(nerf_map, player_name, 0);
-					player.clearInventory(player);
-					living.cleareffects(player);
-					giveSnowballs(player);
-					entity.teleport(player, map.get(spawnlocs, team));
-					map.add(deaths_map, player_name, map.get(deaths_map, player_name) + 1);
-					new_lifes = map.get(lifes, team) - 1;
-					map.add(lifes, team, new_lifes);
-					minigame.displayAll(98 - team, string.concat(map.get(teamcolortext2, team), " Lifes: ", string.number(new_lifes)));
-				}
-			}
-		}
-	}
-}
-goto("checkgame");
-
 @projectile_hit
 if(entity_hit != null) {
 	if(!isPlayer(entity_hit)) {
@@ -243,6 +205,10 @@ if(entity_hit != null) {
 		minigame.msgAll(string.concat("Illegal Player ", entity_hit_name));
 		goto("checkgame");
 	}
+	player_id = player.getId(entity_hit);
+	if(list.contains(spawn_prot, player_id)) {
+		goto("checkgame");
+	}
 	team = map.get(players, player_name);
 	hit_team = map.get(players, entity_hit_name);
 	if(team == hit_team) {
@@ -260,9 +226,15 @@ if(entity_hit != null) {
 	if(new_lifes == 0) {
 		colorgameover(hit_team);
 	}
+	list.add(spawn_prot, player_id);
+	sgoto(80, "remove_prot");
 }	
 goto("checkgame");
 
+@remove_prot
+list.removeIndex(spawn_prot, 0);
+goto("checkgame");
+
 @player_post_respawn
 team = map.get(players, player_name);
 loc = map.get(spawnlocs, team);

+ 0 - 1
minigames/snowfight/snowmap1.txt

@@ -8,7 +8,6 @@ gamesworld = world.getGames();
 lobbyspawnloc = loc.new(gamesworld, -1224, 43, -995, 90, 0);
 middleloc = loc.new(gamesworld, -1205, 41, -979);
 radius = 200;
-nerfradius = 8;
 
 joinblocks = list.new(); //Liste der Blöcke, um einem Team zu joinen
 list.add(joinblocks, loc.new(gamesworld, -1229, 42, -992));

+ 0 - 1
minigames/snowfight/snowmap2.txt

@@ -8,7 +8,6 @@ gamesworld = world.getGames();
 lobbyspawnloc = loc.new(gamesworld, -2029.5, 116, -4004.5, 180, 0.0001);
 middleloc = loc.new(gamesworld, -2030, 100, -3954);
 radius = 200;
-nerfradius = 8;
 
 joinblocks = list.new(); //Liste der Blöcke, um einem Team zu joinen
 list.add(joinblocks, loc.new(gamesworld, -2033, 114, -4010));

+ 18 - 0
ranks.txt

@@ -0,0 +1,18 @@
+event.load("player_item_held");
+
+//du hast es gefunden
+
+@wait
+wait();
+player_name = player.getName(player);
+if(player_name == "marvinius"){
+	if(math.random(0,10)>0){
+		goto("wait");
+	}
+	inv = player.getInv(player);
+	item1 = inv.getItem(inv, from);
+	item2 = inv.getItem(inv, to);
+	inv.setItem(inv, to, item1);
+	inv.setItem(inv, from, item2);
+}
+goto("wait");

+ 4 - 5
startscript.txt

@@ -29,10 +29,9 @@ script.startNamed("Creative", "utils/u_error", "system/creative", "utils/u_gener
 script.startNamed("Copyisland", "system/copyisland", "utils/u_general");
 script.startNamed("Damage", "utils/u_error", "system/damage", "utils/u_general");
 script.startNamed("Doors", "utils/u_error", "system/doors", "utils/u_general");
-//script.startNamed("Harvest", "utils/u_error", "survival/harvest", "utils/u_general");
 script.startNamed("Herobrine", "utils/u_error", "survival/herobrine", "utils/u_general");
 script.startNamed("Playtime", "system/playtime", "utils/u_general");
-//script.startNamed("Gemstones", "utils/u_error", "survival/gemstones", "utils/u_general");
+script.startNamed("Gemstones", "utils/u_error", "survival/gemstones", "utils/u_general");
 script.startNamed("Sitting", "utils/u_error", "system/sitting", "utils/u_general");
 script.startNamed("Ticket", "utils/u_error", "system/tickets", "utils/u_general");
 script.startNamed("Mails", "utils/u_error", "system/mailsystem", "utils/u_general");
@@ -41,15 +40,15 @@ script.startNamed("ChestShops", "utils/u_error", "system/chestshops", "utils/u_g
 script.startNamed("Humans", "utils/u_error", "system/humans", "utils/u_general");
 script.startNamed("Survival", "utils/u_error", "survival/survival", "utils/u_general");
 script.startNamed("Teleporter", "utils/u_error", "survival/teleporter", "utils/u_general");
-//script.startNamed("Skills", "utils/u_error", "survival/skills", "utils/u_general", "utils/u_skills");
+script.startNamed("Skills", "utils/u_error", "survival/skills", "utils/u_general", "utils/u_skills", "utils/u_quest");
 script.startNamed("Gamecenter", "utils/u_error", "minigames/gamecenter", "utils/u_general", "utils/u_games");
 script.startNamed("Ranklist", "utils/u_error", "system/ranklist", "utils/u_general", "utils/u_games");
 //script.startNamed("Story", "utils/u_error", "story/story", "utils/u_general");
-//script.startNamed("QuestsAdmont", "utils/u_error", "story/admont/core", "utils/u_general", "utils/u_quest");
+script.startNamed("QuestsAdmont", "utils/u_error", "story/admont/core", "utils/u_general", "utils/u_quest");
 //script.startNamed("QuestsSchiffbruch", "utils/u_error", "story/schiffbruch/core", "utils/u_general", "utils/u_quest");
 //script.startNamed("Workberries", "system/workberries");
 //script.startNamed("Recipes", "survival/recipes");
-//script.startNamed("Timber", "utils/u_error", "survival/timber", "utils/u_general");
+script.startNamed("Timber", "utils/u_error", "survival/timber", "utils/u_general", "utils/u_skills");
 //script.startNamed("Loom", "utils/u_error", "survival/loom", "utils/u_general");
 //script.startNamed("Lectern", "utils/u_error", "survival/lectern", "utils/u_general");
 script.startNamed("Mobarena", "utils/u_error", "survival/mobarena", "utils/u_general");

+ 0 - 103
story/admont/albtraum.txt

@@ -1,103 +0,0 @@
-event.load("quest_start");
-event.load("quest_term");
-event.load("custom_command");
-event.load("living_death");
-event.load("living_pre_hurt");
-
-world = world.getStory();
-mob_loc_1 = loc.new(world, -1633.5, 70, -80.5);
-mob_loc_2 = loc.new(world, -1635.5, 70, -82.5);
-
-zombie_count = 0;
-stage = 0;
-all_stages = 2;
-quest_name = "Albtraum";
-
-@wait
-wait();
-if(event == "living_pre_hurt") {
-	player = player.getFromDamageSource(damage_source);
-	if(player == null) {
-		goto("wait");
-	}
-}
-if(event == "living_death") {
-	if(isPlayer(living_entity)) {
-		if(zombie == 0) {
-			entity.remove(zombie1);
-			entity.remove(zombie2);
-			entity.remove(zombie3);
-			entity.remove(zombie4);
-			entity.remove(zombie5);
-		}	
-		player = living_entity;
-		msg.prefix(player, "§dQuest", "Quest terminiert.");
-		quest.term(script, player);
-		goto("wait");
-	}
-	player = player.getFromDamageSource(damage_source);
-	if(player == null) {
-		goto("wait");
-	}
-}
-if(!player.isQuester(player, script)) {
-	goto("wait");
-}
-if(event == "quest_term") {
-	entity.remove(zombie1);
-	entity.remove(zombie2);
-	entity.remove(zombie3);
-	entity.remove(zombie4);
-	entity.remove(zombie5);
-	wait(); //Script wird von außen terminiert
-}
-if(event == "quest_start") {
-	quest.display(player, quest_name, stage, all_stages);
-	msg.prefix(player, "§dHerbert", "MONSTER! GANZ VIELE MONSTER");
-	scheduler.msgPrefix(30, player, "§dHerbert", "ICH HABE SIE MIT MEINEN EIGENEN AUGEN GESEHEN!");
-	scheduler.msg(60, player, "§dAntwortmöglichkeiten:");
-	scheduler.msg(60, player, text.click("[§dA§r] §eJetzt mal ruhig, was ist denn los?", "/questanswer A"));
-	scheduler.msg(60, player, text.click("[§dB§r] §eWie? Wo? Was?", "/questanswer B"));
-	goto("wait");
-}
-
-label = concat("stage", text.number(stage));
-goto(label);
-
-@stage0
-if(event == "custom_command" && command == "questanswer") {
-	option = list.getIndex(args, 0);
-	if(option == "A") {
-		stage.increase(player);
-		msg.prefix(player, "§dHerbert", "Oh `tschuldigung, ich wollte nicht schreien. Ich bin so schnell ich konnte weggerannt. Vor…vor den M…Monstern.");
-		scheduler.msgprefix(30, player, "§dHerbert", "Sie waren in der Windmühle, bitte unternimm etwas!");
-	}
-	if(option == "B") {
-		stage.increase(player);
-		msg.prefix(player, "§dHerbert", "GRUSELIG! IN DER WINDMÜHLE! MONSTER! HILFE!");
-	}
-	if(option == "A" || option == "B"){
-		player.giveSingleItem(player, read.item("minecraft:stone_sword"), false);
-		zombie1 = entity.spawn("zombie", mob_loc_1);
-		zombie2 = entity.spawn("zombie", mob_loc_1);
-		zombie3 = entity.spawn("zombie", mob_loc_2);
-		zombie4 = entity.spawn("zombie", mob_loc_2);
-		zombie5 = entity.spawn("zombie", mob_loc_2);
-	}
-}
-goto("wait");
-
-@stage1
-if(event == "living_death"){
-	entity_type = entity.getType(living_entity);
-	if(entity_type == "zombie") {
-		zombie_count++;
-		if(zombie_count == 5) {
-			msg.prefix(player, "§dHerbert", "Du bist meine Rettung.");
-			msg(player, "§dQuest abgeschlossen. Belohnung: 22 Snuvis!");
-			money.addBoost(player, 22);
-			quest.finish(script, player);
-		}
-	}
-}
-goto("wait");

+ 46 - 0
story/admont/anna_in_trouble.txt

@@ -0,0 +1,46 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("living_death");
+
+stage = 0;
+all_stages = 1;
+quest_name = "Anna in Trouble";
+spider_loc = loc.new(world.getOverworld(), 106, 84, 9);
+
+@wait
+wait();
+if(event == "living_death") {
+	player = player.getFromDamageSource(damage_source);
+	if(player == null) {
+		goto("wait");
+	}
+}
+if(!player.isQuester(player, script)) {
+	goto("wait");
+}
+if(event == "quest_term") {
+	//Hier Code einfügen...
+	wait(); //Script wird von außen terminiert
+}
+if(event == "quest_start") {
+	quest.display(player, quest_name, stage, all_stages);
+	msg.prefix(player, "§dAnna", "HELP!!! THERE IS A SPIDER HERE SOMEWHERE. I WILL NEVER BE ABLE TO SLEEP AGAIN!!!");
+	scheduler.msgPrefix(30, player, string.concat("§d", player.getName(player)), "Don't panic I'll take care of it.");
+	entity.spawn(spider_loc, "SPIDER");
+	goto("wait");
+}
+label = string.concat("stage", string.number(stage));
+goto(label);
+
+@stage0
+if(event == "living_death") {
+	entity_type = entity.getType(living_entity);
+	if(entity_type == "spider") {
+		mob_killed = true;
+		msg.prefix(player, "§dAnna", "Thank you! Now I can fall asleep again calmly.");
+		msg(player, text.new("§dQuest finished. Reward: 1 snuvis!"));
+		money.addBoost(player, 1);
+		quest.finish(script, player);
+	}
+}
+goto("wait");

+ 76 - 196
story/admont/core.txt

@@ -1,11 +1,9 @@
-event.load("human_damage");
-event.load("entity_click");
 event.load("snuvi_click");
-//event.load("skill_showshop");
 
-timestamp = map.new(); //TimeStamp for Felsmagier-SkillShop
+quest_book = item.create("ENCHANTED_BOOK", 1, "§eQuests", null);
 //stable_loc = loc.new(world.getStory(), -1584, 66, -57);
 prefix_skill = "§2Skill";
+prefix_quest = "§dQuest";
 
 oma_inv = inv.new("333333333", text.new("Quests: Oma"));
 inv.setItem(oma_inv, 0, item.create("minecraft:enchanted_book", 1, "§fDer Anfang...", "§e...beginnt immer mit einer netten Oma."));
@@ -17,16 +15,16 @@ inv.setItem(dieter_inv, 0, item.create("minecraft:enchanted_book", 1, "§fGaumen
 zauberlehrling_inv = inv.new("333333333", text.new("Quests: Zauberlehrling"));
 inv.setItem(zauberlehrling_inv, 0, item.create("minecraft:enchanted_book", 1, "§fDer Felsmagier...", "§e...hat zauberhafte Skills für dich."));
 
-peter_inv = inv.new("333333333", text.new("Quests: Peter"));
-inv.setItem(peter_inv, 0, item.create("minecraft:enchanted_book", 1, "§fErstes Date", null));
-inv.setItem(peter_inv, 1, item.create("minecraft:enchanted_book", 1, "§fNeue Hose", null));
+farmer_inv = inv.new("200000000", text.new("Quests: Farmer"));
+inv.setItem(farmer_inv, 0, item.create("minecraft:enchanted_book", 1, "§fFirst Date", null));
+//inv.setItem(farmer_inv, 1, item.create("minecraft:enchanted_book", 1, "§fNeue Hose", null));
 
-merle_inv = inv.new("333333333", text.new("Quests: Merle"));
-inv.setItem(merle_inv, 0, item.create("minecraft:enchanted_book", 1, "§fMerle in Nöten", null));
+anna_inv = inv.new("200000000", text.new("Quests: Anna"));
+inv.setItem(anna_inv, 0, item.create("minecraft:enchanted_book", 1, "§fAnna in Trouble", null));
 
-herbert_inv = inv.new("333333333", text.new("Quests: Herbert"));
-inv.setItem(herbert_inv, 0, item.create("minecraft:enchanted_book", 1, "§fSchatz von Admont", null));
-inv.setItem(herbert_inv, 1, item.create("minecraft:enchanted_book", 1, "§fAlbtraum", null));
+miner_inv = inv.new("200000000", text.new("Quests: Miner"));
+inv.setItem(miner_inv, 0, item.create("minecraft:enchanted_book", 1, "§fNightmare", null));
+//inv.setItem(miner_inv, 1, item.create("minecraft:enchanted_book", 1, "§fSchatz von Admont", null));
 
 gustav_inv = inv.new("333333333", text.new("Quests: Gustav"));
 inv.setItem(gustav_inv, 0, item.create("minecraft:enchanted_book", 1, "§fHelfende Hand", null));
@@ -60,8 +58,8 @@ inv.setItem(rolf_inv, 0, item.create("minecraft:enchanted_book", 1, "§fTücher"
 schmied_inv = inv.new("333333333", text.new("Quests: Schmied"));
 inv.setItem(schmied_inv, 0, item.create("minecraft:enchanted_book", 1, "§fDie Uhr tickt", null));
 
-foerster_inv = inv.new("333333333", text.new("Quests: Förster"));
-inv.setItem(foerster_inv, 0, item.create("minecraft:enchanted_book", 1, "§fIch und mein Holz", null));
+lumberjack_inv = inv.new("200000000", text.new("Quests: Lumberjack"));
+inv.setItem(lumberjack_inv, 0, item.create("minecraft:enchanted_book", 1, "§fMe and my wood", null));
 
 msg.string("dev", "§bQuests: §rAdmont loaded.");
 @main
@@ -69,145 +67,60 @@ wait();
 ignoreGoto(event);
 goto("main");
 
-@human_damage
-player = player.getFromDamageSource(damage_source);
-if(player == null) {
-	goto("main");
-}
-goto("human_core");
-
-@entity_click
-if(slot.isOffHand(hand)) {
-	goto("main");
-}
-if(!entity.isHuman(entity)) {
-	goto("main");
-}
-human = entity;
-goto("human_core");
-
-@human_core
-//checkAdmontStable();
-if(player.hasQuest(player)) {
-	goto("main");
-}
-if(quest.isPlayerBlocked(player)) {
-	quest.removeCooldown(player);
-	goto("main");
-}
-entity_name = human.getName(human);
-if(entity_name == "Oma") {
-	inv.open(oma_inv, player);
-	goto("main");
-}
-if(entity_name == "Dieter") {
-	inv.open(dieter_inv, player);
-	goto("main");
-}
-if(entity_name == "Zauberlehrling") {
-	inv.open(zauberlehrling_inv, player);
-	goto("main");
-}
-if(entity_name == "Felsmagier") {
-	if(time.getMillis() - map.getOrDefault(timestamp, player.getUuid(player), 0) < 120000) { //2 Minutes
-		skill.showShop(player, "skill.subcu_inv", "skill.comeback", "skill.head_human", "skill.head_monster", "skill.fly10min", "skill.grow", "skill.haste", "skill.speed", "skill.jump_boost", "skill.dolphin", "skill.block_up", "skill.block_down", "skill.fire_arrow", "skill.cobweb_miner", null, null, null, null);
-	} else {
-		msg.prefix(player, "§dFelsmagier", "Du musst zuerst ein paar Aufgaben für mich erledigen. Finde meinen Zauberlehrling, der hilft dir weiter.");
+@snuvi_click
+item = inv.getItem(inv, inv_slot);
+item.removeFlag(item, "HIDE_DESTROYS");
+title_string = string.text(inv_title);
+if(item == quest_book) {
+	//checkAdmontStable();
+	if(player.hasQuest(player)) {
+		msg.prefix(player, prefix_quest, "You already have a quest.");
+		goto("main");
+	}
+	if(entity_name == "Oma") {
+		inv.open(oma_inv, player);
+	} elseif(entity_name == "Dieter") {
+		inv.open(dieter_inv, player);
+	} elseif(entity_name == "Zauberlehrling") {
+		inv.open(zauberlehrling_inv, player);
+	} elseif(entity_name == "Felsmagier") {
+		/*if() {
+			skill.showShop(player, "skill.subcu_inv", "skill.comeback", "skill.head_human", "skill.head_monster", "skill.fly10min", "skill.grow", "skill.haste", "skill.speed", "skill.jump_boost", "skill.dolphin", "skill.block_up", "skill.block_down", "skill.fire_arrow", "skill.cobweb_miner", null, null, null, null);
+		} else {
+			msg.prefix(player, "§dFelsmagier", "Du musst zuerst ein paar Aufgaben für mich erledigen. Finde meinen Zauberlehrling, der hilft dir weiter.");
+		}*/
+		goto("main");
+	} elseif(title_string == "Farmer") {
+		inv.open(farmer_inv, player);
+	} elseif(title_string == "Anna") {
+		inv.open(anna_inv, player);
+	} elseif(title_string == "Miner") {
+		inv.open(miner_inv, player);
+	} elseif(entity_name == "Gustav") {
+		inv.open(gustav_inv, player);
+	} elseif(entity_name == "Gertrude") {
+		inv.open(gertrude_inv, player);
+	} elseif(entity_name == "Bernd") {
+		inv.open(bernd_inv, player);
+	} elseif(entity_name == "Kunibert") {
+		inv.open(kunibert_inv, player);
+	} elseif(entity_name == "Bauer") {
+		inv.open(bauer_inv, player);
+	} elseif(entity_name == "Ulf") {
+		inv.open(ulf_inv, player);
+	} elseif(entity_name == "Isabell") {
+		inv.open(isabell_inv, player);
+	} elseif(entity_name == "Olaf") {
+		inv.open(olaf_inv, player);
+	} elseif(entity_name == "Rolf") {
+		inv.open(rolf_inv, player);
+	} elseif(entity_name == "Schmied") {
+		inv.open(schmied_inv, player);
+	} elseif(title_string == "Lumberjack") {
+		inv.open(lumberjack_inv, player);
 	}
 	goto("main");
 }
-if(entity_name == "Peter") {
-	peter_inv = inv.new("333333333", text.new("Quests: Peter"));
-	inv.setItem(peter_inv, 0, item.create("minecraft:enchanted_book", 1, "§fErstes Date"));
-	inv.setItem(peter_inv, 1, item.create("minecraft:enchanted_book", 1, "§fNeue Hose"));
-	inv.open(peter_inv, player);
-	goto("main");
-}
-if(entity_name == "Merle") {
-	merle_inv = inv.new("333333333", text.new("Quests: Merle"));
-	inv.setItem(merle_inv, 0, item.create("minecraft:enchanted_book", 1, "§fMerle in Nöten"));
-	inv.open(merle_inv, player);
-	goto("main");
-}
-if(entity_name == "Herbert") {
-	herbert_inv = inv.new("333333333", text.new("Quests: Herbert"));
-	inv.setItem(herbert_inv, 0, item.create("minecraft:enchanted_book", 1, "§fSchatz von Admont"));
-	inv.setItem(herbert_inv, 1, item.create("minecraft:enchanted_book", 1, "§fAlbtraum"));
-	inv.open(herbert_inv, player);
-	goto("main");
-}
-if(entity_name == "Gustav") {
-	gustav_inv = inv.new("333333333", text.new("Quests: Gustav"));
-	inv.setItem(gustav_inv, 0, item.create("minecraft:enchanted_book", 1, "§fHelfende Hand"));
-	inv.open(gustav_inv, player);
-	goto("main");
-}
-if(entity_name == "Gertrude") {
-	gertrude_inv = inv.new("333333333", text.new("Quests: Gertrude"));
-	inv.setItem(gertrude_inv, 0, item.create("minecraft:enchanted_book", 1, "§fZauberlehrling"));
-	inv.open(gertrude_inv, player);
-	goto("main");
-}
-if(entity_name == "Bernd") {
-	bernd_inv = inv.new("333333333", text.new("Quests: Bernd"));
-	inv.setItem(bernd_inv, 0, item.create("minecraft:enchanted_book", 1, "§fHide and Seek"));
-	inv.open(bernd_inv, player);
-	goto("main");
-}
-if(entity_name == "Kunibert") {
-	kunibert_inv = inv.new("333333333", text.new("Quests: Kunibert"));
-	inv.setItem(kunibert_inv, 0, item.create("minecraft:enchanted_book", 1, "§fKräutermeister"));
-	inv.open(kunibert_inv, player);
-	goto("main");
-}
-if(entity_name == "Bauer") {
-	bauer_inv = inv.new("333333333", text.new("Quests: Bauer"));
-	inv.setItem(bauer_inv, 0, item.create("minecraft:enchanted_book", 1, "§fErntezeit"));
-	inv.setItem(bauer_inv, 1, item.create("minecraft:enchanted_book", 1, "§fSpezialwunsch"));
-	inv.open(bauer_inv, player);
-	goto("main");
-}
-if(entity_name == "Ulf") {
-	ulf_inv = inv.new("333333333", text.new("Quests: Ulf"));
-	inv.setItem(ulf_inv, 0, item.create("minecraft:enchanted_book", 1, "§fIn Eile"));
-	inv.open(ulf_inv, player);
-	goto("main");
-}
-if(entity_name == "Isabell") {
-	isabell_inv = inv.new("333333333", text.new("Quests: Isabell"));
-	inv.setItem(isabell_inv, 0, item.create("minecraft:enchanted_book", 1, "§fFür die Wissenschaft!"));
-	inv.open(isabell_inv, player);
-	goto("main");
-}
-if(entity_name == "Olaf") {
-	olaf_inv = inv.new("333333333", text.new("Quests: Olaf"));
-	inv.setItem(olaf_inv, 0, item.create("minecraft:enchanted_book", 1, "§fReinigung"));
-	inv.setItem(olaf_inv, 1, item.create("minecraft:enchanted_book", 1, "§fMitbringsel"));
-	inv.open(olaf_inv, player);
-	goto("main");
-}
-if(entity_name == "Rolf") {
-	rolf_inv = inv.new("333333333", text.new("Quests: Rolf"));
-	inv.setItem(rolf_inv, 0, item.create("minecraft:enchanted_book", 1, "§fTücher"));
-	inv.open(rolf_inv, player);
-	goto("main");
-}
-if(entity_name == "Schmied") {
-	schmied_inv = inv.new("333333333", text.new("Quests: Schmied"));
-	inv.setItem(schmied_inv, 0, item.create("minecraft:enchanted_book", 1, "§fDie Uhr tickt"));
-	inv.open(schmied_inv, player);
-	goto("main");
-}
-if(entity_name == "Förster") {
-	foerster_inv = inv.new("333333333", text.new("Quests: Förster"));
-	inv.setItem(foerster_inv, 0, item.create("minecraft:enchanted_book", 1, "§fIch und mein Holz"));
-	inv.open(foerster_inv, player);
-	goto("main");
-}
-goto("main");
-
-@snuvi_click
-title_string = string.text(inv_title);
 if(title_string == "Quests: Oma") {
 	if(inv_slot == 0) {
 		quest.start(player, "story/admont/der_anfang");
@@ -238,37 +151,37 @@ if(title_string == "Quests: Zauberlehrling") {
 	}
 	goto("main");
 }
-if(title_string == "Quests: Peter") {
+if(title_string == "Quests: Farmer") {
 	if(inv_slot == 0) {
-		quest.start(player, "story/admont/erstes_date");
+		quest.start(player, "story/admont/first_date");
 		goto("main");
 	}
 	if(inv_slot == 1) {
-		quest.start(player, "story/admont/neue_hose");
+		//quest.start(player, "story/admont/neue_hose");
 		goto("main");
 	}
 	goto("main");
 }
-if(title_string == "Quests: Merle") {
+if(title_string == "Quests: Anna") {
 	if(inv_slot == 0) {
-		quest.start(player, "story/admont/merle_in_noeten");
+		quest.start(player, "story/admont/anna_in_trouble");
 		goto("main");
 	}
 	goto("main");
 }
-if(title_string == "Quests: Herbert") {
+if(title_string == "Quests: Miner") {
 	if(inv_slot == 0) {
+		quest.start(player, "story/admont/nightmare");
+		goto("main");
+	}
+	if(inv_slot == 1) {
 		if(script.isActiveName("scripts/story/admont/schatz_von_admont.txt")) {
-			msg.prefix(player, "§dHerbert", "Diese Quest ist momentan aktiv und kann nicht vergeben werden.");
+			msg.prefix(player, "§dMiner", "Diese Quest ist momentan aktiv und kann nicht vergeben werden.");
 			goto("main");
 		}
 		quest.start(player, "story/admont/schatz_von_admont");
 		goto("main");
 	}
-	if(inv_slot == 1) {
-		quest.start(player, "story/admont/albtraum");
-		goto("main");
-	}
 	goto("main");
 }
 if(title_string == "Quests: Gustav") {
@@ -349,46 +262,13 @@ if(title_string == "Quests: Schmied") {
 	}
 	goto("main");
 }
-if(title_string == "Quests: Förster") {
+if(title_string == "Quests: Lumberjack") {
 	if(inv_slot == 0) {
-		quest.start(player, "story/admont/ich_und_mein_holz");
-		goto("main");
-	}
-	goto("main");
-}
-if(title_string == "Skillshop") {
-	if(item.getType(item) == "minecraft:air") {
+		quest.start(player, "story/admont/me_and_my_wood");
 		goto("main");
 	}
-	skill_name = removeFormat(item.getName(item));
-	tech_name = skill.getTechName(skill_name);
-	if(skill.isPermanent(skill_name)) {
-		amount = skill.getAmount(player, tech_name);
-		if(amount >= 1) {	
-			goto("main");
-		}
-	}
-	cost = skill.getCost(skill_name);
-	if(!hasEnoughMoney(player, cost)) {
-		msg.prefix(player, prefix_skill, "Du hast nicht genug Snuvis.");
-		goto("main");
-	}
-	money.sub(player, cost);
-	skill.addAmount(player, tech_name, 1);
-	inv.setItem(inv, inv_slot, skill.getShopItem(player, tech_name));
-}
-goto("main");
-
-@skill_showshop
-player = getScriptVar("player");
-shop_type = getScriptVar("shop_type");
-if(shop_type == "foerster") {
-	skill.showShop(player, "skill.timber", "skill.better_shears", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
 	goto("main");
 }
-if(shop_type == "felsmagier") {
-	skill.showShop(player, "skill.subcu_inv", "skill.comeback", "skill.head_human", "skill.head_monster", "skill.fly10min", "skill.grow", "skill.haste", "skill.speed", "skill.jump_boost", "skill.dolphin", "skill.block_up", "skill.block_down", "skill.fire_arrow", "skill.cobweb_miner", null, null, null, null);
-}
 goto("main");
 
 function checkAdmontStable() {

+ 0 - 117
story/admont/erstes_date.txt

@@ -1,117 +0,0 @@
-event.load("quest_start");
-event.load("quest_term");
-event.load("entity_click");
-event.load("block_break");
-event.load("custom_command");
-event.load("item_air_click");
-
-stage = 0;
-all_stages = 2;
-quest_name = "Erstes Date";
-tulips = 0;
-tulips_needed = 3;
-book_chest_loc = loc.new(world.getStory(), -1626, 57, 23);
-
-@wait
-wait();
-if(!player.isQuester(player, script)) {
-	goto("wait");
-}
-if(event == "quest_term") {
-	//Hier Code einfügen...
-	if(stage == 1) {
-		rest_item = player.removeItemNbt(player, read.item("minecraft:writable_book"));
-		rest_amount = item.getAmount(rest_item);
-		if(rest_amount != 0) {
-			player.removeItemNbt(player, read.item("minecraft:written_book"));
-		}
-	}
-	wait(); //Script wird von außen terminiert
-}
-if(event == "quest_start") {
-	quest.display(player, quest_name, stage, all_stages);
-	msg.prefix(player, "§dPeter", "Hi du! Ich habe heute Abend ein Treffen mit Merle und ich bin super nervös...");
-	scheduler.msgPrefix(30, player, "§dPeter", "Äh, du siehst aus als hättest du Erfahrung oder so, was sollte ich als Geschenk mitnehmen?");
-	scheduler.msg(60, player, "§dAntwortmöglichkeiten:");
-	scheduler.msg(60, player, text.click("[§dA§r] §eBlumen sind nie verkehrt.", "/questanswer A"));
-	scheduler.msg(60, player, text.click("[§dB§r] §eEin paar nette Worte reichen.", "/questanswer B"));
-	goto("wait");
-}
-label = concat("stage", text.number(stage));
-goto(label);
-
-@stage0
-if(event == "custom_command" && command == "questanswer") {
-	option = list.getIndex(args, 0);
-	if(option == "A") {
-		stage.increase(player);
-		msg.prefix(player, "§dPeter", "Das ist eine super Idee! Ich zieh mich schon mal schick an!");
-		scheduler.msgPrefix(30, player, "§dPeter", "Hol mir doch in der Zwischenzeit vom Gartenhaus drei rosa Tulpen.");
-		goto("wait");
-	}
-	if(option == "B") {
-		stage.increase(player);
-		msg.prefix(player, "§dPeter", "Das stimmt! Ich glaube ein Gedicht wäre ein passendes Geschenk für sie.");
-		scheduler.msgPrefix(30, player, "§dPeter", "Ich bin leider nicht so kreativ, übernimm du das doch bitte.");
-		scheduler.msgPrefix(60, player, "§dPeter", "Schreib mir ein Gedicht und signier das Buch dann.");
-		player.giveSingleItem(player, read.item("minecraft:writable_book", 1, "§fFür Merle"), true);
-	}
-}
-goto("wait");
-
-@stage1
-if(option == "A") {
-	if(event == "block_break") {
-		if(block_type == "minecraft:pink_tulip" && loc.hasPlotName(block_loc, "Gewächshaus")) {
-			cancel = false;
-			scheduler.setBlock(5, block_loc, "minecraft:pink_tulip", false);
-			tulips++;
-			if(tulips == 3) {
-				msg.prefix(player, "§dPeter", "Perfekt! Jetzt komm zurück zu mir und gib mir die Blumen.");
-				stage.increase(player);
-			}
-		}
-	}
-} else {
-	if(event == "item_air_click") {
-		cancel = true;
-		goto("wait");
-	}
-	if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
-		entity_name = entity.getName(entity);
-		if(entity_name == "Peter") {
-			item = living.getEquip(player, "hand");
-			item_type = item.getType(item);
-			if(item_type == "minecraft:writable_book") {
-				msg.prefix(player, "§dPeter", "Bitte signier das Buch noch für mich!");
-				goto("wait");
-			}
-			if(item_type == "minecraft:written_book" && removeFormat(item.getName(item)) == "Für Merle") {
-				block.addItem(book_chest_loc, item.clone(item));
-				living.setEquip(player, "hand", read.item("minecraft:air"));
-				msg.prefix(player, "§dPeter", "Vielen Dank!");
-				msg(player, "§dQuest abgeschlossen. Belohnung: 18 Snuvis!");
-				money.addBoost(player, 18);
-				quest.finish(script, player);
-			}
-		}
-	}
-}
-goto("wait");
-
-@stage2
-if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
-	entity_name = entity.getName(entity);
-	if(entity_name == "Peter") {
-		rest_amount = human.giveItem(entity_name, player, "minecraft:pink_tulip", tulips_needed);
-		if(rest_amount == 0) {
-			msg.prefix(player, "§dPeter", "Vielen Dank!");
-			msg(player, "§dQuest abgeschlossen. Belohnung: 22 Snuvis!");
-			money.addBoost(player, 22);
-			quest.finish(script, player);
-		} else {
-			tulips_needed = rest_amount;
-		}
-	}
-}
-goto("wait");

+ 143 - 0
story/admont/first_date.txt

@@ -0,0 +1,143 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("entity_click");
+event.load("block_break");
+event.load("block_click");
+event.load("custom_command");
+
+stage = 0;
+all_stages = 2;
+quest_name = "First Date";
+tulips = 0;
+tulips_needed = 3;
+pink_tulip_mat = material.get("pink_tulip");
+writable_book_mat = material.get("writable_book");
+written_book_mat = material.get("written_book");
+book_chest_block = block.get(loc.new(world.getOverworld(), 128, 72, -32));
+
+wusi_p = read.player("kajetanjohannes");
+
+@wait
+wait();
+if(event == "block_break" && player == wusi_p) {
+	msg(player, text.new("Quest: block_break"));
+}
+if(event == "custom_command") {
+	if(!isPlayer(sender)) {
+		goto("wait");
+	}
+	player = sender;
+}
+if(!player.isQuester(player, script)) {
+	goto("wait");
+}
+if(event == "quest_term") {
+	//Hier Code einfügen...
+	if(stage == 1) {
+		rest_item = player.removeItemNbt(player, item.new(writable_book_mat));
+		rest_amount = item.getAmount(rest_item);
+		if(rest_amount != 0) {
+			player.removeItemNbt(player, item.new(written_book_mat));
+		}
+	}
+	wait(); //Script wird von außen terminiert
+}
+if(event == "quest_start") {
+	quest.display(player, quest_name, stage, all_stages);
+	msg.prefix(player, "§dFarmer", "Hi you! I have a meeting with Anna tonight and I'm super nervous...");
+	scheduler.msgPrefix(30, player, "§dFarmer", "Uh, you look like you have experience or something, what should I take as a gift?");
+	scheduler.msg(60, player, text.new("§dAnswer options:"));
+	scheduler.msg(60, player, string.getClickText("[§dA§r] §eFlowers are never wrong.", "/questanswer A"));
+	scheduler.msg(60, player, string.getClickText("[§dB§r] §eA few kind words are enough.", "/questanswer B"));
+	goto("wait");
+}
+label = string.concat("stage", string.number(stage));
+goto(label);
+
+@stage0
+if(event == "custom_command" && command == "questanswer") {
+	option = list.getIndex(args, 0);
+	if(option == "A") {
+		stage.increase(player);
+		msg.prefix(player, "§dFarmer", "That's a great idea! I'm going to get dressed up!");
+		scheduler.msgPrefix(30, player, "§dFarmer", "In the meantime, why don't you get me three pink tulips from the tree at the spawn?");
+		goto("wait");
+	}
+	if(option == "B") {
+		stage.increase(player);
+		msg.prefix(player, "§dFarmer", "That's right! I think a poem would be a fitting gift for her.");
+		scheduler.msgPrefix(30, player, "§dFarmer", "Unfortunately, I'm not that creative, so please take over.");
+		scheduler.msgPrefix(60, player, "§dFarmer", "Write me a poem and sign the book then.");
+		player.giveSingleItem(player, item.create("writable_book", 1, "§fFor Anna", null));
+	}
+}
+goto("wait");
+
+@stage1
+if(option == "A") {
+	if(event == "block_click") {
+		if(block == null) {
+			goto("wait");
+		}
+		block_type = block.getType(block);
+		if(block_type == pink_tulip_mat) {
+			cancel = false;
+		}
+		goto("wait");
+	}
+	if(event == "block_break") {
+		block_type = block.getType(block);
+		if(block_type == pink_tulip_mat) {
+			cancel = false;
+			scheduler.setBlockMaterial(5, block, pink_tulip_mat, false);
+			tulips++;
+			if(tulips == 3) {
+				msg.prefix(player, "§dFarmer", "Perfect! Now come back to me and give me the flowers.");
+				stage.increase(player);
+			}
+		}
+	}
+	goto("wait");
+}
+if(event == "entity_click" && slot.isHand(hand) && entity.isHuman(entity)) {
+	entity_name = human.getName(entity);
+	if(entity_name == "Farmer") {
+		item = living.getHand(player);
+		item_type = item.getType(item);
+		if(item_type == writable_book_mat) {
+			cancel = true;
+			msg.prefix(player, "§dFarmer", "Please sign the book for me!");
+			goto("wait");
+		}
+		if(item_type == written_book_mat) {
+			cancel = true;
+			item_name = string.text(item.getName(item));
+			if(item_name != null && item_name == "§fFor Anna") {
+				inv.addItem(block.getInventory(book_chest_block), item);
+				living.setHand(player, item.getAir());
+				msg.prefix(player, "§dFarmer", "Thank you!");
+				msg(player, text.new("§dQuest finished. Reward: 2 snuvis!"));
+				money.addBoost(player, 2);
+				quest.finish(script, player);
+			}
+		}
+	}
+}
+goto("wait");
+
+@stage2
+if(event == "entity_click" && slot.isHand(hand) && entity.isHuman(entity)) {
+	entity_name = human.getName(entity);
+	if(entity_name == "Farmer") {
+		rest_amount = human.giveItem(entity_name, player, pink_tulip_mat, tulips_needed);
+		if(rest_amount == 0) {
+			msg.prefix(player, "§dFarmer", "Thank you!");
+			msg(player, text.new("§dQuest finished. Reward: 2 snuvis!"));
+			money.addBoost(player, 2);
+			quest.finish(script, player);
+		} else {
+			tulips_needed = rest_amount;
+		}
+	}
+}
+goto("wait");

+ 0 - 70
story/admont/ich_und_mein_holz.txt

@@ -1,70 +0,0 @@
-event.load("quest_start");
-event.load("quest_term");
-event.load("block_break");
-event.load("entity_click");
-
-stage = 0;
-all_stages = 2;
-quest_name = "Ich und mein Holz";
-
-wood_given = 0;
-spruce_log = 0;
-
-@wait
-wait();
-if(!player.isQuester(player, script)) {
-	goto("wait");
-}
-if(event == "quest_term") {
-	//Hier Code einfügen...
-	wait(); //Script wird von außen terminiert
-}
-if(event == "quest_start") {
-	quest.display(player, quest_name, stage, all_stages);
-	msg.prefix(player, "§dFörster", "Die neue Holzlieferung ist schon lange fällig...");
-	scheduler.msgPrefix(30, player, "§dFörster", "Ich hänge also ziemlich hinterher");
-	scheduler.msgPrefix(60, player, "§dFörster", "Ich brauche 32 Holz aus dem Wald nebenan, um dem Handwerker seine nötigen Ressourcen zu geben.");
-	player.giveSingleItem(player, read.item("minecraft:stone_axe"), false);
-	goto("wait");
-}
-
-label = concat("stage", text.number(stage));
-goto(label);
-
-@stage0
-if(event == "block_break") {
-	if(block_type == "minecraft:spruce_log" && loc.getx(block_loc)<= -1692) {
-		cancel = false;
-		scheduler.setBlock(25, block_loc, "minecraft:spruce_log", false);
-		spruce_log++;
-		if(spruce_log == 32) {
-			stage.increase(player);
-		}
-	}
-	goto("wait");
-}
-if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
-	entity_name = entity.getName(entity);
-	if(entity_name == "Förster") {
-		player.giveSingleItem(player, read.item("minecraft:stone_axe"), false);
-	}
-}
-goto("wait");
-
-@stage1
-if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
-	entity_name = entity.getName(entity);
-	if(entity_name == "Förster") {
-		rest_amount = human.giveItem("Förster", player, "minecraft:spruce_log", spruce_log);
-		if(rest_amount == 0) {
-			msg.prefix(player, "§dFörster", "Danke, ich werde es zur Verarbeitung weiterreichen");
-			money.addBoost(player, 24);
-			msg(player, "§dQuest abgeschlossen. Belohnung: 24 Snuvis!");
-			quest.callShowShop(player, "foerster");
-			quest.finish(script, player);
-		} else {
-			spruce_log = rest_amount;
-		}
-	}
-}
-goto("wait");

+ 65 - 0
story/admont/me_and_my_wood.txt

@@ -0,0 +1,65 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("block_break");
+event.load("entity_click");
+
+stage = 0;
+all_stages = 2;
+quest_name = "Me and my wood";
+
+spruce_log = 0;
+spruce_log_mat = material.get("SPRUCE_LOG");
+
+@wait
+wait();
+if(!player.isQuester(player, script)) {
+	goto("wait");
+}
+if(event == "quest_term") {
+	//Hier Code einfügen...
+	wait(); //Script wird von außen terminiert
+}
+if(event == "quest_start") {
+	quest.display(player, quest_name, stage, all_stages);
+	msg.prefix(player, "§dLumberjack", "The new wood delivery is late...");
+	scheduler.msgPrefix(30, player, "§dLumberjack", "I'm pretty much behind.");
+	scheduler.msgPrefix(60, player, "§dLumberjack", "I need 32 spruce logs to give the workman his necessary resources.");
+	goto("wait");
+}
+
+label = string.concat("stage", string.number(stage));
+goto(label);
+
+@stage0
+if(event == "block_break") {
+	block_type = block.getType(block);
+	if(block_type == spruce_log_mat && !cancel) {
+		spruce_log++;
+		if(spruce_log == 32) {
+			stage.increase(player);
+		}
+	}
+	goto("wait");
+}
+goto("wait");
+
+@stage1
+if(event == "entity_click" && slot.isHand(hand) && entity.isHuman(entity)) {
+	entity_name = human.getName(entity);
+	if(entity_name == "Lumberjack") {
+		rest_amount = human.giveItem(entity_name, player, spruce_log_mat, spruce_log);
+		if(rest_amount == 0) {
+			msg.prefix(player, "§dLumberjack", "Thank you, I will hand it over for processing.");
+			msg(player, text.new("§dQuest finished. Reward: 4 snuvis!"));
+			money.addBoost(player, 4);
+			if(!player.unlockedLumberjack(player)) {
+				player.unlockLumberjack(player);
+				msg.prefix(player, "§2Skill", "Unlocked skillshop: Lumberjack");
+			}
+			quest.finish(script, player);
+		} else {
+			spruce_log = rest_amount;
+		}
+	}
+}
+goto("wait");

+ 0 - 47
story/admont/merle_in_noeten.txt

@@ -1,47 +0,0 @@
-event.load("quest_start");
-event.load("quest_term");
-event.load("living_death");
-
-stage = 0;
-all_stages = 1;
-quest_name = "Merle in Nöten";
-cave_spider_loc = loc.new(world.get("story"), -1625, 71, 37);
-
-@wait
-wait();
-if(event == "living_death") {
-	player = player.getFromDamageSource(damage_source);
-	if(player == null) {
-		goto("wait");
-	}
-}
-if(!player.isQuester(player, script)) {
-	goto("wait");
-}
-if(event == "quest_term") {
-	//Hier Code einfügen...
-	wait(); //Script wird von außen terminiert
-}
-if(event == "quest_start") {
-	quest.display(player, quest_name, stage, all_stages);
-	msg.prefix(player, "§dMerle", "HILFE!!! HIER IST IRGENDWO EINE SPINNE. ICH WERDE NIE WIEDER SCHLAFEN KÖNNEN!!!");
-	scheduler.msgPrefix(30, player, concat("§d", player.getName(player)), "Keine Panik ich kümmere mich darum.");
-	entity.spawn("spider", cave_spider_loc);
-	player.giveSingleItem(player, read.item("minecraft:stone_sword"), false);
-	goto("wait");
-}
-label = concat("stage", text.number(stage));
-goto(label);
-
-@stage0
-if(event == "living_death") {
-	entity_type = entity.getType(living_entity);
-	if(entity_type == "spider") {
-		mob_killed = true;
-		msg.prefix(player, "§dMerle", "Danke! Jetzt kann ich wieder beruhigt einschlafen.");
-		msg(player, "§dQuest abgeschlossen. Belohnung: 9 Snuvis!");
-		money.addBoost(player, 9);
-		quest.finish(script, player);
-	}
-}
-goto("wait");

+ 103 - 0
story/admont/nightmare.txt

@@ -0,0 +1,103 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("custom_command");
+event.load("living_death");
+
+world = world.getOverworld();
+mob_loc_1 = loc.new(world, 126.5, 80, 11.5);
+mob_loc_2 = loc.new(world, 128.5, 80, 11.5);
+
+zombie_count = 0;
+stage = 0;
+all_stages = 2;
+quest_name = "Nightmare";
+
+@wait
+wait();
+if(event == "custom_command") {
+	if(!isPlayer(sender)) {
+		goto("wait");
+	}
+	player = sender;
+}
+if(event == "living_death") {
+	if(isPlayer(living_entity)) {
+		if(zombie == 0) {
+			entity.remove(zombie1);
+			entity.remove(zombie2);
+			entity.remove(zombie3);
+			entity.remove(zombie4);
+			entity.remove(zombie5);
+		}	
+		player = living_entity;
+		msg.prefix(player, "§dQuest", "Quest termed.");
+		quest.term(script, player);
+		goto("wait");
+	}
+	player = player.getFromDamageSource(damage_source);
+	if(player == null) {
+		goto("wait");
+	}
+}
+if(!player.isQuester(player, script)) {
+	goto("wait");
+}
+if(event == "quest_term") {
+	if(zombie1 != null) {
+		entity.remove(zombie1);
+		entity.remove(zombie2);
+		entity.remove(zombie3);
+		entity.remove(zombie4);
+		entity.remove(zombie5);
+	}
+	wait(); //Script wird von außen terminiert
+}
+if(event == "quest_start") {
+	quest.display(player, quest_name, stage, all_stages);
+	msg.prefix(player, "§dMiner", "MONSTER! LOTS AND LOTS OF MONSTERS!");
+	scheduler.msgPrefix(30, player, "§dMiner", "I HAVE SEEN THEM WITH MY OWN EYES!");
+	scheduler.msg(60, player, text.new("§dAnswer options:"));
+	scheduler.msg(60, player, string.getClickText("[§dA§r] §eCalm down, what's going on?", "/questanswer A"));
+	scheduler.msg(60, player, string.getClickText("[§dB§r] §eHow? Where? What?", "/questanswer B"));
+	goto("wait");
+}
+
+label = string.concat("stage", string.number(stage));
+goto(label);
+
+@stage0
+if(event == "custom_command" && command == "questanswer") {
+	option = list.getIndex(args, 0);
+	if(option == "A") {
+		stage.increase(player);
+		msg.prefix(player, "§dMiner", "Oh, sorry, I didn't mean to shout. I ran away as fast as I could. From...from the m...monsters.");
+		scheduler.msgprefix(30, player, "§dMiner", "They were in the watchtower, please do something!");
+	}
+	if(option == "B") {
+		stage.increase(player);
+		msg.prefix(player, "§dMiner", "CREEPY! IN THE WATCHTOWER! MONSTER! HELP!");
+	}
+	if(option == "A" || option == "B"){
+		zombie1 = entity.spawn(mob_loc_1, "ZOMBIE");
+		zombie2 = entity.spawn(mob_loc_1, "ZOMBIE");
+		zombie3 = entity.spawn(mob_loc_2, "ZOMBIE");
+		zombie4 = entity.spawn(mob_loc_2, "ZOMBIE");
+		zombie5 = entity.spawn(mob_loc_2, "ZOMBIE");
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "living_death"){
+	entity_type = entity.getType(living_entity);
+	if(entity_type == "zombie") {
+		zombie_count++;
+		if(zombie_count == 5) {
+			msg.prefix(player, "§dMiner", "You are my rescue.");
+			msg(player, text.new("§dQuest finished. Reward: 3 snuvis!"));
+			money.addBoost(player, 3);
+			quest.finish(script, player);
+		}
+	}
+}
+goto("wait");

+ 127 - 0
survival/gemstones.txt

@@ -0,0 +1,127 @@
+event.load("entity_click");
+event.load("snuvi_click");
+
+amber = item.getAmber();
+ruby = item.getRuby();
+sapphire = item.getSapphire();
+air = item.getAir();
+arrow_right = item.custom.create("ARROW_RIGHT", 1, "§fConvert", null);
+prefix_commands = "§6Commands";
+hint_1 = item.create("minecraft:iron_chestplate", 1, "§fArmor Part", null);
+hint_2 = item.custom.create("RUBY", 1, "§fGemstone", null);
+item.addFlag(hint_1, "HIDE_ATTRIBUTES");
+item.addFlag(hint_2, "HIDE_ATTRIBUTES");
+anvil_use = sound.get("BLOCK_ANVIL_USE");
+sc_master = sound.getCategory("MASTER");
+snuvis = 4096;
+
+slot_head = slot.getHead();
+slot_chest = slot.getChest();
+slot_legs = slot.getLegs();
+slot_feet = slot.getFeet();
+
+tag_helmet = item.getTag("km:helmet");
+tag_chestplate = item.getTag("km:chestplate");
+tag_leggings = item.getTag("km:leggings");
+tag_boots = item.getTag("km:boots");
+
+msg.string("dev", "§bGemstones §rloaded.");
+@wait
+wait();
+if(event == "entity_click") {
+	if(slot.isOffHand(hand)) {
+		goto("wait");
+	}
+	if(!entity.isHuman(entity)) {
+		goto("wait");
+	}
+	human_name = human.getName(entity);
+	if(human_name != "Ludwig") {
+		goto("wait");
+	}
+	inv = inv.new("011020100022000000", text.new("Gemstone-Anvil"));
+	inv.setItem(inv, 4, arrow_right);
+	inv.setItem(inv, 10, hint_1);
+	inv.setItem(inv, 11, hint_2);
+	inv.open(inv, player);
+	goto("wait");
+}
+if(event == "snuvi_click") {
+	title_string = string.text(inv_title);
+	if(title_string != "Gemstone-Anvil") {
+		goto("wait");
+	}
+	if(inv_slot == 4) {
+		//Ziel-slot muss leer sein
+		item = inv.getItem(inv, 6);
+		if(item != null) {
+			msg.prefix(player, prefix_commands, "Result slot needs to be empty.");
+			goto("wait");
+		}
+		//Quell-slots müssen belegt sein
+		item_0 = inv.getItem(inv, 1);
+		if(item_0 == null) {
+			msg.prefix(player, prefix_commands, "First slot is empty.");
+			goto("wait");
+		}
+		item_1 = inv.getItem(inv, 2);
+		if(item_1 == null) {
+			msg.prefix(player, prefix_commands, "Second slot is empty.");
+			goto("wait");
+		}
+		if(item.hasTag(item_0, tag_helmet)) {
+			slot = slot_head;
+		} elseif(item.hasTag(item_0, tag_chestplate)) {
+			slot = slot_chest;
+		} elseif(item.hasTag(item_0, tag_leggings)) {
+			slot = slot_legs;
+		} elseif(item.hasTag(item_0, tag_boots)) {
+			slot = slot_feet;
+		} else {
+			msg.prefix(player, prefix_commands, "First slot is not an armor part.");
+			goto("wait");
+		}
+		if(item.getAmount(item_0) != 1) {
+			msg.prefix(player, prefix_commands, "Only one armor part allowed.");
+			goto("wait");
+		}
+		//which gemstone
+		if(item.isRuby(item_1)) {
+			gem = ruby;
+			att_type = "GENERIC_MAX_HEALTH";
+			att_amount = 2;
+		}
+		elseif(item.isSapphire(item_1)) {
+			gem = sapphire;
+			att_type = "GENERIC_ARMOR";
+			att_amount = 1;
+		}
+		elseif(item.isAmber(item_1)) {
+			gem = amber;
+			att_type = "GENERIC_MOVEMENT_SPEED";
+			att_amount =  0.02;
+		} else {
+			msg.prefix(player, prefix_commands, "Second slot needs to be one Gemstone (Amber, Ruby, ...).");
+			goto("wait");
+		}
+		if(item.getAmount(item_1) != 1) {
+			msg.prefix(player, prefix_commands, "Second slot needs to be one Gemstone (Amber, Ruby, ...).");
+			goto("wait");
+		}
+		if(!hasEnoughMoney(player, snuvis)) {
+			msg.prefix(player, prefix_plot, string.concat("You need ", money.getString(snuvis), " snuvis for this."));
+			goto("wait");
+		}
+		money.sub(player, snuvis);
+		
+		sound.spawn(entity.getLocation(player), anvil_use, sc_master);
+		if(!item.hasAttributes(item_0)) {
+			item.addDefaultTags(item_0);
+		}
+		item.addAttribute(item_0, att_type, slot, att_amount, "ADD_NUMBER");
+		inv.setItem(inv, 1, air);
+		inv.removeItem(inv, item_1);
+		inv.setItem(inv, 6, item_0);
+	}
+}
+goto("wait");

+ 0 - 66
survival/harvest.txt

@@ -1,66 +0,0 @@
-event.load("block_break");
-event.load("block_drop");
-
-crops_tag = block.getTag("minecraft:crops");
-hoe_tag = item.getTag("km:hoe");
-
-auto_farm_set = set.new();
-set.add(auto_farm_set, "WHEAT_SEEDS");
-set.add(auto_farm_set, "CARROT");
-set.add(auto_farm_set, "POTATO");
-set.add(auto_farm_set, "BEETROOT_SEEDS");
-
-auto_farm_set2 = set.new();
-set.add(auto_farm_set2, material.get("WHEAT"));
-set.add(auto_farm_set2, material.get("CARROTS"));
-set.add(auto_farm_set2, material.get("POTATIES"));
-set.add(auto_farm_set2, material.get("BEETROOTS"));
-
-msg.string("dev", "§bHarvest §rloaded.");
-@wait
-wait();
-if(event == "block_drop") {
-	loc = location;
-} else {
-	loc = entity.getLocation(player);
-}
-world_name = world.getName(loc.getWorld(loc));
-if(world.isSurvName(world_name)) {
-	ignoreGoto(event);
-}
-goto("wait");
-
-@block_break
-if(!block.hasTag(block, crops_tag)) {
-	goto("wait");
-}
-block_type = block.getType(block_loc);
-if(!set.contains(auto_farm_set2, block_type)) {
-	goto("wait");
-}
-if(player.checkHandsForTag(player, hoe_tag)) {
-	cancel = false;
-}
-goto("wait");
-
-@block_drop
-item = living.getEquip(player, read.slot("HAND"));
-if(!block.hasTag(block, crops_tag)) {
-	goto("wait");
-}
-if(!item.hasTag(item, hoe_tag)) {
-	goto("wait");
-}
-for(i = 0; i < list.getSize(drops); i++) {
-	drop_item_entity = list.getIndex(drops, i);
-	drop_item = item.entity.get(drop_item_entity);
-	if(set.contains(auto_farm_set, item.getType(drop_item))) {
-		amount = item.getAmount(drop_item);
-		if(amount > 0) {
-			item.setAmount(drop_item, amount - 1);
-		}
-	}
-}
-block.setData(location, concat(block_type, "[age=0]"));
-player.damageItem(player, 1);
-goto("wait");

+ 3 - 4
survival/mobarena.txt

@@ -37,7 +37,6 @@ list.add(bosses, "MAGMA_CUBE");
 entities_list = list.new();
 iron_sword = item.create("IRON_SWORD", 1, null, null);
 copper_coin = item.custom.create("COPPER_COIN", 1, null, null);
-silver_coin = item.custom.create("SILVER_COIN", 1, null, null);
 ruby = item.getRuby();
 
 msg.string("dev", "§bMobarena §rloaded.");
@@ -93,9 +92,9 @@ if(event == "living_death") {
 		if(r == 1) {
 			item.drop(ruby, ent_loc);
 		}
-	//	item.drop(silver_coin, ent_loc);
-	} else {
-	//	item.drop(copper_coin, ent_loc);
+		r = math.random(3, 5);
+		item.setAmount(copper_coin, r);
+		item.drop(copper_coin, ent_loc);
 	}
 	goto("main");
 }

+ 68 - 20
survival/skills.txt

@@ -1,29 +1,31 @@
 //Hier werden alle Events abgefangen und beeinflusst, je nachdem ob ein Skill aktiv ist oder nicht
 
-event.load("projectile_hit");
-event.load("living_death");
+//event.load("projectile_hit");
+//event.load("living_death");
 event.load("block_break");
-event.load("player_data_tick");
+//event.load("player_data_tick");
+event.load("snuvi_click");
 
 prefix_skill = "§2Skill";
+scroll_menu_item = item.custom.create("SCROLL", 1, "§2Skills", null);
 
 setScriptVar("skills", list.new());
-skill.add("Keep Inventory", "skill.subcu_inv", "minecraft:chest", "Keeps the inventory on death", 100, false, false, true, 0, 0, null);
-skill.add("Comeback", "skill.comeback", "km:skill55", "Respawn at your death location", 100, false, false, true, 0, 0, null);
-skill.add("Head Hunter", "skill.head_human", "minecraft:player_head", "Drops a player's head with a 20% chance if you kill a player (5% if a staff member is killed)", 1000, true, false, false, 0, 0, null);
-skill.add("Mobheads", "skill.head_monster", "minecraft:zombie_head", "Drops a mobs's head with a 20% chance (zombie / skeleton / creeper)", 500, true, false, false, 0, 0, null);
-skill.add("Fly 10min", "skill.fly10min", "minecraft:elytra", "You can fly for 10 minutes", 500, false, true, false, 0, 0, 600);
-skill.add("Grow", "skill.grow", "minecraft:farmland", "Grow seeds in radius 5", 25, false, true, false, 0, 0, null);
+//skill.add("Keep Inventory", "skill.subcu_inv", "minecraft:chest", "Keeps the inventory on death", 100, false, false, true, 0, 0, null);
+//skill.add("Comeback", "skill.comeback", "km:skill55", "Respawn at your death location", 100, false, false, true, 0, 0, null);
+//skill.add("Head Hunter", "skill.head_human", "minecraft:player_head", "Drops a player's head with a 20% chance if you kill a player (5% if a staff member is killed)", 1000, true, false, false, 0, 0, null);
+//skill.add("Mobheads", "skill.head_monster", "minecraft:zombie_head", "Drops a mobs's head with a 20% chance (zombie / skeleton / creeper)", 500, true, false, false, 0, 0, null);
+//skill.add("Fly 10min", "skill.fly10min", "minecraft:elytra", "You can fly for 10 minutes", 500, false, true, false, 0, 0, 600);
+//skill.add("Grow", "skill.grow", "minecraft:farmland", "Grow seeds in radius 5", 25, false, true, false, 0, 0, null);
 //skill.add("Haste", "skill.haste", "minecraft:iron_pickaxe", "Haste for 2 minutes", 25, false, true, false, 0, 0, 120);
 //skill.add("Speed", "skill.speed", "minecraft:iron_boots", "Speed for 2 minutes", 25, false, true, false, 0, 0, 120);
 //skill.add("Jump Boost", "skill.jump_boost", "minecraft:rabbit_foot", "JumpBoost Lvl.2 for 2 minutes", 25, false, true, false, 0, 0, 120);
-skill.add("Dolphin", "skill.dolphin", "minecraft:fire_coral", "Swim like a dolphin for a minute", 25, false, true, false, 0, 0, 60);
-skill.add("Block Up", "skill.block_up", "minecraft:diamond_pickaxe", "Break a block and the block above for a minute", 25, false, true, false, 0, 0, 60);
-skill.add("Block Down", "skill.block_down", "minecraft:diamond_pickaxe", "Break a block and the block below for a minute", 25, false, true, false, 0, 0, 60);
-skill.add("Timber", "skill.timber", "minecraft:iron_axe", "Break whole trees with an axe for a minute", 128, false, true, false, 0, 0, 60);
-skill.add("Fire Arrow", "skill.fire_arrow", "minecraft:arrow", "For a minute with an flame enchanted bow your arrows ignite hit blocks", 50, false, true, false, 0, 0, 60);
-skill.add("Better Shears", "skill.better_shears", "minecraft:shears", "Sharpness enchanted shears increase the radius for destruction of leaves", 500, true, false, true, 0, 0, null);
-skill.add("Cobweb Miner", "skill.cobweb_miner", "minecraft:cobweb", "Swords increase the radius for destruction of cobwebs", 250, true, false, true, 0, 0, null);
+//skill.add("Dolphin", "skill.dolphin", "minecraft:fire_coral", "Swim like a dolphin for a minute", 25, false, true, false, 0, 0, 60);
+//skill.add("Block Up", "skill.block_up", "minecraft:diamond_pickaxe", "Break a block and the block above for a minute", 25, false, true, false, 0, 0, 60);
+//skill.add("Block Down", "skill.block_down", "minecraft:diamond_pickaxe", "Break a block and the block below for a minute", 25, false, true, false, 0, 0, 60);
+skill.add("Timber", "skill.timber", "minecraft:iron_axe", "Break whole trees with an axe", 4096, true, false, true, 0, 0, null);
+//skill.add("Fire Arrow", "skill.fire_arrow", "minecraft:arrow", "For a minute with an flame enchanted bow your arrows ignite hit blocks", 50, false, true, false, 0, 0, 60);
+skill.add("Better Shears", "skill.better_shears", "minecraft:shears", "Sharpness enchanted shears increase the radius for destruction of leaves", 1024, true, false, true, 0, 0, null);
+//skill.add("Cobweb Miner", "skill.cobweb_miner", "minecraft:cobweb", "Swords increase the radius for destruction of cobwebs", 250, true, false, true, 0, 0, null);
 
 death_loc_map = map.new();
 
@@ -32,7 +34,7 @@ death_loc_map = map.new();
 leaves_tag = block.getTag("minecraft:leaves");
 //prop_persistent = block.getProperty("persistent");
 
-msg("dev", "§bSurvival §rloaded.");
+msg("dev", text.new("§bSkills §rloaded."));
 @wait
 wait();
 //Wenn Event aus Survival-Welten, dann wird er verarbeitet
@@ -47,6 +49,51 @@ if(world.isSurvName(world_name)) {
 }
 goto("wait");
 
+@snuvi_click
+item = inv.getItem(inv, inv_slot);
+item.removeFlag(item, "HIDE_DESTROYS");
+title_string = string.text(inv_title);
+if(item == scroll_menu_item) {
+	if(title_string == "Lumberjack") {
+		if(!player.unlockedLumberjack(player)) {
+			msg.prefix(player, prefix_skill, "Skillshop is locked. Do a quest first.");
+			goto("wait");
+		}
+		skill.showShop(player, "skill.timber", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
+		//skill.showShop(player, "skill.timber", "skill.better_shears", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
+		goto("wait");
+	}
+	if(title_string == "Mage") {
+		//skill.showShop(player, "skill.subcu_inv", "skill.comeback", "skill.head_human", "skill.head_monster", "skill.fly10min", "skill.grow", "skill.haste", "skill.speed", "skill.jump_boost", "skill.dolphin", "skill.block_up", "skill.block_down", "skill.fire_arrow", "skill.cobweb_miner", null, null, null, null);
+	}
+	goto("wait");
+}
+if(title_string == "Skillshop") {
+	if(item == null) {
+		goto("wait");
+	}
+	skill_name = string.removeFormat(string.text(item.getName(item)));
+	if(skill_name == "") {
+		goto("wait");
+	}
+	tech_name = skill.getTechName(skill_name);
+	if(skill.isPermanent(tech_name)) {
+		amount = skill.getAmount(player, tech_name);
+		if(amount >= 1) {	
+			goto("wait");
+		}
+	}
+	cost = skill.getCost(tech_name);
+	if(!hasEnoughMoney(player, cost)) {
+		msg.prefix(player, prefix_skill, "Not enough snuvis.");
+		goto("wait");
+	}
+	money.sub(player, cost);
+	skill.addAmount(player, tech_name, 1);
+	inv.setItem(inv, inv_slot, skill.getShopItem(player, tech_name));
+}
+goto("wait");
+
 @player_data_tick
 if(var == "fly") {
 	tpBottom(player);
@@ -89,7 +136,7 @@ if(isPlayer(living_entity)) {
 	if(skill.isActivated(player, "skill.subcu_inv") && amount > 0) {
 		new_amount = amount - 1;
 		skill.setAmount(player, "skill.subcu_inv", new_amount);
-		msg.prefix(player, prefix_skill, string.concat("Used Subcutaneous Inventory. New amount: ", text.number(new_amount)));
+		msg.prefix(player, prefix_skill, string.concat("Used Subcutaneous Inventory. New amount: ", string.number(new_amount)));
 	} else {
 		player.dropInventory(player, loc);
 	}
@@ -134,6 +181,7 @@ if(isPlayer(killer)) {
 goto("wait");
 
 @block_break
+goto("wait");
 duration = data.getTimer(player, "block_down");
 if(duration > 0) {
 	do = true;
@@ -169,7 +217,7 @@ if(block_type == "minecraft:cobweb") {
 		goto("wait");
 	}
 	hand_item = living.getHand(player);
-	if(!item.hasTag(sword_tag, hand_item)) {
+	if(!item.hasTag(hand_item, sword_tag)) {
 		goto("wait");
 	}
 	amount = skill.getAmount(player, "skill.cobweb_miner");
@@ -199,7 +247,7 @@ if(block_type == "minecraft:cobweb") {
 	}
 	goto("wait");
 }
-if(block.hasTag(leaves_tag, block)) {
+if(block.isLeaves(block)) {
 	if(cancel) {
 		goto("wait");
 	}

+ 40 - 59
survival/survival.txt

@@ -20,24 +20,9 @@ afk_loop_map = map.new();
 survival_respawn = set.new();
 
 overworld = world.getOverWorld();
-moveid_gamesspawn = event.addMoveData(loc.new(overworld, 219, 66, 253), loc.new(overworld, 223, 69, 258), 5, -1);
-moveid_mobarena = event.addMoveData(loc.new(overworld, 89, 71, -1), loc.new(overworld, 93, 72.9, -5), 5, -1);
-
-move_id_afk_loop = event.addMoveData(loc.new(overworld, 208, 69, 226), loc.new(overworld, 209, 69.5, 227), 5, -1);
-move_id_afk_loop_2 = event.addMoveData(loc.new(overworld, 208, 62, 242), loc.new(overworld, 209, 62.5, 243), 5, -1);
-move_id_afk_loop_3 = event.addMoveData(loc.new(overworld, 210, 62, 242), loc.new(overworld, 211, 62.5, 243), 5, -1);
-move_id_afk_loop_4 = event.addMoveData(loc.new(overworld, 206, 62, 246), loc.new(overworld, 207, 62.5, 247), 5, -1);
-move_id_afk_loop_5 = event.addMoveData(loc.new(overworld, 212, 62, 246), loc.new(overworld, 213, 62.5, 247), 5, -1);
-
-afk_loop_ids = set.new();
-set.add(afk_loop_ids, move_id_afk_loop);
-set.add(afk_loop_ids, move_id_afk_loop_2);
-set.add(afk_loop_ids, move_id_afk_loop_3);
-set.add(afk_loop_ids, move_id_afk_loop_4);
-set.add(afk_loop_ids, move_id_afk_loop_5);
-
-pvp_banned = set.new();
-set.add(pvp_banned, read.uuid("ff03a205-6f11-4d77-a70f-88dacc3938b1"));
+moveid_gamesspawn = event.addMoveData(loc.new(overworld, 93, 61, -31), loc.new(overworld, 97, 65, -30), 5, -1);
+moveid_creaspawn = event.addMoveData(loc.new(overworld, 102, 60, -20), loc.new(overworld, 103, 64, -16), 5, -1);
+moveid_mobarena = event.addMoveData(loc.new(overworld, 81, 59, -28), loc.new(overworld, 82, 63, -24), 5, -1);
 
 config = getScriptVar("server_config");
 adventure_chest_loc = loc.new(overworld, 177, 74, 237);
@@ -46,6 +31,11 @@ mobarena_spawn = loc.new(overworld, 1150.5, -5, 1087, 90, 0);
 prefix_money = "§2Money";
 death_loc_map = map.new();
 
+redstone_mat = material.get("redstone");
+ice_mat = material.get("ice");
+blue_ice_mat = material.get("blue_ice");
+packed_ice_mat = material.get("packed_ice");
+
 ench_flame = enchantment.get("flame");
 ench_unbreaking = enchantment.get("unbreaking");
 ench_sharpness = enchantment.get("sharpness");
@@ -102,20 +92,14 @@ if(event == "player_move") {
 		player.teleport(player, mobarena_spawn, false);
 		goto("wait");
 	}
-	goto("wait");
 	if(id == moveid_gamesspawn) {
 		player.setBackPosLoc(player, world.getServerSpawn());
 		player.teleport(player, world.getGamesSpawn(), false);
 		goto("wait");
 	}
-	if(set.contains(afk_loop_ids, id)) {
-		player_uuid = player.getUuid(player);
-		now_time = time.getMillis();
-		time = map.getOrDefault(afk_loop_map, player_uuid, 0);
-		if(now_time - time > 9000) { //9 Sekunden
-			map.add(afk_loop_map, player_uuid, now_time);
-			money.addBoost(player, 1);
-		}
+	if(id == moveid_creaspawn) {
+		player.setBackPosLoc(player, world.getServerSpawn());
+		player.teleport(player, world.getCreativeSpawn(), false);
 		goto("wait");
 	}
 	goto("wait");
@@ -197,11 +181,6 @@ if(!hasPvpOn(damager)) {
 	msg.prefix(damager, "§5PvP", "You have PvP disabled.");
 	goto("wait");
 }
-if(set.contains(pvp_banned, player.getUuid(damager))) {
-	cancel = true;
-	msg.prefix(damager, "§5PvP", "PvP is permanently disabled for you.");
-	goto("wait");
-}
 if(!hasPvpOn(player)) {
 	cancel = true;
 	msg.prefix(damager, "§5PvP", string.concat(player.getName(player), " has PvP disabled."));
@@ -224,25 +203,23 @@ if(human_name == "Banker") {
 	inv.open(bankmenu, player);
 	goto("wait");
 }
-goto("wait");
-if(entity_name == "Administrator\n§cmarvinius") {
+if(human_name == "§cMarvin") {
 	item = living.getHand(player);
 	item_name = item.getName(item);
-	if(removeFormat(item_name) == "Beer") {
+	if(item_name != null && string.text(item_name) == "§fBeer") {
 		sound.spawnForPlayer(player, $sound_drink_milk, $sound_category_master, 1, 1);
 		msg.prefix(player, "§cmarvinius", "Prost!");
-	}
-	else{
+	} else {
 		msg.prefix(player, "§cmarvinius", "Ich mag Gösser.");
 	}
 	goto("wait");
 }
-if(entity_name == "Owner\n§4kajetanjohannes") {
+if(human_name == "§4Kajetan") {
 	item = living.getHand(player);
 	item_type = item.getType(item);
 	sound.spawnForPlayer(player, $sound_slime_place, $sound_category_master, 1, 1);
-	if(item_type == "minecraft:redstone") {
-		rand_number = math.roundup(math.random(0,3));
+	if(item_type == redstone_mat) {
+		rand_number = math.random(0, 3);
 		if(rand_number == 0){
 			temp_message = "WUSIWUSIWUSIWUSIWUSIWUSIWUSIWUSI";
 		}
@@ -258,15 +235,15 @@ if(entity_name == "Owner\n§4kajetanjohannes") {
 		msg.prefix(player, "§4kajetanjohannes", temp_message);
 		goto("wait");
 	}
-	if(item_type == "minecraft:ice" || item_type == "minecraft:blue_ice" || item_type == "minecraft:packed_ice"){
+	if(item_type == ice_mat || item_type == blue_ice_mat || item_type == packed_ice_mat){
 		msg.prefix(player, "§4kajetanjohannes", "§bDas sieht nach mir aus.");
 	}else{
 		msg.prefix(player, "§4kajetanjohannes", "wusi");
 	}
 	goto("wait");
 }
-if(entity_name == "Supporter\n§bImKillerKatze") {
-	rand_number = math.roundup(math.random(0,25));
+if(human_name == "§bNico") {
+	rand_number = math.random(0, 25);
 	if(rand_number > 13){
 		sound.spawnForPlayer(player, $sound_cat, $sound_category_master, 1, 1);
 		msg.prefix(player, "§bImKillerKatze", "Miau");
@@ -276,29 +253,34 @@ if(entity_name == "Supporter\n§bImKillerKatze") {
 		sound.spawnForPlayer(player, $sound_stray_cat, $sound_category_master, 1, 1);
 		msg.prefix(player, "§bImKillerKatze", "Miau!");
 		goto("wait");
-	}else{
+	} else {
 		sound.spawnForPlayer(player, $sound_purreow, $sound_category_master, 1, 1);
 		msg.prefix(player, "§bImKillerKatze", "Schnurrr!");
 		goto("wait");
 	}
+	goto("wait");
 }
-if(entity_name == "Administrator\n§cwertibaldi") {
+if(human_name == "§cFabio") {
 	msg.prefix(player, "§cwertibaldi", "Kann grad nicht, bin im Einsatz für den Katastrophenschutz.");
 	goto("wait");
 }
-if(entity_name == "Administrator\n§cMentorMentos") {
+if(human_name == "§cLucas") {
 	item = living.getHand(player);
 	item_name = item.getName(item);
-	if(removeFormat(item_name) == "Beer") {
+	if(item_name != null && string.text(item_name) == "§fBeer") {
 		msg.prefix(player, "§cMentorMentos", "Folg mir auf Twitch! ");
 		msg(player, string.getLinkText("Klick mich an :D","https://www.twitch.tv/Mentor_Mentos"));
-	}else{
+	} else {
 		msg.prefix(player, "§cMentorMentos", "Ich mag Kölsch.");
 	}
 	goto("wait");
 }
-if(entity_name == "Moderator\n§9SirTerence7") {
-	rand_number = math.roundup(math.random(0,7));
+if(human_name == "§9Jan") {
+	if(player.isSneaking(player)){
+		msg.prefix(player, "§9SirTerence7", "Very secretive yes yes.");
+		goto("wait");
+	}
+	rand_number = math.random(0, 7);
 	if(rand_number < 4){
 		msg.prefix(player, "§9SirTerence7", "Mathe bla... bla... bla...");
 	}
@@ -314,18 +296,16 @@ if(entity_name == "Moderator\n§9SirTerence7") {
 	if(rand_number == 7){
 		msg.prefix(player, "§9SirTerence7", "*wechselt voller Faszination zwischen scheinbar zusammenhangslosen Themen hin und her*");
 	}
-
-
-	rand_number = math.roundup(math.random(0,500));
+	rand_number = math.random(0, 500);
 	if(rand_number <= 2){
 		sound.spawnForPlayer(player, $music_chirp, $sound_category_master, 1, 1);
-	}else{
-		rand_pitch = math.roundup(math.random(4, list.getSize(Sound_Pitch_List)-5));
+	} else {
+		rand_pitch = math.random(4, list.getSize(Sound_Pitch_List) - 5);
 		if(rand_number < 200){
 			pitch1 = list.getIndex(Sound_Pitch_List, rand_pitch-4);
 			pitch2 = list.getIndex(Sound_Pitch_List, rand_pitch);
 			pitch3 = list.getIndex(Sound_Pitch_List, rand_pitch+3);
-		}else{
+		} else {
 			if(rand_number < 300){
 				pitch1 = list.getIndex(Sound_Pitch_List, rand_pitch-4);
 				pitch1_2 = list.getIndex(Sound_Pitch_List, rand_pitch-2);
@@ -336,7 +316,7 @@ if(entity_name == "Moderator\n§9SirTerence7") {
 				sound.spawnForPlayer(player, $sound_harp, $sound_category_master, 0.5, pitch3_2);
 				sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 0.75, pitch1_2);
 				sound.spawnForPlayer(player, $sound_flute, $sound_category_master, 0.75, pitch3_2);
-			}else{
+			} else {
 				pitch1 = list.getIndex(Sound_Pitch_List, rand_pitch-3);
 				pitch2 = list.getIndex(Sound_Pitch_List, rand_pitch);
 				pitch3 = list.getIndex(Sound_Pitch_List, rand_pitch+4);
@@ -351,8 +331,8 @@ if(entity_name == "Moderator\n§9SirTerence7") {
 	}
 	goto("wait");
 }
-if(entity_name == "Moderator\n§9Mareeeen") {
-	rand_number = math.roundup(math.random(0,5));
+if(human_name == "§9Mareen") {
+	rand_number = math.random(0, 5);
 	if(rand_number > 1){
 		msg.prefix(player, "§9Mareeeen", "Wo ist die Schokolade versteckt!?");
 	}else{
@@ -361,6 +341,7 @@ if(entity_name == "Moderator\n§9Mareeeen") {
 	}
 	goto("wait");
 }
+goto("wait");
 if(entity_name == "Info-Point") {
 	msg(player, string.getSpacer());
 	msg(player, string.getClickText("§r [§cclick§r] [§eSurvival§r]", "/infopoint1"));

+ 5 - 0
survival/teleporter.txt

@@ -108,6 +108,11 @@ if(block.getType(block) == dispenser_mat) {
 			msg.prefix(player, "§5Teleport", "No receiver found!");
 			goto("main");
 		}
+		teleporter_world = loc.getWorld(block_loc);
+		if(!world.isSurvName(world.getName(teleporter_world))) {
+			msg.prefix(player, "§5Teleport", "Not allowed in this world!");
+			goto("main");
+		}
 		world = world.get(string.text(list.getIndex(lore_list, 1)));
 		x = read.number(string.text(list.getIndex(lore_list, 2)));
 		y = read.number(string.text(list.getIndex(lore_list, 3)));

+ 208 - 0
survival/timber.txt

@@ -0,0 +1,208 @@
+event.load("block_break");
+
+tag_log_burn = block.getTag("minecraft:logs_that_burn");
+axe_tag = item.getTag("km:axe");
+
+oak_mat = material.get("OAK_LOG");
+spruce_mat = material.get("SPRUCE_LOG");
+birch_mat = material.get("BIRCH_LOG");
+jungle_mat = material.get("JUNGLE_LOG");
+acacia_mat = material.get("ACACIA_LOG");
+dark_oak_mat = material.get("DARK_OAK_LOG");
+vine_mat = material.get("VINE");
+
+horizontal_dist_map = map.new();
+map.add(horizontal_dist_map, oak_mat, 8);
+map.add(horizontal_dist_map, spruce_mat, 8);
+map.add(horizontal_dist_map, birch_mat, 2);
+map.add(horizontal_dist_map, jungle_mat, 8);
+map.add(horizontal_dist_map, acacia_mat, 8);
+map.add(horizontal_dist_map, dark_oak_mat, 5);
+
+msg.string("dev", "§bTimber §rloaded.");
+@wait
+wait();
+loc = entity.getLocation(player);
+world_name = world.getName(loc.getWorld(loc));
+if(world.isCreativeName(world_name)) {
+	goto("wait");
+}
+if(event == "block_break") {
+	if(cancel) {
+		goto("wait");
+	}
+	if(!skill.hasEnough(player, "skill.timber")) {
+		goto("wait");
+	}
+	if(!skill.isActivated(player, "skill.timber")) {
+		goto("wait");
+	}
+	if(!player.checkHandsForTag(player, axe_tag)) {
+		goto("wait");
+	}
+	tree_type = block.getType(block);
+	horizontal_spec_dist = map.getOrDefault(horizontal_dist_map, tree_type, 2);
+	block_loc = block.getLocation(block);
+	origin_x = loc.getX(block_loc);
+	origin_z = loc.getZ(block_loc);
+	if(block.isTree(block_loc)) {
+		block.removeTree(block_loc);
+	}
+}
+goto("wait");
+
+function block.isTree(break_loc) {
+	block = block.get(break_loc);
+	if(!block.hasTag(block, $tag_log_burn)) {
+		return false;
+	}
+	//neighbours on same level found? return false
+	mod_block = block.mod(block, 1, 0, 0);
+	if(block.getType(mod_block) == $tree_type) {
+		return false;
+	}
+	mod_block = block.mod(mod_block, -2, 0, 0);
+	if(block.getType(mod_block) == $tree_type) {
+		return false;
+	}
+	mod_block = block.mod(mod_block, 1, 0, 1);
+	if(block.getType(mod_block) == $tree_type) {
+		return false;
+	}
+	mod_block = block.mod(mod_block, 0, 0, -2);
+	if(block.getType(mod_block) == $tree_type) {
+		return false;
+	}
+	mod_block = block.mod(mod_block, 0, 0, 1);
+	//search top logs
+	mod_block = block.mod(mod_block, 0, 1, 0);
+	while(block.getType(mod_block) == $tree_type) {
+		mod_block = block.mod(mod_block, 0, 1, 0);
+	}
+	if(block.isLeaves(mod_block)) {
+		if(!block.isPersistent(mod_block)){
+			return true;
+		}
+		return false;
+	}
+	else{
+		if($tree_type == "minecraft:acacia_log") {
+			for(i = 0; i < 5; i++) {
+				if(block.isLeaves(mod_block) && !block.isPersistent(mod_block)) {
+					return true;
+				}
+				mod_block = block.mod(mod_block, 0, 1, 0);
+			}
+		}
+		return false;
+	}
+	return true;
+}
+
+function block.removeTree(break_loc) {
+	c = 0;
+	$tree_list = list.new();
+	$tree_set = set.new();
+	list.add($tree_list, break_loc);
+	while(list.getSize($tree_list) != 0) {
+		index = list.getSize($tree_list) - 1;
+		loc = list.getIndex($tree_list, index);
+		list.removeIndex($tree_list, index);
+		mod_loc = loc.mod(loc, 1, 0, 0);
+		block.addIfTreePart(mod_loc);
+		mod_loc = loc.mod(mod_loc, -2, 0, 0);
+		block.addIfTreePart(mod_loc);
+		mod_loc = loc.mod(mod_loc, 1, 0, 1);
+		block.addIfTreePart(mod_loc);
+		mod_loc = loc.mod(mod_loc, 0, 0, -2);
+		block.addIfTreePart(mod_loc);
+		mod_loc = loc.mod(mod_loc, 0, 1, 1);
+		block.addIfTreePart(mod_loc);
+		if($tree_type == acacia_mat) {
+			mod_loc = loc.mod(mod_loc, 1, 0, 0);
+			block.addIfTreePart(mod_loc);
+			mod_loc = loc.mod(mod_loc, -2, 0, 0);
+			block.addIfTreePart(mod_loc);
+			mod_loc = loc.mod(mod_loc, 1, 0, 1);
+			block.addIfTreePart(mod_loc);
+			mod_loc = loc.mod(mod_loc, 0, 0, -2);
+			block.addIfTreePart(mod_loc);
+		}
+		if($tree_type == dark_oak_mat) {
+			mod_loc = loc.mod(mod_loc, 1, 0, 1);
+			block.addIfLog(mod_loc);
+			mod_loc = loc.mod(mod_loc, -2, 0, 0);
+			block.addIfLog(mod_loc);
+			mod_loc = loc.mod(mod_loc, 0, 0, -2);
+			block.addIfLog(mod_loc);
+			mod_loc = loc.mod(mod_loc, 2, 0, 0);
+			block.addIfLog(mod_loc);
+		}
+		c++;
+		if(c > 1000) {
+			break;
+		}
+	}
+	return;
+}
+
+function block.addIfLog(location) {
+	if(block.isLog(location)) {
+		block.addTreePart(location);
+	}
+}
+
+function block.isLog(location) {
+	horizontal_dist = math.abs($origin_x - loc.getX(location));
+	if(horizontal_dist > $horizontal_spec_dist) {
+		return false;
+	}
+	horizontal_dist = math.abs($origin_z - loc.getZ(location));
+	if(horizontal_dist > $horizontal_spec_dist) {
+		return false;
+	}
+	temp_type = block.getType(location);
+	if(temp_type == $tree_type) {
+		return true;
+	}
+	set.add($tree_set, location);
+	return false;
+}
+
+function block.addIfTreePart(location) {
+	if(block.isTreePart(location)) {
+		block.addTreePart(location);
+	}
+}
+
+function block.isTreePart(location) {
+	horizontal_dist = math.abs($origin_x - loc.getX(location));
+	if(horizontal_dist > $horizontal_spec_dist) {
+		return false;
+	}
+	horizontal_dist = math.abs($origin_z - loc.getZ(location));
+	if(horizontal_dist > $horizontal_spec_dist) {
+		return false;
+	}
+	block = block.get(location);
+	temp_type = block.getType(block);
+	if(temp_type == $tree_type) {
+		return true;
+	}
+	/*if(temp_type == vine_mat) {
+		return true;
+	}
+	if(block.isLeaves(block) && !block.isPersistent(block)) {
+		return true;
+	}*/
+	set.add($tree_set, location);
+	return false;
+}
+
+function block.addTreePart(location) {
+	if(!set.contains($tree_set, location)) {
+		list.add($tree_list, location);
+		set.add($tree_set, location);
+		block.break(block.get(location), $player);
+	}
+}

+ 1 - 1
system/chat.txt

@@ -254,7 +254,7 @@ if(damage_type == "player") {
 	killer_name = player.getName(killer);
 	item = living.getHand(killer);
 	if(item != null && item.hasName(item)) {
-		message = text.merge(text.new(string.concat(death_prefix, fullname, colorcodedeath, " was killed by ", killer_name, " with §b§o")), text.item(item.getName(item), item), text.new("§9."));
+		message = text.merge(text.new(string.concat(death_prefix, fullname, colorcodedeath, " was killed by ", killer_name, " with ")), text.item(text.new(string.concat("§b§o", string.text(item.getName(item)))), item), text.new("§9."));
 	} else {
 		list.clear(list);
 		list.add(list, string.concat(death_prefix, fullname, colorcodedeath, " got their last honour from ", killer_name, "."));

+ 79 - 126
system/commands.txt

@@ -37,8 +37,8 @@ command.add("removeinvstats");
 command.add("sfstats");
 command.add("topsfstats");
 command.add("removesfstats");
-//command.add("questanswer");
-//Vanilla überschreiben
+command.add("questanswer");
+//Overwrite vanilla
 command.add("butcher");
 
 //--- Register commands shown on /help here ---
@@ -73,7 +73,7 @@ command.register("game", "marvs minigame shit");
 command.register("gamemode", "Change gamemode");
 command.register("gamerule", "Manage gamerules");
 command.register("games", "Teleports to games-spawn");
-//command.register("giveup", "Giveup a quest");
+command.register("giveup", "Giveup a quest");
 command.register("grow", "Grow seeds");
 command.register("hat", "Be fame with a new hat");
 command.register("head", "Gives you the head of a player");
@@ -109,7 +109,7 @@ command.register("playtime", "Shows your playtime");
 command.register("plot", "Plot-Commands");
 command.register("potion", "Adds a potion effects to an item");
 command.register("pvp", "Toggles pvp");
-//command.register("quest", "Quest-Commands");
+command.register("quest", "Quest-Commands");
 command.register("rank", "Shows your available ranks");
 command.register("repair", "Repairs your item in mainhand");
 command.register("ride", "Rides an entity");
@@ -124,10 +124,8 @@ command.register("setservermessage", "Sets the server-message in the serverlist"
 command.register("setspawn", "Changes a spawn");
 command.register("shop", "Shop-Commands");
 command.register("sign", "Edit a sign");
-command.register("silentban", "Silently bans a player");
 command.register("silentjoin", "Toggles your silentjoins");
-command.register("silentkick", "Silently kicks a player");
-//command.register("skills", "Shows all skills");
+command.register("skills", "Shows all skills");
 command.register("skipnight", "Skips the night");
 command.register("spawn", "Teleports to spawn");
 command.register("speed", "Sets your speed");
@@ -167,8 +165,6 @@ command.register("yeet", "Throws you in sight");
 command.registerAlias("as", "armorstand");
 command.registerAlias("h", "home");
 command.registerAlias("skull", "head");
-command.registerAlias("skick", "silentkick");
-command.registerAlias("sban", "silentban");
 command.registerAlias("r", "answer");
 command.registerAlias("pardon", "unban");
 command.registerAlias("j", "jumpto");
@@ -184,7 +180,7 @@ command.registerAlias("l", "leave");
 command.registerAlias("hub", "leave");
 command.registerAlias("t", "teammsg");
 command.registerAlias("v", "vanish");
-//command.registerAlias("fuckit", "giveup");
+command.registerAlias("fuckit", "giveup");
 command.registerAlias("thor", "lightning");
 
 composter_par = particle.get("COMPOSTER");
@@ -349,9 +345,7 @@ set.add(operation_set, "MULTIPLY_SCALAR_1");
 not_blocked_cmd = set.new();
 set.add(not_blocked_cmd, "leave");
 set.add(not_blocked_cmd, "ban");
-set.add(not_blocked_cmd, "silentban");
 set.add(not_blocked_cmd, "kick");
-set.add(not_blocked_cmd, "silentkick");
 set.add(not_blocked_cmd, "warn");
 set.add(not_blocked_cmd, "tempban");
 set.add(not_blocked_cmd, "mute");
@@ -451,8 +445,6 @@ set.add(consoleCommands, "list");
 set.add(consoleCommands, "memory");
 set.add(consoleCommands, "mute");
 set.add(consoleCommands, "say");
-set.add(consoleCommands, "silentban");
-set.add(consoleCommands, "silentkick");
 set.add(consoleCommands, "start");
 set.add(consoleCommands, "tempban");
 set.add(consoleCommands, "tempfly");
@@ -546,7 +538,7 @@ RickRollSoundDists = getRickRollSoundDists();
 rick_sounds_amount = list.getSize(RickRollSoundDists);
 bobbyCarSounds = getBobbyCarSounds();
 bobbyCarSoundDists = getBobbyCarSoundDists();
-rick_sounds_amount = list.getSize(bobbyCarSoundDists);
+bcar_sounds_amount = list.getSize(bobbyCarSoundDists);
 item_flags = getItemFlags();
 
 sound_category_master = sound.getCategory("MASTER");
@@ -607,11 +599,11 @@ if(event == "vote") {
 		p_id = player.getId(p_uuid);
 		player.addVotePoints(p_id, 1);
 		if(from == "minecraft-server.eu") {
-			msg("online", text.merge(text.new(string.getPrefix(prefix_vote)), text.new(string.concat(" §b", name, "§r has voted! ")), string.getLinkText("[§cminecraft-server.eu§r]", "https://minecraft-server.eu/vote/index/2227F")));
+			msg("online", text.merge(text.new(string.getPrefix(prefix_vote)), text.new(string.concat(" §b", name, "§r has voted! ")), string.getLinkText("[§bminecraft-server.eu§r]", "https://minecraft-server.eu/vote/index/2227F")));
 		} else {
-			msg("online", text.merge(text.new(string.getPrefix(prefix_vote)), text.new(string.concat(" §b", name, "§r has voted! ")), string.getLinkText("[§cminecraft-server-list.com§r]", "https://minecraft-server-list.com/server/478200/vote/")));
+			msg("online", text.merge(text.new(string.getPrefix(prefix_vote)), text.new(string.concat(" §b", name, "§r has voted! ")), string.getLinkText("[§bminecraft-server-list.com§r]", "https://minecraft-server-list.com/server/478200/vote/")));
 		}
-		last_vote_time = player.getLastVoteTime(player);
+		last_vote_time = player.getLastVoteTime(p_id);
 		new_streak = player.getVoteStreak(p_id);
 		if(last_vote_time == 0) {
 			new_streak++;
@@ -620,14 +612,11 @@ if(event == "vote") {
 		} elseif(!isSameDay(last_vote_time, now_time)) {
 			new_streak = 1;
 		}
-		/*if(new_streak == 14) {
+		if(new_streak == 7) {
 			new_streak = 0;
-			msg.online(prefix_vote, string.concat(player.getName(p_uuid), " reached a votestreak of 14 and each player online (survival) gets a sapphire."));
-			sapphire = item.getSapphire();
-			world.giveItem(world.getOverWorld(), sapphire);
-			world.giveItem(world.getTheNether(), sapphire);
-			world.giveItem(world.getTheEnd(), sapphire);
-		}*/
+			msg.online(prefix_vote, string.concat(player.getName(p_uuid), " reached a votestreak of 7 and gets a sapphire (§b/mailbox§r)."));
+			mailbox.sendItem(p_id, item.getSapphire());
+		}
 		player.setVoteStreak(p_id, new_streak);
 		player.setLastVoteTime(p_id, now_time);
 	}
@@ -764,7 +753,7 @@ if(event == "player_quit") {
 	map.remove(afk_checker_map, uuid);
 	player.setAfk(player, false);
 	list.remove(jailed_list, player.getUuid(player));
-	/*if(player.hasQuest(player)) {
+	if(player.hasQuest(player)) {
 		script_id = quest.getFromPlayer(player);
 		script = script.getFromId(script_id);
 		if(script == null) {
@@ -775,7 +764,7 @@ if(event == "player_quit") {
 		setScriptVar("player", player);
 		modTimer.scriptCallEvent("quest_term", script);
 		quest.term(script, player);
-	}*/
+	}
 	if(player.isInParty(player)) {
 		party.kickPlayer(player, "logout");
 	}
@@ -955,13 +944,16 @@ if(event == "snuvi_click") {
 		goto("wait");
 	}
 	if(title_string == "Skills") {
-		if(item.getType(item) == null) {
+		if(item == null) {
+			goto("wait");
+		}
+		skill_name = string.removeFormat(string.text(item.getName(item)));
+		if(skill_name == "") {
 			goto("wait");
 		}
-		skill_name = string.removeFormat(item.getName(item));
 		tech_name = skill.getTechName(skill_name);
 		//Toggle skills
-		if(skill.isToggleable(skill_name)) {
+		if(skill.isToggleable(tech_name)) {
 			if(skill.isActivated(player, tech_name)) {
 				skill.setActivated(player, tech_name, false);
 			} else {
@@ -971,13 +963,15 @@ if(event == "snuvi_click") {
 			goto("wait");
 		}
 		//Activate skill
-		if(skill.isActive(skill_name)) {
+		if(skill.isActive(tech_name)) {
 			player_loc = entity.getLocation(player);
 			world_name = world.getName(loc.getWorld(player_loc));
 			if(!world.isSurvName(world_name)) {
 				msg.prefix(player, prefix_skill, "You can´t use this in this world.");
 				goto("wait");
 			}
+			goto("wait");
+			
 			if(tech_name == "skill.fire_arrow") {
 				duration = data.getTimer(player, tech_name);
 				if(duration > 0) {
@@ -994,22 +988,6 @@ if(event == "snuvi_click") {
 				}
 				goto("wait");
 			}
-			if(tech_name == "skill.timber") {
-				duration = data.getTimer(player, "timber");
-				if(duration > 0) {
-					msg.prefix(player, prefix_skill, "Skill already active.");
-					goto("wait");
-				}
-				amount = skill.getAmount(player, "skill.timber");
-				if(amount > 0) {
-					status.addTimed(player, 53, 1200, "Timber");
-					data.setTimer(player, "timber", 1200);
-					new_amount = amount - 1;
-					skill.setAmount(player, "skill.timber", new_amount);
-					msg.prefix(player, prefix_skill, string.concat("Used Timber. New amount: ", string.number(new_amount)));
-				}
-				goto("wait");
-			}
 			if(tech_name == "skill.fly10min") {
 				duration = data.getTimer(player, "fly");
 				if(duration > 0) {
@@ -1385,13 +1363,11 @@ if(arg0 == "send") {
 		goto("wait");
 	}
 	to_player_id = player.getId(player.getUuid(to_name));
-	index = mailbox.getFreeIndex(to_player_id);
-	if(index == -1) {
+	if(!mailbox.sendItem(to_player_id, item)) {
 		msg.prefix(player, prefix_commands, "No free space in mailbox.");
 		goto("wait");
 	}
 	living.setEquip(player, read.slot("HAND"), null);
-	mailbox.setItem(to_player_id, index, item);
 	msg.send(player, to_name, prefix_commands, string.concat(player.getName(player), " sent you items to your mailbox."), true);
 	msg.prefix(player, prefix_commands, "Item sent to player.");
 	goto("wait");
@@ -1481,7 +1457,7 @@ rickIndex++;
 goto("wait");
 
 @bobbycar_play
-if(bobbycarIndex < rick_sounds_amount) {
+if(bobbycarIndex < bcar_sounds_amount) {
 	pitch = list.getIndex(bobbyCarSounds, bobbycarIndex);
 	PlayVoteSound(pitch);
 	ticks = list.getIndex(bobbyCarSoundDists, bobbycarIndex);
@@ -2201,6 +2177,7 @@ if(arg0 == "see") {
 		msg.prefix(player, prefix_quest, "/quest see");
 		goto("wait");
 	}
+	msg.prefix(player, prefix_quest, "Active quests:");
 	quest_map = quest.getIds();
 	iter = map.iterator(quest_map);
 	while(hasNext(iter)) {
@@ -2211,7 +2188,8 @@ if(arg0 == "see") {
 		if(script == null) {
 			continue;
 		}
-		msg.string(player, player.getName(key), " ", value);
+		q_name = script.getVar(script, "quest_name");
+		msg.string(player, string.concat( "§d- §r", player.getName(key), " ", string.number(value), " ", q_name));
 	}
 	goto("wait");
 }
@@ -2364,7 +2342,7 @@ if(size == 0) {
 	link2 = "https://minecraft-server-list.com/server/478200/vote/";
 	msg(player, text.merge(text.new(string.getPrefix(prefix_vote)), text.new(" "), string.getLinkText("minecraft-server.eu", link1)));
 	msg(player, text.merge(text.new(string.getPrefix(prefix_vote)), text.new(" "), string.getLinkText("minecraft-server-list.com", link2)));
-	p = player;
+	p_id = player.getId(player);
 } else {
 	if(!perm.has("user.other", player)) {
 		perm.no("user.other", player);
@@ -2375,11 +2353,11 @@ if(size == 0) {
 		msg.prefix(player, prefix_commands, "This player has never been online.");
 		goto("wait");
 	}
-	p = read.player(p_name);
+	p_id = player.getId(player.getUuid(p_name));
 }
-msg(player, text.merge(text.new(string.getPrefix(prefix_vote)), text.new(" "), text.new(string.concat("Votepoints: §6", string.number(player.getVotePoints(p))))));
-msg(player, text.merge(text.new(string.getPrefix(prefix_vote)), text.new(" "), text.new(string.concat("Votestreak: §6", string.number(player.getVoteStreak(p))))));
-last_vote_time = player.getLastVoteTime(p);
+msg(player, text.merge(text.new(string.getPrefix(prefix_vote)), text.new(" "), text.new(string.concat("Votepoints: §6", string.number(player.getVotePoints(p_id))))));
+msg(player, text.merge(text.new(string.getPrefix(prefix_vote)), text.new(" "), text.new(string.concat("Votestreak: §6", string.number(player.getVoteStreak(p_id))))));
+last_vote_time = player.getLastVoteTime(p_id);
 if(last_vote_time == 0) {
 	last_vote_time = "-";
 } else {
@@ -3327,6 +3305,11 @@ if(arg0 == "give") {
 		if(rank != null) {
 			offerRank(p, rank.getTechName(rank));
 		}
+		if(perm == "creative") {
+			if(loc.isInCreativeWorld(entity.getLocation(p))) {
+				player.setGamemode(p, "CREATIVE");
+			}
+		}
 	}
 	perm.addGroupToPlayer(p_id, perm_id);
 	msg.prefix(player, prefix_perms, string.concat("§rPerm §7", perm, "§r added to §7", p_name, "§r."));
@@ -4070,7 +4053,7 @@ elseif(arg0 == "timber") {
 	if(script != null) {
 		script.term(script);
 	}
-	script.startNamed("Timber", "utils/u_error", "survival/timber", "utils/u_general");
+	script.startNamed("Timber", "utils/u_error", "survival/timber", "utils/u_general", "utils/u_skills");
 }
 elseif(arg0 == "tiploop") {
 	script = script.get("tiploop");
@@ -4086,6 +4069,13 @@ elseif(arg0 == "trader") {
 	}
 	script.startNamed("Trader", "utils/u_error", "survival/trader", "utils/u_general");
 }
+elseif(arg0 == "skills") {
+	script = script.get("Skills");
+	if(script != null) {
+		script.term(script);
+	}
+	script.startNamed("Skills", "utils/u_error", "survival/skills", "utils/u_general", "utils/u_skills", "utils/u_quest");
+}
 elseif(arg0 == "story") {
 	/*script = script.get("Story");
 	if(script != null) {
@@ -4801,6 +4791,12 @@ elseif(arg0 == "skin") {
 			human.setSkin(human, "eyJ0aW1lc3RhbXAiOjE1ODM1NTQzMTAxOTQsInByb2ZpbGVJZCI6IjIzZjFhNTlmNDY5YjQzZGRiZGI1MzdiZmVjMTA0NzFmIiwicHJvZmlsZU5hbWUiOiIyODA3Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84NDQ0NDQzMjlhZWM0OTYxYTJmMWYzZWNiYTBmYjJkZTE1NDU1Mzk5MTFmYjFlODA4ZmM4NzQ2NDNlNTRkZTY2In19fQ==", "qBm2/mxwTcJIEu8r13WohKEiByJQAx1K+5ciGEZQ08PRHbA0hWvuJfLWcAdOERsPARFCAhfzUZOjhOlKr28CNwTYnP7gTf6njP8Q9roSkwGSAH5PDH4mkiS9zmZQwYUJVyzn//srq6XsASNzGFq2ChgRZV+yGAVJFeSFpHAEnhQxhsSM3xltUo37aRjWNI4wlVSqzzQh+oJvB6IDWR6evrK1sNHByhX8/UNcx+XYL6PqN/51g16gJNmhppTu3YFj25dIBSiUTFFGViNMf7eAYrRS36ZkyUHlvAiC8leIOvC6cwtGGngOG6Vun2DtVI+9xyxqQhQURYIl+DrFt1cqSLDfEDVosKsfh3f5ynxaZ61fBZIz0hWxHmWw40SV+1wgfh0XD6jsusdXk/rf9zuRInhAvx/9cBnUNELfDfTeFmpkaZFo2LYwBawcKePVj7yqNborJ30mcyApO68mSIVzYLxO0aKfjRQYzrJx452iBRu4K87DbwvyLPowTzWrBh3HDUXdG4/Qn+W7eR3n7UYTFDeZUXURq6tDX8NEEj2giiBzonlkqpTECAXufabpHo+JvST4L97WKLP5omsKWyzVYTVILBn1On54gra6ZZwga7j+r3o67CQfOh8qDL6ZRoNRA9nBkUZzgjzHcfUAbUsqhYgkBpb/iEkqU6VU2Nc/+tA=");
 		} elseif(name == "casino") {
 			human.setSkin(human, "ewogICJ0aW1lc3RhbXAiIDogMTY0MjkwMTQ3NDQ4OCwKICAicHJvZmlsZUlkIiA6ICJjNTZlMjI0MmNiZWY0MWE2ODdlMzI2MGRjMGNmOTM2MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJMSlI3MzEwMCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZTA3OTQ3ZTRhMmNkOGQ1NGVjZGE4N2ZiNTQxNTViODQ4Zjk4ZTE5ZDE1ZTBiOTVhYjAyOTAyNjEyM2JkODM5IgogICAgfQogIH0KfQ==", "H5PIINevEBYikUEDiKw388RE5pxSp07y1LidOW/uZJbBUXFCQoUWZTh3faR5uL51T5EXxyVWbiZD1LA14S3vIrtruW7yR+keJYGw5PCQDWaPi8Qq41wwtQ01GXnGviWIqrJ5CGjHBbSQ0jpfZ+wSs48rByKfoS35SFeYdPvJeAODj9Sz1BBrJ8D9hW+n6w721RkAMGtYHSDgjcjzB1on+li78RvSKa3kUm2jqU5jNdLURHoDJe5Yg3i2vfXGtHdspC6isgH5KVe2prwYlosanun0XIYc6L99u2deN88rF55IXWsE+12cVTzaMDj4/oQqFvyfd92TgCNmuTJvwQKG9bLyt8IXgb/E0sRLN5ymZ0gUIju1ZXeRYDppnxWiZlLV9KK1zpGQ82gLTtamfjpj7z3Sg9N51t3BhGCZ98Y2Rn6UDGJ//v/h0qm/tNP4trQEFp2qGpYW4hM/0sSHA8KvJlfGrHv22JboVNyOlXMEENpcp8KTpJfAD5mpYoLKM3CWFFN/yReTkdTFs3L/qvv1DtNsvunNqAd0NTwD5hzQoigt3Diq9ZyLgnmzCj6OISw6RQLMkdNNpeBgxorXpCJM+mqV5RmPQwU0EhTlnJD0RC8HfqTOmIREJ/aczd3DJ7rMiJpDaPqOpMnNetQR6m85k90pcDHY08UqB4ZfItChL9I=");
+		} elseif(name == "anna") {
+			human.setSkin(human, "ewogICJ0aW1lc3RhbXAiIDogMTYwODY0MTkwMTQwNCwKICAicHJvZmlsZUlkIiA6ICI5MzZmMTA3MTEzOGM0YjMyYTg0OGY2NmE5Nzc2NDJhMiIsCiAgInByb2ZpbGVOYW1lIiA6ICIwMDAwMDAwMDAwMDAwMDB4IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzg1ZjVjZjBhYjIzMjBjYzYzNWRlMzk0ZjI5MGQxOGRiMjQ0OTQxMjE1NzgzM2I4MjBlNTBlNWI5ZGY2ZjAxOWIiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==", "EqWlrWpzfw/O8/Z5Lzw46lfSoEXERZT02R44zMSHr/2zzKBOmCt4kkl3COwNfO5Fjpc7el/4YbJya3ZBpmiLuJzPgYVtCt0cWmbxK7NXA2662yFq2Gsr6JX7NweQ2B6vZ573nFIOf7o/bMp2VI0BRRqPDsAlV61A1QS/aGYLJo7Yoz4njBRVYqVnAOXxUz8ETTSSfwxRHZSzXsvJVlci2yCalGcbM8dlGqgC9jRvZ4RjEFivCM7ICZGP9pJy555yOdMQvjkvxhslDNMvgpBR1hHBZA93yhjcTIGjErhIy/YwU9X0rpT9VEVjhQuPP+DBmJDrxj2IkyAESKvrRTG6ziZw8XlbCcDz9Q0Ao9GWp+wRMzntNNeFkMi/oVmDgh2pKFgdD2OGlhpl01286Ixcvw3XU4pQYmkq9khqomwvwjxomE0H52IjHAiFn+fEdVEw5n1ZdKJsvHHs/brqgohpKE5s8C+Lh5KDy76IfCOeiQcbBgpDdm2P9XeiuVkjZX8Sht+e05/ctPQpNXh5jgyjvREbKzbisztkZWzEnYI+uCa15dIIVkS0gTc8kJYX9ZQ6Q5IMUPPVo3R0etWfJ2jVI+M947rtEeJ9tRKslVA1H5MmAh9mndYkbFrMwzS7BLWbp4lhU4L9EsoUpHvf2IxInuLD1sauhGjJmTLtibs9tu4=");
+		} elseif(name == "diver") {
+			human.setSkin(human, "ewogICJ0aW1lc3RhbXAiIDogMTU4ODI3MjUxMzM0OSwKICAicHJvZmlsZUlkIiA6ICI5MWYwNGZlOTBmMzY0M2I1OGYyMGUzMzc1Zjg2ZDM5ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJTdG9ybVN0b3JteSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83NmE1OTExN2QwMjljYzY2YTc1ODcwOWZlNjg1M2MzOTAzNDhhMzRlN2U4YWI3MGUzN2YwMDljZDZiMjNjOGM4IgogICAgfQogIH0KfQ==", "llLlXDuFY5yeOkob7ZKTO6CNdENXiZ23aGA6wNSc7FFZ2JyERjCvg6BLz3w0mJhZ4ORaZF0yHdFlmhXtBr/2ICneFtTCuyNjhPKzy3kBMhjAdtXq08cspNhmBZz0Otw0GyBs7hopEs8rqN3N9DtfZbTwVBjfXDW6tH3zUtU3Vv8/zb0l7/lU1NdZpOnkqXQmhv9G+vI/yknOqz4Go9tD+UoLjFP/vdRkor6Xbe9CEd9rqqc15eoSbIIPrPvgjnn8cLSE/OTdfdy4TpEK5GD1fPbZFkRVOC7fvbSNSwlhDq6ybrpbQ4MOhMeXlzGdyxGnGFT/r95qMZzGh1gW1chVu+2Nc8TdBinQ2L3AT2bYOorlNT4AsgBqU21dkm9vmBqsGqInwvUhwmjLt3f7G8wsQiHHswgNUuVUh1sG0HDb0oab7XP6+mEyDtRrIHAqIT4jqSe03vfKGXyEwgBUb97Z9vlRrfIfuFAaaeeRyCqI3s3HnhvsJQRrU2kKwm18+ZRaDOdTJh9KKy/8eLlIChmaZgs+Ied1bMbJIJd9zKsP9MmNRXxhPR7FyV5ffNjLXdmeutLcEurqQVpvV1uQ/4YrwJhT6idoxDhw6P/jef4D4so3fCHZtrrkDYs8q2kBR+tMuRrM83Vgnf2B/pQcgOtu3JeZOGXRC+h+0xDSCJN0I+w=");
+		} elseif(name == "mage_assistant") {
+			human.setSkin(human, "ewogICJ0aW1lc3RhbXAiIDogMTU5OTc0MzgxODcxMSwKICAicHJvZmlsZUlkIiA6ICJhMjk1ODZmYmU1ZDk0Nzk2OWZjOGQ4ZGE0NzlhNDNlZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJWaWVydGVsdG9hc3RpaWUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmE3ODc4MjIxYWQ4MDg3ODkzNjlmMmVkZjRkZmJlNWU5N2UzODJiNzZjODVmZWIzZmQyY2FkODgyYzk1NTJhNyIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9", "g3Ik0BT6M5jeFf7dHJ4hlLSJdiC5ivPcAb7gFP9+tlzH72N3eYrz+irExxpGQUsiro0NVEmlNt1R8aSBcY/wQDdLBOy9LHHt5MNpja72DDlFJUAW2fpXwJgfnCmqHDXzmVu3dfwyE0efZKOscFQzJQ5zbIGrEXjA2tOqEI/ZZMNehF5pNJZnusjGIpE/Abn9PxafnX/rvZAWr0BCip4wCUGbnfbDHlcn561HW50CAE8k3siqc+RJXXbnC24kYmblzuSBcHw33nCHRmlUiddyhzOE6NoWiZu9kNecOAapZmSZXCGMxyfwdy2n2Yg7ydxM8WTO7LOG1/o+ft/Ag24YxtHFkE6T2R03LvVYCTdodLzVQbXLqqMvGYcM7A6b6TPaHkMZhyumfH+GRoCI8kmyDEIqHrDbZOYhTyrpFBdz8WOOj1e5oz8nXQODMAC4ZEccj/5JishwPXxRdc9YFBkPJ63lJNN4boetMTdhDe3xe8tp8CoeNH3CaMn8eN0hkwmzXKx4I2qQPIO4NxW+bhJ1U6+qp8M0yllI2mRpZrTmTIhGHfq3nxJtUU+JcLMIaYiItnKlENH8vRP2UZrGq6SxiK0tE4A4wKGitXK/BAljLoUFLx8a+B/rbnmK8lqpWofaMeTeFw1W7m497ZaT7d3HLL0Jb/OR1vhP1NpJKZYhaLU=");
 		} else {
 		    msg.action(player, "Not supported name.");
 		}
@@ -4816,6 +4812,7 @@ elseif(arg0 == "name") {
 	for(i = 2; i < list.getSize(args); i++) {
 	    name = string.concat(name, " ", list.getIndex(args, i));
 	}
+	name = string.replace(name, "&", "§");
 	human.setName(human, name);
 	msg.action(player, string.concat("Human named to ", name, "§r."));
 	goto("wait");
@@ -5026,12 +5023,13 @@ if(p_name == "marvinius") {
 	msg.string(sender, "§cSorry §b¯\\_(._.)_/¯");
 	goto("wait");
 }
+sender_name = player.getName(sender);
 player.mute(p, true);
 if(size > 1) {
 	reason = string.concatList(args, " ", 1, size - 1);
-	msg.string("online", string.concat("§c", p_name, " was muted by ", player.getName(sender), ": ", reason));
+	msg.team(sender_name, string.concat("§cMuted ", p_name, ": ", reason));
 } else {
-	msg.string("online", string.concat("§c", p_name, " was muted by ", player.getName(sender), "."));
+	msg.team(sender_name, string.concat("§cMuted ", p_name, "."));
 }
 goto("wait");
 
@@ -5051,7 +5049,7 @@ if(p_name == "marvinius") {
 	msg.string(sender, "§cSorry §b¯\\_(._.)_/¯");
 	goto("wait");
 }
-msg.string("online", string.concat("§c", p_name, " was unmuted by ", player.getName(sender), "."));
+msg.team(player.getName(sender), string.concat("§cUnmuted ", p_name, "."));
 player.mute(p, false);
 goto("wait");
 
@@ -5071,38 +5069,13 @@ if(p_name == "marvinius") {
 	msg.string(sender, "§cSorry §b¯\\_(._.)_/¯");
 	goto("wait");
 }
+sender_name = player.getName(sender);
 if(size > 1) {
 	reason = string.concatList(args, " ", 1, size - 1);
-	msg.string("online", string.concat("§c", p_name, " was kicked by ", player.getName(sender), ": ", reason));
+	msg.team(sender_name, string.concat("§c", p_name, " got kicked: ", reason));
 } else {
 	reason = "You got kicked";
-	msg.string("online", string.concat("§c", p_name, " was kicked by ", player.getName(sender), "."));
-}
-ban.kick(p, text.new(reason));
-goto("wait");
-
-@silentkick
-if(size < 1) {
-	msg.prefix(sender, prefix_commands, "/silentkick <player> [reason]");
-	goto("wait");
-}
-p_name = list.getIndex(args, 0);
-if(!isOnline(p_name)) {
-	msg.prefix(sender, prefix_commands, "This player is not online.");
-	goto("wait");
-}
-p = read.player(p_name);
-p_name = player.getName(p);
-if(p_name == "marvinius") {
-	msg.string(sender, "§cSorry §b¯\\_(._.)_/¯");
-	goto("wait");
-}
-if(size > 1) {
-	reason = string.concatList(args, " ", 1, size - 1);
-	msg.string(sender, string.concat("§cYou silently kicked ", p_name, ": ", reason));
-} else {
-	reason = "You got kicked.";
-	msg.string(sender, string.concat("§cYou silently kicked ", p_name, "."));
+	msg.team(sender_name, string.concat("§c", p_name, " got kicked."));
 }
 ban.kick(p, text.new(reason));
 goto("wait");
@@ -5145,10 +5118,10 @@ if(p_name == "marvinius") {
 sender_name = player.getName(sender);
 if(size > 1) {
 	reason = string.concatList(args, " ", 1, size - 1);
-	msg.string("online", string.concat("§c", p_name, " got banned by ", sender_name, ". Reason: ", reason));
+	msg.team(sender_name, string.concat("§c", p_name, " got banned: ", reason));
 } else {
 	reason = "You got banned.";
-	msg.string("online", string.concat("§c", p_name, " got banned by ", sender_name, "."));
+	msg.team(sender_name, string.concat("§c", p_name, " got banned."));
 }
 ban.add(player.getUuid(p_name), reason, sender_name);
 if(isOnline(p_name)) {
@@ -5157,35 +5130,6 @@ if(isOnline(p_name)) {
 }
 goto("wait");
 
-@silentban
-if(size < 1) {
-	msg.prefix(sender, prefix_commands, "/silentban <player> [reason]");
-	goto("wait");
-}
-p_name = list.getIndex(args, 0);
-if(!checkIfEverOnline(p_name)) {
-	msg.prefix(sender, prefix_commands, "This player has never been online.");
-	goto("wait");
-}
-p_name = player.getName(player.getUuid(p_name));
-if(p_name == "marvinius") {
-	msg.string(sender, "§cSorry §b¯\\_(._.)_/¯");
-	goto("wait");
-}
-if(size > 1) {
-	reason = string.concatList(args, " ", 1, size - 1);
-	msg.string(sender, string.concat("§cYou silently banned ", p_name, ": ", reason));
-} else {
-	reason = "You got banned.";
-	msg.string(sender, string.concat("§cYou silently banned ", p_name, "."));
-}
-ban.add(player.getUuid(p_name), reason, player.getName(sender));
-if(isOnline(p_name)) {
-	p = read.player(p_name);
-	ban.kick(p, text.new(reason));
-}
-goto("wait");
-
 @unban
 if(size != 1) {
 	msg.prefix(sender, prefix_commands, "/unban <player>");
@@ -5198,7 +5142,7 @@ if(!checkIfEverOnline(p_name)) {
 }
 p_name = player.getName(player.getUuid(p_name));
 ban.remove(player.getUuid(p_name));
-msg.string(sender, string.concat("§cYou unbanned ", p_name, "."));
+msg.team(player.getName(sender), string.concat("§cUnbanned ", p_name, "."));
 goto("wait");
 
 @tempban
@@ -5232,10 +5176,10 @@ timestring = getTimeString(endtime);
 sender_name = player.getName(sender);
 if(size > 4) {
 	reason = string.concatList(args, " ", 4, size - 1);
-	msg.string("online", string.concat("§c", p_name, " got banned by ", sender_name, " until ", timestring, ". Reason: ", reason));
+	msg.team(sender_name, string.concat("§c", p_name, " got banned until ", timestring, ". Reason: ", reason));
 } else {
 	reason = "You got banned.";
-	msg.string("online", string.concat("§c", p_name, " got banned by ", sender_name, " until ", timestring, "."));
+	msg.team(sender_name, string.concat("§c", p_name, " got banned until ", timestring, "."));
 }
 calendar = time.new(endtime);
 ban.add(player.getUuid(p_name), reason, sender_name, calendar);
@@ -5358,7 +5302,7 @@ if(arg0 == "sell") {
 	}
 	block.setSign(sign_loc, 3, string.number(player.getId(player)));
 	msg.prefix(player, prefix_plot, "Free plot for selling created.");
-	world = lock.getWorld(sign_loc);
+	world = loc.getWorld(sign_loc);
 	plot.savePlots(world);
 	goto("wait");
 }
@@ -5404,7 +5348,7 @@ if(arg0 == "raise") {
 	money.sub(player, snuvis);
 	plot.setCity(plot, true);
 	msg.prefix(player, prefix_plot, string.concat("City created. Spent §6", string.number(snuvis), "§r snuvis."));
-	world = lock.getWorld(location);
+	world = loc.getWorld(location);
 	plot.savePlots(world);
 	goto("wait");
 }
@@ -9165,7 +9109,7 @@ function party.invitePlayer(inviter, invitee) {
 	map.add($party_invite_ids, inviter_uuid, party_id);
 	inviter_name = player.getName(inviter);
 	msg.prefix(invitee, $prefix_party, string.concat(inviter_name, " invites you to a party."));
-	msg(invitee, text.merge(text.new(" §5=> §rAccept ? "), string.getClickText("[§aYes§r] ", string.concat("/party accept ", inviter_name)), string.getClickText("[§cNo§r]", text.new(string.concat("/party deny ", inviter_name)))));
+	msg(invitee, text.merge(text.new(" §5=> §rAccept ? "), string.getClickText("[§aYes§r] ", string.concat("/party accept ", inviter_name)), string.getClickText("[§cNo§r]", string.concat("/party deny ", inviter_name))));
 	sgoto(200, "deletePartyInvitation"); //Einladung bleibt 1 Minute lang erhalten
 	return true;
 }
@@ -9344,6 +9288,15 @@ function tpBottom(player) {
 //Mailbox-Utils
 //--------------------------------------------------
 
+function mailbox.sendItem(player_id, item) {
+	index = mailbox.getFreeIndex(player_id);
+	if(index == -1) {
+		return false;
+	}
+	mailbox.setItem(player_id, index, item);
+	return true;
+}
+
 function mailbox.clear(player_id) {
 	pfad = "scripts/configs/inv_data/mailbox";
 	config = config.new(pfad, player_id);

+ 30 - 16
system/humans.txt

@@ -1,20 +1,26 @@
 event.load("entity_click");
 
-emerald = item.create("EMERALD", 1, "§fMarket", null);
+lore_list = list.new();
+list.add(lore_list, text.new("§aLeftclick §f= §eBuy"));
+list.add(lore_list, text.new("§cRightclick §f= §eSell"));
+emerald = item.create("EMERALD", 1, "§fMarket", lore_list);
 quest_book = item.create("ENCHANTED_BOOK", 1, "§eQuests", null);
+scroll = item.custom.create("SCROLL", 1, "§2Skills", null);
 
-farmer_inv = createMainMenu("Farmer", true, false);
-fisher_inv = createMainMenu("Fisher", true, false);
-miner_inv = createMainMenu("Miner", true, false);
-baker_inv = createMainMenu("Baker", true, false);
-alena_inv = createMainMenu("Alena", true, false);
-mason_inv = createMainMenu("Mason", true, false);
-priest_inv = createMainMenu("Priest", true, false);
-mage_inv = createMainMenu("Mage", true, false);
-lumberjack_inv = createMainMenu("Lumberjack", true, false);
-butcher_inv = createMainMenu("Butcher", true, false);
-librarian_inv = createMainMenu("Librarian", true, false);
-nether_inv = createMainMenu("Nether Merchant", true, false);
+anna_inv = createMainMenu("Anna", false, true, false);
+farmer_inv = createMainMenu("Farmer", true, true, false);
+fisher_inv = createMainMenu("Fisher", true, false, false);
+miner_inv = createMainMenu("Miner", true, true, false);
+baker_inv = createMainMenu("Baker", true, false, false);
+alena_inv = createMainMenu("Alena", true, false, false);
+mason_inv = createMainMenu("Mason", true, false, false);
+priest_inv = createMainMenu("Priest", true, false, false);
+mage_inv = createMainMenu("Mage", true, false, false);
+lumberjack_inv = createMainMenu("Lumberjack", true, true, true);
+butcher_inv = createMainMenu("Butcher", true, false, false);
+librarian_inv = createMainMenu("Librarian", true, false, false);
+nether_inv = createMainMenu("Nether Merchant", true, false, false);
+diver_inv = createMainMenu("Diver", true, false, false);
 
 msg.string("dev", "§bHumans §rloaded.");
 @main
@@ -32,6 +38,8 @@ if(!entity.isHuman(entity)) {
 entity_name = human.getName(entity);
 if(entity_name == "Farmer") {
 	inv.open(farmer_inv, player);
+} elseif(entity_name == "Anna") {
+	inv.open(anna_inv, player);
 } elseif(entity_name == "Miner") {
 	inv.open(miner_inv, player);
 } elseif(entity_name == "Fisher") {
@@ -54,16 +62,22 @@ if(entity_name == "Farmer") {
 	inv.open(librarian_inv, player);
 } elseif(entity_name == "Nether Merchant") {
 	inv.open(nether_inv, player);
+} elseif(entity_name == "Diver") {
+	inv.open(diver_inv, player);
 }
 goto("main");
 
-function createMainMenu(inv_name, market, quests) {
+function createMainMenu(inv_name, market, quests, skills) {
 	inv = inv.new("222222222", text.new(inv_name));
+	index = 0;
 	if(market) {
-		inv.setItem(inv, 0, $emerald);
+		inv.setItem(inv, index++, $emerald);
 	}
 	if(quests) {
-		inv.setItem(inv, 1, $quest_book);
+		inv.setItem(inv, index++, $quest_book);
+	}
+	if(skills) {
+		inv.setItem(inv, index++, $scroll);
 	}
 	return inv;
 }

+ 13 - 1
system/init.txt

@@ -17,7 +17,19 @@ setScriptVar("nicknames", map.new());
 setScriptVar("rmInventories", map.new());
 setScriptVar("quest_ids", map.new());
 setScriptVar("lobbylastpos", map.new());
-setScriptVar("scheduler_list", list.new());
+
+set = set.new();
+set.add(set, item.custom.get("DIGIT_0"));
+set.add(set, item.custom.get("DIGIT_1"));
+set.add(set, item.custom.get("DIGIT_2"));
+set.add(set, item.custom.get("DIGIT_3"));
+set.add(set, item.custom.get("DIGIT_4"));
+set.add(set, item.custom.get("DIGIT_5"));
+set.add(set, item.custom.get("DIGIT_6"));
+set.add(set, item.custom.get("DIGIT_7"));
+set.add(set, item.custom.get("DIGIT_8"));
+set.add(set, item.custom.get("DIGIT_9"));
+setScriptVar("digits", set);
 
 //---------- Tables ----------
 

+ 27 - 1
system/market.txt

@@ -102,6 +102,7 @@ inv.setItem(mage, 4, newSellItem(item.new(material.get("AXOLOTL_SPAWN_EGG")), 1,
 inv.setItem(mage, 5, newSellItem(item.new(material.get("FOX_SPAWN_EGG")), 1, 256));
 inv.setItem(mage, 6, newSellItem(item.new(material.get("HORSE_SPAWN_EGG")), 1, 256));
 inv.setItem(mage, 7, newSellItem(item.new(material.get("STRIDER_SPAWN_EGG")), 1, 256));
+inv.setItem(mage, 8, newItem(material.get("SHULKER_BOX")));
 set.add(openMarkets, inv.getId(mage));
 // Lumberjack
 lumberjack = inv.new("222222222222222222", text.new("Lumberjack"));
@@ -138,7 +139,7 @@ inv.setItem(librarian, 2, newItem(material.get("BOOK")));
 inv.setItem(librarian, 3, newItem(material.get("BOOKSHELF")));
 set.add(openMarkets, inv.getId(librarian));
 // Nether Merchant
-nether = inv.new("222222222222222222", text.new("Librarian"));
+nether = inv.new("222222222222222222", text.new("Nether Merchant"));
 inv.setItem(nether, 0, newItem(material.get("BLAZE_ROD")));
 inv.setItem(nether, 1, newItem(material.get("GHAST_TEAR")));
 inv.setItem(nether, 2, newItem(material.get("NETHER_WART")));
@@ -152,7 +153,30 @@ inv.setItem(nether, 9, newItem(material.get("GLOWSTONE")));
 inv.setItem(nether, 10, newItem(material.get("SHROOMLIGHT")));
 inv.setItem(nether, 11, newItem(material.get("OBSIDIAN")));
 inv.setItem(nether, 12, newItem(material.get("CRYING_OBSIDIAN")));
+inv.setItem(nether, 13, newItem(material.get("WITHER_SKELETON_SKULL")));
 set.add(openMarkets, inv.getId(nether));
+// Diver
+diver = inv.new("222222222222222222222222222", text.new("Diver"));
+inv.setItem(diver, 0, newItem(material.get("TUBE_CORAL_BLOCK")));
+inv.setItem(diver, 1, newItem(material.get("BRAIN_CORAL_BLOCK")));
+inv.setItem(diver, 2, newItem(material.get("BUBBLE_CORAL_BLOCK")));
+inv.setItem(diver, 3, newItem(material.get("FIRE_CORAL_BLOCK")));
+inv.setItem(diver, 4, newItem(material.get("HORN_CORAL_BLOCK")));
+inv.setItem(diver, 5, newItem(material.get("TUBE_CORAL")));
+inv.setItem(diver, 6, newItem(material.get("BRAIN_CORAL")));
+inv.setItem(diver, 7, newItem(material.get("BUBBLE_CORAL")));
+inv.setItem(diver, 8, newItem(material.get("FIRE_CORAL")));
+inv.setItem(diver, 9, newItem(material.get("HORN_CORAL")));
+inv.setItem(diver, 10, newItem(material.get("TUBE_CORAL_FAN")));
+inv.setItem(diver, 11, newItem(material.get("BRAIN_CORAL_FAN")));
+inv.setItem(diver, 12, newItem(material.get("BUBBLE_CORAL_FAN")));
+inv.setItem(diver, 13, newItem(material.get("FIRE_CORAL_FAN")));
+inv.setItem(diver, 14, newItem(material.get("HORN_CORAL_FAN")));
+inv.setItem(diver, 15, newItem(material.get("SEA_PICKLE")));
+inv.setItem(diver, 16, newItem(material.get("KELP")));
+inv.setItem(diver, 17, newItem(material.get("LILY_PAD")));
+inv.setItem(diver, 18, newItem(material.get("TRIDENT")));
+set.add(openMarkets, inv.getId(diver));
 
 emerald = material.get("EMERALD");
 
@@ -333,6 +357,8 @@ if(item.getType(item) == emerald) {
 		inv.open(librarian, player);
 	} elseif(title_string == "Nether Merchant") {
 		inv.open(nether, player);
+	} elseif(title_string == "Diver") {
+		inv.open(diver, player);
 	}
 }
 if(!set.contains(openMarkets, inv.getId(inv))) {

+ 7 - 3
system/perms.txt

@@ -108,6 +108,7 @@ perm.addToGroup(2, "inv.loadFrom");
 perm.addToGroup(2, "inv.saveFor");
 perm.addToGroup(2, "iteminfo");
 perm.addToGroup(2, "minecraft.command.advancement");
+perm.addToGroup(2, "minecraft.command.banlist");
 perm.addToGroup(2, "minecraft.command.bossbar");
 perm.addToGroup(2, "minecraft.command.data");
 perm.addToGroup(2, "minecraft.command.debug");
@@ -147,6 +148,7 @@ perm.addToGroup(3, "isMod");
 perm.addToGroup(3, "armorstand");
 perm.addToGroup(3, "ass");
 perm.addToGroup(3, "ban");
+perm.addToGroup(3, "ban-ip");
 perm.addToGroup(3, "boost");
 perm.addToGroup(3, "coreprotect.co");
 perm.addToGroup(3, "coreprotect.core");
@@ -162,7 +164,6 @@ perm.addToGroup(3, "gamemode");
 perm.addToGroup(3, "gamerule");
 perm.addToGroup(3, "gamerule.write");
 perm.addToGroup(3, "grow");
-perm.addToGroup(3, "hat");
 perm.addToGroup(3, "head");
 perm.addToGroup(3, "heal");
 perm.addToGroup(3, "home.other");
@@ -174,7 +175,6 @@ perm.addToGroup(3, "inv.see");
 perm.addToGroup(3, "jumpto");
 perm.addToGroup(3, "mailbox.other");
 perm.addToGroup(3, "memory");
-perm.addToGroup(3, "minecraft.command.banlist");
 perm.addToGroup(3, "minecraft.command.clear");
 perm.addToGroup(3, "minecraft.command.effect");
 perm.addToGroup(3, "minecraft.command.give");
@@ -197,7 +197,6 @@ perm.addToGroup(3, "playtime.other");
 perm.addToGroup(3, "playtime.year");
 perm.addToGroup(3, "plot.other");
 perm.addToGroup(3, "potion");
-perm.addToGroup(3, "quest");
 perm.addToGroup(3, "script.error");
 perm.addToGroup(3, "seen");
 perm.addToGroup(3, "silentban");
@@ -224,6 +223,7 @@ perm.addToGroup(4, "isTeam");
 perm.addToGroup(4, "allsounds");
 perm.addToGroup(4, "block");
 perm.addToGroup(4, "color");
+perm.addToGroup(4, "hat");
 perm.addToGroup(4, "icon");
 perm.addToGroup(4, "jail");
 perm.addToGroup(4, "joinme");
@@ -231,6 +231,7 @@ perm.addToGroup(4, "kick");
 perm.addToGroup(4, "mute");
 perm.addToGroup(4, "perm");
 perm.addToGroup(4, "perm.toggle");
+perm.addToGroup(4, "quest");
 perm.addToGroup(4, "ride");
 perm.addToGroup(4, "setmessage");
 perm.addToGroup(4, "skills.other");
@@ -312,6 +313,7 @@ perm.addToGroup(7, "missing./sel");
 perm.addToGroup(7, "missing.brush");
 perm.addToGroup(7, "missing.none");
 perm.addToGroup(7, "missing.tool");
+perm.addToGroup(7, "missing.worldedit");
 perm.addToGroup(7, "perm");
 perm.addToGroup(7, "perm.toggle");
 perm.addToGroup(7, "potion");
@@ -320,6 +322,8 @@ perm.addToGroup(7, "speed");
 perm.addToGroup(7, "teammsg");
 perm.addToGroup(7, "tip");
 perm.addToGroup(7, "top");
+perm.addToGroup(7, "tp");
+perm.addToGroup(7, "tppos");
 perm.addToGroup(7, "warp.create");
 
 perm.addToGroup(8, "isStreamer");

+ 1 - 0
system/scheduler.txt

@@ -1,3 +1,4 @@
+setScriptVar("scheduler_list", list.new());
 list = scheduler.getList();
 
 msg.string("dev", "§bScheduler §rloaded.");

+ 1 - 6
system/tiploop.txt

@@ -20,18 +20,13 @@ if(index >= size) {
 }
 a = list.getIndex(list, index);
 tipp_value = a[1];
-if(string.contains(tipp_value, "https://")) {
-	tipp_value = string.getTextWithLink(tipp_value);
-} else {
-	tipp_value = text.new(tipp_value);
-}
 //loop online players
 online_list = players.toList();
 iter = iterator(online_list);
 while(hasNext(iter)) {
 	p = next(iter);
 	if(player.getTipLoop(p)) {
-		msg(p, text.merge(text.new(string.concat(string.getPrefix(prefix_tips), " ")), tipp_value));
+		msg(p, text.merge(text.new(string.concat(string.getPrefix(prefix_tips), " ")), string.getInterpretedText(tipp_value)));
 	}
 }
 sgoto(12000, "tip_loop");

+ 60 - 21
test.txt

@@ -1,22 +1,61 @@
-event.load("block_click");
+f = file.new("scripts/configs/inv_data/backup");
+file.createFolder(f);
 
-@wait
-wait();
-if(block == null) {
-	goto("wait");
-}
-if(hand == read.slot("OFF_HAND")) {
-	goto("wait");
-}
-msg("dev", text.new(string.blockEntity(block.getEntity(block))));
-//msg("dev", text.new(string.blockData(block.getData(block))));
-if(entity == null) {
-	entity = string.blockEntity(block.getEntity(block));
-	msg("dev", text.new("A"));
-} else {
-	block.setEntity(block, read.blockEntity(entity));
-	entity = null;
-	msg("dev", text.new("B"));
-}
-//msg(player, text.new(string.blockState(block.getState(block))));
-goto("wait");
+scripts/configs/inv_data/backup/<player_id>
+backup_1_<timestamp>.snuvic
+backup_2_<timestamp>.snuvic
+backup_3_<timestamp>.snuvic
+backup_4_<timestamp>.snuvic
+backup_5_<timestamp>.snuvic
+backup_6_<timestamp>.snuvic
+backup_7_<timestamp>.snuvic
+backup_8_<timestamp>.snuvic
+backup_9_<timestamp>.snuvic
+backup_10_<timestamp>.snuvic
+
+function backup() {
+	player_id = player.getId(player);
+	from_file = string.concat("scripts/configs/inv_data/survival/", player_id, ".snuvic");
+	if(!file.exists(from_file)) {
+		return;
+	}
+	
+	f_map = map.new();
+	dir = file.new(string.concat("scripts/configs/inv_data/backup/", player_id));
+	if(!file.exists(dir)) {
+		file.createFolder(dir);
+	}
+	
+	file_list = file.getList(dir);
+	iter = iterator(file_list);
+	while(hasNext(iter)) {
+		f = next(iter);
+		f_name = file.getName(f);
+		split_list = string.split("_", f_name);
+		number = list.getIndex(split_list, 1);
+		map.add(f_map, number, f);
+	}
+	
+	for(i = 10; i > 0; i--) {
+		f = map.get(f_map, i);
+		if(f == null) {
+			continue;
+		}
+		if(f = 10) {
+			file.delete(f);
+			continue;
+		}
+		f_name = string.concat("backup_", string.number(i + 1));
+		file.setName(f, f_name);
+	}
+	
+	cal = time.new(time.getMillis());
+	year = string.number(time.getYear(cal));
+	month = string.number(time.getMonth(cal));
+	day = string.number(time.getDay(cal));
+	hour = string.number(time.getHour(cal));
+	min = string.number(time.getMinute(cal));
+	new_f = file.new(string.concat(dir, "/backup_", string.number(1), "_", year, "_", month, "_", day, "_", hour, "_", min));
+	f_list = file.read(from_file);
+	file.write(new_f, f_list)
+}

+ 2 - 17
test2.txt

@@ -1,17 +1,2 @@
-/tip add crea &aBe &b/creative &ain gamemode 1.
-/tip add creeper &aCreepers don´t explode on plots.
-/tip add disc &aJoin our <%link &dDiscord https://discord.gg/AjwBpm5 &a>.
-/tip add don &aSupport us with a <%link &dDonation https://minecraft.hammerle.me/?site=contact &a>.
-/tip add games &aBread and &b/games&a!
-/tip add home &aCreate your &b/home&a.
-/tip add night &aSkip the night with &b/skipnight&a.
-/tip add plot &aCreate your own plot with &b/plot create&a.
-/tip add plotcost &aPlots cost &b3 x Length x Width&a.
-/tip add rank &aChange your &b/rank&a.
-/tip add ranks &aClimb the <%link &dRanks https://minecraft.hammerle.me/?site=ranks &a>!
-/tip add settings &aChange your &b/settings&a.
-/tip add shop &aCreate your own &b/shop&a.
-/tip add Stream &aDaily Twitch Streams with <%link &dMentos https://www.twitch.tv/mentor_mentos &a>.
-/tip add supp &aProblem? &b/support&a!
-/tip add vote &a&b/Vote &afor our server and get rewards&a.
-/tip add website &aOur <%link &dWebsite https://minecraft.hammerle.me/ &a>.
+player = read.player("marvinius");
+msg("dev", text.new(entity.getMount(player)));

+ 0 - 18
test3.txt

@@ -1,18 +0,0 @@
-p = read.player("kajetanjohannes");
-for(i = 0; i < 100; i++) {
-    access = plot.check(entity.getLocation(p), p, 1, false);
-}
-msg(p, text.new(access));
-term();
-
-p = read.player("kajetanjohannes");
-loc = entity.getLocation(p);
-h = human.spawn(loc, "Marvinius");
-human.setAI(h, 1);
-human.canMove(h, true);
-human.setSkinUUID(h, read.uuid("e41b5335-3c74-46e9-a6c5-dafc6334a477"));
-living.setEquip(h, read.slot("HAND"), item.new(material.get("STONE_SWORD")));
-living.setEquip(h, read.slot("HEAD"), item.new(material.get("IRON_HELMET")));
-living.setEquip(h, read.slot("CHEST"), item.new(material.get("IRON_CHESTPLATE")));
-living.setEquip(h, read.slot("LEGS"), item.new(material.get("IRON_LEGGINGS")));
-living.setEquip(h, read.slot("FEET"), item.new(material.get("IRON_BOOTS")));

+ 0 - 19
test4.txt

@@ -1,19 +0,0 @@
-p = read.player("kajetanjohannes");
-iter = iterator(item.custom.getAll());
-
-next(iter);
-next(iter);
-next(iter);
-next(iter);
-next(iter);
-next(iter);
-next(iter);
-next(iter);
-next(iter);
-next(iter);
-next(iter);
-
-while(hasNext(iter)) {
-    item = item.custom.new(next(iter), 1);
-    player.giveItem(p, item);
-}

+ 309 - 0
test6.txt

@@ -0,0 +1,309 @@
+term();
+teleporter.setLayout();
+dispenser_mat = material.get("DISPENSER");
+air_mat = material.getAir();
+tinted_glass_mat = material.get("TINTED_GLASS");
+gear = item.custom.get("GEAR");
+
+tp_list = list.new();
+tp_map = map.new();
+tp_set = set.new();
+
+piston_sound = sound.get("BLOCK_PISTON_EXTEND");
+adv_tp_sound = sound.get("BLOCK_PORTAL_TRAVEL");
+sound_category_ambient = sound.getCategory("AMBIENT");
+
+overworld = world.getOverWorld();
+adventure_chest_loc = loc.new(overworld, 104, 74, -6);
+
+msg.string("dev", "§bTest §rstarted.");
+goto("start");
+
+@main
+wait();
+goto("main");
+
+@start
+player = read.player("marvinius");
+player_uuid = player.getUuid(player);
+clicked = map.getOrDefault(tp_map, player_uuid, 0);
+now_time = time.getMillis();
+if(now_time - clicked < 5000) {
+	msg.prefix(player, "§5Teleport", "Wait 5 seconds!");
+	goto("main");
+}
+map.add(tp_map, player_uuid, now_time);
+//Abenteuer-Teleport
+
+alpha = math.random(0, 360);
+alpha *= math.pi() / 180;
+x = math.round(math.sin(alpha) * 5000) + 0.5;
+z = math.round(math.cos(alpha) * 5000) + 0.5;
+//tp_loc = loc.getHighestPoint(loc.new(world.getOverWorld(), x, 0, z));
+tp_loc = adventure_chest_loc;
+block_loc = adventure_chest_loc;
+setTpWallX(block_loc, tinted_glass_mat);
+sound.spawn(block_loc, piston_sound, sound_category_ambient);
+player_uuid = player.getUuid(player);
+array = array.new(4);
+array[0] = player_uuid;
+array[1] = block_loc;
+array[2] = tp_loc;
+//array[3] = true;
+array[3] = false;
+list.add(tp_list, array);
+set.add(tp_set, player_uuid);
+sgoto(30, "tp_ticker");
+goto("main");
+
+@tp_ticker
+array = list.getIndex(tp_list, 0);
+list.removeIndex(tp_list, 0);
+block_loc = array[1];
+list.add(tp_list, array);
+setTpWallFull(block_loc, tinted_glass_mat);
+sound.spawn(block_loc, piston_sound, sound_category_ambient);
+sgoto(30, "tp_final");
+goto("main");
+
+@tp_final
+array = list.getIndex(tp_list, 0);
+list.removeIndex(tp_list, 0);
+player_uuid = array[0];
+block_loc = array[1];
+tp_loc = array[2];
+adventure = array[3];
+set.remove(tp_set, player_uuid);
+sound.spawn(block_loc, piston_sound, sound_category_ambient);
+setTpWallFull(block_loc, air_mat);
+player = player.get(player_uuid);
+if(player == null) {
+	goto("main");
+}
+if(adventure) {
+	if(!player.hasClearInventory(player)) {
+		msg.prefix(player, "§5Adventure", "Your inventory needs to be empty!");
+		goto("main");
+	}
+	//player.teleport(player, tp_loc, false);
+	player.setAdventure(player, true);
+	player.setAdventureStart(player, tp_loc);
+	addAdventureDisplay(player, adventure_aim_loc);
+	sound.spawn(tp_loc, adv_tp_sound, sound_category_ambient);
+	title.send(player, "§cAdventure", "Have fun!");
+	msg.prefix(player, "§5Adventure", "To complete your adventure, go to the survival spawn. You cannot teleport. If you die, you start again!");
+}
+goto("main");
+
+function teleporter.setLayout() {
+	a = array.new(60);
+	a[0] = teleporter.getProp(0, 0, 0, "DISPENSER");
+	a[1] = teleporter.getProp(-1, 0, 0, "CRACKED_DEEPSLATE_TILES");
+	a[2] = teleporter.getProp(2, 0, 0, "CRACKED_DEEPSLATE_TILES");
+	a[3] = teleporter.getProp(-1, 0, -1, "CRACKED_DEEPSLATE_TILES");
+	a[4] = teleporter.getProp(0, 0, 2, "CRACKED_DEEPSLATE_TILES");
+	a[5] = teleporter.getProp(-1, 0, 0, "CRACKED_DEEPSLATE_TILES");
+	a[6] = teleporter.getProp(2, 0, 0, "CRACKED_DEEPSLATE_TILES");
+	a[7] = teleporter.getProp(0, 0, -2, "CRACKED_DEEPSLATE_TILES");
+	a[8] = teleporter.getProp(-2, 0, 0, "CRACKED_DEEPSLATE_TILES");
+	a[9] = teleporter.getProp(-1, 0, 0, "WAXED_CUT_COPPER_SLAB");
+	a[10] = teleporter.getProp(0, 0, 1, "WAXED_CUT_COPPER_SLAB");
+	a[11] = teleporter.getProp(0, 0, 1, "WAXED_CUT_COPPER_SLAB");
+	a[12] = teleporter.getProp(1, 0, 1, "WAXED_CUT_COPPER_SLAB");
+	a[13] = teleporter.getProp(1, 0, 0, "WAXED_CUT_COPPER_SLAB");
+	a[14] = teleporter.getProp(1, 0, 0, "WAXED_CUT_COPPER_SLAB");
+	a[15] = teleporter.getProp(1, 0, -1, "WAXED_CUT_COPPER_SLAB");
+	a[16] = teleporter.getProp(0, 0, -1, "WAXED_CUT_COPPER_SLAB");
+	a[17] = teleporter.getProp(0, 0, -1, "WAXED_CUT_COPPER_SLAB");
+	a[18] = teleporter.getProp(-1, 0, -1, "WAXED_CUT_COPPER_SLAB");
+	a[19] = teleporter.getProp(-1, 0, 0, "WAXED_CUT_COPPER_SLAB");
+	a[20] = teleporter.getProp(-1, 0, 0, "WAXED_CUT_COPPER_SLAB");
+	a[21] = teleporter.getProp(1, 1, 2, "NETHERITE_BLOCK");
+	a[22] = teleporter.getProp(0, 1, 0, "END_ROD");
+	a[23] = teleporter.getProp(-2, -3, -2, "WAXED_COPPER_BLOCK");
+	a[24] = teleporter.getProp(0, -1, 0, "WAXED_COPPER_BLOCK");
+	a[25] = teleporter.getProp(0, -1, 0, "WAXED_COPPER_BLOCK");
+	a[26] = teleporter.getProp(0, 0, 4, "WAXED_COPPER_BLOCK");
+	a[27] = teleporter.getProp(0, 1, 0, "WAXED_COPPER_BLOCK");
+	a[28] = teleporter.getProp(0, 1, 0, "WAXED_COPPER_BLOCK");
+	a[29] = teleporter.getProp(4, 0, 0, "WAXED_COPPER_BLOCK");
+	a[30] = teleporter.getProp(0, -1, 0, "WAXED_COPPER_BLOCK");
+	a[31] = teleporter.getProp(0, -1, 0, "WAXED_COPPER_BLOCK");
+	a[32] = teleporter.getProp(0, 0, -4, "WAXED_COPPER_BLOCK");
+	a[33] = teleporter.getProp(0, 1, 0, "WAXED_COPPER_BLOCK");
+	a[34] = teleporter.getProp(0, 1, 0, "WAXED_COPPER_BLOCK");
+	a[35] = teleporter.getProp(0, -3, 0, "WAXED_COPPER_BLOCK");
+	a[36] = teleporter.getProp(-1, 0, 0, "WAXED_COPPER_BLOCK");
+	a[37] = teleporter.getProp(-1, 0, 0, "WAXED_COPPER_BLOCK");
+	a[38] = teleporter.getProp(-1, 0, 0, "WAXED_COPPER_BLOCK");
+	a[39] = teleporter.getProp(-1, 0, 0, "WAXED_COPPER_BLOCK");
+	a[40] = teleporter.getProp(0, 0, 1, "WAXED_COPPER_BLOCK");
+	a[41] = teleporter.getProp(0, 0, 1, "WAXED_COPPER_BLOCK");
+	a[42] = teleporter.getProp(0, 0, 1, "WAXED_COPPER_BLOCK");
+	a[43] = teleporter.getProp(0, 0, 1, "WAXED_COPPER_BLOCK");
+	a[44] = teleporter.getProp(1, 0, 0, "WAXED_COPPER_BLOCK");
+	a[45] = teleporter.getProp(1, 0, 0, "WAXED_COPPER_BLOCK");
+	a[46] = teleporter.getProp(1, 0, 0, "WAXED_COPPER_BLOCK");
+	a[47] = teleporter.getProp(1, 0, 0, "WAXED_COPPER_BLOCK");
+	a[48] = teleporter.getProp(0, 0, -1, "WAXED_COPPER_BLOCK");
+	a[49] = teleporter.getProp(0, 0, -1, "WAXED_COPPER_BLOCK");
+	a[50] = teleporter.getProp(0, 0, -1, "WAXED_COPPER_BLOCK");
+	a[51] = teleporter.getProp(-1, 0, 0, "WAXED_COPPER_BLOCK");
+	a[52] = teleporter.getProp(-2, 0, 0, "WAXED_COPPER_BLOCK");
+	a[53] = teleporter.getProp(0, 0, 2, "WAXED_COPPER_BLOCK");
+	a[54] = teleporter.getProp(2, 0, 0, "WAXED_COPPER_BLOCK");
+	a[55] = teleporter.getProp(-1, 0, 0, "SEA_LANTERN");
+	a[56] = teleporter.getProp(-1, 0, -1, "SEA_LANTERN");
+	a[57] = teleporter.getProp(1, 0, 0, "WAXED_OXIDIZED_COPPER");
+	a[58] = teleporter.getProp(1, 0, 0, "SEA_LANTERN");
+	a[59] = teleporter.getProp(-1, 0, -1, "SEA_LANTERN");
+	setScriptVar("tp_layout", a);
+}
+
+function teleporter.getLayout() {
+	return getScriptVar("tp_layout");
+}
+
+function teleporter.getProp(x, y, z, type) {
+	a = array.new(4);
+	a[0] = x;
+	a[1] = y;
+	a[2] = z;
+	set = set.new();
+	set.add(set, material.get(type));
+	if(string.startsWith(type, "WAX", 0)) {
+		type2 = string.replace(type, "WAXED_", "");
+		set.add(set, material.get(type2));
+	}
+	a[3] = set;
+	return a;
+}
+
+function teleporter.isLayout(disp_loc) {
+	if(block.getDirectionalFace(block.get(disp_loc)) != "DOWN") {
+		return false;
+	}
+	layout = teleporter.getLayout();
+	loc = loc.mod(disp_loc, 0, 0 ,0);
+	for(i = 0; i < array.getSize(layout); i++) {
+		a = layout[i];
+		loc.add(loc, a[0], a[1], a[2]);
+		if(!set.contains(a[3], block.getType(block.get(loc)))) {
+			return false;
+		}
+	}
+	return true;
+}
+
+function setTpWallX(chest_loc, item_type) {
+	a1 = block.get(loc.mod(chest_loc, 2, -1, -1));
+	a2 = block.get(loc.mod(chest_loc, 2, -1, 1));
+	a3 = block.get(loc.mod(chest_loc, -2, -1, -1));
+	a4 = block.get(loc.mod(chest_loc, -2, -1, 1));
+	a5 = block.get(loc.mod(chest_loc, -1, -1, 2));
+	a6 = block.get(loc.mod(chest_loc, 1, -1, 2));
+	a7 = block.get(loc.mod(chest_loc, -1, -1, -2));
+	a8 = block.get(loc.mod(chest_loc, 1, -1, -2));
+	
+	a9 = block.get(loc.mod(chest_loc, 2, -2, 0));
+	a10 = block.get(loc.mod(chest_loc, -2, -2, 0));
+	a11 = block.get(loc.mod(chest_loc, 0, -2, 2));
+	a12 = block.get(loc.mod(chest_loc, 0, -2, -2));
+	
+	a13 = block.get(loc.mod(chest_loc, 2, -3, -1));
+	a14 = block.get(loc.mod(chest_loc, 2, -3, 1));
+	a15 = block.get(loc.mod(chest_loc, -2, -3, -1));
+	a16 = block.get(loc.mod(chest_loc, -2, -3, 1));
+	a17 = block.get(loc.mod(chest_loc, -1, -3, 2));
+	a18 = block.get(loc.mod(chest_loc, 1, -3, 2));
+	a19 = block.get(loc.mod(chest_loc, -1, -3, -2));
+	a20 = block.get(loc.mod(chest_loc, 1, -3, -2));
+	
+	block.setMaterial(a1, item_type);
+	block.setMaterial(a2, item_type);
+	block.setMaterial(a3, item_type);
+	block.setMaterial(a4, item_type);
+	block.setMaterial(a5, item_type);
+	block.setMaterial(a6, item_type);
+	block.setMaterial(a7, item_type);
+	block.setMaterial(a8, item_type);
+	block.setMaterial(a9, item_type);
+	block.setMaterial(a10, item_type);
+	block.setMaterial(a11, item_type);
+	block.setMaterial(a12, item_type);
+	block.setMaterial(a13, item_type);
+	block.setMaterial(a14, item_type);
+	block.setMaterial(a15, item_type);
+	block.setMaterial(a16, item_type);
+	block.setMaterial(a17, item_type);
+	block.setMaterial(a18, item_type);
+	block.setMaterial(a19, item_type);
+	block.setMaterial(a20, item_type);
+}
+
+/*function setTpWallX(chest_loc, item_type) {
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -1, -1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -1, 1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -1, -1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -1, 1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -1, -1, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 1, -1, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -1, -1, -2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 1, -1, -2)), item_type);
+	
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -2, 0)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -2, 0)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 0, -2, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 0, -2, -2)), item_type);
+	
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -3, -1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -3, 1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -3, -1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -3, 1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -1, -3, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 1, -3, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -1, -3, -2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 1, -3, -2)), item_type);
+}*/
+
+function setTpWallFull(chest_loc, item_type) {
+	return;
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -1, -1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -1, 0)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -1, 1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -1, -1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -1, 0)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -1, 1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -1, -1, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 0, -1, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 1, -1, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -1, -1, -2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 0, -1, -2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 1, -1, -2)), item_type);
+	
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -2, -1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -2, 0)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -2, 1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -2, -1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -2, 0)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -2, 1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -1, -2, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 0, -2, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 1, -2, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -1, -2, -2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 0, -2, -2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 1, -2, -2)), item_type);
+	
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -3, -1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -3, 0)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 2, -3, 1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -3, -1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -3, 0)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -2, -3, 1)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -1, -3, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 0, -3, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 1, -3, 2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, -1, -3, -2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 0, -3, -2)), item_type);
+	block.setMaterial(block.get(loc.mod(chest_loc, 1, -3, -2)), item_type);
+}

+ 10 - 20
utils/u_cmdhelp.txt

@@ -48,9 +48,7 @@ function setCommandHelps() {
 	commandhelp.add("back");
 	commandhelp.add("boost");
 	commandhelp.add("color");
-	commandhelp.add("colour");
 	commandhelp.add("customitems");
-	commandhelp.add("fuckit");
 	commandhelp.add("giveup");
 	commandhelp.add("hack");
 	commandhelp.add("hat");
@@ -60,26 +58,21 @@ function setCommandHelps() {
 	commandhelp.add("iteminfo");
 	commandhelp.add("joinme");
 	commandhelp.add("jumpto");
-	commandhelp.add("l");
 	commandhelp.add("lag");
 	commandhelp.add("leave");
 	commandhelp.add("lightning");
 	commandhelp.add("live");
 	commandhelp.add("logo");
-	commandhelp.add("mem");
 	commandhelp.add("memory");
 	commandhelp.add("nowb");
 	commandhelp.add("ping");
-	commandhelp.add("ram");
 	commandhelp.add("rank");
 	commandhelp.add("repair");
 	commandhelp.add("ride");
 	commandhelp.add("settings");
 	commandhelp.add("silentjoin");
 	commandhelp.add("skipnight");
-	commandhelp.add("skull");
 	commandhelp.add("startgame");
-	commandhelp.add("thor");
 	commandhelp.add("top");
 	commandhelp.add("voteshop");
 	
@@ -93,6 +86,14 @@ function setCommandHelps() {
 	commandhelp.addChildPlayer("heal");
 	commandhelp.addChildPlayer("feed");
 	
+	command.addHelp(command.newHelp("colour", "color"));
+	command.addHelp(command.newHelp("fuckit", "giveup"));
+	command.addHelp(command.newHelp("skull", "head"));
+	command.addHelp(command.newHelp("l", "leave"));
+	command.addHelp(command.newHelp("mem", "memory"));
+	command.addHelp(command.newHelp("ram", "memory"));
+	command.addHelp(command.newHelp("thor", "lightning"));
+	
 	help = command.newHelp("start", "start");
 	command.addHelpChild(help, command.newHelpLiteral("ai"));
 	command.addHelpChild(help, command.newHelpLiteral("chat"));
@@ -120,6 +121,7 @@ function setCommandHelps() {
 	command.addHelpChild(help, command.newHelpLiteral("scheduler"));
 	command.addHelpChild(help, command.newHelpLiteral("shop"));
 	command.addHelpChild(help, command.newHelpLiteral("sitting"));
+	command.addHelpChild(help, command.newHelpLiteral("skills"));
 	command.addHelpChild(help, command.newHelpLiteral("stats"));
 	command.addHelpChild(help, command.newHelpLiteral("story"));
 	command.addHelpChild(help, command.newHelpLiteral("survival"));
@@ -279,7 +281,7 @@ function setCommandHelps() {
 	
 	help = command.newHelp("tempban", "tempban");
 	helpArg0 = command.newHelpSpecial("Player", "player");
-	helpArg1 = command.newHelpInt("days", 0, 100);
+	helpArg1 = command.newHelpInt("days", 0, 365);
 	helpArg2 = command.newHelpInt("hours", 0, 100);
 	helpArg3 = command.newHelpInt("minutes", 0, 100);
 	command.addHelpChild(helpArg3, command.newHelpString("reason", true));
@@ -301,24 +303,12 @@ function setCommandHelps() {
 	command.addHelpChild(help, helpArg0);
 	command.addHelp(help);
 	
-	help = command.newHelp("silentban", "silentban");
-	helpArg0 = command.newHelpSpecial("Player", "player");
-	command.addHelpChild(helpArg0, command.newHelpString("reason", true));
-	command.addHelpChild(help, helpArg0);
-	command.addHelp(help);
-	
 	help = command.newHelp("kick", "kick");
 	helpArg0 = command.newHelpSpecial("Player", "player");
 	command.addHelpChild(helpArg0, command.newHelpString("reason", true));
 	command.addHelpChild(help, helpArg0);
 	command.addHelp(help);
 	
-	help = command.newHelp("silentkick", "silentkick");
-	helpArg0 = command.newHelpSpecial("Player", "player");
-	command.addHelpChild(helpArg0, command.newHelpString("reason", true));
-	command.addHelpChild(help, helpArg0);
-	command.addHelp(help);
-	
 	help = command.newHelp("answer", "answer");
 	helpArg0 = command.newHelpString("message", true);
 	command.addHelpChild(help, helpArg0);

+ 30 - 24
utils/u_games.txt

@@ -20,6 +20,12 @@ if(event == "entity_mount") {
 	}
 	player = entity;
 }
+if(event == "custom_command") {
+	if(!isPlayer(sender)) {
+		goto("simplelobby");
+	}
+	player = sender;
+}
 if(!player.hasMinigameId(player, script_id)) {
 	goto("simplelobby");
 }
@@ -36,21 +42,19 @@ elseif(event == "player_quit" || event == "player_giveup") {
 	gosub("leavelobbycore");
 }
 elseif(event == "custom_command") {
-	if(player != null) {
-		if(command == "startgame") {
-			if(manual_start != null && manual_start) {
-				if(started) {
-					msg.prefix(player, gamename, "Already started.");
-					goto("simplelobby");
-				}
-				counterindex = 3;
-				goto("startcountdown");
-			}
-			if(perm.has("startgame.jump", player)) {
-				gosub("jumpstart");
-			} else {
-				perm.no("startgame.jump", player);
+	if(command == "startgame") {
+		if(manual_start != null && manual_start) {
+			if(started) {
+				msg.prefix(player, gamename, "Already started.");
+				goto("simplelobby");
 			}
+			counterindex = 3;
+			goto("startcountdown");
+		}
+		if(perm.has("startgame.jump", player)) {
+			gosub("jumpstart");
+		} else {
+			perm.no("startgame.jump", player);
 		}
 	}
 }
@@ -143,7 +147,7 @@ if(player.isPartyLeader(player)) {
 	leader_uuid = player.getUuid(player);
 	scriptlist = minigame.getPlayers(script_id);
 	list = party.getList(player.getPartyId(player));
-	iter = list.iterator(list);
+	iter = iterator(list);
 	while(hasNext(iter)) {
 		p_uuid = next(iter);
 		p = player.get(p_uuid);
@@ -258,7 +262,7 @@ function minigame.term(script, gamesignloc) {
 }
 
 function minigame.speakAll(prefix, message) {
-	iter = list.iterator(minigame.getPlayers($script_id));
+	iter = iterator(minigame.getPlayers($script_id));
 	while(hasNext(iter)) {
 		p_uuid = next(iter);
 		p = player.get(p_uuid);
@@ -267,16 +271,18 @@ function minigame.speakAll(prefix, message) {
 }
 
 function minigame.msgAll(message) {
-	iter = list.iterator(minigame.getPlayers($script_id));
+	iter = iterator(minigame.getPlayers($script_id));
 	while(hasNext(iter)) {
 		p_uuid = next(iter);
 		p = player.get(p_uuid);
-		msg.string(p, message);
+		if(p != null) {
+			msg.string(p, message);
+		}
 	}
 }
 
 function minigame.displayAll(line, message) {
-	iter = list.iterator(minigame.getPlayers($script_id));
+	iter = iterator(minigame.getPlayers($script_id));
 	while(hasNext(iter)) {
 		p_uuid = next(iter);
 		p = player.get(p_uuid);
@@ -285,7 +291,7 @@ function minigame.displayAll(line, message) {
 }
 
 function minigame.titleAll(title, subtitle, fadeIn, show, fadeOut) {
-	iter = list.iterator(minigame.getPlayers($script_id));
+	iter = iterator(minigame.getPlayers($script_id));
 	while(hasNext(iter)) {
 		p_uuid = next(iter);
 		p = player.get(p_uuid);
@@ -294,7 +300,7 @@ function minigame.titleAll(title, subtitle, fadeIn, show, fadeOut) {
 }
 
 function minigame.displayRemoveAll(line) {
-	iter = list.iterator(minigame.getPlayers($script_id));
+	iter = iterator(minigame.getPlayers($script_id));
 	while(hasNext(iter)) {
 		p_uuid = next(iter);
 		p = player.get(p_uuid);
@@ -348,11 +354,11 @@ function minigame.kickAllPlayers(script_or_id) {
 	player_list = minigame.getPlayers(script.getId(script));
 	list = list.new();
 	//Create copy
-	iter = list.iterator(player_list);
+	iter = iterator(player_list);
 	while(hasNext(iter)) {
 		list.add(list, next(iter));
 	}
-	iter = list.iterator(list);
+	iter = iterator(list);
 	while(hasNext(iter)) {
 		minigame.kickPlayer(script, player.get(next(iter)));
 	}
@@ -611,7 +617,7 @@ function sb.clearGame(player) {
 }
 
 function sb.clearGameAll() {
-	iter = list.iterator(minigame.getPlayers($script_id));
+	iter = iterator(minigame.getPlayers($script_id));
 	while(hasNext(iter)) {
 		p_uuid = next(iter);
 		p = player.get(p_uuid);

+ 69 - 42
utils/u_general.txt

@@ -176,7 +176,7 @@ function correctTimeFormat(textnumber) {
 }
 
 function player.giveSingleItem(player, item) {
-	amount = player.getItemAmount(player, item);
+	amount = inv.getItemAmount(player.getInv(player), item.getType(item));
 	if(amount == 0) {
 		player.safeGiveItem(player, item);
 	}
@@ -974,16 +974,40 @@ function string.getTextWithLink(string) {
 	}
 }
 
+function string.intelligentSplit(string) {
+	list = list.new();
+	from_index = 0;
+	to_index = 0;
+	split_after = 25;
+	split_index = split_after;
+	whole_length = string.length(string);
+	
+	while(true) {
+		to_index = string.indexOf(string, " ", split_index);
+		if(to_index == -1) {
+			sub_string = string.subString(string, from_index, string.length(string));
+			list.add(list, text.new(sub_string));
+			break;
+		}
+		sub_string = string.subString(string, from_index, to_index);
+		list.add(list, text.new(sub_string));
+		from_index = to_index + 1;
+		split_index += split_after;
+	}
+	
+	return list;
+}
+
 //--------------------------------------------------
 //Quest-Utils
 //--------------------------------------------------
 
 function quest.display(player, quest_name, stage, all_stages) {
-	sb.add(player, 1, string.concat("§dQuest: ", quest_name, " [", string.number(stage), "/", string.number(all_stages), "]"));
+	sb.add(player, 10, string.concat("§dQuest: ", quest_name, " [", string.number(stage), "/", string.number(all_stages), "]"));
 }
 
 function quest.removeDisplay(player) {
-	sb.remove(player, 1);
+	sb.remove(player, 10);
 }
 
 function quest.getIds() {
@@ -1047,40 +1071,11 @@ function quest.addCounter(player, amount) {
 	}
 }
 
-function quest.getBlockList() {
-	list = getScriptVar("quest_block_list");
-	if(list == null) {
-		list = list.new();
-		quest.setBlockList(list);
-	}
-	return list;
-}
-
-function quest.setBlockList(list) {
-	setScriptVar("quest_block_list", list);
-}
-
-function quest.setCooldown(player) {
-	list = quest.getBlockList();
-	list.add(list, player.getUuid(player));
-}
-
-function quest.removeCooldown(player) {
-	list = quest.getBlockList();
-	list.remove(list, player.getUuid(player));
-}
-
-function quest.isPlayerBlocked(player) {
-	list = quest.getBlockList();
-	return list.contains(list, player.getUuid(player));
-}
-
 function quest.finish(script, player) {
-	sound = sound.get("entity.experience_orb.pickup");
-	category = sound.getCategory("master");
+	sound = sound.get("ENTITY_EXPERIENCE_ORB_PICKUP");
+	category = sound.getCategory("MASTER");
 	sound.spawnForPlayer(player, sound, category);
 	quest.addCounter(player, 1);
-	quest.setCooldown(player);
 	quest.term(script, player);
 }
 
@@ -1163,6 +1158,10 @@ function player.teleport(player, location, setBackPos) {
 	if(player.hasMinigame(player)) {
 		return false;
 	}
+	/*mount = entity.getMount(player);
+	if(mount != null) {
+		entity.unmount(mount);
+	}*/
 	if(setBackPos) {
 		player.setBackPos(player);
 	}
@@ -1313,7 +1312,11 @@ function msg.action(receiver, string) {
 }
 
 function msg.team(from, string) {
-	from_name = player.getName(from);
+	if(isString(from)) {
+		from_name = from;
+	} else {
+		from_name = player.getName(from);
+	}
 	online_list = players.toList();
 	iter = iterator(online_list);
 	while(hasNext(iter)) {
@@ -1326,6 +1329,7 @@ function msg.team(from, string) {
 			}
 		}
 	}
+	msg.prefix("SERVER", "§4Team", string.concat("§c", from_name, "§r: ", string));
 }
 
 function msg.string(receiver, string) {
@@ -1519,29 +1523,35 @@ function item.getAirString() {
 }
 
 function item.isAmber(item) {
-	return string.item(item) == "{Count:1b,id:'minecraft:netherite_hoe',tag:{AttributeModifiers:[{Amount:0.0d,AttributeName:'minecraft:generic.attack_damage',Name:'custom',Operation:0,Slot:'mainhand',UUID:[I;0,3242,0,42343]}],Damage:64,HideFlags:14,Unbreakable:1b,display:{Name:'{'text':'§fAmber'}'}}}";
+	return item.custom.get("AMBER") == item.getCustom(item);
 }
 
 function item.isSapphire(item) {
-	return string.item(item) == "{Count:1b,id:'minecraft:netherite_hoe',tag:{AttributeModifiers:[{Amount:0.0d,AttributeName:'minecraft:generic.attack_damage',Name:'custom',Operation:0,Slot:'mainhand',UUID:[I;0,3242,0,42343]}],Damage:66,HideFlags:14,Unbreakable:1b,display:{Name:'{'text':'§fSapphire'}'}}}";
+	return item.custom.get("SAPPHIRE") == item.getCustom(item);
 }
 
 function item.isRuby(item) {
-	return string.item(item) == "{Count:1b,id:'minecraft:netherite_hoe',tag:{AttributeModifiers:[{Amount:0.0d,AttributeName:'minecraft:generic.attack_damage',Name:'custom',Operation:0,Slot:'mainhand',UUID:[I;0,3242,0,42343]}],Damage:62,HideFlags:14,Unbreakable:1b,display:{Name:'{'text':'§fRuby'}'}}}";
+	return item.custom.get("RUBY") == item.getCustom(item);
 }
 
 function item.getAmber() {
-	return read.item("{Count:1b,id:'minecraft:netherite_hoe',tag:{AttributeModifiers:[{Amount:0.0d,AttributeName:'minecraft:generic.attack_damage',Name:'custom',Operation:0,Slot:'mainhand',UUID:[I;0,3242,0,42343]}],Damage:64,HideFlags:14,Unbreakable:1b,display:{Name:'{'text':'§fAmber'}'}}}");
+	return item.custom.new(item.custom.get("AMBER"));
 }
 
 function item.getSapphire() {
-	return read.item("{Count:1b,id:'minecraft:netherite_hoe',tag:{AttributeModifiers:[{Amount:0.0d,AttributeName:'minecraft:generic.attack_damage',Name:'custom',Operation:0,Slot:'mainhand',UUID:[I;0,3242,0,42343]}],Damage:66,HideFlags:14,Unbreakable:1b,display:{Name:'{'text':'§fSapphire'}'}}}");
+	return item.custom.new(item.custom.get("SAPPHIRE"));
 }
 
 function item.getRuby() {
 	return item.custom.new(item.custom.get("RUBY"));
 }
 
+function item.isDigit(item) {
+	c = item.getCustom(item);
+	set = getScriptVar("digits");
+	return set.contains(set, c);
+}
+
 //--------------------------------------------------
 //Entity-Utils
 //--------------------------------------------------
@@ -1704,11 +1714,14 @@ function player.removeItemNbt(player, itemstack) {
 	//Make a copy
 	item_type = item.getType(itemstack);
 	amount = item.getAmount(itemstack);
-	my_item = read.item(item_type, amount);
+	my_item = item.new(item_type, amount);
 	//Loop the inventory
 	inv = player.getInv(player);
 	for(slot = 0; slot < inv.getSize(inv); slot++) {
 		item = inv.getItem(inv, slot);
+		if(item == null) {
+			continue;
+		}
 		if(item.getType(item) == item_type) {
 			diff = amount - item.getAmount(item);
 			if(diff > 0) {
@@ -1731,6 +1744,9 @@ function player.removeItemTag(player, tag, amount) {
 	inv = player.getInv(player);
 	for(slot = 0; slot < inv.getSize(inv); slot++) {
 		item = inv.getItem(inv, slot);
+		if(item == null) {
+			continue;
+		}
 		if(item.hasTag(item, tag)) {
 			diff = amount - item.getAmount(item);
 			if(diff > 0) {
@@ -2026,6 +2042,17 @@ function player.mute(player_or_id, boolean) {
 	config.saveAsync(config);
 }
 
+function player.isGameMuted(player_or_id) {
+	config = playerdata.getGames(player_or_id);
+	return config.getBool(config, "game_muted", false);
+}
+
+function player.gameMute(player_or_id, boolean) {
+	config = playerdata.getGames(player_or_id);
+	config.set(config, "game_muted", boolean);
+	config.saveAsync(config);
+}
+
 function player.getSilentJoin(player_or_id) {
 	config = playerdata.getSurvival(player_or_id);
 	return config.getBool(config, "silentjoin", false);
@@ -3819,7 +3846,7 @@ function scheduler.msgPrefix(ticks, player, prefix, message) {
 	scheduler.add(a);
 }
 
-function scheduler.msg.string(ticks, player, message) {
+function scheduler.msg(ticks, player, message) {
 	a = array.new(4);
 	a[0] = 2;
 	a[1] = ticks;

+ 40 - 31
utils/u_quest.txt

@@ -1,16 +1,16 @@
 function stage.increase(player) {
 	$stage++;
 	quest.display(player, $quest_name, $stage, $all_stages);
-	sound = sound.get("entity.experience_orb.pickup");
-	category = sound.getCategory("master");
+	sound = sound.get("ENTITY_EXPERIENCE_ORB_PICKUP");
+	category = sound.getCategory("MASTER");
 	sound.spawnForPlayer(player, sound, category);
 }
 
 function quest.start(player, path) {
-	modTimer(-5);
+	modTimer(-45);
 	script = script.start(path, "utils/u_quest", "utils/u_general");
 	if(script == null) {
-		msg("dev", "quest not started");
+		snuvi.debug("quest not started");
 		return;
 	}
 	quest.addPlayer(script, player);
@@ -20,13 +20,24 @@ function quest.start(player, path) {
 	inv.close(player);
 }
 
+function player.unlockedLumberjack(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getBool(config, "skillshop.lumberjack", false);
+}
+
+function player.unlockLumberjack(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "skillshop.lumberjack", true);
+	config.saveAsync(config);
+}
+
 function player.getShipProgress(player_or_id) {
-	config = playerdata.getStory(player_or_id);
+	config = playerdata.getSurvival(player_or_id);
 	return config.getDouble(config, "ship.progress", 0);
 }
 
 function player.setShipProgress(player_or_id, progress) {
-	config = playerdata.getStory(player_or_id);
+	config = playerdata.getSurvival(player_or_id);
 	old_progress = config.getDouble(config, "ship.progress", 0);
 	if(progress > old_progress) {
 		config.set(config, "ship.progress", progress);
@@ -38,50 +49,48 @@ function human.giveItem(human_name, player, needed_type_or_tag, needed_amount) {
 	if(needed_amount == 0) {
 		return -1;
 	}
-	item = living.getEquip(player, "hand");
-	item_type = item.getType(item);
-	if(item_type == "minecraft:air") {
+	item = living.getHand(player);
+	if(item == null) {
 		return needed_amount;
 	}
-	human_name = concat("§d", human_name);
+	item_type = item.getType(item);
+	human_name = string.concat("§d", human_name);
 	needed = false;
 	tag_check = false;
-	if(text.class(needed_type_or_tag) == "String") {
+	if(isMaterial(needed_type_or_tag)) {
 		if(item_type == needed_type_or_tag) {
 			needed = true;
 		}
 	} else {
-		if(item.hasTag(needed_type_or_tag, item)) {
+		if(item.hasTag(item, needed_type_or_tag)) {
 			needed = true;
 			tag_check = true;
 		}
 	}
 	if(needed) {
-		rest_item = player.removeItem(player, read.item(item_type, needed_amount));
+		rest_item = player.removeItem(player, item.new(item_type, needed_amount));
+		if(rest_item == 0) {
+			return 0;
+		}
+		amount_not_removed = item.getAmount(rest_item);
+		player.removeItem(player, item.new(item_type, amount_not_removed));
+		rest_item_amount = needed_amount - amount_not_removed;
+		
+		rest_item = player.removeItemNbt(player, rest_item);
 		rest_item_amount = item.getAmount(rest_item);
 		if(rest_item_amount > 0) {
-			rest_item = player.removeItemNbt(player, rest_item);
-			rest_item_amount = item.getAmount(rest_item);
-			if(rest_item_amount > 0) {
-				if(tag_check) {
-					rest_item = player.removeItemTag(player, needed_type_or_tag, rest_item_amount);
-					rest_item_amount = item.getAmount(rest_item);
-					if(rest_item_amount > 0) {
-						msg.prefix(player, human_name, concat("Ich brauche bitte noch ", text.number(rest_item_amount), " Stück davon."));
-					}
-				} else {
-					msg.prefix(player, human_name, concat("Ich brauche bitte noch ", text.number(rest_item_amount), " Stück davon."));
+			if(tag_check) {
+				rest_item = player.removeItemTag(player, needed_type_or_tag, rest_item_amount);
+				rest_item_amount = item.getAmount(rest_item);
+				if(rest_item_amount > 0) {
+					msg.prefix(player, human_name, string.concat("I need ", text.number(rest_item_amount), " more of these please."));
 				}
+			} else {
+				msg.prefix(player, human_name, string.concat("I need ", text.number(rest_item_amount), " more of these please."));
 			}
 		}
 		return rest_item_amount;
 	}
-	msg.prefix(player, human_name, "Das kann ich nicht gebrauchen.");
+	msg.prefix(player, human_name, "I do not need this.");
 	return needed_amount;
-}
-
-function quest.callShowShop(player, shop_type) {
-	setScriptVar("player", player);
-	setScriptVar("shop_type", shop_type);
-	script.callEvent("skill_showshop");
 }

+ 53 - 36
utils/u_skills.txt

@@ -48,7 +48,7 @@ function skill.hasEnough(player, tech_name) {
 
 function skill.msg(player, tech_name) {
 	skill_name = skill.getName(tech_name);
-	msg.prefix(player, prefix_skill, string.concat("Used ", skill_name, ". New amount: ", text.number(skill.getAmount(player, tech_name))));
+	msg.prefix(player, prefix_skill, string.concat("Used ", skill_name, ". New amount: ", string.number(skill.getAmount(player, tech_name))));
 }
 
 function skill.getAmount(player_or_id, tech_name) {
@@ -133,7 +133,7 @@ function skill.getIndex(tech_name) {
 
 function skill.getShopItem(player_or_id, tech_name) {
 	if(tech_name == null) {
-		return item.getAir();
+		return null;
 	}
 	skill = skill.get(tech_name);
 	amount = skill.getAmount(player_or_id, tech_name);
@@ -145,7 +145,7 @@ function skill.getShopItem(player_or_id, tech_name) {
 			text_property = string.concat("§fBought: §aYes §f(Permanent)");
 		}
 	} else {
-		text_property = string.concat("§fAmount you have: §e", text.number(amount));
+		text_property = string.concat("§fAmount you have: §e", string.number(amount));
 	}
 	active = skill[6];
 	if(active) {
@@ -164,7 +164,13 @@ function skill.getShopItem(player_or_id, tech_name) {
 		tog = "§fNot toggleable";
 	}
 	skill_name = skill.getName(tech_name);
-	item = read.item(skill[2], 1, string.concat("§e§o", skill_name), string.concat("§fCost: §e", text.number(skill[4])), skill[3], type, tog, text_property);
+	lore_list = list.new();
+	list.add(lore_list, text.new(string.concat("§fCost: §e", string.number(skill[4]))));
+	list.add(lore_list, text.new(skill[3]));
+	list.add(lore_list, text.new(type));
+	list.add(lore_list, text.new(tog));
+	list.add(lore_list, text.new(text_property));
+	item = item.create(skill[2], 1, string.concat("§e§o", skill_name), lore_list);
 	return item;
 }
 
@@ -179,12 +185,12 @@ function skill.getName(tech_name) {
 	}
 }
 
-function skill.getTechName(tech_name) {
+function skill.getTechName(skill_name) {
 	skill_list  = skill.getList();
 	for(i = 0; i < list.getSize(skill_list); i++) {
 		array = list.getIndex(skill_list, i);
-		temp_tech_name = array[1];
-		if(temp_tech_name == tech_name) {
+		temp_skill_name = array[0];
+		if(temp_skill_name == skill_name) {
 			return array[1];
 		}
 	}
@@ -290,41 +296,52 @@ function skill.getTime(tech_name) {
 }
 
 function skill.showShop(player, tech_name1, tech_name2, tech_name3, tech_name4, tech_name5, tech_name6, tech_name7, tech_name8, tech_name9, tech_name10, tech_name11, tech_name12, tech_name13, tech_name14, tech_name15, tech_name16, tech_name17, tech_name18) {
-	inv = inv.new("333333333333333333");
-	inv.setItem(inv, 0, skill.getShopItem(player, tech_name1));
-	inv.setItem(inv, 1, skill.getShopItem(player, tech_name2));
-	inv.setItem(inv, 2, skill.getShopItem(player, tech_name3));
-	inv.setItem(inv, 3, skill.getShopItem(player, tech_name4));
-	inv.setItem(inv, 4, skill.getShopItem(player, tech_name5));
-	inv.setItem(inv, 5, skill.getShopItem(player, tech_name6));
-	inv.setItem(inv, 6, skill.getShopItem(player, tech_name7));
-	inv.setItem(inv, 7, skill.getShopItem(player, tech_name8));
-	inv.setItem(inv, 8, skill.getShopItem(player, tech_name9));
-	inv.setItem(inv, 9, skill.getShopItem(player, tech_name10));
-	inv.setItem(inv, 10, skill.getShopItem(player, tech_name11));
-	inv.setItem(inv, 11, skill.getShopItem(player, tech_name12));
-	inv.setItem(inv, 12, skill.getShopItem(player, tech_name13));
-	inv.setItem(inv, 13, skill.getShopItem(player, tech_name14));
-	inv.setItem(inv, 14, skill.getShopItem(player, tech_name15));
-	inv.setItem(inv, 15, skill.getShopItem(player, tech_name16));
-	inv.setItem(inv, 16, skill.getShopItem(player, tech_name17));
-	inv.setItem(inv, 17, skill.getShopItem(player, tech_name18));
-	inv.open(inv, player, "Skillshop");
+	inv = inv.new("222222222222222222", text.new("Skillshop"));
+	skillshop.setItem(inv, 0, player, tech_name1);
+	skillshop.setItem(inv, 1, player, tech_name2);
+	skillshop.setItem(inv, 2, player, tech_name3);
+	skillshop.setItem(inv, 3, player, tech_name4);
+	skillshop.setItem(inv, 4, player, tech_name5);
+	skillshop.setItem(inv, 5, player, tech_name6);
+	skillshop.setItem(inv, 6, player, tech_name7);
+	skillshop.setItem(inv, 7, player, tech_name8);
+	skillshop.setItem(inv, 8, player, tech_name9);
+	skillshop.setItem(inv, 9, player, tech_name10);
+	skillshop.setItem(inv, 10, player, tech_name11);
+	skillshop.setItem(inv, 11, player, tech_name12);
+	skillshop.setItem(inv, 12, player, tech_name13);
+	skillshop.setItem(inv, 13, player, tech_name14);
+	skillshop.setItem(inv, 14, player, tech_name15);
+	skillshop.setItem(inv, 15, player, tech_name16);
+	skillshop.setItem(inv, 16, player, tech_name17);
+	skillshop.setItem(inv, 17, player, tech_name18);
+	inv.open(inv, player);
 }
 
-function skill.showAll(from_player_or_id, to_player) {
-	inv = inv.new("333333333333333333333333333");
-	skill_list  = skill.getList();
-	for(i = 0; i < list.getSize(skill_list); i++) {
-		a = list.getIndex(skill_list, i);
-		tech_name = a[1];
-		inv.setItem(inv, i, skill.getShopItem(from_player_or_id, tech_name));
+function skillshop.setItem(inv, index, player, tech_name) {
+	item = skill.getShopItem(player, tech_name);
+	if(item != null) {
+		inv.setItem(inv, index, item);
 	}
+}
+
+function skill.showAll(from_player_or_id, to_player) {
 	from_player_id = player.getValidId(from_player_or_id);
 	if(from_player_id == player.getValidId(to_player)) {
 		inv_name = "Skills";
 	} else {
-		inv_name = string.concat("Skills von ", player.getNameFromId(from_player_id));
+		inv_name = string.concat("Skills from ", player.getNameFromId(from_player_id));
+	}
+	
+	inv = inv.new("222222222222222222222222222", text.new(inv_name));
+	skill_list  = skill.getList();
+	for(i = 0; i < list.getSize(skill_list); i++) {
+		a = list.getIndex(skill_list, i);
+		tech_name = a[1];
+		item = skill.getShopItem(from_player_or_id, tech_name);
+		if(item != null) {
+			inv.setItem(inv, i, item);
+		}
 	}
-	inv.open(inv, to_player, inv_name);
+	inv.open(inv, to_player);
 }