123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460 |
- 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();
|