mloeschenkohl 2 years ago
parent
commit
58921247f4

+ 3 - 3
minigames/sammelfieber/sammelfieber.txt

@@ -124,7 +124,7 @@ resetlistdouble_type = list.new();
 resetlistdouble_loc = list.new();
 resetlistdouble_loc2 = list.new();
 
-sgoto(1, "tick");
+sgoto(2, "tick");
 
 for(h = 0; h < amount_nextitems; h++) {
 	gosub("newitem");
@@ -189,7 +189,7 @@ if(state != null) {
 	list.add(resetlistdouble_type, block_type);
 	list.add(resetlistdouble_loc, loc);
 	list.add(resetlistdouble_loc2, loc2);
-	sgoto(1, "doubleresetblock");
+	sgoto(2, "doubleresetblock");
 	goto("wait");
 }
 if(block_type == "minecraft:vine") {
@@ -207,7 +207,7 @@ if(block_type == "minecraft:farmland") {
 }
 list.add(resetlist_type, block_type);
 list.add(resetlist_loc, block_loc);
-sgoto(1, "resetblock");
+sgoto(2, "resetblock");
 goto("wait");
 
 @bucket_use

+ 3 - 3
minigames/sammelfieber/sfranked.txt

@@ -37,7 +37,7 @@ resetlistdouble_type = list.new();
 resetlistdouble_loc = list.new();
 resetlistdouble_loc2 = list.new();
 
-sgoto(1, "tick");
+sgoto(2, "tick");
 
 minigame.speakAll(gamename, "Collect as many shown items as you can.");
 minigame.speakAll(gamename, "Drop and collect not counted items again.");
@@ -144,7 +144,7 @@ if(state != null) {
 	list.add(resetlistdouble_type, block_type);
 	list.add(resetlistdouble_loc, loc);
 	list.add(resetlistdouble_loc2, loc2);
-	sgoto(1, "doubleresetblock");
+	sgoto(2, "doubleresetblock");
 	goto("wait");
 }
 if(block_type == "minecraft:vine") {
@@ -162,7 +162,7 @@ if(block_type == "minecraft:farmland") {
 }
 list.add(resetlist_type, block_type);
 list.add(resetlist_loc, block_loc);
-sgoto(1, "resetblock");
+sgoto(2, "resetblock");
 goto("wait");
 
 @bucket_use

+ 3 - 1
startscript.txt

@@ -21,7 +21,8 @@ script.startNamed("Playtime", "system/playtime");
 script.startNamed("Pumpkin", "utils/u_error", "system/pumpkin", "utils/u_general");
 script.startNamed("Voxel", "system/voxel");
 script.startNamed("Mobspawning", "system/mobspawning");
-script.startNamed("Fixitems", "system/fixitems");
+script.startNamed("Fixitems", "utils/u_error", "system/fixitems");
+script.startNamed("Trader", "utils/u_error", "survival/trader");
 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");
@@ -35,6 +36,7 @@ script.startNamed("QuestsSchiffbruch", "utils/u_error", "story/schiffbruch/core"
 script.startNamed("Workberries", "system/workberries");
 script.startNamed("Timber", "utils/u_error", "system/timber", "utils/u_general");
 script.startNamed("Loom", "utils/u_error", "system/loom", "utils/u_general");
+script.startNamed("Lectern", "utils/u_error", "system/lectern", "utils/u_general");
 script.startNamed("TipLoop", "utils/u_error", "system/tiploop", "utils/u_general");
 script.startNamed("Gamerules", "system/gamerules");
 script.startNamed("Scheduler", "utils/u_error", "system/scheduler", "utils/u_general");

+ 11 - 4
stop.txt

@@ -1,7 +1,8 @@
 event.load("player_login");
 
 sgoto(500, "announce");
-msg.server("§4The server will stop soon!!!");
+msg("online", "§4The server will stop soon!!!");
+msg("SERVER", "§4The server will stop soon!!!");
 
 @wait
 wait();
@@ -9,21 +10,27 @@ cancel = true;
 goto("wait");
 
 @announce
-msg.server("§4The server will stop now!!!");
+msg("online", "§4The server will stop now!!!");
+msg("SERVER", "§4The server will stop now!!!");
 sgoto(100, "stop");
 goto("wait");
 
 @stop
 online_list = players.toList();
 if(list.getSize(online_list) == 0) {
-	command("stop");
+	sgoto(100, "final_stop");
 	goto("wait");
 }
-p = list.getIndex(online_list, 0)
+p = list.getIndex(online_list, 0);
 list.removeIndex(online_list, 0);
+ban.kick(p, "Serverneustart");
 sgoto(20, "stop");
 goto("wait");
 
+@final_stop
+command("stop");
+goto("wait");
+
 @on_error
 msg("dev", "stop script termed");
 term();

+ 4 - 0
story/admont/core.txt

@@ -331,6 +331,10 @@ 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("wait");
+}
+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("wait");
 

+ 1 - 0
story/admont/felsmagier.txt

@@ -313,6 +313,7 @@ if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "
 			msg(player, "§dQuest abgeschlossen. Belohnung: 45 Snuvis!");
 			msg(player, text.click("§r [§cclick§r] §f[§bTeleport§f] zum Story-Spawn.", "/story"));
 			money.addBoost(player, 45);
+			quest.callShowShop(player, "felsmagier");
 			quest.finish(script, player);
 		}
 	}

+ 6 - 6
story/admont/mitbringsel.txt

@@ -89,7 +89,7 @@ if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "
 				}
 			}
 		}
