mloeschenkohl 3 anos atrás
pai
commit
0a0f40fa96

+ 18 - 2
minigames/snowgame/snowgame.txt

@@ -211,11 +211,11 @@ if(entity_hit != null) {
 	}
 	entity_hit_name = player.getName(entity_hit);
 	if(!list.contains(player_list, player.getUuid(entity_hit))) {
-		minigame.msgAll("Illegal Player ", entity_hit_name);
+		minigame.msgAll(concat("Illegal Player ", entity_hit_name));
 		goto("checkgame");
 	}
 	if(!list.contains(player_list, player.getUuid(player))) {
-		minigame.msgAll("Illegal Player ", entity_hit_name);
+		minigame.msgAll(concat("Illegal Player ", entity_hit_name));
 		goto("checkgame");
 	}
 	team = map.get(players, player_name);
@@ -428,4 +428,20 @@ function addSnowSkill(skill_name, icon, cooldown) {
 	skill[1] = icon;
 	skill[2] = cooldown; //s
 	list.add($snow_skills, skill);
+}
+
+function canStartGame() {
+	if(list.getSize($waiters) > 0) {
+		return true;
+	}
+	player_list = minigame.getPlayers(script_id);
+	all_size = list.getSize(player_list);
+	for(i = 0; i < $numberofteams; i++) {
+		teamlist = map.get($team_lists, i);
+		team_size = list.getSize(teamlist);
+		if(team_size == all_size) {
+			return false;
+		}
+	}
+	return true;
 }

+ 86 - 0
story/admont/core.txt

@@ -35,6 +35,7 @@ entity_name = entity.getName(entity);
 if(entity_name == "Oma") {
 	inv = inv.new("333333333");
 	inv.setItem(inv, 0, read.item("minecraft:enchanted_book", 1, "§fDer Anfang...", "§e...beginnt immer mit einer netten Oma."));
+	inv.setItem(inv, 8, read.item("minecraft:enchanted_book", 1, "§fMülleimer", "§eOma räumt für dich auf"));
 	inv.open(inv, player, "Quests: Oma");
 	goto("wait");
 }
@@ -62,6 +63,7 @@ if(entity_name == "Felsmagier") {
 if(entity_name == "Peter") {
 	inv = inv.new("333333333");
 	inv.setItem(inv, 0, read.item("minecraft:enchanted_book", 1, "§fErstes Date"));
+	inv.setItem(inv, 1, read.item("minecraft:enchanted_book", 1, "§fNeue Hose"));
 	inv.open(inv, player, "Quests: Peter");
 	goto("wait");
 }
@@ -101,6 +103,38 @@ if(entity_name == "Kunibert") {
 	inv.open(inv, player, "Quests: Kunibert");
 	goto("wait");
 }
+if(entity_name == "Bauer") {
+	inv = inv.new("333333333");
+	inv.setItem(inv, 0, read.item("minecraft:enchanted_book", 1, "§fErntezeit"));
+	inv.setItem(inv, 1, read.item("minecraft:enchanted_book", 1, "§fSpezialwunsch"));
+	inv.open(inv, player, "Quests: Bauer");
+	goto("wait");
+}
+if(entity_name == "Ulf") {
+	inv = inv.new("333333333");
+	inv.setItem(inv, 0, read.item("minecraft:enchanted_book", 1, "§fIn Eile"));
+	inv.open(inv, player, "Quests: Ulf");
+	goto("wait");
+}
+if(entity_name == "Isabell") {
+	inv = inv.new("333333333");
+	inv.setItem(inv, 0, read.item("minecraft:enchanted_book", 1, "§fFür die Wissenschaft!"));
+	inv.open(inv, player, "Quests: Isabell");
+	goto("wait");
+}
+if(entity_name == "Olaf") {
+	inv = inv.new("333333333");
+	inv.setItem(inv, 0, read.item("minecraft:enchanted_book", 1, "§fReinigung"));
+	inv.setItem(inv, 1, read.item("minecraft:enchanted_book", 1, "§fMitbringsel"));
+	inv.open(inv, player, "Quests: Olaf");
+	goto("wait");
+}
+if(entity_name == "Rolf") {
+	inv = inv.new("333333333");
+	inv.setItem(inv, 0, read.item("minecraft:enchanted_book", 1, "§fTücher"));
+	inv.open(inv, player, "Quests: Rolf");
+	goto("wait");
+}
 goto("wait");
 
 @inv_click
@@ -109,6 +143,11 @@ if(inv_name == "Quests: Oma") {
 		quest.start(player, "story/admont/der_anfang");
 		goto("wait");
 	}
+	if(inv_slot == 8) {
+		waste_inv = inv.new("111111111111111111111111111");
+		inv.open(waste_inv, player, "Mülleimer");
+		goto("wait");
+	}
 	goto("wait");
 }
 if(inv_name == "Quests: Dieter") {
@@ -130,6 +169,10 @@ if(inv_name == "Quests: Peter") {
 		quest.start(player, "story/admont/erstes_date");
 		goto("wait");
 	}
+	if(inv_slot == 1) {
+		//quest.start(player, "story/admont/neue_hose");
+		goto("wait");
+	}
 	goto("wait");
 }
 if(inv_name == "Quests: Merle") {
@@ -178,6 +221,49 @@ if(inv_name == "Quests: Kunibert") {
 	}
 	goto("wait");
 }
