rankingtable = "halmaranks"; registerRanking(rankingtable); all = list.new(); teams = map.new(); block_click_catcher = set.new(); gamename = "§cMÄDN"; air_item_type = "minecraft:air"; pling_sound = sound.get("minecraft:block.note_block.pling"); sound_category_ambient = sound.getCategory("ambient"); gosub("setstart"); player = script.getLeader(); player_name = player.getName(player); gamesworldloc = read.location(ggv("SERVER", "gamesspawn")); gosub("setstart"); air_item_type = "minecraft:air"; colorwort = map.new(); map.add(colorwort, "blue", "Blau"); map.add(colorwort, "green", "Grün"); map.add(colorwort, "yellow", "Gelb"); map.add(colorwort, "red", "Rot"); wool = map.new(); map.add(wool, "blue", "minecraft:blue_wool"); map.add(wool, "green", "minecraft:green_wool"); map.add(wool, "yellow", "minecraft:yellow_wool"); map.add(wool, "red", "minecraft:red_wool"); colorcode_map = map.new(); map.add(colorcode_map, "blue", "§9"); map.add(colorcode_map, "green", "§2"); map.add(colorcode_map, "yellow", "§e"); map.add(colorcode_map, "red", "§c"); gosub("lobbycore"); goto("simplelobby"); @lobby player.speak("all", gamename, concat("§6", player_name, " §rhat das Spiel betreten")); /*if(ggv(player, "maednplayed") == null) { sgv(player, "maednplayed", 0); }*/ return; @leavelobby return; @finalstart player.speak("all", gamename, "§rDas Spiel läuft"); block.setSign(gamesignloc, 2, concat(text.number(size), "/", text.number(maxplayers))); block.setSign(gamesignloc, 3, "§6Läuft"); stablepos = map.new(); aimpos = map.new(); for(i = 0; i < list.getSize(colortext); i++) { color = list.getIndex(colortext, i); map.add(stablepos, color, list.new()); map.add(aimpos, color, list.new()); list = map.get(stablepos, color); list2 = map.get(aimpos, color); for(h = 0; h <= 3; h++) { list.add(list, true); list.add(list2, false); } } routepos = list.new(); for(i = 0; i <= 39; i++) { list.add(routepos, null); } colorforplayer = map.new(); for(h = 0; h < list.getSize(all); h++) { color = list.getIndex(colortext, h); p = list.getIndex(all, h); p_uuid = player.getUuid(p); display.add("all", h, concat(map.get(colorcode_map, color), player.getName(p))); map.add(colorforplayer, p_uuid, color); entity.teleport(p, map.get(tploc, color)); templist = map.get(stable, color); i = 0; while(i < 4) { block.set(list.getIndex(templist, i++), map.get(wool, color)); } } waitforplayer = list.getIndex(all, math.random(0, size - 1)); waitforplayername = player.getName(waitforplayer); color = map.get(colorforplayer, player.getUuid(waitforplayer)); colorcode = map.get(colorcode_map, color); player.speak("all", gamename, concat(colorcode, waitforplayername, "§r ist am Zug.")); sound.spawnForPlayer(waitforplayer, pling_sound, sound_category_ambient); msg(waitforplayer, text.click("§r[§eZug beenden§r]", "/nextplayer")); phase = 0; //0 = muss noch würfeln; 1 = muss figur auswählen diced = 0; @checkgame wait(); ignoreGoto(event); goto("checkgame"); @block_click if(action == "left" && set.contains(block_click_catcher, player)) { set.remove(block_click_catcher, player); goto("checkgame"); } else { set.add(block_click_catcher, player); } if(player != waitforplayer) { player.speak(player, gamename, "§rDu bist nicht am Zug"); goto("checkgame"); } //Würfelphase color = map.get(colorforplayer, player.getUuid(player)); if(block_loc == würfelloc) { if(phase != 0) { player.speak(player, gamename, "§rDu hast bereits gewürfelt"); goto("checkgame"); } zahl = math.random(1, 6); player.speak("all", gamename, concat("§r", player_name, " hat eine §6", text.number(zahl), "§r gewürfelt")); //Überprüfung, ob Zugzwang durch Startfeldbelegung besteht index = map.get(startindex, color); if(list.getIndex(routepos, index) == color) { //Check ob Starteld durch eigene figur belegt player.speak(player, gamename, "§rEs besteht Zugzwang"); if(list.getIndex(routepos, index + zahl) == color) { if(list.getIndex(routepos, index + zahl * 2) == color) { if(list.getIndex(routepos, index + zahl * 3) == color) { forcedblock = list.getIndex(route, index + zahl * 3); } else { forcedblock = list.getIndex(route, index + zahl * 2); } } else { forcedblock = list.getIndex(route, index + zahl); } } else { forcedblock = list.getIndex(route, index); } phase = 1; goto("checkgame"); } //Wenn 6 gewürfelt, Zugzwang für Startfiguren festlegen if(zahl == 6) { if(getunitsathome(color) != 0) { forcedblock = "fromstable"; phase = 1; player.speak(player, gamename, "§rEs besteht Zugzwang"); goto("checkgame"); } if(getsafeunits(color) == 3) { //wenn 4.figur vor ziel steht und nicht mehr weiter kann atmindex = list.getIndexOf(routepos, color); //Index der 4.Figur homeindex = map.get(homeindexes, color); if(atmindex <= homeindex && (atmindex + zahl) > homeindex) { //Überprüfung, ob Figur in Zugrichtung vorm Ziel steht und am Ziel vorbeifahren würde if((homeindex - atmindex) + 4 < zahl) { //Überprüfung, ob mit gewürfelter Zahl übers Ziel hinausgeschossen wird player.speak("all", gamename, "§rKein Zug möglich."); goto("nextplayer2"); } finalaimindex = ((atmindex + zahl) - homeindex) - 1; list = map.get(aimpos, color); if(list.getIndex(list, finalaimindex) == true) { player.speak("all", gamename, "§rKein Zug möglich."); goto("nextplayer2"); } } } phase = 1; goto("checkgame"); } /*wenn gewürfelt wird, kann es vorkommen, dass ein zug erst mit einer 6 möglich ist Um eine 6 zu erlangen hat man 3 Würfelversuche*/ if(zahl != 6) { if(getunitsathome(color) + getsafeunits(color) == 4) { //Check, ob alle Figuren zuhause bzw schon im Ziel if(++diced == 3) { player.speak("all", gamename, "§r3 mal hintereinander kein Zug möglich."); goto("nextplayer"); } else { player.speak("all", gamename, "§rKein Zug möglich. Würfle erneut."); goto("checkgame"); } } } else { diced = 0; } phase = 1; goto("checkgame"); } //Zugphase if(block_type != map.get(wool, color)) { //check ob eigene figur goto("checkgame"); } if(phase != 1) { player.speak(player, gamename, "§rDu musst zuerst würfeln"); goto("checkgame"); } if(forcedblock != null) { if(forcedblock == "fromstable") { templist = map.get(stable, color); if(list.contains(templist, block_loc)) { aimindex = map.get(startindex, color); doamove(aimindex); } else { player.speak(player, gamename, "§rEs besteht Zugzwang für eine Figur aus dem Startbereich"); } goto("checkgame"); } if(forcedblock == block_loc) { aimindex = list.getIndexOf(route, block_loc) + zahl; if(aimindex >= list.getSize(route)) { aimindex -= list.getSize(route); } doamove(aimindex); } else { player.speak(player, gamename, "§rStartfeld belegt. Es besteht Zugzwang für die Figur am Startfeld bzw für die Figur, welche die Figur am Startfeld am Zug hindert"); } goto("checkgame"); } templist = map.get(stable, color); if(list.contains(templist, block_loc)) { //wenn figur aus stall gewählt wird if(zahl != 6) { player.speak(player, gamename, "§rDu hast keine 6 gewürfelt"); goto("checkgame"); } } templist = map.get(aim, color); if(list.contains(templist, block_loc)) { //wenn figur aus ziel gewählt wird atmindex = list.getIndexOf(templist, block_loc); aimindex = atmindex + zahl; if(aimindex > 3) { player.speak(player, gamename, "§rZug nicht möglich"); //Fährt über Ziel hinaus goto("checkgame"); } templist2 = map.get(aimpos, color); if(list.getIndex(templist2, aimindex) == true) { player.speak(player, gamename, "§rZug nicht möglich. Eigene Figur im Weg"); goto("checkgame"); } list.setIndex(templist2, atmindex, false); list.setIndex(templist2, aimindex, true); block.set(block_loc, air_item_type); block.set(list.getIndex(templist, aimindex), map.get(wool, color)); goto("nextplayer"); } if(list.getIndexOf(route, block_loc) == -1) { //nicht möglicher Fehler msg("dev", "§rFehler: MÄDN. Block angeklickt, welcher nicht auf Route ist"); goto("checkgame"); } aimindex = list.getIndexOf(route, block_loc) + zahl; if(aimindex >= list.getSize(route)) { aimindex -= list.getSize(route); } doamove(aimindex); goto("checkgame"); @custom_command if(command == "nextplayer") { if(player != waitforplayer) { player.speak(player, gamename, "§rDu bist nicht am Zug"); goto("checkgame"); } if(phase != 1) { player.speak(player, gamename, "§rDu musst zuerst würfeln"); goto("checkgame"); } goto("nextplayer"); } goto("checkgame"); @block_place @block_break @player_is_attacked cancel = true; goto("checkgame"); function doamove(aimindex) { zahl = $zahl; color = $color; block_loc = $block_loc; atmindex -= aimindex - zahl; //aktueller index = aimindex - zahl if(atmindex < 0) { atmindex += 40; } oppcolor = list.getIndex($routepos, aimindex); //Das ist gleichzeitig der Check, ob Zielfeld belegt ist //Check ob am Ziel vorbeifährt templist = map.get($stable, color); templist2 = map.get($aim, color); if(!(list.contains(templist, block_loc) || list.contains(templist2, block_loc))) { //Wenn Figur aus Start-/Ziel-Bereich gewählt, Überprüfung nicht notwendig homeindex = map.get($homeindexes, color); if(atmindex <= homeindex && (atmindex + zahl) > homeindex) { //Überprüfung, ob Figur in Zugrichtung vorm Ziel steht und am Ziel vorbeifahren würde if((homeindex - atmindex) + 4 < zahl) { //Überprüfung, ob mit gewürfelter Zahl übers Ziel hinausgeschossen wird player.speak($player, $gamename, "§rZug nicht möglich. Zieleinlauf zu kurz"); goto("checkgame"); } finalaimindex = ((atmindex + zahl) - homeindex) - 1; list = map.get($aimpos, color); if(list.getIndex(list, finalaimindex) == true) { player.speak($player, $gamename, "§rZieleinlauf nicht möglich. Eigene Figur im Weg"); goto("checkgame"); } list.setIndex(list, finalaimindex, true); //Spielfigur im Lageplan einschreiben list.setIndex($routepos, atmindex, null); templist = map.get($aim, color); block.set(list.getIndex(templist, finalaimindex), map.get($wool, color)); //Ziel mit Figur belegen block.set(block_loc, air_item_type); //Ursprung auf AIR setzen if(getsafeunits(color) == 4) { winnername = $player_name; winner = p; goto("win"); } goto("nextplayer"); } } if(color == oppcolor) { player.speak($player, $gamename, "§rZug nicht möglich. Eigene Figur im Weg"); goto("checkgame"); } index = map.get($startindex, color); //Überprüfung ob fremde figur geschlagen wird if(oppcolor != null) { //Zielfeld ist nicht belegt templist = map.get($stablepos, oppcolor); i = -1; while(inc("i") < list.getSize(templist)) { if(list.getIndex(templist, i) == false) { templist2 = map.get($stable, oppcolor); block.set(list.getIndex(templist2, i), map.get($wool, oppcolor)); list.setIndex(templist, i, true); break; } } player.speak("all", $gamename, concat(map.get($colorcode_map, color), map.get($colorwort, color), "§r schlägt ", map.get($colorcode_map, oppcolor), map.get($colorwort, oppcolor))); } templist = map.get($stable, color); templist2 = map.get($stablepos, color); if(list.contains(templist, block_loc)) { tempindex = list.getIndexOf(templist, block_loc); list.setIndex(templist2, tempindex, false); //Spielfigur aus Lageplan entfernen } else { list.setIndex($routepos, atmindex, null); //Spielfigur aus Lageplan entfernen } list.setIndex($routepos, aimindex, color); //Spielfigur im Lageplan einschreiben loc = list.getIndex($route, aimindex); item = map.get($wool, color); block.set(loc, item); //Ziel mit Figur belegen block.set(block_loc, air_item_type); //Ursprung auf AIR setzen goto("nextplayer"); } @nextplayer if(zahl == 6) { phase = 0; diced = 0; forcedblock = null; if(dicedasix == 3) { goto("nextplayer"); } player.speak(player, gamename, "§rDu darfst nochmals würfeln"); goto("checkgame"); } @nextplayer2 index = list.getIndexOf(all, waitforplayer) + 1; if(index >= list.getSize(all)) { index = 0; } waitforplayer = list.getIndex(all, index); waitforplayername = player.getName(waitforplayer); player.speak("all", gamename, concat("§6", waitforplayername, "§r ist nun am Zug")); phase = 0; //0 = muss noch würfeln; 1 = muss figur auswählen diced = 0; dicedasix = 0; forcedblock = null; goto("checkgame"); function getunitsathome(color) { list = map.get($stablepos, color); amount = 0; i = 0; while(i < list.getSize(list)) { if(list.getIndex(list, i++) == true) { amount++; } } return(amount); } function getsafeunits(color) { list = map.get($aimpos, color); amount = 0; i = 0; while(i < list.getSize(list)) { if(list.getIndex(list, i++) == true) { amount++; } } return(amount); } @player_logout @player_giveup player.speak("all", gamename, concat("§6", player_name, " §rhat das Spiel verlassen")); //nicht gesendet? kickplayer(player); if(list.getSize(all) < minplayers) { winner = list.getIndex(all, 0); winnername = player.getName(winner); goto("win"); } if(player == waitforplayer) { goto("nextplayer"); } goto("checkgame"); @win block.setSign(gamesignloc, 2, "0/4"); block.setSign(gamesignloc, 3, "§2Wartet"); for(i = 0; i <= 39; i++) { block.set(list.getIndex(route, i), air_item_type); } for(i = 0; i <= 3; i++) { color = list.getIndex(colortext, i); for(h = 0; h <= 3; h++) { templist = map.get(aim, color); block.set(list.getIndex(templist, h), air_item_type); } } player.speak("all", gamename, concat("§6", winnername, "§r hat gewonnen")); for(i = 0; i < list.getSize(all); i++) { p = list.getIndex(all, i); entity.teleport(p, gamesworldloc); resetplayer(p); /*player.speak(p, gamename, "§r---= Statistik dieses Spiels =---"); uuid = player.getUuid(p); if(ggv(p, "maednplayed") == null) { sgv(p, "maednplayed", 0); } sgv(p, "maednplayed", ggv(p, "maednplayed") + 1); //alle gespielten spiele (geleavte spiele werden nicht gezählt) player.speak(p, gamename, "§rGespielte Spiele: ", ggv(p, "maednplayed")); wongames = gmap.get("maednranks", uuid); if(wongames == null) { wongames = 0; gmap.add("maednranks", uuid, wongames); } if(p == winner) { gmap.add("maednranks", uuid, ++wongames); } player.speak(p, gamename, "§rGewonnene Spiele: ", wongames); gmap.toTable("table", "maednranks"); table.setSortColumn(table, 1); table.sort(table); table.reverse(table); table.setSortColumn(table, 0); player.speak(p, gamename, "§rDein Rang: ", table.getIndexOf(table, player.getUuid(player)) + 1);*/ } term();