fastbridge.txt 8.4 KB

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