+if(inv_name == "Quests: Bauer") {
+	if(inv_slot == 0) {
+		quest.start(player, "story/admont/erntezeit");
+		goto("wait");
+	}
+	if(inv_slot == 1) {
+		quest.start(player, "story/admont/spezialwunsch");
+		goto("wait");
+	}
+	goto("wait");
+}
+if(inv_name == "Quests: Ulf") {
+	if(inv_slot == 0) {
+		quest.start(player, "story/admont/in_eile");
+		goto("wait");
+	}
+	goto("wait");
+}
+if(inv_name == "Quests: Isabell") {
+	if(inv_slot == 0) {
+		quest.start(player, "story/admont/fuer_die_wissenschaft");
+		goto("wait");
+	}
+	goto("wait");
+}
+if(inv_name == "Quests: Olaf") {
+	if(inv_slot == 0) {
+		quest.start(player, "story/admont/reinigung");
+		goto("wait");
+	}
+	if(inv_slot == 1) {
+		quest.start(player, "story/admont/mitbringsel");
+		goto("wait");
+	}
+	goto("wait");
+}
+if(inv_name == "Quests: Rolf") {
+	if(inv_slot == 0) {
+		//quest.start(player, "story/admont/tuecher");
+		goto("wait");
+	}
+	goto("wait");
+}
 if(inv_name == "Skillshop") {
 	if(item.getType(item) == "minecraft:air") {
 		goto("wait");

+ 4 - 2
story/admont/der_anfang.txt

@@ -23,8 +23,10 @@ if(event == "quest_start") {
 	msg.prefix(player, "§dOma", "Hallo Grünschnabel! Du siehst sehr verloren aus... Ist alles okay bei dir?");
 	scheduler.msgPrefix(30, player, "§dOma", "Iss doch etwas von meinem frisch gebackenen Kuchen, damit du nicht verhungerst.");
 	block.set(cake_loc, "minecraft:cake");
-	player.setHunger(player, 18);
-	player.setSaturation(player, 0);
+	if(player.getHunger(player) > 18) {
+		player.setHunger(player, 18);
+		player.setSaturation(player, 0);
+	}
 	goto("wait");
 }
 label = concat("stage", text.number(stage));

+ 113 - 0
story/admont/erntezeit.txt

@@ -0,0 +1,113 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("block_drop");
+event.load("block_break");
+event.load("entity_click");
+
+stage = 0;
+all_stages = 3;
+quest_name = "Erntezeit";
+
+wheat_given = 0;
+carrots_given = 0;
+wheat_needed = 64;
+carrots_needed = 10;
+wheat_harvestet = 0;
+carrots_harvestet = 0;
+
+@wait
+wait();
+if(event == "block_drop") {
+	if(!isPlayer(entity)) {
+		goto("wait");
+	}
+	player = entity;
+}
+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, "§dBauer", "Gut, dass du vorbeischaust. Hilf mir doch bei der Ernte und hole mir 64 Weizen vom Feld.");
+	scheduler.msgPrefix(30, player, "§dBauer", "Wenn du damit fertig bist, bräuchte ich noch 10 Karotten. Diese solltest du auf dem offenen Felde hinter der Mühle finden.");
+	goto("wait");
+}
+label = concat("stage", text.number(stage));
+goto(label);
+
+@stage0
+@stage1
+@stage2
+if(event == "block_drop") {
+	if(block_type == "minecraft:wheat") {
+		list.clear(drops);
+		list.add(drops, read.item("minecraft:wheat"));
+	}
+	goto("wait");
+}
+if(event == "block_break") {
+	if(block_type == "minecraft:wheat") {
+		cancel = false;
+		scheduler.setBlock(60, block_loc, "minecraft:wheat[age=7]", false);
+		wheat_harvestet++;
+		if(wheat_harvestet == wheat_needed) {
+			stage.increase(player);
+		}
+	}
+	if(block_type == "minecraft:carrots") {
+		item.drop(block_loc, read.item("minecraft:carrot"));
+		cancel = true;
+		carrots_harvestet++;
+		if(carrots_harvestet == carrots_needed) {
+			stage.increase(player);
+		}
+	}
+	goto("wait");
+}
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Bauer") {
+		item = entity.getEquip(player, "hand");
+		item_type = item.getType(item);
+		if(item_type == "minecraft:air") {
+			goto("wait");
+		}
+		elseif(item_type == "minecraft:wheat") {
+			if(wheat_given >= wheat_needed) {
+				goto("wait");
+			}
+			wheat_given++;
+			player.removeItem(player, read.item(item_type));
+			if(wheat_given == wheat_needed) {
+				msg.prefix(player, "§dBauer", "Danke für das Weizen.");
+			}
+		}
+		elseif(item_type == "minecraft:carrot") {
+			if(carrots_given >= carrots_needed) {
+				goto("wait");
+			}
+			carrots_given++;
+			player.removeItem(player, read.item(item_type));
+			if(carrots_given == carrots_needed) {
+				msg.prefix(player, "§dBauer", "Danke für die Karotten.");
+			}
+		}
+		if(wheat_given >= wheat_needed && carrots_given >= carrots_needed) {
+			msg.prefix(player, "§dBauer", "Danke für deine Hilfe.");
+			msg(player, "§dQuest abgeschlossen. Belohnung: 7 Snuvis!");
+			addMoney(player, 7);
+			quest.finish(script, player);
+		}
+	}
+}
+goto("wait");

+ 116 - 0
story/admont/fuer_die_wissenschaft.txt

