|
@@ -1,44 +1,30 @@
|
|
|
rankingtable = "rebuildranks";
|
|
|
-registerRanking(rankingtable);
|
|
|
-
|
|
|
-map.new(solved);
|
|
|
-
|
|
|
gamename = "§5Rebuild";
|
|
|
-barrier_type = "minecraft:barrier";
|
|
|
-air_item_type = "minecraft:air";
|
|
|
-start_sound = sound.get("minecraft:block.note_block.harp");
|
|
|
-ambient_sound_category = sound.getCategory("ambient");
|
|
|
-
|
|
|
+specific_lobby_handling = true;
|
|
|
gosub("setstart");
|
|
|
-player = script.getLeader();
|
|
|
-player_name = player.getName(player);
|
|
|
-gosub("lobbycore");
|
|
|
goto("simplelobby");
|
|
|
|
|
|
-@lobby
|
|
|
-map.add(solved, player, 0);
|
|
|
-display.add(player, 1, gamename);
|
|
|
-display.add(player, 2, "§7Map:");
|
|
|
-display.add(player, 3, mapname);
|
|
|
-return;
|
|
|
-
|
|
|
-@leavelobby
|
|
|
-map.remove(solved, player);
|
|
|
+@specificLobbyHandling
|
|
|
+if(event == "player_join") {
|
|
|
+ display.add(player, 1, gamename);
|
|
|
+ display.add(player, 2, "§7Map:");
|
|
|
+ display.add(player, 3, mapname);
|
|
|
+}
|
|
|
return;
|
|
|
|
|
|
@finalstart
|
|
|
-event.load("block_break");
|
|
|
-event.load("block_place");
|
|
|
-player.speak("all", gamename, "§eDas Spiel beginnt.");
|
|
|
-block.setSign(gamesignloc, 2, concat(text.number(list.getSize(all)), "/", text.number(maxplayers)));
|
|
|
-block.setSign(gamesignloc, 3, "§6Läuft");
|
|
|
-map.new(buildingarea);
|
|
|
+player_list = minigame.getPlayers(script_id);
|
|
|
+buildingarea = map.new();
|
|
|
+solved = map.new();
|
|
|
|
|
|
-for(i = 0; i < list.getSize(all); i++) {
|
|
|
- p = list.getIndex(all, i);
|
|
|
- map.add(buildingarea, p, list.new());
|
|
|
+for(i = 0; i < list.getSize(player_list); i++) {
|
|
|
+ p_uuid = list.getIndex(player_list, i);
|
|
|
+ p = player.get(p_uuid);
|
|
|
+ map.add(solved, p_uuid, 0);
|
|
|
+ speakPrefix(p, gamename, "The game has started.");
|
|
|
+ list = list.new();
|
|
|
+ map.add(buildingarea, p_uuid, list);
|
|
|
edge = list.getIndex(bottom_edge, i);
|
|
|
- list = map.get(buildingarea, p);
|
|
|
for(z = 0; z < picture_length; z++) {
|
|
|
for(x = 0; x < picture_length; x++) {
|
|
|
list.add(list, loc.mod(edge, x * -1, 0, z));
|
|
@@ -46,20 +32,19 @@ for(i = 0; i < list.getSize(all); i++) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-display.reset("all");
|
|
|
-display.add("all", 1, gamename);
|
|
|
+minigame.displayResetAll();
|
|
|
+minigame.displayAll(1, gamename);
|
|
|
|
|
|
tobuild = list.getIndex(to_build_edges, 0);
|
|
|
-for(i = 0; i < list.getSize(all); i++) {
|
|
|
- p = list.getIndex(all, i);
|
|
|
+for(i = 0; i < list.getSize(player_list); i++) {
|
|
|
+ p_uuid = list.getIndex(player_list, i);
|
|
|
+ p = player.get(p_uuid);
|
|
|
pname = player.getName(p);
|
|
|
- display.add("all", i + 2, concat("§6", 0, " §c", pname));
|
|
|
+ minigame.displayAll(i + 2, concat("§6", 0, " §c", pname));
|
|
|
entity.teleport(p, list.getIndex(spawns, i));
|
|
|
- sound.spawnForPlayer(p, start_sound, ambient_sound_category);
|
|
|
+ sound.spawnForPlayer(p, pling_sound, sound_category_ambient);
|
|
|
|
|
|
- if(!player.isCreative(p)) {
|
|
|
- player.setGamemode(p, "creative");
|
|
|
- }
|
|
|
+ player.setGamemode(p, "creative");
|
|
|
|
|
|
title.clear(p);
|
|
|
title.setTime(p, 0, 20, 0);
|
|
@@ -68,15 +53,15 @@ for(i = 0; i < list.getSize(all); i++) {
|
|
|
for(y = 0; y < picture_length; y++) {
|
|
|
for(x = 0; x > picture_length * -1; x--) {
|
|
|
block.clone(loc.mod(tobuild, x, y, 0), loc.mod(edge, x, y, 0));
|
|
|
- block.set(loc.mod(edge, x, y, -1), barrier_type);
|
|
|
+ block.set(loc.mod(edge, x, y, -1), "minecraft:barrier");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
countdown = 5;
|
|
|
@title
|
|
|
-for(i = 0; i < list.getSize(all); i++) {
|
|
|
- p = list.getIndex(all, i);
|
|
|
+for(i = 0; i < list.getSize(player_list); i++) {
|
|
|
+ p = player.get(list.getIndex(player_list, i));
|
|
|
title.send(p, concat("§c", text.number(countdown)));
|
|
|
}
|
|
|
if(countdown == 0) {
|
|
@@ -93,14 +78,16 @@ if(event == "block_click") {
|
|
|
goto("checkstart");
|
|
|
}
|
|
|
if(event == "player_giveup" || event == "player_logout") {
|
|
|
+ minigame.speakAll(gamename, concat("§6", player.getName(player), " §rhas left the game."));
|
|
|
player.setGamemode(player, "survival");
|
|
|
- list = map.get(buildingarea, player);
|
|
|
+ list = map.get(buildingarea, player.getUuid(player));
|
|
|
for(i = 0; i < list.getSize(list); i++) {
|
|
|
- block.set(list.getIndex(list, i), air_item_type);
|
|
|
+ block.set(list.getIndex(list, i), "minecraft:air");
|
|
|
}
|
|
|
- kickplayer(player);
|
|
|
- if(list.getSize(all) < 2) {
|
|
|
- p = list.getIndex(all, 0);
|
|
|
+ script = script.getFromId(script_id);
|
|
|
+ minigame.kickplayer(script, player);
|
|
|
+ if(list.getSize(player_list) < 2) {
|
|
|
+ p = player.get(list.getIndex(player_list, 0));
|
|
|
wincore(p);
|
|
|
}
|
|
|
}
|
|
@@ -108,19 +95,19 @@ goto("checkstart");
|
|
|
|
|
|
@setstarttime
|
|
|
starttime = time.getMillis();
|
|
|
-for(i = 0; i < list.getSize(all); i++) {
|
|
|
+for(i = 0; i < list.getSize(player_list); i++) {
|
|
|
edge = list.getIndex(picture_edge, i);
|
|
|
for(y = 0; y < picture_length; y++) {
|
|
|
for(x = 0; x > picture_length * -1; x--) {
|
|
|
- block.set(loc.mod(edge, x, y, -1), air_item_type);
|
|
|
+ block.set(loc.mod(edge, x, y, -1), "minecraft:air");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-if(list.getSize(all_uuids) == 1) {
|
|
|
+if(list.getSize(player_list) == 1) {
|
|
|
singleteam = true;
|
|
|
- for(i = 0; i < list.getSize(all_uuids); i++) {
|
|
|
- p = player.get(list.getIndex(all_uuids, i));
|
|
|
+ for(i = 0; i < list.getSize(player_list); i++) {
|
|
|
+ p = player.get(list.getIndex(player_list, i));
|
|
|
player.speak(p, gamename, "Singleteam. Not ranked");
|
|
|
}
|
|
|
} else {
|
|
@@ -129,26 +116,30 @@ if(list.getSize(all_uuids) == 1) {
|
|
|
|
|
|
@checkgame
|
|
|
wait();
|
|
|
-ignoreGoto(event);
|
|
|
+if(player.hasMinigameId(player, script_id)) {
|
|
|
+ ignoreGoto(event);
|
|
|
+}
|
|
|
goto("checkgame");
|
|
|
|
|
|
@player_logout
|
|
|
@player_giveup
|
|
|
+minigame.speakAll(gamename, concat("§6", player.getName(player), " §rhas left the game."));
|
|
|
player.setGamemode(player, "survival");
|
|
|
-list = map.get(buildingarea, player);
|
|
|
+list = map.get(buildingarea, player.getUuid(player));
|
|
|
for(i = 0; i < list.getSize(list); i++) {
|
|
|
- block.set(list.getIndex(list, i), air_item_type);
|
|
|
+ block.set(list.getIndex(list, i), "minecraft:air");
|
|
|
}
|
|
|
-kickplayer(player);
|
|
|
-if(list.getSize(all) < 2) {
|
|
|
- p = list.getIndex(all, 0);
|
|
|
+script = script.getFromId(script_id);
|
|
|
+minigame.kickplayer(script, player);
|
|
|
+if(list.getSize(player_list) < 2) {
|
|
|
+ p = list.getIndex(player_list, 0);
|
|
|
wincore(p);
|
|
|
}
|
|
|
goto("checkgame");
|
|
|
|
|
|
@block_place
|
|
|
@block_break
|
|
|
-list = map.get(buildingarea, player);
|
|
|
+list = map.get(buildingarea, player.getUuid(player));
|
|
|
if(!list.contains(list, block_loc)) {
|
|
|
cancel = true;
|
|
|
}
|
|
@@ -157,8 +148,10 @@ goto("checkgame");
|
|
|
|
|
|
@checkpicture
|
|
|
cancel = false;
|
|
|
-temploc = list.getIndex(bottom_check_edges, map.get(solved, player));
|
|
|
-list = map.get(buildingarea, player);
|
|
|
+p_uuid = player.getUuid(player);
|
|
|
+temp_solved = map.get(solved, p_uuid);
|
|
|
+temploc = list.getIndex(bottom_check_edges, temp_solved);
|
|
|
+list = map.get(buildingarea, p_uuid);
|
|
|
picture = list.getIndex(list, 0);
|
|
|
|
|
|
for(z = 0; z < picture_length; z++) {
|
|
@@ -171,26 +164,25 @@ for(z = 0; z < picture_length; z++) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-puuid = player.getUuid(player_name);
|
|
|
-map.add(solved, player, map.get(solved, player) + 1);
|
|
|
+temp_solved++;
|
|
|
+map.add(solved, p_uuid, temp_solved);
|
|
|
player.clearInventory(player);
|
|
|
-for(i = 0; i < list.getSize(all); i++) {
|
|
|
- p = list.getIndex(all, i);
|
|
|
- pname = player.getName(p);
|
|
|
- display.add("all", i + 2, concat("§6", text.number(map.get(solved, p)), "§c ", pname));
|
|
|
+for(i = 0; i < list.getSize(player_list); i++) {
|
|
|
+ p = list.getIndex(player_list, i);
|
|
|
+ minigame.displayAll(i + 2, concat("§6", text.number(temp_solved), "§c ", player.getName(p)));
|
|
|
}
|
|
|
|
|
|
-if(map.get(solved, player) >= solve_to_win) {
|
|
|
+if(temp_solved >= solve_to_win) {
|
|
|
wincore(player);
|
|
|
}
|
|
|
|
|
|
-list = map.get(buildingarea, player);
|
|
|
+list = map.get(buildingarea, p_uuid);
|
|
|
for(i = 0; i < list.getSize(list); i++) {
|
|
|
- block.set(list.getIndex(list, i), air_item_type);
|
|
|
+ block.set(list.getIndex(list, i), "minecraft:air");
|
|
|
}
|
|
|
|
|
|
-tobuild = list.getIndex(to_build_edges, map.get(solved, player));
|
|
|
-edge = list.getIndex(picture_edge, list.getIndexOf(all, player));
|
|
|
+tobuild = list.getIndex(to_build_edges, temp_solved);
|
|
|
+edge = list.getIndex(picture_edge, list.getIndexOf(player_list, player.getUuid(player)));
|
|
|
for(y = 0; y < picture_length; y++) {
|
|
|
for(x = 0; x > picture_length * -1; x--) {
|
|
|
block.clone(loc.mod(tobuild, x, y, 0), loc.mod(edge, x, y, 0));
|
|
@@ -201,14 +193,14 @@ goto("checkgame");
|
|
|
function wincore(winner) {
|
|
|
winner_name = player.getName(winner);
|
|
|
if(!$singleteam) {
|
|
|
- player.speak("all", gamename, concat("§b", winner_name, "§r hat gewonnen!"));
|
|
|
+ minigame.speakAll(gamename, concat("§b", winner_name, "§r has won!"));
|
|
|
}
|
|
|
|
|
|
- for(h = 0; h < list.getSize($all); h++) {
|
|
|
- p = list.getIndex($all, h);
|
|
|
- list = map.get($buildingarea, p);
|
|
|
+ for(h = 0; h < list.getSize($player_list); h++) {
|
|
|
+ p_uuid = list.getIndex($player_list, h);
|
|
|
+ list = map.get($buildingarea, p_uuid);
|
|
|
for(i = 0; i < list.getSize(list); i++) {
|
|
|
- block.set(list.getIndex(list, i), $air_item_type);
|
|
|
+ block.set(list.getIndex(list, i), "minecraft:air");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -216,23 +208,22 @@ function wincore(winner) {
|
|
|
edge = list.getIndex($picture_edge, i);
|
|
|
for(y = 0; y < $picture_length; y++) {
|
|
|
for(x = 0; x > $picture_length * -1; x--) {
|
|
|
- block.set(loc.mod(edge, x, y, 0), $air_item_type);
|
|
|
+ block.set(loc.mod(edge, x, y, 0), "minecraft:air");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
entity.removeAll("net.minecraft.entity.item.ItemEntity", $middleloc, $radius);
|
|
|
|
|
|
- for(i = 0; i < list.getSize($all); i++) {
|
|
|
- p = list.getIndex($all, i);
|
|
|
+ for(i = 0; i < list.getSize($player_list); i++) {
|
|
|
+ p_uuid = list.getIndex($player_list, i);
|
|
|
+ p = player.get(p_uuid);
|
|
|
p_id = player.getId(p);
|
|
|
- entity.teleport(p, $gamesworldloc);
|
|
|
- resetplayer(p);
|
|
|
player.setGamemode(p, "survival");
|
|
|
|
|
|
if(!$singleteam) {
|
|
|
last_record = getPoints($rankingtable, p_id);
|
|
|
playedgames = getPlayedGames($rankingtable, p_id) + 1;
|
|
|
- record = last_record + map.get($solved, p);
|
|
|
+ record = last_record + map.get($solved, p_uuid);
|
|
|
setRanking($rankingtable, p_id, record, playedgames);
|
|
|
|
|
|
rebuildwon = ggv(p, "rebuildwon");
|
|
@@ -245,21 +236,24 @@ function wincore(winner) {
|
|
|
sgv(p, "rebuildwon", rebuildwon);
|
|
|
|
|
|
msg(p, "");
|
|
|
- }
|
|
|
- player.speak(p, $gamename, "§r---= §eStatistik §r=---");
|
|
|
+ }
|
|
|
+ minigame.statsHeader(p, $gamename, "§e");
|
|
|
if($starttime != null) {
|
|
|
endtime = time.getMillis();
|
|
|
time = (endtime - $starttime) / 1000;
|
|
|
- player.speak(p, $gamename, concat("§eZeit§8: §r", text.number(math.round(time / 60)), " min ", text.number(math.round(time % 60)), " s"));
|
|
|
+ minigame.statsLine(p, "§e", "Time", concat(text.number(math.round(time / 60)), " min ", text.number(math.round(time % 60)), " s"));
|
|
|
}
|
|
|
if(!$singleteam) {
|
|
|
- player.speak(p, "§5Rebuild", concat("§eGelöste Muster§8: §r", text.number(record)));
|
|
|
- player.speak(p, "§5Rebuild", concat("§eGespielte Spiele§8: §r", text.number(playedgames)));
|
|
|
- player.speak(p, "§5Rebuild", concat("§eGewonnene Spiele§8: §r", text.number(rebuildwon)));
|
|
|
- player.speak(p, "§5Rebuild", concat("§eSiegwahrscheinlichkeit§8: §r", text.number(math.roundComma((rebuildwon / playedgames) * 100, 2)), "%"));
|
|
|
+ minigame.statsLine(p, "§e", "Solved Fields", text.hover(text.number(record), "Relevant for ranking"));
|
|
|
+ minigame.statsLine(p, "§e", "Won games", text.number(rebuildwon));
|
|
|
+ minigame.statsLine(p, "§e", "Played games", text.number(playedgames));
|
|
|
+ if(playedgames != 0) {
|
|
|
+ minigame.statsLine(p, "§e", "Win ratio", concat(text.number(math.roundComma((rebuildwon / playedgames) * 100, 2)), "%"));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- block.setSign($gamesignloc, 2, concat("0/", text.number($maxplayers)));
|
|
|
- block.setSign($gamesignloc, 3, "§2Bereit");
|
|
|
+ script = script.getFromId($script_id);
|
|
|
+ minigame.kickAllPlayers(script);
|
|
|
+ minigame.term(script, $gamesignloc);
|
|
|
term();
|
|
|
-}
|
|
|
+}
|