Ver código fonte

new snowgame map, added snowgame skills, new quests

Marvin Löschenkohl 3 anos atrás
pai
commit
bbc5ee8ee6

+ 5 - 1
minigames/buttons/buttons.txt

@@ -35,7 +35,11 @@ goto("wait");
 
 @player_join
 entity.teleport(player, spawn_loc);
-resetplayer(player);
+entity.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, "Time for next click:");
 display.add(player, 3, math.roundComma(tfn, 2));

+ 1 - 1
minigames/knockfight/knockfight.txt

@@ -157,7 +157,7 @@ if(key == 1) {
 	entity.throw(opp, x, 1, z);
 }
 setKfLastExeTime(player, skill_name);
-status.addTimed(player, key, needed_cooldown * 20, concat("CD ", skill_name));
+status.addTimed(player, key, needed_cooldown * 20, concat("Cooldown ", skill_name));
 minigame.speakAll(gamename, concat("§6", player_name, "§r used §2", skill_name, "."));
 goto("checkgame");
 

+ 1 - 0
minigames/letters/letters.txt

@@ -31,6 +31,7 @@ title.setTime(player, 20, 0, 20);
 title.setSub(player, mapname);
 title.send(player, gamename);
 nextletter = list.getIndex(letters, counter);
+display.reset(player);
 display.add(player, 1, gamename);
 display.add(player, 2, "Progress:");
 display.add(player, 3, concat(text.number(counter), "/26"));

+ 85 - 13
minigames/snowgame/snowgame.txt

@@ -1,6 +1,7 @@
 rankingtable = "snowranks";
 game_short = "snow";
 specific_lobby_handling = true;
+no_core_reset = true;
 gamename = "§6SnowGame";
 snow_stack = read.item("minecraft:snowball", 16);
 
@@ -41,6 +42,7 @@ lifes = map.new();
 nerf_map = map.new();
 kills_map = map.new();
 deaths_map = map.new();
+cooldown_map = map.new();
 
 gosub("setstart");
 goto("simplelobby");
@@ -52,6 +54,11 @@ if(event == "player_join") {
 	map.add(nerf_map, player_name, 0);
 	map.add(kills_map, player_name, 0);
 	map.add(deaths_map, player_name, 0);
+	entity.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, mapname);
 	display.add(player, 3, "Spieler: 2x10");