@@ -0,0 +1,116 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("craft");
+event.load("entity_click");
+event.load("custom_command");
+
+stage = 0;
+all_stages = 5;
+quest_name = "Für die Wissenschaft!";
+
+@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, "§dIsabell", "Was soll ich nur tun? Ich habe so viele Ideen und ich muss sie unbedingt aufschreiben...");
+	msg(player, "§dAntwortmöglichkeiten:");
+	msg(player, text.click("[§dA§r] §eWas ist denn das Problem?", "/questanswer A"));
+	msg(player, text.click("[§dB§r] §eWelche Ideen denn?", "/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, "§dIsabell", "Ich arbeite gerade an einem wichtigen wissenschaftlichen Projekt, aber ich habe kein Papier mehr.");
+		scheduler.msgPrefix(40, player, "§dIsabell", "Bitte geh zu Kunibert, er hat sicher immer etwas Zuckerrohr übrig.");
+		goto("wait");
+	}
+	if(option == "B") {
+		stage.increase(player);
+		msg.prefix(player, "§dIsabell", "Ich habe sie vergessen!!! Deshalb muss ich demnächst alles aufschreiben, bevor das wieder passiert. ");
+		scheduler.msgPrefix(40, player, "§dIsabell", "Ich arbeite gerade an einem wichtigen wissenschaftlichen Projekt, aber ich habe kein Papier mehr.");
+		scheduler.msgPrefix(80, player, "§dIsabell", "Bitte geh zu Kunibert, er hat sicher immer etwas Zuckerrohr übrig.");
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Kunibert") {
+		stage.increase(player);
+		msg.prefix(player, "§dKunibert", "Hallo, was kann ich für dich tun?");
+		scheduler.msgPrefix(40, player, concat("§5", player.getName(player)), "Ich brauche Zuckerrohr.");
+		scheduler.msgPrefix(80, player, "§dKunibert", "Mh, lass mich nachsehen. Ich habe noch eins übrig, hier.");
+		scheduler.giveItem(80, player, read.item("minecraft:sugar_cane"));
+		scheduler.msgPrefix(120, player, concat("§5", player.getName(player)), "Das reicht leider nicht. Ich brauche 2 weitere.");
+		scheduler.msgPrefix(160, player, "§dKunibert", "Frag doch Rolf, er sammelt alles Mögliche.");
+	}
+}
+goto("wait");
+
+@stage2
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Rolf") {
+		stage.increase(player);
+		msg.prefix(player, "§dRolf", "Ey, was störst du mich?");
+		scheduler.msgPrefix(40, player, concat("§5", player.getName(player)), "Entschuldigung, ich suche nach 2 Zuckerrohren.");
+		scheduler.msgPrefix(80, player, "§dRolf", "Hrmph, ja hier... Aber hau sofort wieder ab!");
+		scheduler.giveItem(80, player, read.item("minecraft:sugar_cane", 2));
+	}
+}
+goto("wait");
+
+@stage3
+if(event == "craft") {
+	if(item.getType(result) == "minecraft:paper") {
+		stage.increase(player);
+		paper_given = 0;
+	}
+}
+goto("wait");
+
+@stage4
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Isabell") {
+		item = entity.getEquip(player, "hand");
+		item_type = item.getType(item);
+		if(item_type == "minecraft:air") {
+			goto("wait");
+		}
+		elseif(item_type == "minecraft:paper") {
+			if(paper_given >= 3) {
+				goto("wait");
+			}
+			paper_given++;
+			player.removeItem(player, read.item(item_type));
+			if(paper_given == 3) {
+				msg.prefix(player, "§dIsabell", "DANKE! Du rettest mich und die Wissenschaft!");
+				msg(player, "§dQuest abgeschlossen. Belohnung: 10 Snuvis!");
+				addMoney(player, 10);
+				quest.finish(script, player);
+			}
+		}
+	}
+}
+goto("wait");

+ 1 - 1
story/admont/hide_and_seek.txt

@@ -23,7 +23,7 @@ if(event == "quest_start") {
 	scheduler.msgPrefix(30, player, "§dBernd", "Es wäre natürlich cool, wenn du mir dabei hilfst. Mein Kumpel Robert muss immer übertreiben und sucht sich die schwersten Verstecke.");
 	scheduler.msgPrefix(60, player, "§dBernd", "Such ihn doch und sag mir dann, wo er ist.");
 	scheduler.msgPrefix(90, player, concat("§d", player.getName(player)), "Ich bin Profi im Suchen!");
-	scheduler.msgPrefix(120, player, "§dBernd", "Kleiner Tipp: Man darf sich nicht draußen verstecken.");
+	scheduler.msgPrefix(120, player, "§dBernd", "Kleiner Tipp: Man darf sich nur in Gebäuden verstecken.");
 	goto("wait");
 }
 label = concat("stage", text.number(stage));

+ 97 - 0
story/admont/in_eile.txt

@@ -0,0 +1,97 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("block_break");
+event.load("entity_click");
+event.load("block_drop");
+
+stage = 0;
+all_stages = 2;
+quest_name = "In Eile";
+
+bread_given = 0;
+bread_needed = 21;
+wheat_needed = 63;
+wheat_harvestet = 0;
+
+@wait
+wait();
+if(event == "block_drop") {
+	if(!isPlayer(entity)) {
+		goto("wait");
+	}
+	player = entity;
+}
+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, "§dUlf", concat("Hey ", player.getName(player), "! Ich erwarte ziemlich viel Kundschaft und ich bin nicht mal annähernd mit der Zubereitung fertig."));
+	scheduler.msgPrefix(30, player, "§dUlf", "50 Brote haben sie bestellt… Das ist unschaffbar! Ich habe erst 29 Brote gebacken.");
+	scheduler.msgPrefix(60, player, concat("§5", player.getName(player)), "Die letzten 21 Brote kann ich übernehmen!");
+	scheduler.msgPrefix(90, player, "§dUlf", "Super! Dann geh doch zum Weizenfeld, hol dir die nötigen Ressourcen und verarbeite sie zu Brot.");
+	goto("wait");
+}
+if(event == "block_drop") {
+	if(block_type == "minecraft:wheat") {
+		list.clear(drops);
+		list.add(drops, read.item("minecraft:wheat"));
+	}
+	goto("wait");
+}
+if(event == "block_break") {
+	if(block_type == "minecraft:wheat") {
+		cancel = false;
+		scheduler.setBlock(60, block_loc, "minecraft:wheat[age=7]", false);
+	}
+}
+label = concat("stage", text.number(stage));
+goto(label);
+
+@stage0
+if(event == "block_break") {
+	if(block_type == "minecraft:wheat") {
+		wheat_harvestet++;
+		if(wheat_harvestet == wheat_needed) {
+			stage.increase(player);
+		}
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Ulf") {
+		item = entity.getEquip(player, "hand");
+		item_type = item.getType(item);
+		if(item_type == "minecraft:air") {
+			goto("wait");
+		}
+		elseif(item_type == "minecraft:bread") {
+			if(bread_given >= bread_needed) {
+				goto("wait");
+			}
+			bread_given++;
+			player.removeItem(player, read.item(item_type));
+			if(bread_given == bread_needed) {
+				msg.prefix(player, "§dBauer", "Du kommst gerade rechtzeitig, die Kunden sind eben eingetroffen! Hier eine Belohnung.");
+				player.giveItem(player, read.item("km:berry_work"));
+				msg(player, "§dQuest abgeschlossen. Belohnung: 5 Snuvis!");
+				addMoney(player, 5);
+				quest.finish(script, player);
+			}
+		}
+	}
+}
+goto("wait");

+ 2 - 0
story/admont/kraeutermeister.txt

