fastbridge.txt 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. placedblocks = list.new();
  2. points = list.new();
  3. spawn_locs = map.new();
  4. rankingtable = "fastbridgeranks";
  5. game_short = "fb";
  6. gamename = "§dFastBridge";
  7. specific_lobby_handling = true;
  8. no_core_reset = true;
  9. start_sound = sound.get("minecraft:block.note_block.harp");
  10. gosub("setstart");
  11. goto("simplelobby");
  12. @specificLobbyHandling
  13. if(event == "player_join") {
  14. entity.cleareffects(player);
  15. living.setHealth(player, 20);
  16. player.setHunger(player, 20);
  17. player.setSaturation(player, 5);
  18. player.clearInventory(player);
  19. display.reset(player);
  20. display.add(player, 0, gamename);
  21. display.add(player, 1, "§7Map:");
  22. display.add(player, 2, "§3", mapname);
  23. }
  24. return;
  25. @finalstart
  26. player_list = minigame.getPlayers(script_id);
  27. minigame.displayResetAll();
  28. minigame.displayAll(0, gamename);
  29. if(seconds < 10) {
  30. minigame.displayAll(1, concat("Time: ", text.number(minutes), ":0", text.number(seconds)));
  31. } else {
  32. minigame.displayAll(1, concat("TIme: ", text.number(minutes), ":", text.number(seconds)));
  33. }
  34. for(i = 0; i < list.getSize(player_list); i++) {
  35. p = player.get(list.getIndex(player_list, i));
  36. p_uuid = player.getUuid(p);
  37. msg.prefix(p, gamename, "The game has started.");
  38. spawnloc = list.getIndex(spawns, i);
  39. map.add(spawn_locs, p, spawnloc);
  40. entity.teleport(p, spawnloc);
  41. sound.spawnForPlayer(p, start_sound, sound_category_ambient);
  42. array = array.new(2);
  43. array[0] = p_uuid;
  44. array[1] = 0;
  45. list.add(points, array);
  46. player.setGamemode(p, "survival");
  47. player.setFly(p, false);
  48. title.clear(p);
  49. title.setTime(p, 0, 20, 0);
  50. }
  51. countdown = 5;
  52. @title
  53. for(i = 0; i < list.getSize(player_list); i++) {
  54. p = player.get(list.getIndex(player_list, i));
  55. title.send(p, concat("§4", text.number(countdown)));
  56. }
  57. if(countdown == 0) {
  58. sgoto(20, "loadevents");
  59. } else {
  60. sgoto(20, "title");
  61. countdown--;
  62. }
  63. @checkstart
  64. wait();
  65. if(event == "block_click") {
  66. cancel = true;
  67. }
  68. if(event == "player_logout" || event == "player_giveup") {
  69. removeFromPoints(player.getUuid(player));
  70. script = script.getFromId(script_id);
  71. minigame.kickPlayer(script, player);
  72. minigame.speakAll(gamename, concat(player.getName(player), " §rhas left the game."));
  73. if(list.getSize(player_list) < minplayers) {
  74. p = player.get(list.getIndex(player_list, 0));
  75. wincore(p);
  76. }
  77. }
  78. goto("checkstart");
  79. @loadevents
  80. minigame.speakAll(gamename, "Build faster than the others in one line.");
  81. event.load("player_post_respawn");
  82. sgoto(20, "loop");
  83. @checkgame
  84. wait();
  85. if(event == "living_pre_hurt") {
  86. if(!isPlayer(living_entity)) {
  87. goto("checkgame");
  88. }
  89. player = living_entity;
  90. }
  91. if(player.hasMinigameId(player, script_id)) {
  92. ignoreGoto(event);
  93. }
  94. goto("checkgame");
  95. @block_break
  96. cancel = true;
  97. goto("checkgame");
  98. @player_post_respawn
  99. entity.teleport(player, map.get(spawn_locs, player));
  100. goto("checkgame");
  101. @living_pre_hurt
  102. damage_type = damage.getType(damage_source);
  103. if(damage_type == "player") {
  104. cancel = true;
  105. }
  106. goto("checkgame");
  107. @loop
  108. if(seconds == 0) {
  109. seconds = 59;
  110. minutes--;
  111. if(minutes == -1) {
  112. sortPoints();
  113. array = list.getIndex(points, 0);
  114. wincore(player.get(array[0]));
  115. }
  116. } else {
  117. seconds--;
  118. }
  119. if(seconds < 10) {
  120. minigame.displayAll(1, concat("Time: ", text.number(minutes), ":0", text.number(seconds)));
  121. } else {
  122. minigame.displayAll(1, concat("Time: ", text.number(minutes), ":", text.number(seconds)));
  123. }
  124. for(i = 0; i < list.getSize(player_list); i++) {
  125. item.drop(list.getIndex(spawns, i), list.getIndex(colors, i));
  126. ycheck = list.getIndex(ycheck_list, i);
  127. p = player.get(list.getIndex(player_list, i));
  128. y = loc.getY(entity.getLocation(p));
  129. if(y < ycheck) {
  130. entity.teleport(p, map.get(spawn_locs, p));
  131. entity.addEffect(p, "slowness", 240, 2);
  132. player.clearInventory(p);
  133. }
  134. }
  135. sgoto(20, "loop");
  136. goto("checkgame");
  137. @block_place
  138. spawnloc = map.get(spawn_locs, player);
  139. starty = loc.getY(spawnloc, "y") - 1;
  140. y = loc.getY(block_loc);
  141. if(starty == y) {
  142. startx = loc.getX(spawnloc, "x");
  143. startz = loc.getZ(spawnloc, "z");
  144. x = loc.getX(block_loc);
  145. z = loc.getZ(block_loc);
  146. if(coord == "x" && startx != x) {
  147. goto("cancelPlacement");
  148. } elseif(coord == "z" && startz != z) {
  149. goto("cancelPlacement");
  150. } else {
  151. cancel = false;
  152. raiseNumber(player.getUuid(player));
  153. list.add(placedblocks, block_loc);
  154. goto("checkgame");
  155. }
  156. }
  157. @cancelPlacement
  158. cancel = true;
  159. inv.update(player);
  160. goto("checkgame");
  161. @player_logout
  162. @player_giveup
  163. script = script.getFromId(script_id);
  164. minigame.kickPlayer(script, player);
  165. minigame.speakAll(gamename, concat(player.getName(player), " §rhas left the game."));
  166. if(list.getSize(player_list) < minplayers) {
  167. p = player.get(list.getIndex(player_list, 0));
  168. wincore(p);
  169. }
  170. goto("checkgame");
  171. function wincore(winner) {
  172. winner_name = player.getName(winner);
  173. minigame.speakAll($gamename, concat("§b", winner_name, " §rhas won!"));
  174. //Spielern das Inventar leeren, damit sie keine Blöcke mehr setzen können
  175. for(i = 0; i < list.getSize($player_list); i++) {
  176. player_uuid = list.getIndex($player_list, i);
  177. player = player.get(player_uuid);
  178. player.clearInventory(player);
  179. }
  180. //Blöcke resetten, während Spieler noch da sind, weil Chunks somit noch geladen sind
  181. for(i = 0; i < list.getSize($placedblocks); i++) {
  182. block.set(list.getIndex($placedblocks, i), "minecraft:air");
  183. }
  184. //Erst jetzt Spieler kicken/resetten/rausteleportieren
  185. for(i = 0; i < list.getSize($player_list); i++) {
  186. player_uuid = list.getIndex($player_list, i);
  187. player = player.get(player_uuid);
  188. player_id = player.getId(player);
  189. last_record = ranking.getPoints($rankingtable, player_id);
  190. playedgames = minigame.getPlayed(player_id, $game_short) + 1;
  191. minigame.setPlayed(player_id, $game_short, playedgames);
  192. record = getNumber(player_uuid);
  193. if(record < last_record) {
  194. record = last_record;
  195. }
  196. ranking.setPoints($rankingtable, player_id, record);
  197. fbwon = minigame.getWon(player, "fb");
  198. if(player == winner) {
  199. fbwon++;
  200. minigame.setWon(player, "fb", fbwon);
  201. }
  202. minigame.statsHeader(player, $gamename, "§e");
  203. for(h = 0; h < list.getSize($player_list); h++) {
  204. p_uuid = list.getIndex($player_list, h);
  205. p = player.get(p_uuid);
  206. p_name = player.getName(p);
  207. msg(player, " §e- §r", text.number(getNumber(p_uuid)), " §e", p_name);
  208. }
  209. msg(player, "");
  210. minigame.statsLine(player, "§e", "Won games", text.number(fbwon));
  211. minigame.statsLine(player, "§e", "Played games", text.number(playedgames));
  212. if(playedgames != 0) {
  213. minigame.statsLine(player, "§e", "Win ratio", concat(text.number(math.roundComma((fbwon / playedgames) * 100, 2)), "%"));
  214. }
  215. }
  216. entity.removeAll("net.minecraft.entity.item.ItemEntity", $middleloc, $radius);
  217. script = script.getFromId($script_id);
  218. minigame.kickAllPlayers(script);
  219. minigame.term(script, $gamesignloc);
  220. }
  221. function removeFromPoints(player_uuid) {
  222. for(i = 0; i < list.getSize($points); i++) {
  223. array = list.getIndex($points, i);
  224. if(array[0] == player_uuid) {
  225. list.removeIndex($points, i);
  226. break;
  227. }
  228. }
  229. }
  230. function sortPoints() {
  231. size = list.getSize($points);
  232. swapped = true;
  233. while(swapped) {
  234. swapped = false;
  235. for(i = 0; i < size - 1; i++) {
  236. array = list.getIndex($points, i);
  237. array2 = list.getIndex($points, i + 1);
  238. zahl1 = array[1];
  239. zahl2 = array2[1];
  240. if(zahl1 < zahl2) {
  241. list.setIndex($points, i, array2);
  242. list.setIndex($points, i + 1, array);
  243. swapped = true;
  244. }
  245. }
  246. }
  247. }
  248. function raiseNumber(player_uuid) {
  249. for(i = 0; i < list.getSize($points); i++) {
  250. array = list.getIndex($points, i);
  251. if(array[0] == player_uuid) {
  252. array[1] = array[1] + 1;
  253. break;
  254. }
  255. }
  256. }
  257. function getNumber(player_uuid) {
  258. for(i = 0; i < list.getSize($points); i++) {
  259. array = list.getIndex($points, i);
  260. if(array[0] == player_uuid) {
  261. return array[1];
  262. }
  263. }
  264. }