@@ -68,7 +75,10 @@ if(event == "player_logout" || event == "player_giveup") {
 	return;
 }
 if(event == "block_click") {
-	if(block_type == "minecraft:concrete" || block_type == "minecraft:stained_hardened_clay") {
+	if(hand == "OFF_HAND" || action == "left") {
+		return;
+	}
+	if(list.contains(joinblocks, block_loc)) {
 		newteam = list.getIndexOf(joinblocks, block_loc);
 		newteamlist = map.get(team_lists, newteam);
 		if(list.contains(newteamlist, player_name)) {
@@ -100,6 +110,10 @@ event.load("player_toss");
 event.load("item_air_click");
 event.load("living_drop");
 event.load("player_post_respawn");
+event.load("function_key");
+
+snow_skills = list.new();
+addSnowSkill("Snowball", "minecraft:snowball", 45);
 
 while(list.getSize(waiters) != 0) {
 	team = getTeamWithLowestPeople(team_lists, numberofteams);
@@ -133,12 +147,26 @@ for(i = 0; i < list.getSize(player_list); i++) {
 	player.setFly(p, false);
 	entity.teleport(p, map.get(spawnlocs, team));
 	player.action(p, concat(map.get(colorcodes, team), "Team ", map.get(teamcolortext2, team)));
+	stacks.clear(p);
+	setStackIcons(p);
 	equipPlayer(p, team);
 }
 sgoto(40, "loop");
 
 @checkgame
 wait();
+if(event == "living_pre_hurt" || event == "living_drop") {
+	if(!isPlayer(living_entity)) {
+		goto("checkgame");
+	}
+	player = living_entity;
+}
+if(event == "projectile_hit") {
+	if(!isPlayer(shooter)) {
+		goto("checkgame");
+	}
+	player = shooter;
+}
 if(player.hasMinigameId(player, script_id)) {
 	ignoreGoto(event);
 }
@@ -177,10 +205,6 @@ goto("checkgame");
 
 @projectile_hit
 if(entity_hit != null) {
-	if(!isPlayer(shooter)) {
-		goto("checkgame");
-	}
-	player = shooter;
 	player_name = player.getName(shooter);
 	if(!isPlayer(entity_hit)) {
 		goto("checkgame");
@@ -197,7 +221,7 @@ if(entity_hit != null) {
 	team = map.get(players, player_name);
 	hit_team = map.get(players, entity_hit_name);
 	if(team == hit_team) {
-		goto("checkgame"); //Friedly-Fire
+		goto("checkgame"); //Friendly-Firedly-Fire
 	}
 	player.clearInventory(entity_hit);
 	giveSnowballs(entity_hit);
@@ -214,6 +238,28 @@ if(entity_hit != null) {
 }	
 goto("checkgame");
 
+@function_key
+if(key > list.getSize(snow_skills)) {
+	goto("checkgame");
+}
+skill = list.getIndex(snow_skills, key - 1);
+skill_name = skill[0];
+last_exe_time = getSnowLastExeTime(player, skill_name);
+needed_cooldown = skill[2];
+now_time = time.getMillis();
+diff_time = math.roundUp((now_time - last_exe_time) / 1000);
+if(diff_time < needed_cooldown) {
+	player.action(player, concat("§a", text.number(needed_cooldown - diff_time), "s cooldown left"));
+	goto("checkgame");
+}
+if(key == 1) {
+	giveSnowballs(player);
+}
+setSnowLastExeTime(player, skill_name);
+status.addTimed(player, key, needed_cooldown * 20, concat("Cooldown ", skill_name));
+minigame.speakAll(gamename, concat("§6", player_name, "§r used §2", skill_name, "."));
+goto("checkgame");
+
 @player_post_respawn
 team = map.get(players, player_name);
 loc = map.get(spawnlocs, team);
@@ -222,16 +268,10 @@ giveSnowballs(player);
 goto("checkgame");
 
 @living_drop
-if(isPlayer(living_entity)) {
-	list.clear(drops);
-}
+list.clear(drops);
 goto("checkgame");
 
 @living_pre_hurt
-if(!isPlayer(living_entity)) {
-	goto("checkgame");
-}
-player = living_entity;
 damage_type = damage.getType(damage_source);
 if(damage_type == "wither") {
 	goto("checkgame");
@@ -357,3 +397,35 @@ function equipPlayer(player, team) {
 		entity.setEquip(player, "feet", read.item(concat("{id:'minecraft:leather_boots',Count:1b,tag:{display:{color:", color, "}}}")));
 	}
 }
+
+function setSnowLastExeTime(player, skill_name) {
+	player_uuid = player.getUuid(player);
+	player_map = map.getOrDefault($cooldown_map, player_uuid, map.new());
+	map.add(player_map, skill_name, time.getMillis());
+	map.add($cooldown_map, player_uuid, player_map);
+}
+
+function getSnowLastExeTime(player, skill_name) {
+	player_map = map.get($cooldown_map, player.getUuid(player));
+	if(player_map == null) {
+		return 0;
+	}
+	return map.getOrDefault(player_map, skill_name, 0);
+}
+
+function setStackIcons(player) {
+	for(h = 0; h < list.getSize($snow_skills); h++) {
+		skill = list.getIndex($snow_skills, h);
+		icon = skill[1];
+		stacks.set(player, h, icon);
+	}
+	stacks.setActive(player, true);
+}
+
+function addSnowSkill(skill_name, icon, cooldown) {
+	skill = array.new(3);
+	skill[0] = skill_name;
+	skill[1] = icon;
+	skill[2] = cooldown; //s
+	list.add($snow_skills, skill);
+}

+ 1 - 2
minigames/snowgame/region_snowmap1.txt → minigames/snowgame/snowmap1.txt

@@ -3,8 +3,7 @@ numberofteams = 2;
 teamsize = 10;
 minplayers = 2;
 maxplayers = 20;
-gamesignsmap = getScriptVar("gamesigns");
-gamesignloc = map.get(gamesignsmap, "snowsign1");
+gamesignloc = minigame.getSignLoc("snowsign1");
 gamesworld = world.getGames();
 lobbyspawnloc = loc.new(gamesworld, -1224, 43, -995, 90, 0);
 middleloc = loc.new(gamesworld, -1205, 41, -979);

+ 20 - 0
minigames/snowgame/snowmap2.txt

@@ -0,0 +1,20 @@
+mapname = "Battlefield";
+numberofteams = 2;
+teamsize = 10;
+minplayers = 2;
+maxplayers = 20;
+gamesignloc = minigame.getSignLoc("snowsign2");
+gamesworld = world.getGames();
+lobbyspawnloc = loc.new(gamesworld, -2029.5, 116, -4004.5, 180, 0.0001);
+middleloc = loc.new(gamesworld, -2030, 100, -3954);
+team_lifes = 20;
+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));
+list.add(joinblocks, loc.new(gamesworld, -2027, 114, -4010));
+
+spawnlocs = map.new(); //Liste der Spawnlocs der einzelnen Teams
+map.add(spawnlocs, 0, loc.new(gamesworld, -2029.5, 102, -4003.5, 0.0001, 0.0001));
+map.add(spawnlocs, 1, loc.new(gamesworld, -2029.5, 102, -3904.5, 180, 0.0001));

+ 1 - 0
startscript.txt

@@ -13,6 +13,7 @@ script.startNamed("Copyisland", "system/copyisland");
 script.startNamed("Damage", "system/damage");
 script.startNamed("Doors", "system/doors", "utils/u_general");
 script.startNamed("Harvest", "system/harvest", "utils/u_general");
+script.startNamed("Herobrine", "system/herobrine", "utils/u_general");
 script.startNamed("Playtime", "system/playtime");
 script.startNamed("Pumpkin", "system/pumpkin", "utils/u_general");
 script.startNamed("Voxel", "system/voxel");

+ 26 - 0
story/admont/core.txt

@@ -88,6 +88,18 @@ if(entity_name == "Gertrude") {
 	inv.open(inv, player, "Quests: Gertrude");
 	goto("wait");
 }
+if(entity_name == "Bernd") {
+	inv = inv.new("333333333");
+	inv.setItem(inv, 0, read.item("minecraft:enchanted_book", 1, "§fHide and Seek"));
+	inv.open(inv, player, "Quests: Bernd");
+	goto("wait");
+}
+if(entity_name == "Kunibert") {
+	inv = inv.new("333333333");
+	inv.setItem(inv, 0, read.item("minecraft:enchanted_book", 1, "§fKräutermeister"));
+	inv.open(inv, player, "Quests: Kunibert");
+	goto("wait");
+}
 goto("wait");
 
 @inv_click
@@ -151,6 +163,20 @@ if(inv_name == "Quests: Gertrude") {
 	}
 	goto("wait");
 }
+if(inv_name == "Quests: Bernd") {
+	if(inv_slot == 0) {
+		quest.start(player, "story/admont/hide_and_seek");
+		goto("wait");
+	}
+	goto("wait");
+}
+if(inv_name == "Quests: Kunibert") {
+	if(inv_slot == 0) {
+		quest.start(player, "story/admont/kraeutermeister");
+		goto("wait");
+	}
+	goto("wait");
+}
 if(inv_name == "Skillshop") {
 	if(item.getType(item) == "minecraft:air") {
 		goto("wait");

+ 8 - 9
story/admont/helfende_hand.txt

@@ -84,38 +84,37 @@ if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "
 	if(entity_name == "Gustav") {
 		item = entity.getEquip(player, "hand");
 		item_type = item.getType(item);
-		amount = item.getAmount(item);
 		if(item_type == "minecraft:coal") {
-			if(coal_given > 4) {
+			if(coal_given >= 4) {
 				goto("wait");
 			}
 			coal_given++;
 			player.removeItem(player, read.item("minecraft:coal"));
-			if(coal_given >= 4) {
+			if(coal_given == 4) {
 				msg.prefix(player, "§dGustav", "Danke für die Kohle.");
 			}
 		}
 		elseif(item_type == "minecraft:iron_ore") {
-			if(iron_given > 3) {
+			if(iron_given >= 3) {
 				goto("wait");
 			}
 			iron_given++;
 			player.removeItem(player, read.item("minecraft:iron_ore"));
-			if(iron_given >= 3) {
+			if(iron_given == 3) {
 				msg.prefix(player, "§dGustav", "Danke für das Eisenerz.");
 			}
 		}
 		elseif(item.hasTag(wool_tag, item)) {
-			if(wool_given > 6) {
+			if(wool_given >= 6) {
 				goto("wait");
 			}
-			wool_given += amount;
+			wool_given += item.getAmount(item);
 			player.removeItem(player, item);
-			if(wool_given >= 6) {
+			if(wool_given == 6) {
 				msg.prefix(player, "§dGustav", "Danke für die Wolle.");
 			}
 		} else {
-			msg.prefix(player, "§dGustav", "Das kann ich nich nicht gebrauchen.");
+			msg.prefix(player, "§dGustav", "Das kann ich nicht gebrauchen.");
 		}
 		if(coal_given >= 4 && iron_given >= 3 && wool_given >= 6) {
 			addMoney(player, 8);

+ 73 - 0
story/admont/hide_and_seek.txt

@@ -0,0 +1,73 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("entity_click");
+event.load("block_break");
+event.load("custom_command");
+
+stage = 0;
+all_stages = 3;
+quest_name = "Hide and Seek";
+
+@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, "§dBernd", "Pssst! Ich und ein Freund spielen gerade Verstecken und ich muss zählen.");
+	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.");
+	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 == "Robert") {
+		stage.increase(player);
+		msg.prefix(player, "§dRobert", "Pssst! Ich versteck mich hier...");
+		scheduler.msgPrefix(30, player, "§dRobert", "Sag Bernd bitte nicht, dass ich hier bin.");
+		goto("wait");
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "entity_click" && hand == "MAIN_HAND" && entity.getType(entity) == "human") {
+	entity_name = entity.getName(entity);
+	if(entity_name == "Bernd") {
+		stage.increase(player);
+		msg.prefix(player, "§dBernd", "Und wo ist Robert?");
+		scheduler.msg(30, player, "§dAntwortmöglichkeiten:");
+		scheduler.msg(30, player, text.click("[§dA§r] §eEr hat sich beim Schmied versteckt.", "/questanswer A"));
+		scheduler.msg(30, player, text.click("[§dB§r] §eEr versteckt sich in der Windmühle in der linken Ecke.", "/questanswer B"));
+		goto("wait");
+	}
+}
+goto("wait");
+
+@stage2
+if(event == "custom_command" && command == "questanswer") {
+	msg.prefix(player, "§dBernd", "Ha! Der wird sich wundern, dass ich ihn so schnell finde. Danke!");
+	option = list.getIndex(args, 0);
+	if(option == "A") {
+		msg(player, "§dQuest abgeschlossen. Belohnung: 3 Snuvis!");
+		addMoney(player, 3);
+		quest.finish(script, player);
+	}
+	if(option == "B") {
+		msg(player, "§dQuest abgeschlossen. Belohnung: 8 Snuvis!");
+		addMoney(player, 8);
+		quest.finish(script, player);
+	}
+}
+goto("wait");

+ 238 - 0
story/admont/kraeutermeister.txt

@@ -0,0 +1,238 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("block_click");
+event.load("block_break");
+event.load("entity_click");
+
+stage = 0;
+all_stages = 9;
+quest_name = "Kräutermeister";
+
+brown_mushroom = 0;
+red_mushroom = 0;
+nether_wart = 0;
+twisting_vines = 0;
+warped_fungus = 0;
+crimson_fungus = 0;
+warped_roots = 0;
+crimson_roots = 0;
+
+brown_mushroom_given = 0;
+red_mushroom_given = 0;
+nether_wart_given = 0;
+twisting_vines_given = 0;
+warped_fungus_given = 0;
+crimson_fungus_given = 0;
+warped_roots_given = 0;
+crimson_roots_given = 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, "§dKunibert", "Du kommst zum richtigen Zeitpunkt. Ich habe gehört, du suchst Tätigkeiten.");
+	scheduler.msgPrefix(30, player, "§dKunibert", "Im Sumpf nebenan gibt es einiges zu pflücken.");
+	scheduler.msgPrefix(60, player, "§dKunibert", "Hier meine Zutatenliste für mein geheimes Heilmittel.");
+	scheduler.msgPrefix(150, player, "§dKunibert", "Aber pssst, niemand darf von meiner Kunst der Heilkunde erfahren, sonst werde ich verfolgt. Ich vertrau dir.");
+	player.giveSingleItem(player, read.item("minecraft:shears"), false);
+	ingredients = read.item("minecraft:paper");
+	item.setName(ingredients, "Zutaten für Kunibert");
+	item.addLore(ingredients, 0, "5 braune Pilze");
+	item.addLore(ingredients, 1, "5 rote Pilze");
+	item.addLore(ingredients, 2, "10 Netherwarzen");
+	item.addLore(ingredients, 3, "2 Karmesinwurzeln");
+	item.addLore(ingredients, 4, "1 Wirrpilz");
+	item.addLore(ingredients, 5, "2 Wirrwurzeln");
+	item.addLore(ingredients, 6, "2 Wirbelranken");
+	item.addLore(ingredients, 7, "1 Karmesinpilz");
+	player.giveSingleItem(player, ingredients, true);
+	goto("wait");
+}
+if(event == "block_break") {
+	if(block_type == "minecraft:brown_mushroom") {
+		cancel = false;
+		scheduler.setBlock(5, block_loc, block_type, false);
+		brown_mushroom++;
+		if(brown_mushroom == 5) {
+			stage.increase(player);
+		}
+	}
+	if(block_type == "minecraft:red_mushroom") {
+		cancel = false;
+		scheduler.setBlock(5, block_loc, block_type, false);
+		red_mushroom++;
+		if(red_mushroom == 5) {
+			stage.increase(player);
+		}
+	}
+	if(block_type == "minecraft:nether_wart") {
+		cancel = false;
+		scheduler.setBlock(5, block_loc, block_type, false);
+		nether_wart++;
+		if(nether_wart == 10) {
+			stage.increase(player);
+		}
+	}
+	if(block_type == "minecraft:crimson_roots") {
+		cancel = false;
+		scheduler.setBlock(5, block_loc, block_type, false);
+		crimson_roots++;
+		if(crimson_roots == 2) {
+			stage.increase(player);
+		}
+	}
+	if(block_type == "minecraft:crimson_fungus") {
+		cancel = false;
+		scheduler.setBlock(5, block_loc, block_type, false);
+		crimson_fungus++;
+		if(crimson_fungus == 1) {
+			stage.increase(player);
+		}
+	}
+	if(block_type == "minecraft:warped_roots") {
+		cancel = false;
+		scheduler.setBlock(5, block_loc, block_type, false);
+		warped_roots++;
+		if(warped_roots == 2) {
+			stage.increase(player);
+		}
+	}
+	if(block_type == "minecraft:warped_fungus") {
+		cancel = false;
+		scheduler.setBlock(5, block_loc, block_type, false);
+		warped_fungus++;
+		if(warped_fungus == 1) {
+			stage.increase(player);
+		}
+	}
+	if(block_type == "minecraft:twisting_vines") {
+		item = entity.getEquip(player, "hand");
+		item_type = item.getType(item);
+		if(item_type == "minecraft:shears") {
+			cancel = false;
+			scheduler.setBlock(5, block_loc, block_type, false);
+			twisting_vines++;
+			if(twisting_vines == 3) {
+				stage.increase(player);
+			}
+		}
+	}
+}
+if(stage == 8) {
+	goto("stage8");
+}
+goto("wait");
+
+@stage8
+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 == "minecraft:brown_mushroom") {
+			if(brown_mushroom_given >= 5) {
+				goto("wait");
+			}
+			brown_mushroom_given++;
+			player.removeItem(player, read.item(item_type));
+			if(brown_mushroom_given == 5) {
+				msg.prefix(player, "§dKunibert", "Danke für die braunen Pilze.");
+			}
+		}
+		elseif(item_type == "minecraft:red_mushroom") {
+			if(red_mushroom_given >= 5) {
+				goto("wait");
+			}
+			red_mushroom_given++;
+			player.removeItem(player, read.item(item_type));
+			if(red_mushroom_given == 5) {
+				msg.prefix(player, "§dKunibert", "Danke für die roten Pilze.");
+			}
+		}
+		elseif(item_type == "minecraft:nether_wart") {
+			if(nether_wart_given >= 10) {
+				goto("wait");
+			}
+			nether_wart_given++;
+			player.removeItem(player, read.item(item_type));
+			if(nether_wart_given == 10) {
+				msg.prefix(player, "§dKunibert", "Danke für die Netherwarzen.");
+			}
+		}
+		elseif(item_type == "minecraft:crimson_roots") {
+			if(crimson_roots_given >= 2) {
+				goto("wait");
+			}
+			crimson_roots_given++;
+			player.removeItem(player, read.item(item_type));
+			if(crimson_roots_given == 2) {
+				msg.prefix(player, "§dKunibert", "Danke für die Karmesinwurzeln.");
+			}
+		}
+		elseif(item_type == "minecraft:crimson_fungus") {
+			if(crimson_fungus_given >= 1) {
+				goto("wait");
+			}
+			crimson_fungus_given++;
+			player.removeItem(player, read.item(item_type));
+			if(crimson_fungus_given == 1) {
+				msg.prefix(player, "§dKunibert", "Danke für den Karmesinpilz.");
+			}
+		}
+		elseif(item_type == "minecraft:warped_roots") {
+			if(warped_roots_given >= 2) {
+				goto("wait");
+			}
+			warped_roots_given++;
+			player.removeItem(player, read.item(item_type));
+			if(warped_roots_given == 2) {
+				msg.prefix(player, "§dKunibert", "Danke für die Wirrwurzeln.");
+			}
+		}
+		elseif(item_type == "minecraft:warped_fungus") {
+			if(warped_fungus_given >= 1) {
+				goto("wait");
+			}
+			warped_fungus_given++;
+			player.removeItem(player, read.item(item_type));
+			if(warped_fungus_given == 1) {
+				msg.prefix(player, "§dKunibert", "Danke für den Wirrpilz.");
+			}
+		}
+		elseif(item_type == "minecraft:twisting_vines") {
+			if(twisting_vines_given >= 3) {
+				goto("wait");
+			}
+			twisting_vines_given++;
+			player.removeItem(player, read.item(item_type));
+			if(twisting_vines_given == 3) {
+				msg.prefix(player, "§dKunibert", "Danke für die Zwirbelranken.");
+			}
+		} else {
+			msg.prefix(player, "§dKunibert", "Das kann ich nicht gebrauchen.");
+		}
+		if(brown_mushroom_given >= 5 && red_mushroom_given >= 5 && nether_wart_given >= 10 && crimson_roots_given >= 2 && crimson_fungus_given >= 1 && warped_roots_given >= 2 && warped_fungus_given >= 1 && twisting_vines_given >= 3) {
+			msg.prefix(player, "§dKunibert", "Damit kann ich einiges anstellen. Vielen Dank!");
+			addMoney(player, 12);
+			msg(player, "§dQuest abgeschlossen. Belohnung: 12 Snuvis!");
+			quest.finish(script, player);
+		}
+	}
+}
+goto("wait");

+ 13 - 2
system/commands.txt

@@ -3,6 +3,7 @@ waitfor(5); //Verhindert Endlos-Schleife on /start commands
 setCommandHelps();
 command.clear();
 //Games
+//command.add("hack");
 command.add("nextplayer");
 command.add("invstats");
 command.add("topinvstats");
@@ -2440,6 +2441,7 @@ if(size != 1) {
 	msg(sender, " - friends");
 	msg(sender, " - games");
 	msg(sender, " - harvest");
+	msg(sender, " - herobrine");
 	msg(sender, " - mails");
 	msg(sender, " - perms");
 	msg(sender, " - pumpkin");
@@ -2511,6 +2513,13 @@ elseif(arg0 == "harvest") {
 	}
 	script.startNamed("Harvest", "system/harvest", "utils/u_general");
 }
+elseif(arg0 == "herobrine") {
+	script = script.get("Herobrine");
+	if(script != null) {
+		script.term(script);
+	}
+	script.startNamed("Herobrine", "system/herobrine", "utils/u_general");
+}
 elseif(arg0 == "perms") {
 	script.start("system/perms", "utils/u_general");
 }
@@ -5936,8 +5945,8 @@ if(player.hasMinigame(player)) {
 hasPerms = perm.has(player, "isTeam");
 if(!hasPerms) {
 	world_name = world.getName(loc.getWorld(entity.getLocation(player)));
-	if(isGamesWorldName(world_name)) {
-		msg.prefix(player, prefix_commands, "You won't teleport in this world.");
+	if(isGamesWorldName(world_name) || isStoryWorldName(world_name)) {
+		msg.prefix(player, prefix_commands, "You won't use /back in this world.");
 		goto("wait");
 	}
 }
@@ -7363,6 +7372,7 @@ function setCommandHelps() {
 	addCommandHelp("ride");
 	addCommandHelp("repair");
 	addCommandHelp("live");
+	addCommandHelp("hack");
 	
 	addCommandHelpChildPlayer("mute");
 	addCommandHelpChildPlayer("unmute");
@@ -7415,6 +7425,7 @@ function setCommandHelps() {
 	command.addHelpChild(help, command.newHelpLiteral("damage"));
 	command.addHelpChild(help, command.newHelpLiteral("doors"));
 	command.addHelpChild(help, command.newHelpLiteral("harvest"));
+	command.addHelpChild(help, command.newHelpLiteral("herobrine"));
 	command.addHelpChild(help, command.newHelpLiteral("games"));
 	command.addHelpChild(help, command.newHelpLiteral("mails"));
 	command.addHelpChild(help, command.newHelpLiteral("perms"));

+ 2 - 1
system/gamecenter.txt

@@ -81,7 +81,8 @@ minigame.addSign("hideandseeksign2", true, loc.new(gamesworld, -414, 158, -40),
 minigame.addSign("shoppingsign1", true, loc.new(gamesworld, -415, 158, -40), "minigames/shoppingchaos/shoppingchaos", "minigames/shoppingchaos/shopping_map1", false);
 minigame.addSign("mengersign1", true, loc.new(gamesworld, -401, 158, -73), "minigames/mengerrun/mengerrun", "minigames/mengerrun/menger_map1", false);
 minigame.addSign("leapfrogsign1", true, loc.new(gamesworld, -399, 157, -65), "minigames/leapfrog/leapfrog", "minigames/leapfrog/leapfrogmap1", true);
-minigame.addSign("snowsign1", true, loc.new(gamesworld, -401, 158, -72), "minigames/snowgame/snowgame", "minigames/snowgame/region_snowmap1", false);
+minigame.addSign("snowsign1", true, loc.new(gamesworld, -419, 158, -40), "minigames/snowgame/snowgame", "minigames/snowgame/snowmap1", false);
+minigame.addSign("snowsign2", true, loc.new(gamesworld, -420, 158, -40), "minigames/snowgame/snowgame", "minigames/snowgame/snowmap2", false);
 //minigame.addSign("damesign1", false, loc.new(gamesworld, -411, 158, -44), "minigames/dame/dame", "minigames/dame/dame_map1", false);
 minigame.addSign("among_us_sign1", true, loc.new(gamesworld, -417, 157, -41), "minigames/among_us/among_us", "minigames/among_us/among_us_map1", false);
 setScriptVar("gamesigns", gamesignsmap);

+ 43 - 0
system/herobrine.txt

@@ -0,0 +1,43 @@
+event.load("block_break");
+herobrines = list.new();
+
+msg("dev", "§bHerobrine §rloaded.");
+@wait
+wait();
+player_loc = entity.getLocation(player);
+world_name = world.getName(loc.getWorld(player_loc));
+if(!isSurvWorldName(world_name)) {
+	goto("wait");
+}
+r = math.random(1, 1000);
+if(r == 1) {
+	spawnHerobrine(player);
+}
+goto("wait");
+
+function spawnHerobrine(player) {
+	player_loc = entity.getLocation(player);
+	dist = math.random(4, 20);
+	alpha = math.random(0, 360);
+	alpha *= math.pi() / 180;
+	x = math.round(math.sin(alpha) * dist) + 0.5;
+	z = math.round(math.cos(alpha) * dist) + 0.5;
+	y = 255;
+	hero_loc = loc.mod(player_loc, x, y, z);
+	while(block.isAir(hero_loc)) {
+		loc.setY(hero_loc, y);
+		y--;
+	}					
+	loc.addY(hero_loc, 1);
+	ent = human.spawn(hero_loc);
+	list.add($herobrines, ent);
+	human.setSkin(ent, "herobrine");
+	entity.setName(ent, "Herobrine");
+	sgoto(400, "deleteHerobrine");
+}
+
+@deleteHerobrine
+ent = list.getIndex(herobrines, 0);
+list.removeIndex(herobrines, 0);
+entity.remove(ent);
+goto("wait");

+ 1 - 0
system/perms.txt

@@ -123,6 +123,7 @@ perm.registerGroup(2, "playtime.year");
 perm.registerGroup(2, "playtime.month");
 perm.registerGroup(2, "playtime.other");
 perm.registerGroup(2, "startgame.jump");
+perm.registerGroup(2, "hack");
 perm.registerGroup(2, "perm");
 perm.registerGroup(2, "perm.give");
 perm.registerGroup(2, "perm.remove");