@@ -195,6 +195,8 @@ if(event == "block_break") {
 			if(twisting_vines == twisting_vines_needed) {
 				stage.increase(player);
 			}
+		} else {
+			msg.prefix(player, "§dKunibert", "Wirbelranken müssen mit einer Schere abgebaut werden.");
 		}
 	}
 }

+ 172 - 0
story/admont/mitbringsel.txt

@@ -0,0 +1,172 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("entity_click");
+event.load("custom_command");
+
+stage = 0;
+all_stages = 3;
+quest_name = "Mitbringsel";
+
+herb_strong_given = 0;
+herb_shadow_given = 0;
+herb_xp_given = 0;
+herb_sea_given = 0;
+herb_gold_given = 0;
+herb_breathing_given = 0;
+herb_fire_given = 0;
+
+herb_strong_needed = 10;
+herb_shadow_needed = 2;
+herb_xp_needed = 1;
+herb_sea_needed = 7;
+herb_gold_needed = 3;
+herb_breathing_needed = 1;
+herb_fire_needed = 1;
+
+@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, "§dOlaf", "Du kennst doch meinen Mann, den Kräutermeister Kunibert?");
+	scheduler.msg(30, player, "§dAntwortmöglichkeiten:");
+	scheduler.msg(30, player, text.click("[§dA§r] §eJa, den kenne ich.", "/questanswer A"));
+	scheduler.msg(30, player, text.click("[§dB§r] §eNein, wer ist das?", "/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, "§dOlaf", "Nach meinen langen Reisen bringe ich ihm immer ein kleines Geschenk mit.");
+		scheduler.msgPrefix(30, player, "§dOlaf", "Da er Kräutermeister ist, habe ich etwas ganz Besonderes für ihn gesammelt.");
+		scheduler.msgPrefix(60, player, "§dOlaf", "Es wäre nett von dir, wenn du ihm diese Kräuter übergibst!");
+		scheduler.giveItem(60, player, read.item("km:herb_strong", herb_strong_needed));
+		scheduler.giveItem(60, player, read.item("km:herb_shadow", herb_shadow_needed));
+		scheduler.giveItem(60, player, read.item("km:herb_xp", herb_xp_needed));
+		scheduler.giveItem(60, player, read.item("km:herb_sea", herb_sea_needed));
+		scheduler.giveItem(60, player, read.item("km:herb_gold", herb_gold_needed));
+		scheduler.giveItem(60, player, read.item("km:herb_breathing", herb_breathing_needed));
+		scheduler.giveItem(60, player, read.item("km:herb_fire", herb_fire_needed));
+		goto("wait");
+	}
+	if(option == "B") {
+		stage.increase(player);
+		msg.prefix(player, "§dOlaf", "Er wohnt mit mir in einem Haus, gleich vorne im Dorf.");
+		scheduler.msgPrefix(30, player, "§dOlaf", "Nach meinen langen Reisen bringe ich ihm immer ein kleines Geschenk mit.");
+		scheduler.msgPrefix(60, player, "§dOlaf", "Da er Kräutermeister ist, habe ich etwas ganz Besonderes für ihn gesammelt.");
+		scheduler.msgPrefix(90, player, "§dOlaf", "Es wäre nett von dir, wenn du ihm diese Kräuter übergibst!");
+		scheduler.giveItem(90, player, read.item("km:herb_strong", herb_strong_needed));
+		scheduler.giveItem(90, player, read.item("km:herb_shadow", herb_shadow_needed));
+		scheduler.giveItem(90, player, read.item("km:herb_xp", herb_xp_needed));
+		scheduler.giveItem(90, player, read.item("km:herb_sea", herb_sea_needed));
+		scheduler.giveItem(90, player, read.item("km:herb_gold", herb_gold_needed));
+		scheduler.giveItem(90, player, read.item("km:herb_breathing", herb_breathing_needed));
+		scheduler.giveItem(90, player, read.item("km:herb_fire", herb_fire_needed));
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Kunibert") {
+		item = entity.getEquip(player, "hand");
+		item_type = item.getType(item);
+		if(item_type == "minecraft:air") {
+			goto("wait");
+		}
+		elseif(item_type == "km:herb_strong") {
+			if(herb_strong_given >= herb_strong_needed) {
+				goto("wait");
+			}
+			herb_strong_given++;
+			player.removeItem(player, read.item(item_type));
+		}
+		elseif(item_type == "km:herb_shadow") {
+			if(herb_shadow_given >= herb_shadow_needed) {
+				goto("wait");
+			}
+			herb_shadow_given++;
+			player.removeItem(player, read.item(item_type));
+		}
+		elseif(item_type == "km:herb_xp") {
+			if(herb_xp_given >= herb_xp_needed) {
+				goto("wait");
+			}
+			herb_xp_given++;
+			player.removeItem(player, read.item(item_type));
+		}
+		elseif(item_type == "km:herb_sea") {
+			if(herb_sea_given >= herb_sea_needed) {
+				goto("wait");
+			}
+			herb_sea_given++;
+			player.removeItem(player, read.item(item_type));
+		}
+		elseif(item_type == "km:herb_gold") {
+			if(herb_gold_given >= herb_gold_needed) {
+				goto("wait");
+			}
+			herb_gold_given++;
+			player.removeItem(player, read.item(item_type));
+		}
+		elseif(item_type == "km:herb_breathing") {
+			if(herb_breathing_given >= herb_breathing_needed) {
+				goto("wait");
+			}
+			herb_breathing_given++;
+			player.removeItem(player, read.item(item_type));
+		}
+		elseif(item_type == "km:herb_fire") {
+			if(herb_fire_given >= herb_fire_needed) {
+				goto("wait");
+			}
+			herb_fire_given++;
+			player.removeItem(player, read.item(item_type));
+		}
+		if(herb_strong_given == herb_strong_needed && herb_shadow_given == herb_shadow_needed && herb_xp_given == herb_xp_needed && herb_sea_given == herb_sea_needed && herb_gold_given == herb_gold_needed && herb_breathing_given == herb_breathing_needed && herb_fire_given == herb_fire_needed) {
+			msg.prefix(player, "§dKunibert", "Ahhh.. dich hat der liebe Olaf geschickt! Ach, das ist doch pure Freude, wenn er mir etwas von seinen Reisen mitbringt.");
+			scheduler.msgPrefix(30, player, "§dKunibert", "Gib ihm doch dies als Dankeschön.");
+			scheduler.giveItem(30, player, read.item("minecraft:blue_orchid"));
+			stage.increase(player);
+		}
+	}
+}
+goto("wait");
+
+@stage2
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Olaf") {
+		item = entity.getEquip(player, "hand");
+		item_type = item.getType(item);
+		if(item_type == "minecraft:air") {
+			goto("wait");
+		}
+		elseif(item_type == "minecraft:blue_orchid") {
+			player.removeItem(player, read.item(item_type));
+			msg.prefix(player, "§dOlaf", "Wie lieb von ihm!");
+			addMoney(player, 5);
+			msg(player, "§dQuest abgeschlossen. Belohnung: 5 Snuvis!");
+			quest.finish(script, player);
+		}
+	}
+}
+goto("wait");