-		elseifif(item_type == "km:herb_shadow") {
+		elseif(item_type == "km:herb_shadow") {
 			if(herb_shadow_needed > 0) {
 				rest_amount = human.giveItem(entity_name, player, item_type, herb_shadow_needed);
 				if(rest_amount != 0) {
@@ -97,7 +97,7 @@ if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "
 				}
 			}
 		}
-		elseifif(item_type == "km:herb_xp") {
+		elseif(item_type == "km:herb_xp") {
 			if(herb_xp_needed > 0) {
 				rest_amount = human.giveItem(entity_name, player, item_type, herb_xp_needed);
 				if(rest_amount != 0) {
@@ -105,7 +105,7 @@ if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "
 				}
 			}
 		}
-		elseifif(item_type == "km:herb_sea") {
+		elseif(item_type == "km:herb_sea") {
 			if(herb_sea_needed > 0) {
 				rest_amount = human.giveItem(entity_name, player, item_type, herb_sea_needed);
 				if(rest_amount != 0) {
@@ -113,7 +113,7 @@ if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "
 				}
 			}
 		}
-		elseifif(item_type == "km:herb_gold") {
+		elseif(item_type == "km:herb_gold") {
 			if(herb_gold_needed > 0) {
 				rest_amount = human.giveItem(entity_name, player, item_type, herb_gold_needed);
 				if(rest_amount != 0) {
@@ -121,7 +121,7 @@ if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "
 				}
 			}
 		}
-		elseifif(item_type == "km:herb_breathing") {
+		elseif(item_type == "km:herb_breathing") {
 			if(herb_breathing_needed > 0) {
 				rest_amount = human.giveItem(entity_name, player, item_type, herb_breathing_needed);
 				if(rest_amount != 0) {
@@ -129,7 +129,7 @@ if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "
 				}
 			}
 		}
-		elseifif(item_type == "km:herb_fire") {
+		elseif(item_type == "km:herb_fire") {
 			if(herb_fire_needed > 0) {
 				rest_amount = human.giveItem(entity_name, player, item_type, herb_fire_needed);
 				if(rest_amount != 0) {

+ 37 - 0
survival/trader.txt

@@ -0,0 +1,37 @@
+event.load("entity_click");
+
+beer = read.item("{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDE2OGI5ODA5OGEwYzRhMjllMjA0NjcwNDYzMDkxZGI2MDcwZTc3ZDg2NzY5ZDk4NWY2YmVmNDA3NWU1In19fQ==\"}]},Id:[I;-919099029,-843296815,-1978014726,-1632767213]},display:{Name:'{\"text\":\"§FBeer\"}'}}}");
+
+msg("dev", "§bTrader §rloaded.");
+@wait
+wait();
+if(event == "entity_click") {
+	if(hand == "OFF_HAND") {
+		goto("wait");
+	}
+	entity_type = entity.getType(entity);
+	if(entity_type != "human") {
+		goto("wait");
+	}
+	entity_name = entity.getName(entity);
+	shop_name = concat(entity_name, "'s shop");
+	if(entity_name == "Alena") {
+		shop = shop.new();
+		buy_item = read.item("km:coin_copper", 32);
+		shop.addOffer(shop, buy_item, beer, 999);
+		shop.open(shop, player, shop_name);
+		goto("wait");
+	}
+	if(entity_name == "Franz") {
+		shop = shop.new();
+		buy_item = read.item("km:coin_copper", 32);
+		shop.addOffer(shop, buy_item, beer, 999);
+		shop.open(shop, player, shop_name);
+		goto("wait");
+	}
+	if(entity_name == "Baker") {
+		//shop.open(shop_2, player, shop_name);
+		goto("wait");
+	}
+}
+goto("wait");

+ 31 - 13
system/commands.txt

@@ -3044,6 +3044,7 @@ if(size != 1) {
 	msg(sender, " - harvest");
 	msg(sender, " - hawkeye");
 	msg(sender, " - herobrine");
+	msg(sender, " - lectern");
 	msg(sender, " - loom");
 	msg(sender, " - mails");
 	msg(sender, " - perms");
@@ -3056,6 +3057,7 @@ if(size != 1) {
 	msg(sender, " - survival");
 	msg(sender, " - ticket");
 	msg(sender, " - timber");
+	msg(sender, " - trader");
 	msg(sender, " - voxel");
 	goto("wait");
 }
@@ -3132,6 +3134,13 @@ elseif(arg0 == "herobrine") {
 	}
 	script.startNamed("Herobrine", "utils/u_error", "system/herobrine", "utils/u_general");
 }
+elseif(arg0 == "lectern") {
+	script = script.get("Lectern");
+	if(script != null) {
+		script.term(script);
+	}
+	script.startNamed("Lectern", "utils/u_error", "system/lectern", "utils/u_general");
+}
 elseif(arg0 == "loom") {
 	script = script.get("Loom");
 	if(script != null) {
@@ -3191,6 +3200,13 @@ elseif(arg0 == "timber") {
 	}
 	script.startNamed("Timber", "utils/u_error", "system/timber", "utils/u_general");
 }
+elseif(arg0 == "trader") {
+	script = script.get("Trader");
+	if(script != null) {
+		script.term(script);
+	}
+	script.startNamed("Trader", "utils/u_error", "survival/trader");
+}
 elseif(arg0 == "story") {
 	script = script.get("Story");
 	if(script != null) {
@@ -6551,20 +6567,20 @@ if(size >= 4) {
 } else {
 	world = loc.getWorld(entity.getLocation(player));
 }
-if(x < -16000) {
-	x = -16000;
-} elseif(x > 16000) {
-	x = 16000;
+if(x < -17000) {
+	x = -17000;
+} elseif(x > 17000) {
+	x = 17000;
 }
 if(y < 0) {
 	y = 0;
 } elseif(y > 255) {
 	y = 255;
 }
-if(z < -16000) {
-	z = -16000;
-} elseif(z > 16000) {
-	z = 16000;
+if(z < -17000) {
+	z = -17000;
+} elseif(z > 17000) {
+	z = 17000;
 }
 location = loc.new(world, x, y, z);
 if(size == 5) {
@@ -6635,7 +6651,7 @@ if(size == 0) {
 	msg(player, "§2 - invite <name> §rInvites a player");
 	msg(player, "§2 - accept <id/name/tag> §rAccepts an invitation");
 	msg(player, "§2 - info [id/name/tag] §rReturns info about a clan");
-	msg(player, "§2 - create <name> <tag> §rCreates a clan");
+	msg(player, "§2 - create <name> <tag> §rCreates a clan. Costs §64096 §rsnuvis.");
 	msg(player, "§2 - kick <name> §rKicks a player");
 	msg(player, "§2 - leader <name> §rPromote to clan-leader");
 	msg(player, "§2 - mod <name> §rPromote to clan-mod");
@@ -8147,6 +8163,7 @@ function setCommandHelps() {
 	command.addHelpChild(help, command.newHelpLiteral("harvest"));
 	command.addHelpChild(help, command.newHelpLiteral("hawkeye"));
 	command.addHelpChild(help, command.newHelpLiteral("herobrine"));
+	command.addHelpChild(help, command.newHelpLiteral("lectern"));
 	command.addHelpChild(help, command.newHelpLiteral("loom"));
 	command.addHelpChild(help, command.newHelpLiteral("games"));
 	command.addHelpChild(help, command.newHelpLiteral("mails"));
@@ -8160,6 +8177,7 @@ function setCommandHelps() {
 	command.addHelpChild(help, command.newHelpLiteral("survival"));
 	command.addHelpChild(help, command.newHelpLiteral("ticket"));
 	command.addHelpChild(help, command.newHelpLiteral("timber"));
+	command.addHelpChild(help, command.newHelpLiteral("trader"));
 	command.addHelpChild(help, command.newHelpLiteral("voxel"));
 	command.addHelp(help);
 
@@ -8244,9 +8262,9 @@ function setCommandHelps() {
 	command.addHelp(help);
 	
 	help = command.newHelp("tppos", "tppos");
-	helpArg0 = command.newHelpInt("x", -16000, 16000);
+	helpArg0 = command.newHelpInt("x", -17000, 17000);
 	helpArg1 = command.newHelpInt("y", 0, 1000);
-	helpArg2 = command.newHelpInt("z", -16000, 16000);
+	helpArg2 = command.newHelpInt("z", -17000, 17000);
 	helpArg3 = command.newHelpString("world", false);
 	helpArg4 = command.newHelpSpecial("Player", "player");
 	command.addHelpChild(helpArg3, helpArg4);
@@ -8374,8 +8392,8 @@ function setCommandHelps() {
 	
 	help = command.newHelp("tempban", "tempban");
 	helpArg0 = command.newHelpSpecial("Player", "player");
-	helpArg1 = command.newHelpInt("days", 1, 100);
-	helpArg2 = command.newHelpInt("hours", 1, 100);
+	helpArg1 = command.newHelpInt("days", 0, 100);
+	helpArg2 = command.newHelpInt("hours", 0, 100);
 	helpArg3 = command.newHelpInt("minutes", 1, 100);
 	command.addHelpChild(helpArg3, command.newHelpString("reason", true));
 	command.addHelpChild(helpArg2, helpArg3);

+ 43 - 0
system/feature_list.txt

@@ -0,0 +1,43 @@
+Bildschirm
+	Links oben: Geld-Anzeige; weitere Spielinfos...
+	Mittig oben: Funktionen aufrubar über die Tastatur
+	Rechts oben: Statuseffekte als Text mit Timer dargestellt (statt als Vanilla-Icon); Anzeige zeitlicher Spielinfos
+
+Aufrubare Funktionen über den Bildschirm mittig oben:
+* Settings-Menü: Spieler können für sich persönlich diverse Einstellungen über diese Menü togglen.
+* Skills-Übersicht und Einstellungen: Zeigt alle Skills des Servers inklusive Kosten und Beschreibungen. Aktive Skills lassen sich dort aktivieren. Passive Skills können dort getoggled werden.
+* Skip Night: Zeigt das Voting-Menü für das Skippen der Nacht
+
+Mod-Rezepte: Am Spawn steht ein Human, der einem alle Mod-Rezepte (Werkbank + Ofen) anzeigt.
+Info-Point: Am Spawn steht ein Human, der einem einen Überblick über den Server gibt. Teleports und Links zu Websites sind eingebettet.
+
+Währung: Snuvis
+1 Snuvi -> 1 Copper_Coin
+64 Snuvis -> 1 Silver_Coin
+4096 Snuvis -> 1 Gold_Coin
+
+Man verdient Geld primär durch Quests, ChestShops und Abenteuer. Geld wird direkt auf das Konto eines Spielers gelegt.
+Beim Bänker am Spawn kann man sich Münzen auszahlen lassen, sowie Münzen einzahlen und umtauschen.
+Neben dem Bänker am Spawn befindet sich ein Gambler-Automat mit einer 50/50-Chance für eine bestimmte Menge an gesetzten Snuvis.
+Außerdem lassen sich dort über zwei Lotterien pro Klick 1 Snuvi einzahlen, um mit einer Gewinnchance von 1:1.000 bzw. 1:10.000 den gesamten Betrag zu bekommen.
+
+
+Zusätzliche Survival-Features:
+- AFK-Loop: Jede Runde im AFK bekommt man einen Snuvi.
+- Rechtsklick mit einer Clock zeigt die Ingame-Zeit im Format hh:mm an.
+- Creeper explodieren auf Grundstücken nicht (Ausnahme: Explosive-Flag)
+- Tiere erhalten durch den Besitzer keinen Schaden. Gilt für: Katzen, Hunde, Papageien, alle Arten von Pferden. Über Settings-Menü togglebar.
+- PvP ist togglebar. Beide Seiten müssen PvP über das Settings-Menü eingeschalten haben.
+- Teleport vom Spawn in die Games-Welt durch ein Portal (Höhle)
+- Teleport vom Spawn in die Story-Welt durch ein Portal (Baum)
+- Mobgriefing durch Enderman wird verhindert
+
+BugHandling:
+- Im Spawnhaus bekommt man keinen Fallschaden. Durch den Teleport/Respawn dorthin, wurden Spieler erneut getötet.
+- Schilder können durch Spieler mit Farbstoffen nicht umgefärbt werden.
+
+//player_move Teleport: story, games
+//lectern
+//Abenteuer. Login show adventure-display
+//Teleporter allgemein
+//Skills

+ 1 - 1
system/herobrine.txt

@@ -38,7 +38,7 @@ if(event == "block_break") {
 	if(!word.isSurvName(world_name)) {
 		goto("wait");
 	}
-	r = math.random(1, 500);
+	r = math.random(1, 2000);
 	if(r == 1) {
 		spawnHerobrine(player);
 	}

+ 314 - 0
system/lectern.txt

@@ -0,0 +1,314 @@
+event.load("player_toss");
+event.load("block_click");
+
+par = particle.get("minecraft:witch");
+prefix_money = "§2Money";
+prefix_commands = "§6Commands";
+
+max_ench_lvl = map.new();
+map.add(max_ench_lvl, enchantment.get("efficiency"), 10);
+map.add(max_ench_lvl, enchantment.get("smite"), 10);
+map.add(max_ench_lvl, enchantment.get("bane_of_arthropods"), 10);
+map.add(max_ench_lvl, enchantment.get("loyalty"), 5);
+map.add(max_ench_lvl, enchantment.get("piercing"), 5);
+map.add(max_ench_lvl, enchantment.get("lure"), 5);
+map.add(max_ench_lvl, enchantment.get("luck_of_the_sea"), 5);
+map.add(max_ench_lvl, enchantment.get("riptide"), 5);
+map.add(max_ench_lvl, enchantment.get("unbreaking"), 5);
+map.add(max_ench_lvl, enchantment.get("quick_charge"), 5);
+map.add(max_ench_lvl, enchantment.get("protection"), 5);
+map.add(max_ench_lvl, enchantment.get("fire_protection"), 5);
+map.add(max_ench_lvl, enchantment.get("blast_protection"), 5);
+map.add(max_ench_lvl, enchantment.get("projectile_protection"), 5);
+map.add(max_ench_lvl, enchantment.get("feather_falling"), 5);
+map.add(max_ench_lvl, enchantment.get("respiration"), 5);
+map.add(max_ench_lvl, enchantment.get("thorns"), 5);
+map.add(max_ench_lvl, enchantment.get("depth_strider"), 5);
+map.add(max_ench_lvl, enchantment.get("frost_walker"), 2);
+map.add(max_ench_lvl, enchantment.get("soul_speed"), 3);
+map.add(max_ench_lvl, enchantment.get("sharpness"), 10);
+map.add(max_ench_lvl, enchantment.get("knockback"), 5);
+map.add(max_ench_lvl, enchantment.get("fire_aspect"), 2);
+map.add(max_ench_lvl, enchantment.get("looting"), 5);
+map.add(max_ench_lvl, enchantment.get("sweeping_edge"), 5);
+map.add(max_ench_lvl, enchantment.get("power"), 5);
+map.add(max_ench_lvl, enchantment.get("punch"), 5);
+map.add(max_ench_lvl, enchantment.get("impaling"), 5);
+map.add(max_ench_lvl, enchantment.get("fortune"), 5);
+
+msg("dev", "§bLectern §rloaded.");
+@wait
+wait();
+loc = entity.getLocation(player);
+world_name = world.getName(loc.getWorld(loc));
+if(world.isCreativeName(world_name)) {
+	goto("wait");
+}
+ignoreGoto(event);
+goto("wait");
+
+@player_toss
+target_loc = player.getTarget(player, 5);
+block_type = block.getType(target_loc);
+if(block_type == "minecraft:lectern") {
+	cancel = true;
+	item.entity.spawn(item.entity.new(loc.mod(target_loc, 0.5, 1.5, 0.5), item));
+}
+goto("wait");
+
+@block_click
+if(hand == "OFF_HAND") {
+	goto("wait");
+}
+if(action == "left") {
+	goto("wait");
+}
+if(block_type != "minecraft:lectern") {
+	goto("wait");
+}
+itementity = entity.get(loc.mod(block_loc, 0.5, 0.9, 0.5), 0.2, "net.minecraft.entity.item.ItemEntity");
+if(itementity == null) {
+	goto("wait");
+}
+list = entity.near(itementity, 0.2);
+list.add(list, itementity);
+temp_list = list.new();
+for(i = 0; i < list.getSize(list); i++) {
+	entity = list.getIndex(list, i);
+	if(entity.getType(entity) != "item") {
+		list.add(temp_list, entity);
+	}
+}
+for(i = 0; i < list.getSize(temp_list); i++) {
+	entity = list.getIndex(temp_list, i);
+	list.remove(list, entity);
+}
+if(list.getSize(list) < 2) {
+	msg.prefix(player, prefix_commands, "Too few items on lectern.");
+	goto("wait");
+}
+a = array.new(2, 6); //0 = item, 1 = itementity, 2 = enchantments, 3 = enchanted, 4 = enchanted_book, 5 = book
+size = 0;
+for(i = 0; i < list.getSize(list); i++) {
+	entity = list.getIndex(list, i);
+	item = item.entity.get(entity);
+	size += item.getAmount(item);
+	if(size > 2) {
+		msg.prefix(player, prefix_commands, "Too many items on lectern.");
+		goto("wait");
+	}
+	map = enchantment.readFromItem(item);
+	a[i, 0] = item;
+	a[i, 1] = entity;
+	a[i, 2] = map;
+	a[i, 4] = false;
+	a[i, 5] = false;
+	if(map.getSize(map) > 0) {
+		//Verzauberte Items
+		a[i, 3] = true;
+		if(item.getType(item) == "minecraft:enchanted_book") {
+			a[i, 4] = true;
+		}
+	} else {
+		//Nicht verzauberte Items
+		a[i, 3] = false;
+		if(item.getType(item) == "minecraft:book") {
+			a[i, 5] = true;
+		}
+	}
+}
+lectern_action = null;
+if(a[0, 4] == true && a[1, 4] == true) {
+	//Beide Items sind verzauberte Bücher
+	lectern_action = 0;
+}
+elseif(a[0, 5] == true || a[1, 5] == true) {
+	//Eines der beiden Items ist ein normales Buch
+	if(a[0, 4] == true || a[1, 4] == true) {
+		//Eines der beiden Items ist ein verzaubertes Buch
+		lectern_action = 1;
+	} elseif(a[0, 3] == true || a[1, 3] == true) {
+		//Eines der beiden Items ist ein verzaubertes Item
+		lectern_action = 2;
+	}
+}
+elseif(a[0, 4] == true || a[1, 4] == true) {
+	lectern_action = 3;
+}
+if(lectern_action == null) {
+	goto("wait");
+}
+
+if(lectern_action == 0) {
+	//Verzauberungsbücher mergen
+	item1 = a[0, 0];
+	item_entity1 = a[0, 1];
+	item_entity2 = a[1, 1];
+	map1 = a[0, 2];
+	map2 = a[1, 2];
+	map_size1 = map.getSize(map1);
+	map_size2 = map.getSize(map2);
+	iter = map.iterator(map2);
+	betrag = 0;
+	extra = 0;
+	while(hasNext(iter)) {
+		element = next(iter);
+		key = map.getKey(element);
+		level1 = map.getValue(element);
+		level2 = map.getOrDefault(map1, key, 0);
+		if(level1 == level2) {
+			max_lvl = map.get(max_ench_lvl, key);
+			//max_lvl = map.getOrDefault(max_ench_lvl, key, enchantment.getMaxLevel(key));
+			if(max_lvl == null) {
+				msg.prefix(player, prefix_commands, "Unknown enchantment.");
+				goto("wait");
+			}
+			if(level1 >= max_lvl) {
+				msg.prefix(player, prefix_commands, "Maximum level already reached.");
+				goto("wait");
+			}
+			extra += 200;
+			level1++;
+		}
+		if(level2 > level1) {
+			level1 = level2;
+		}
+		map.add(map1, key, level1);
+	}
+	if(map_size1 > map_size2) {
+		map = map1;
+	} else {
+		map = map2;
+	}
+	iter = map.iterator(map);
+	while(hasNext(iter)) {
+		element = next(iter);
+		level = map.getValue(element);
+		betrag += level * 100 + extra;
+	}
+	if(!hasEnoughMoney(player.getId(player), betrag)) {
+		msg.prefix(player, prefix_money, concat("Not enough coins in inventory. This action costs ", text.number(betrag), " snuvis."));
+		goto("wait");
+	}
+	subMoney(player, betrag);
+	
+	enchantment.writeToItem(map1, item1);
+	item.entity.set(item_entity1, item.clone(item1));
+	entity.remove(item_entity2);
+} elseif(lectern_action == 1) {
+	//Verzauberungsbuch kopieren
+	if(a[0, 5]) {
+		book_index = 0;
+		other_index = 1;
+	} else {
+		book_index = 1;
+		other_index = 0;
+	}
+	item1 = a[book_index, 0];
+	item_entity1 = a[book_index, 1];
+	item2 = a[other_index, 0];
+	item_entity2 = a[other_index, 1];
+	map2 = a[other_index, 2];
+	
+	map_size = map.getSize(map2);
+	betrag = 100 * map_size;
+	if(!hasEnoughMoney(player.getId(player), betrag)) {
+		msg.prefix(player, prefix_money, concat("Not enough snuvis on your account. This action costs ", text.number(betrag), " snuvis."));
+		goto("wait");
+	}
+	subMoney(player, betrag);
+	
+	item1 = read.item("minecraft:enchanted_book");
+	enchantment.writeToItem(map2, item1);
+	item.entity.set(item_entity1, item1);
+	item.entity.set(item_entity2, item.clone(item2));
+} elseif(lectern_action == 2) {
+	//Einzelne Verzauberung herunterziehen
+	if(a[0, 5]) {
+		book_index = 0;
+		other_index = 1;
+	} else {
+		book_index = 1;
+		other_index = 0;
+	}
+	item_entity1 = a[book_index, 1];
+	map1 = map.new();
+	item2 = a[other_index, 0];
+	item_entity2 = a[other_index, 1];
+	map2 = a[other_index, 2];
+
+	item1 = read.item("minecraft:enchanted_book");
+	element = next(map.iterator(map2));
+	key = map.getKey(element);
+	value = map.getValue(element);
+	map.add(map1, key, value);
+	map.remove(map2, key);
+	
+	betrag = 100 * value;
+	if(!hasEnoughMoney(player.getId(player), betrag)) {
+		msg.prefix(player, prefix_money, concat("Not enough snuvis in your ccount. This action costs ", text.number(betrag), " snuvis."));
+		goto("wait");
+	}
+	subMoney(player, betrag);
+	
+	enchantment.writeToItem(map1, item1);
+	enchantment.writeToItem(map2, item2);
+	item.entity.set(item_entity1, item1);
+	item.entity.set(item_entity2, item.clone(item2));
+} elseif(lectern_action == 3) {
+	//Alle Verzauberungen vom Buch auf das Item übertragen
+	betrag = 0;
+	if(a[0, 4]) {
+		ench_book_index = 0;
+		other_index = 1;
+	} else {
+		ench_book_index = 1;
+		other_index = 0;
+	}
+	item1 = a[ench_book_index, 0];
+	item_entity1 = a[ench_book_index, 1];
+	map1 = a[ench_book_index, 2];
+	item2 = a[other_index, 0];
+	item_entity2 = a[other_index, 1];
+	map2 = a[other_index, 2];
+	map_size1 = map.getSize(map1);
+	map_size2 = map.getSize(map2);
+	
+	iter = map.iterator(map1);
+	while(hasNext(iter)) {
+		element = next(iter);
+		key = map.getKey(element);
+		value = map.getValue(element);
+		value2 = map.getOrDefault(map2, key, 0);
+		if(value2 > value) {
+			value = value2;
+		}
+		map.add(map2, key, value);
+	}
+	
+	if(map_size1 > map_size2) {
+		map = map1;
+	} else {
+		map = map2;
+	}
+	iter = map.iterator(map);
+	while(hasNext(iter)) {
+		element = next(iter);
+		level = map.getValue(element);
+		betrag += level * 100;
+	}
+	if(!hasEnoughMoney(player.getId(player), betrag)) {
+		msg.prefix(player, prefix_money, concat("Not enough snuvis on your account. This action costs ", text.number(betrag), " snuvis."));
+		goto("wait");
+	}
+	subMoney(player, betrag);
+	
+	enchantment.writeToItem(map2, item2);
+	item.entity.set(item_entity2, item.clone(item2));
+	entity.remove(item_entity1);
+}
+entity.throw(item_entity1, 0, 0.3, 0);
+entity.throw(item_entity2, 0, 0.3, 0);
+particle.spawn(loc.mod(block_loc, 0.5, 1.4, 0.5), par, 20, 0, 0.25, 0.25, 0.25);
+msg.prefix(player, prefix_money, concat("This cost " , text.number(betrag), " snuvis."));
+goto("wait");

+ 5 - 0
system/loom.txt

@@ -9,6 +9,11 @@ loom_list = list.new();
 msg("dev", "§bLoom §rloaded.");
 @wait
 wait();
+loc = entity.getLocation(player);
+world_name = world.getName(loc.getWorld(loc));
+if(world.isCreativeName(world_name)) {
+	goto("wait");
+}
 if(event == "player_toss") {
 	target_loc = player.getTarget(player, 5);
 	block_type = block.getType(target_loc);

+ 35 - 314
system/survival.txt

@@ -8,7 +8,6 @@ event.load("block_break");
 event.load("block_click");
 event.load("living_death");
 event.load("living_pre_hurt");
-event.load("player_toss");
 event.load("pre_explosion");
 event.load("mob_griefing");
 event.load("item_air_click");
@@ -56,37 +55,6 @@ gambler_loc = loc.new(overworld, 185, 68, 225);
 prefix_money = "§2Money";
 prefix_skill = "§2Skill";
 
-max_ench_lvl = map.new();
-map.add(max_ench_lvl, enchantment.get("efficiency"), 10);
-map.add(max_ench_lvl, enchantment.get("smite"), 10);
-map.add(max_ench_lvl, enchantment.get("bane_of_arthropods"), 10);
-map.add(max_ench_lvl, enchantment.get("loyalty"), 5);
-map.add(max_ench_lvl, enchantment.get("piercing"), 5);
-map.add(max_ench_lvl, enchantment.get("lure"), 5);
-map.add(max_ench_lvl, enchantment.get("luck_of_the_sea"), 5);
-map.add(max_ench_lvl, enchantment.get("riptide"), 5);
-map.add(max_ench_lvl, enchantment.get("unbreaking"), 5);
-map.add(max_ench_lvl, enchantment.get("quick_charge"), 5);
-map.add(max_ench_lvl, enchantment.get("protection"), 5);
-map.add(max_ench_lvl, enchantment.get("fire_protection"), 5);
-map.add(max_ench_lvl, enchantment.get("blast_protection"), 5);
-map.add(max_ench_lvl, enchantment.get("projectile_protection"), 5);
-map.add(max_ench_lvl, enchantment.get("feather_falling"), 5);
-map.add(max_ench_lvl, enchantment.get("respiration"), 5);
-map.add(max_ench_lvl, enchantment.get("thorns"), 5);
-map.add(max_ench_lvl, enchantment.get("depth_strider"), 5);
-map.add(max_ench_lvl, enchantment.get("frost_walker"), 2);
-map.add(max_ench_lvl, enchantment.get("soul_speed"), 3);
-map.add(max_ench_lvl, enchantment.get("sharpness"), 10);
-map.add(max_ench_lvl, enchantment.get("knockback"), 5);
-map.add(max_ench_lvl, enchantment.get("fire_aspect"), 2);
-map.add(max_ench_lvl, enchantment.get("looting"), 5);
-map.add(max_ench_lvl, enchantment.get("sweeping_edge"), 5);
-map.add(max_ench_lvl, enchantment.get("power"), 5);
-map.add(max_ench_lvl, enchantment.get("punch"), 5);
-map.add(max_ench_lvl, enchantment.get("impaling"), 5);
-map.add(max_ench_lvl, enchantment.get("fortune"), 5);
-
 air = "minecraft:air";
 air_item = read.item(air);
 leather = "minecraft:leather";
@@ -215,7 +183,6 @@ recipe.add(4, "minecraft:string", air, air, air, air, "minecraft:white_wool", ai
 ench_flame = enchantment.get("flame");
 ench_unbreaking = enchantment.get("unbreaking");
 ench_sharpness = enchantment.get("sharpness");
-par = particle.get("minecraft:witch");
 piston_sound = sound.get("block.piston.extend");
 adv_tp_sound = sound.get("block.portal.travel");
 sound_category_ambient = sound.getCategory("ambient");
@@ -229,30 +196,30 @@ inv.setItem(gambler_inv, 3, read.item("minecraft:netherite_block", 1, "§fAll in
 
 bankmenu = inv.new("233302332233302332");
 bankinvid = inv.getId(bankmenu);
-coin_gold = read.item("km:coin_gold", 1, "§f4096 snuvis");
-coin_silver = read.item("km:coin_silver", 1, "§f64 snuvis");
-coin_copper = read.item("km:coin_copper", 1, "§f1 snuvi");
-coin_silver64 = read.item("km:coin_silver", 64, "§f4096 snuvis");
-coin_copper64 = read.item("km:coin_copper", 64, "§f64 snuvis");
+coin_gold = read.item("km:coin_gold");
+coin_silver = read.item("km:coin_silver");
+coin_copper = read.item("km:coin_copper");
+coin_silver64 = read.item("km:coin_silver", 64);
+coin_copper64 = read.item("km:coin_copper", 64);
 arrow_left = read.item("km:arrow_left", 1, "§fchange to");
 arrow_right = read.item("km:arrow_right", 1, "§fchange to");
 
 inv.setItem(bankmenu, 0, read.item("km:plus_green", 1, "§fDeposit..."));
-inv.setItem(bankmenu, 1, coin_copper);
-inv.setItem(bankmenu, 2, coin_silver);
-inv.setItem(bankmenu, 3, coin_gold);
-inv.setItem(bankmenu, 4, coin_copper64);
+inv.setItem(bankmenu, 1, read.item("km:coin_copper", 1, "§f1 snuvi"));
+inv.setItem(bankmenu, 2, read.item("km:coin_silver", 1, "§f64 snuvis"));
+inv.setItem(bankmenu, 3, read.item("km:coin_gold", 1, "§f4096 snuvis"));
+inv.setItem(bankmenu, 4, read.item("km:coin_copper", 64, "§f64 snuvis"));
 inv.setItem(bankmenu, 5, arrow_left);
 inv.setItem(bankmenu, 6, arrow_right);
-inv.setItem(bankmenu, 7, coin_silver);
+inv.setItem(bankmenu, 7, read.item("km:coin_silver", 1, "§f64 snuvis"));
 inv.setItem(bankmenu, 8, read.item("km:minus_red", 1, "§fWithdraw..."));
-inv.setItem(bankmenu, 9, coin_copper);
-inv.setItem(bankmenu, 10, coin_silver);
-inv.setItem(bankmenu, 11, coin_gold);
-inv.setItem(bankmenu, 12, coin_silver64);
+inv.setItem(bankmenu, 9, read.item("km:coin_copper", 1, "§f1 snuvi"));
+inv.setItem(bankmenu, 10, read.item("km:coin_silver", 1, "§f64 snuvis"));
+inv.setItem(bankmenu, 11, read.item("km:coin_gold", 1, "§f4096 snuvis"));
+inv.setItem(bankmenu, 12, read.item("km:coin_silver", 64, "§f4096 snuvis"));
 inv.setItem(bankmenu, 13, arrow_left);
 inv.setItem(bankmenu, 14, arrow_right);
-inv.setItem(bankmenu, 15, coin_gold);
+inv.setItem(bankmenu, 15, read.item("km:coin_gold", 1, "§f4096 snuvis"));
 
 msg("dev", "§bSurvival §rloaded.");
 @wait
@@ -345,15 +312,6 @@ if(i == 0) {
 }
 goto("wait");
 
-@player_toss
-target_loc = player.getTarget(player, 5);
-block_type = block.getType(target_loc);
-if(block_type == "minecraft:lectern") {
-	cancel = true;
-	item.entity.spawn(item.entity.new(loc.mod(target_loc, 0.5, 1.5, 0.5), item));
-}
-goto("wait");
-
 @living_pre_hurt
 if(!isPlayer(living_entity)) {
 	damager = player.getFromDamageSource(damage_source);
@@ -430,7 +388,7 @@ if(entity.getType(entity) == "human") {
 	}
 	if(entity_name == "Adventure") {
 		if(!player.isOnAdventure(player)) {
-			msg.prefix(player, "§5Adventure", "§rYou aren't on an adventure. Click the chest in the teleporter to start an adventure.");
+			msg.prefix(player, "§5Adventure", "You aren't on an adventure. Click the chest in the teleporter to start an adventure.");
 			goto("wait");
 		}
 		player.setAdventure(player, false);
@@ -439,7 +397,7 @@ if(entity.getType(entity) == "human") {
 			adventures = 0;
 		}
 		player.setAdventureAmounts(player, ++adventures);
-		msg.prefix(player, "§5Adventure", "§rCongratulations, you finished your adventure, here ist your reward!");
+		msg.prefix(player, "§5Adventure", "Congratulations, you finished your adventure, here ist your reward!");
 		if(adventures == 10) {
 			offerRank(player, "rank.pioneer");
 		} elseif(adventures == 5) {
@@ -470,9 +428,7 @@ if(inv_id == bankinvid) { //Bankmenü
 	if(inv_slot == 5 || inv_slot == 6 || inv_slot == 13 || inv_slot == 14)  {
 		if(inv_slot == 5) {
 			//1 Silbermünze --> 64 Kupfermünzen
-			amount1 = 1;
 			item1 = coin_silver;
-			amount2 = 64;
 			item2 = coin_copper64;
 			message = "No silvercoin in inventory.";
 			item_type = "km:coin_copper";
@@ -480,9 +436,7 @@ if(inv_id == bankinvid) { //Bankmenü
 		}
 		elseif(inv_slot == 6) {
 			//64 Kupfermünzen --> 1 Silbermünze
-			amount1 = 64;
 			item1 = coin_copper64;
-			amount2 = 1;
 			item2 = coin_silver;
 			message = "Not enough coppercoins in inventory.";
 			item_type = "km:coin_silver";
@@ -490,9 +444,7 @@ if(inv_id == bankinvid) { //Bankmenü
 		}
 		elseif(inv_slot == 13) {
 			//1 Goldmünze --> 64 Silbermünzen
-			amount1 = 1;
 			item1 = coin_gold;
-			amount2 = 64;
 			item2 = coin_silver64;
 			message = "No goldcoin in inventory.";
 			item_type = "km:coin_silver";
@@ -500,14 +452,14 @@ if(inv_id == bankinvid) { //Bankmenü
 		}
 		elseif(inv_slot == 14) {
 			//64 Silbermünzen --> 1 Goldmünze
-			amount1 = 64;
 			item1 = coin_silver64;
-			amount2 = 1;
 			item2 = coin_gold;
 			message = "Not enough silvercoins in inventory.";
 			item_type = "km:coin_gold";
 			coin_inv = silver_inv;
 		}
+		amount1 = item.getAmount(item1);
+		amount2 = item.getAmount(item2);
 		if(coin_inv < amount1) {
 			msg.prefix(player, prefix_money, message);
 			goto("wait");
@@ -542,7 +494,7 @@ if(inv_id == bankinvid) { //Bankmenü
 	if(inv_slot > 0 && inv_slot < 4) {
 		player_id = player.getId(player);
 		if(coin_inv < 1) {
-			msg.prefix(player, prefix_money, "§rCoin not in inventory.");
+			msg.prefix(player, prefix_money, "Coin not in inventory.");
 		} else {
 			addMoney(player, betrag);
 			player.removeItemNbt(player, inv.getItem(bankmenu, inv_slot));
@@ -557,7 +509,9 @@ if(inv_id == bankinvid) { //Bankmenü
 			msg.prefix(player, prefix_money, "Not enough snuvis on your account.");
 		} else {
 			subMoney(player, betrag);
-			player.giveItem(player, inv.getItem(bankmenu, inv_slot));
+			item = inv.getItem(bankmenu, inv_slot);
+			new_item = read.item(item.getType(item), item.getAmount(item));
+			player.giveItem(player, new_item);
 			inv.update(player);
 		}
 		goto("wait");
@@ -825,242 +779,6 @@ if(action == "right" && player.checkHandsForTag(player, dye_tag)) {
 if(hand == "OFF_HAND") {
 	goto("wait");
 }
-if(block_type == "minecraft:lectern") {
-	if(action == "right") {
-		itementity = entity.get(loc.mod(block_loc, 0.5, 0.9, 0.5), 0.2, "net.minecraft.entity.item.ItemEntity");
-		if(itementity == null) {
-			goto("wait");
-		}
-		list = entity.near(itementity, 0.2);
-		list.add(list, itementity);
-		if(list.getSize(list) < 2) {
-			//Zu wenig Items am Lesepult
-			goto("wait");
-		}
-		a = array.new(2, 6); //0 = item, 1 = itementity, 2 = enchantments, 3 = enchanted, 4 = enchanted_book, 5 = book
-		size = 0;
-		for(i = 0; i < list.getSize(list); i++) {
-			entity = list.getIndex(list, i);
-			item = item.entity.get(entity);
-			size += item.getAmount(item);
-			if(size > 2) {
-				//Zu viele Items am Lesepult
-				goto("wait");
-			}
-			map = enchantment.readFromItem(item);
-			a[i, 0] = item;
-			a[i, 1] = entity;
-			a[i, 2] = map;
-			a[i, 4] = false;
-			a[i, 5] = false;
-			if(map.getSize(map) > 0) {
-				//Verzauberte Items
-				a[i, 3] = true;
-				if(item.getType(item) == "minecraft:enchanted_book") {
-					a[i, 4] = true;
-				}
-			} else {
-				//Nicht verzauberte Items
-				a[i, 3] = false;
-				if(item.getType(item) == "minecraft:book") {
-					a[i, 5] = true;
-				}
-			}
-		}
-		lectern_action = null;
-		if(a[0, 4] == true && a[1, 4] == true) {
-			//Beide Items sind verzauberte Bücher
-			lectern_action = 0;
-		}
-		elseif(a[0, 5] == true || a[1, 5] == true) {
-			//Eines der beiden Items ist ein normales Buch
-			if(a[0, 4] == true || a[1, 4] == true) {
-				//Eines der beiden Items ist ein verzaubertes Buch
-				lectern_action = 1;
-			} elseif(a[0, 3] == true || a[1, 3] == true) {
-				//Eines der beiden Items ist ein verzaubertes Item
-				lectern_action = 2;
-			}
-		}
-		elseif(a[0, 4] == true || a[1, 4] == true) {
-			lectern_action = 3;
-		}
-		if(lectern_action == null) {
-			goto("wait");
-		}
-		
-		if(lectern_action == 0) {
-			//Verzauberungsbücher mergen
-			item1 = a[0, 0];
-			item_entity1 = a[0, 1];
-			item_entity2 = a[1, 1];
-			map1 = a[0, 2];
-			map2 = a[1, 2];
-			map_size1 = map.getSize(map1);
-			map_size2 = map.getSize(map2);
-			iter = map.iterator(map2);
-			betrag = 0;
-			extra = 0;
-			while(hasNext(iter)) {
-				element = next(iter);
-				key = map.getKey(element);
-				level1 = map.getValue(element);
-				level2 = map.getOrDefault(map1, key, 0);
-				if(level1 == level2) {
-					max_lvl = map.get(max_ench_lvl, key);
-					//max_lvl = map.getOrDefault(max_ench_lvl, key, enchantment.getMaxLevel(key));
-					if(max_lvl != null) {
-						if(level1 < max_lvl) {
-							extra += 40;
-							level1++;
-						}
-					}
-				}
-				if(level2 > level1) {
-					level1 = level2;
-				}
-				map.add(map1, key, level1);
-			}
-			if(map_size1 > map_size2) {
-				map = map1;
-			} else {
-				map = map2;
-			}
-			iter = map.iterator(map);
-			while(hasNext(iter)) {
-				element = next(iter);
-				level = map.getValue(element);
-				betrag += level * 20 + extra;
-			}
-			if(!hasEnoughMoney(player.getId(player), betrag)) {
-				msg.prefix(player, prefix_money, concat("Not enough coins in inventory. This action costs ", text.number(betrag), " snuvis."));
-				goto("wait");
-			}
-			subMoney(player, betrag);
-			
-			enchantment.writeToItem(map1, item1);
-			item.entity.set(item_entity1, item.clone(item1));
-			entity.remove(item_entity2);
-		} elseif(lectern_action == 1) {
-			//Verzauberungsbuch kopieren
-			if(a[0, 5]) {
-				book_index = 0;
-				other_index = 1;
-			} else {
-				book_index = 1;
-				other_index = 0;
-			}
-			item1 = a[book_index, 0];
-			item_entity1 = a[book_index, 1];
-			item2 = a[other_index, 0];
-			item_entity2 = a[other_index, 1];
-			map2 = a[other_index, 2];
-			
-			map_size = map.getSize(map2);
-			betrag = 20 * map_size;
-			if(!hasEnoughMoney(player.getId(player), betrag)) {
-				msg.prefix(player, prefix_money, concat("Not enough snuvis on your account. This action costs ", text.number(betrag), " snuvis."));
-				goto("wait");
-			}
-			subMoney(player, betrag);
-			
-			item1 = read.item("minecraft:enchanted_book");
-			enchantment.writeToItem(map2, item1);
-			item.entity.set(item_entity1, item1);
-			item.entity.set(item_entity2, item.clone(item2));
-		} elseif(lectern_action == 2) {
-			//Einzelne Verzauberung herunterziehen
-			if(a[0, 5]) {
-				book_index = 0;
-				other_index = 1;
-			} else {
-				book_index = 1;
-				other_index = 0;
-			}
-			item_entity1 = a[book_index, 1];
-			map1 = map.new();
-			item2 = a[other_index, 0];
-			item_entity2 = a[other_index, 1];
-			map2 = a[other_index, 2];
-
-			item1 = read.item("minecraft:enchanted_book");
-			element = next(map.iterator(map2));
-			key = map.getKey(element);
-			value = map.getValue(element);
-			map.add(map1, key, value);
-			map.remove(map2, key);
-			
-			betrag = 20 * value;
-			if(!hasEnoughMoney(player.getId(player), betrag)) {
-				msg.prefix(player, prefix_money, concat("Not enough snuvis in your ccount. This action costs ", text.number(betrag), " snuvis."));
-				goto("wait");
-			}
-			subMoney(player, betrag);
-			
-			enchantment.writeToItem(map1, item1);
-			enchantment.writeToItem(map2, item2);
-			item.entity.set(item_entity1, item1);
-			item.entity.set(item_entity2, item.clone(item2));
-		} elseif(lectern_action == 3) {
-			//Alle Verzauberungen vom Buch auf das Item übertragen
-			betrag = 0;
-			if(a[0, 4]) {
-				ench_book_index = 0;
-				other_index = 1;
-			} else {
-				ench_book_index = 1;
-				other_index = 0;
-			}
-			item1 = a[ench_book_index, 0];
-			item_entity1 = a[ench_book_index, 1];
-			map1 = a[ench_book_index, 2];
-			item2 = a[other_index, 0];
-			item_entity2 = a[other_index, 1];
-			map2 = a[other_index, 2];
-			map_size1 = map.getSize(map1);
-			map_size2 = map.getSize(map2);
-			
-			iter = map.iterator(map1);
-			while(hasNext(iter)) {
-				element = next(iter);
-				key = map.getKey(element);
-				value = map.getValue(element);
-				value2 = map.getOrDefault(map2, key, 0);
-				if(value2 > value) {
-					value = value2;
-				}
-				map.add(map2, key, value);
-			}
-			
-			if(map_size1 > map_size2) {
-				map = map1;
-			} else {
-				map = map2;
-			}
-			iter = map.iterator(map);
-			while(hasNext(iter)) {
-				element = next(iter);
-				level = map.getValue(element);
-				betrag += level * 20;
-			}
-			if(!hasEnoughMoney(player.getId(player), betrag)) {
-				msg.prefix(player, prefix_money, concat("Not enough snuvis on your account. This action costs ", text.number(betrag), " snuvis."));
-				goto("wait");
-			}
-			subMoney(player, betrag);
-			
-			enchantment.writeToItem(map2, item2);
-			item.entity.set(item_entity2, item.clone(item2));
-			entity.remove(item_entity1);
-			
-		}
-		entity.throw(item_entity1, 0, 0.3, 0);
-		entity.throw(item_entity2, 0, 0.3, 0);
-		particle.spawn(loc.mod(block_loc, 0.5, 1.4, 0.5), par, 20, 0, 0.25, 0.25, 0.25);
-		msg.prefix(player, prefix_money, concat("This cost " , text.number(betrag), " snuvis."));
-	}
-	goto("wait");
-}
 if(block_type == "minecraft:chest") {
 	if(isATpReceiver(block_loc)) {
 		tp_item = read.item("km:gear", 1, "§rTeleport");
@@ -1170,6 +888,9 @@ if(block_loc == lottery_loc_1 || block_loc == lottery_loc_2) {
 	}
 	subMoney(player, 1);
 	amount = lottery.add(block_loc, 1);
+	if(amount == null) {
+		goto("wait");
+	}
 	if(block_loc == lottery_loc_1) {
 		winrate = 1000;
 	} else {
@@ -1342,7 +1063,7 @@ if(adventure) {
 			title.reset(p);
 			title.setSub(p, "Have fun!");
 			title.send(p, "§cAdventure");
-			msg.prefix(p, "§5Adventure", "§rTo complete your adventure, go to the survival spawn. You cannot teleport. If you die, you start again!");
+			msg.prefix(p, "§5Adventure", "To complete your adventure, go to the survival spawn. You cannot teleport. If you die, you start again!");
 		}
 		goto("wait");
 	}
@@ -1357,7 +1078,7 @@ if(adventure) {
 	title.reset(player);
 	title.setSub(player, "Have fun!");
 	title.send(player, "§cAdventure");
-	msg.prefix(player, "§5Adventure", "§rTo complete your adventure, go to the survival spawn. You cannot teleport. If you die, you start again!");
+	msg.prefix(player, "§5Adventure", "To complete your adventure, go to the survival spawn. You cannot teleport. If you die, you start again!");
 	goto("wait");
 }
 player.teleport(player, tp_loc, false);
@@ -1368,11 +1089,11 @@ function lottery.set(location, amount) {
 	list = living.near(location, 0.1);
 	text_entity = list.getIndex(list, 0);
 	name = entity.getName(text_entity);
-	if(!text.startsWith(name, "Snuvis: ", 0)) {
+	if(!text.startsWith(name, "Snuvis to win: ", 0)) {
 		snuvi.debug("Lottery error");
-		goto("wait");
+		return;
 	}
-	entity.setName(text_entity, concat("Snuvis: ", text.number(amount)), true);
+	entity.setName(text_entity, concat("Snuvis to win: ", text.number(amount)), true);
 }
 
 function lottery.add(location, amount) {
@@ -1380,12 +1101,12 @@ function lottery.add(location, amount) {
 	list = living.near(location, 0.1);
 	text_entity = list.getIndex(list, 0);
 	name = entity.getName(text_entity);
-	if(!text.startsWith(name, "Snuvis: ", 0)) {
+	if(!text.startsWith(name, "Snuvis to win:", 0)) {
 		snuvi.debug("Lottery error");
-		goto("wait");
+		return null;
 	}
-	amount = text.convert(text.subString(name, 8, text.length(name))) + 1;
-	entity.setName(text_entity, concat("Snuvis: ", text.number(amount)), true);
+	amount = text.convert(text.subString(name, 15, text.length(name))) + 1;
+	entity.setName(text_entity, concat("Snuvis to win: ", text.number(amount)), true);
 	return amount;
 }
 

+ 19 - 0
test3.txt

@@ -0,0 +1,19 @@
+event.load("container_click");
+
+@wait
+wait();
+if(player.getName(player) == "ImKillerKatze") {
+	goto("wait");
+}
+msg("online", event);
+msg("online", slot);
+msg("online", drag_type);
+msg("online", click_type);
+msg("online", cancel);
+msg("online", player);
+msg("online", type);
+
+cancel = true;//(slot >= 5 && slot <= 8);
+msg("online", "wusi2");
+
+goto("wait");

+ 23 - 14
utils/u_general.txt

@@ -460,20 +460,12 @@ function player.changeInv(player, from_world, to_world) {
 	//Inventory
 	inv.saveForPlayer(player, player, from_world);
 	inv.loadFromPlayer(player, player, to_world);
-	if(perm.has(player, "isSupporter") || !perm.has(player, "isTeam")) {
-		if(!player.isSpectator(player)) {
-			if(to_world_name == "creative") {
-				if(perm.has(player, "creative")) {
-					gm = "creative";
-				} else {
-					gm = "adventure";
-					scheduler.addFly(1, player, true);
-				}
-			} else {
-				gm = "survival";
-			}
-			player.setGamemode(player, gm);
+	if(perm.has(player, "isTeam")) {
+		if(perm.has(player, "isSupporter") && !perm.has(player, "isAdmin") && !perm.has(player, "isMod")) {
+			player.changeGamemode(player, to_world_name);
 		}
+	} else {
+		player.changeGamemode(player, to_world_name);
 	}
 	if(word.isSurvName(to_world_name)) {
 		if(player.hasFly(player)) {
@@ -482,6 +474,21 @@ function player.changeInv(player, from_world, to_world) {
 	}
 }
 
+function player.changeGamemode(player, to_world_name) {
+	if(!player.isSpectator(player)) {
+		if(to_world_name == "creative") {
+			if(perm.has(player, "creative")) {
+				gm = "creative";
+			} else {
+				gm = "adventure";
+				scheduler.addFly(1, player, true);
+			}
+		} else {
+			gm = "survival";
+		}
+		player.setGamemode(player, gm);
+	}
+}
 function inv.saveForPlayer(sec_player, for_player_or_id, world) {
 	if(isPlayer(for_player_or_id)) {
 		for_player_or_id = player.getId(for_player_or_id);
@@ -674,8 +681,10 @@ function quest.getFromPlayer(player) {
 }
 
 function player.isQuester(player, script) {
+	if(player == null) {
+		return false;
+	}
 	if(script == null) {
-		//snuvi.debug("script on player.isQuester was null");
 		return false;
 	}
 	script_id = script.getId(script);