+ 54 - 0
story/admont/neue_hose.txt

@@ -0,0 +1,54 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("entity_click");
+event.load("player_toss");
+
+stage = 0;
+all_stages = 3;
+quest_name = "Neue Hose";
+
+@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, "§dPeter", "Hallöle! Meine Hose ist gerissen… so kann ich das Haus nicht verlassen.");
+	scheduler.msgPrefix(30, player, "§dPeter", "Ich bräuchte dringend eine neue Hose.");
+	scheduler.msgPrefix(60, player, "§dPeter", "Schau doch bei Rolf, dem Weber, vorbei und besorg mir 7 Tücher.");
+	goto("wait");
+}
+label = concat("stage", text.number(stage));
+goto(label);
+
+@stage0
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Peter") {
+		msg.prefix(player, "§dPeter", "Was gibt’s?");
+		stage.increase(player);
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "player_toss") {
+	target_loc = player.getTarget(player, 5);
+	block_type = block.getType(target_loc);
+	if(block_type == "minecraft:loom") {
+		cancel = true;
+		item.entity.spawn(item.entity.new(loc.mod(target_loc, 0.5, 1.5, 0.5), item));
+	}
+}
+goto("wait");

+ 100 - 0
story/admont/reinigung.txt

@@ -0,0 +1,100 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("block_click");
+event.load("entity_click");
+event.load("custom_command");
+
+stage = 0;
+all_stages = 3;
+quest_name = "Reinigung";
+
+clean = 0;
+
+@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, "§dOlaf", "Nach langen Reisen sieht das Schiff immer sehr mitgenommen aus… Ich brauche dringend eine Putzhilfe.");
+	scheduler.msgPrefix(30, player, concat("§5", player.getName(player)), "Gerne! Was soll ich machen?");
+	scheduler.msgPrefix(60, player, "§dOlaf", "Am Bug und Heck des Schiffes kleben viele Muscheln, entferne sie bitte.");
+	story_world = world.getStory();
+	block.set(loc.new(story_world, -1523, 63, -24), "minecraft:polished_blackstone_button[facing=north]");
+	block.set(loc.new(story_world, -1521, 63, -13), "minecraft:polished_blackstone_button[facing=east]");
+	block.set(loc.new(story_world, -1522, 63, -11), "minecraft:polished_blackstone_button[facing=east]");
+	block.set(loc.new(story_world, -1525, 63, -13), "minecraft:polished_blackstone_button[facing=west]");
+	block.set(loc.new(story_world, -1524, 63, -11), "minecraft:polished_blackstone_button[facing=west]");
+	goto("wait");
+}
+label = concat("stage", text.number(stage));
+goto(label);
+
+@stage0
+if(event == "block_click") {
+	if(block_type == "minecraft:polished_blackstone_button") {
+		cancel = true;
+		block.set(block_loc, "minecraft:air");
+		clean++;
+		if(clean == 5) {
+			stage.increase(player);
+			player.safeGiveItem(player, read.item("minecraft:nautilus_shell"));
+			msg.prefix(player, "§dOlaf", "Ist das etwa eine Nautilusschale?");
+			scheduler.msgPrefix(30, player, "§dOlaf", "Wow, sie glänzt und schimmert, wie wunderbar! Ich brauche sie unbedingt für meine Sammlung.");
+			scheduler.msgPrefix(60, player, "§dOlaf", "Würde es dir etwas ausmachen, sie mir zu überreichen? Ich werde sie gut aufbewahren!");
+			scheduler.msg(60, player, "§dAntwortmöglichkeiten:");
+			scheduler.msg(60, player, text.click("[§dA§r] §eKein Problem.", "/questanswer A"));
+			scheduler.msg(60, player, text.click("[§dB§r] §eNein, ich behalte sie.", "/questanswer B"));
+		} else {
+			player.safeGiveItem(player, read.item("km:shell"));
+		}
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "custom_command" && command == "questanswer") {
+	option = list.getIndex(args, 0);
+	if(option == "A") {
+		stage.increase(player);
+		msg.prefix(player, "§dOlaf", "Danke, danke, danke!!!");
+		goto("wait");
+	}
+	if(option == "B") {
+		msg.prefix(player, "§dOlaf", "Das ist zwar schade, aber du hast sie ja auch gefunden. Viel Spaß damit.");
+		msg(player, "§dQuest abgeschlossen. Belohnung: 2 Snuvis!");
+		addMoney(player, 2);
+		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 == "Olaf") {
+		item = entity.getEquip(player, "hand");
+		item_type = item.getType(item);
+		if(item_type == "minecraft:air") {
+			goto("wait");
+		}
+		elseif(item_type == "minecraft:nautilus_shell") {
+			player.removeItem(player, read.item(item_type));
+			msg(player, "§dQuest abgeschlossen. Belohnung: 4 Snuvis!");
+			addMoney(player, 4);
+			quest.finish(script, player);
+		}
+	}
+}
+goto("wait");

+ 117 - 0
story/admont/spezialwunsch.txt

@@ -0,0 +1,117 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("block_break");
+event.load("block_drop");
+event.load("entity_click");
+event.load("custom_command");
+
+stage = 0;
+all_stages = 3;
+quest_name = "Spezialwunsch";
+
+hay_given = 0;
+hay_needed = 13;
+hay_harvestet = 0;
+
+@wait
+wait();
+if(event == "block_drop") {
+	if(!isPlayer(entity)) {
+		goto("wait");
+	}
+	player = entity;
+}
+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, "§dBauer", "Schön, dass du hier bist an diesem sonnigen Tag! Es ist so heiß hier und ich habe schon 3 Stunden auf dem Feld verbracht… Ich bin komplett fertig.");
+	msg(player, "§dAntwortmöglichkeiten:");
+	msg(player, text.click("[§dA§r] §eWie kann ich helfen?", "/questanswer A"));
+	msg(player, text.click("[§dB§r] §eWie läuft die Ernte?", "/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, "§dBauer", "Da gäbe es tatsächlich etwas:");
+		scheduler.msgPrefix(40, player, "§dBauer", "Für ein spezielles Rezept brauche ich eine besondere Weizensorte, die für ein großartiges Aroma sorgt.");
+		scheduler.msgPrefix(80, player, "§dBauer", "Diese ist leider nur mit geringer Wahrscheinlichkeit zu finden, denn sie entseht nur unter bestimmten Bedingungen...");
+		scheduler.msgPrefix(120, player, "§dBauer", "Wenn du im Feld beim Ernten ein bisschen danach suchen könntest, wäre das eine große Hilfe! Ich brauche 13 Stück.");
+		goto("wait");
+	}
+	if(option == "B") {
+		stage.increase(player);
+		msg.prefix(player, "§dBauer", "Die Weizenernte für heute ist eigentlich vollbracht! ");
+		scheduler.msgPrefix(40, player, "§dBauer", "Doch für ein spezielles Rezept brauche ich eine besondere Weizensorte, die für ein großartiges Aroma sorgt.");
+		scheduler.msgPrefix(80, player, "§dBauer", "Diese ist leider nur mit geringer Wahrscheinlichkeit zu finden, denn sie entseht nur unter bestimmten Bedingungen...");
+		scheduler.msgPrefix(120, player, "§dBauer", "Wenn du im Feld beim Ernten ein bisschen danach suchen könntest, wäre das eine große Hilfe! Ich brauche 13 Stück.");
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "block_drop") {
+	if(block_type == "minecraft:wheat") {
+		r = math.random(0, 4);
+		list.clear(drops);
+		if(r == 0) {
+			list.add(drops, read.item("km:hay_bundle"));
+			hay_harvestet++;
+			if(hay_harvestet == hay_needed) {
+				stage.increase(player);
+			}
+		} else {
+			list.add(drops, read.item("minecraft:wheat"));
+		}
+	}
+	goto("wait");
+}
+if(event == "block_break") {
+	if(block_type == "minecraft:wheat") {
+		cancel = false;
+		scheduler.setBlock(60, block_loc, "minecraft:wheat[age=7]", false);
+	}
+}
+goto("wait");
+
+@stage2
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Bauer") {
+		item = entity.getEquip(player, "hand");
+		item_type = item.getType(item);
+		if(item_type == "minecraft:air") {
+			goto("wait");
+		}
+		elseif(item_type == "km:hay_bundle") {
+			if(hay_given >= hay_needed) {
+				goto("wait");
+			}
+			hay_given++;
+			player.removeItem(player, read.item(item_type));
+			if(hay_given == hay_needed) {
+				msg(player, "§dQuest abgeschlossen. Belohnung: 4 Snuvis!");
+				addMoney(player, 4);
+				quest.finish(script, player);
+			}
+		}
+	}
+}
+goto("wait");

+ 125 - 0
story/admont/tuecher.txt

@@ -0,0 +1,125 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("entity_click");
+event.load("player_toss");
+event.load("player_pickup");
+
+stage = 3;
+all_stages = 5;
+quest_name = "Tücher";
+
+wool = 0;
+wool_tag = item.getTag("minecraft:wool");
+loom_list = list.new();
+par = particle.get("minecraft:witch");
+loom_coarse = 0;
+
+@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, "§dRolf", "Mh… Hallo. Ich brauche Tücher. Schere doch 8 Schafe, aber zackig!");
+	player.giveSingleItem(player, read.item("minecraft:shears"), false);
+	goto("wait");
+}
+label = concat("stage", text.number(stage));
+goto(label);
+
+@stage0
+if(event == "entity_click") {
+	entity_type = entity.getType(entity);
+	if(entity_type == "sheep") {
+		if(!sheep.isSheared(entity)) {
+			item = entity.getEquip(player, "hand");
+			item_type = item.getType(item);
+			if(item_type == "minecraft:shears") {
+				wool++;
+				if(wool == 8) {
+					stage.increase(player);
+				}
+			}
+		}
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Rolf") {
+		msg.prefix(player, "§dRolf", "Ich brauch doch keine Wolle, ich will Tücher!");
+		scheduler.msgPrefix(30, player, concat("§5", player.getName(player)), "Und wie geht das?");
+		scheduler.msgPrefix(60, player, "§dRolf", "Siehst du den Webstuhl da? Schmeiß die Wolle einzeln darauf.");
+		scheduler.msgPrefix(90, player, "§dRolf", "Schaue ihn direkt an und drücke Q (Drop-Taste) um ihn zu benutzen.");
+		stage.increase(player);
+	}
+}
+goto("wait");
+
+@stage2
+if(event == "player_pickup") {
+	if(item.hasTag(wool_tag, item)) {
+		loom_coarse -= item.getAmount(item);
+	}
+	goto("wait");
+}
+if(event == "player_toss") {
+	target_loc = player.getTarget(player, 5);
+	block_type = block.getType(target_loc);
+	if(block_type == "minecraft:loom") {
+		cancel = true;
+		if(!item.hasTag(wool_tag, item)) {
+			player.giveItem(player, item);
+			inv.update(player);
+			goto("wait");
+		}
+		item_entity = item.entity.new(loc.mod(target_loc, 0.5, 1.5, 0.5), item);
+		item.entity.spawn(item_entity);
+		a = array.new(3);
+		a[0] = target_loc;
+		a[1] = item_entity;
+		a[2] = read.item("km:coarse_cloth");
+		list.add(loom_list, a);
+		sgoto(40, "sloom");
+	}
+}
+goto("wait");
+
+@sloom
+if(loom_coarse > 4) {
+	goto("wait");
+}
+a = list.getIndex(loom_list, 0);
+list.removeIndex(loom_list, 0);
+location = a[0];
+input_item_entity = a[1];
+output_item = a[2];
+loom_coarse += loom(location, input_item_entity, output_item);
+if(loom_coarse >= 4) {
+	msg.prefix(player, "§dRolf", "Stop! Ich will doch nicht noch mehr raue Tücher! Wirf nun jeweils ein Wollstück und ein raues Tuch auf den Webstuhl");
+	stage.increase(player);
+}
+goto("wait");
+
+function loom(location, input_item_entity, output_item) {
+	input_item = item.entity.get(input_item_entity);
+	amount = item.getAmount(input_item);
+	item.setAmount(output_item, amount);
+	item.entity.set(input_item_entity, output_item);
+	entity.throw(input_item_entity, 0, 0.3, 0);
+	particle.spawn(loc.mod(location, 0.5, 1.4, 0.5), $par, 20, 0, 0.25, 0.25, 0.25);
+	return amount;
+}

+ 2 - 2
story/admont/zauberlehrling.txt

@@ -18,7 +18,6 @@ if(event == "quest_term") {
 }
 if(event == "quest_start") {
 	quest.display(player, quest_name, stage, all_stages);
-	player.giveItem(player, read.item("minecraft:bread", 15));
 	msg.prefix(player, "§dGertrude", "Ich habe so viel zu tun. Sei doch meine helfende Hand. Ich bin am Boden zerstört! Wie gern würde ich meinen Enkel, den Zauberlehrling, am Berg besuchen. Leider bin ich nicht mehr die Jüngste und meine Knie machen da auch nicht mehr mit. Es wäre so lieb von dir, wenn du ihm sein Lieblingsbrot vorbeibringst und ihn von mir grüßt!");
 	msg(player, "§dAntwortmöglichkeiten:");
 	msg(player, text.click("[§dA§r] §eKein Problem, ich mache mich sofort auf den Weg.", "/questanswer A"));
@@ -33,6 +32,7 @@ if(event == "custom_command" && command == "questanswer") {
 	option = list.getIndex(args, 0);
 	if(option == "A") {
 		stage.increase(player);
+		player.giveItem(player, read.item("minecraft:bread", 15));
 		msg.prefix(player, "§dGertrude", "Folge dem Weg zum Felsmagier, dort oben zum Turm.");
 		story = world.get("story");
 		loc1 = loc.new(story, -1626, 85, 75);
@@ -52,7 +52,7 @@ goto("wait");
 if(event == "player_move") {
 	if(id == move_id) {
 		addMoney(player, 5);
-		msg(player, "§dQuest abgeschlossen. Belohnung: 8 Snuvis!");
+		msg(player, "§dQuest abgeschlossen. Belohnung: 5 Snuvis!");
 		quest.finish(script, player);
 	}
 }

+ 4 - 2
story/schiffbruch/schiff_10_kuchen.txt

@@ -89,10 +89,12 @@ if(event == "entity_click") {
 		}
 		goto("wait");
 	}
-	if(entity_type == "chicken" && !egg) {
+	if(entity_type == "chicken") {
+		if(!egg) {
+			stage.increase(player);
+		}
 		egg = true;
 		player.giveItem(player, read.item("minecraft:egg"));
-		stage.increase(player);
 	}
 	goto("wait");
 }

+ 6 - 6
system/commands.txt

@@ -68,7 +68,6 @@ command.register("inv", "Inv-Commands");
 command.register("iteminfo", "Returns information about an item");
 command.register("jail", "Sends a player to jail");
 command.register("kick", "Kicks a player");
-command.register("kill", "Kill yourself");
 command.register("lastseen", "Shows the last players online");
 command.register("lightning", "Summons a lightning_bolt");
 command.register("list", "List all players online");
@@ -111,6 +110,7 @@ command.register("startgame", "Reduces start-countdown for a minigame");
 command.register("stats", "Statistics-Commands");
 command.register("stopadventure", "Stops an adventure");
 command.register("story", "Teleports to story-spawn");
+command.register("suicide", "Kill yourself");
 command.register("teleport", "Teleports a player to a player");
 command.register("tempban", "Bans a player temporarly");
 command.register("tempfly", "Let a player temporarly fly");
@@ -154,7 +154,6 @@ command.registerAlias("p", "plot");
 command.registerAlias("coord", "coords");
 command.registerAlias("dt", "datatools");
 command.registerAlias("f", "friend");
-command.registerAlias("suicide", "kill");
 command.registerAlias("l", "leave");
 command.registerAlias("v", "vanish");
 command.registerAlias("hub", "leave");
@@ -277,6 +276,8 @@ set.add(butcher_set, "witch");
 set.add(butcher_set, "stray");
 set.add(butcher_set, "drowned");
 set.add(butcher_set, "wither");
+set.add(butcher_set, "silverfish");
+set.add(butcher_set, "zombified_piglin");
 
 rank_array = array.new(25, 2);
 //Playtime
@@ -1867,9 +1868,9 @@ if(mode == "on") {
 }
 goto("wait");
 
-@kill
+@suicide
 if(size < 0 || size > 1) {
-	msg.prefix(player, prefix_commands, "§r/kill [player]");
+	msg.prefix(player, prefix_commands, "§r/suicide [player]");
 	goto("wait");
 }
 if(size == 1) {
@@ -7783,10 +7784,9 @@ function setCommandHelps() {
 	command.addHelp(help);
 	addCommandAlias(help, "mimimi", "help");
 	
-	help = command.newHelp("kill", "kill");
+	help = command.newHelp("suicide", "suicide");
 	command.addHelpChild(help, command.newHelpSpecial("Player", "player", "kill.other"));
 	command.addHelp(help);
-	addCommandAlias(help, "suicide", "kill");
 	
 	help = command.newHelp("tempfly", "tempfly");
 	helpArg0 = command.newHelpSpecial("Player", "player");

+ 6 - 1
system/perms.txt

@@ -47,7 +47,7 @@ perm.registerGroup(0, "rank");
 perm.registerGroup(0, "setrank");
 perm.registerGroup(0, "shop");
 perm.registerGroup(0, "playtime");
-perm.registerGroup(0, "kill");
+perm.registerGroup(0, "suicide");
 perm.registerGroup(0, "list");
 perm.registerGroup(0, "pvp");
 perm.registerGroup(0, "coords");
@@ -112,6 +112,7 @@ perm.registerGroup(2, "setservermessage");
 perm.registerGroup(2, "scoreboard");
 perm.registerGroup(2, "adminshop");
 perm.registerGroup(2, "team");
+perm.registerGroup(2, "kill");
 perm.registerGroup(2, "advancement");
 perm.registerGroup(2, "experience");
 perm.registerGroup(2, "particle");
@@ -240,6 +241,7 @@ perm.registerGroup(3, "warp.create");
 perm.registerGroup(3, "perm");
 perm.registerGroup(3, "perm.toggle");
 perm.registerGroup(3, "tip");
+perm.registerGroup(3, "kill");
 perm.registerGroup(3, "setblock");
 perm.registerGroup(3, "summon");
 perm.registerGroup(3, "human");
@@ -289,6 +291,7 @@ perm.registerGroup(5, "var");
 perm.registerGroup(5, "tip");
 perm.registerGroup(5, "script");
 perm.registerGroup(5, "script.error");
+perm.registerGroup(5, "kill");
 perm.registerGroup(5, "iteminfo");
 perm.registerGroup(5, "databank");
 perm.registerGroup(5, "start");
@@ -342,6 +345,7 @@ perm.registerGroup(11, "setmessage");
 perm.registerGroup(12, "isMod");
 perm.registerGroup(12, "isTeam");
 perm.registerGroup(12, "perm");
+perm.registerGroup(12, "cli");
 perm.registerGroup(12, "speed");
 perm.registerGroup(12, "script.error");
 perm.registerGroup(12, "inv");
@@ -350,6 +354,7 @@ perm.registerGroup(12, "inv.see");
 perm.registerGroup(12, "inv.reload");
 perm.registerGroup(12, "feed");
 perm.registerGroup(12, "mute");
+perm.registerGroup(12, "kill");
 perm.registerGroup(12, "unmute");
 perm.registerGroup(12, "heal");
 perm.registerGroup(12, "nickname");

+ 6 - 0
system/scheduler.txt

@@ -59,6 +59,12 @@ while(hasNext(iter)) {
 			entity = a[2];
 			entity.remove(entity);
 		}
+		//giveItem
+		if(action == 8) {
+			player = a[2];
+			item = a[3];
+			player.safeGiveItem(player, item);
+		}
 		remove(iter);
 	}
 }

+ 4 - 0
system/story.txt

@@ -27,6 +27,10 @@ ignoreGoto(event);
 goto("wait");
 
 @block_click
+world = loc.getWorld(block_loc);
+if(world.getName(world) != "story") {
+	goto("wait");
+}
 if(block_type == "minecraft:sweet_berry_bush") {
 	scheduler.setBlock(5, block_loc, concat("minecraft:sweet_berry_bush[age=3]"), false);
 	goto("wait");

+ 0 - 37
test.txt

@@ -1,37 +0,0 @@
-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);
-
-player = read.player("marvinius");
-loc = entity.getLocation(player);
-ent = entity.spawn("zombie", loc, "{IsBaby:0}");
-living.removeAi(ent);
-entity.setName(ent, "");
-entity.setSilent(ent, true);
-amongus.forceEquip(ent, "blue");
-
-function amongus.forceEquip(entity, color) {
-	color_code = map.get($cloth_code_map, color);
-	item = read.item(concat("{id:\"minecraft:leather_helmet\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
-	item.hide(item, "attributes");
-	entity.setEquip(entity, "head", item);
-	item = read.item(concat("{id:\"minecraft:leather_chestplate\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
-	item.hide(item, "attributes");
-	entity.setEquip(entity, "chest", item);
-	item = read.item(concat("{id:\"minecraft:leather_leggings\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
-	item.hide(item, "attributes");
-	entity.setEquip(entity, "legs", item);
-	item = read.item(concat("{id:\"minecraft:leather_boots\",Count:1b,tag:{Damage:0,display:{color:", color_code, "}}}"));
-	item.hide(item, "attributes");
-	entity.setEquip(entity, "feet", item);
-}

+ 3 - 1
utils/u_games.txt

@@ -103,9 +103,11 @@ if(size < minplayers) {
 if(!set.exists(indivstartchecks)) {
 	indivstartchecks = set.new();
 	set.add(indivstartchecks, "§3CTF");
+	set.add(indivstartchecks, "§6SnowGame");
 }
 if(set.contains(indivstartchecks, gamename)) {
-	if(!startgamecheck()) {
+	if(!canStartGame()) {
+		counterindex = 0;
 		ignoreGoto("checklobby");
 		goto("simplelobby");
 	}

+ 19 - 4
utils/u_general.txt

@@ -447,11 +447,9 @@ function inv.loadFromPlayer(sec_player, from_player_or_id, world) {
 		pfad = concat("scripts/configs/inv_data/", world_name);
 	}
 	config = config.new(pfad, from_player_or_id);
-	
-	if(!config.exists(config)) {
-		return;
+	if(config.exists(config)) {
+		config.load(config);
 	}
-	config.load(config);
 	
 	//Allgemeine Daten
 	if(from_player_or_id == player.getId(sec_player)) {
@@ -2792,6 +2790,14 @@ function loc.isInStoryWorld(location) {
 	return loc.getWorld(location) == world.getStory();
 }
 
+function loc.round(location) {
+	world = loc.getWorld(location);
+	x = math.round(loc.getX(location));
+	y = math.round(loc.getY(location));
+	z = math.round(loc.getZ(location));
+	return loc.new(world, x, y, z);
+}
+
 //--------------------------------------------------
 //Survival-Utils
 //--------------------------------------------------
@@ -3652,4 +3658,13 @@ function scheduler.removeEntity(ticks, entity) {
 	a[1] = ticks;
 	a[2] = entity;
 	scheduler.add(a);
+}
+
+function scheduler.giveItem(ticks, player, item) {
+	a = array.new(4);
+	a[0] = 8;
+	a[1] = ticks;
+	a[2] = player;
+	a[3] = item;
+	scheduler.add(a);
 }