snowfight.txt 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. rankingtable = "snowranks";
  2. game_short = "snow";
  3. game_tab = "§6SNOW";
  4. minigame.setSpecificLobbyHandling(true);
  5. minigame.setPlayerResetInCore(false);
  6. minigame.setIndivStartCheck(true);
  7. gamename = "§6Snowfight";
  8. snow_stack = item.create("minecraft:snowball", 16, null, null);
  9. colorcodes = map.new();
  10. map.add(colorcodes, 0, "§1");
  11. map.add(colorcodes, 1, "§4");
  12. map.add(colorcodes, 2, "§e");
  13. map.add(colorcodes, 3, "§2");
  14. teamcolortext = map.new();
  15. map.add(teamcolortext, 0, "§1blue");
  16. map.add(teamcolortext, 1, "§4red");
  17. map.add(teamcolortext, 2, "§eyellow");
  18. map.add(teamcolortext, 3, "§2green");
  19. teamcolortext2 = map.new();
  20. map.add(teamcolortext2, 0, "§1Blue");
  21. map.add(teamcolortext2, 1, "§4Red");
  22. map.add(teamcolortext2, 2, "§eYellow");
  23. map.add(teamcolortext2, 3, "§2Green");
  24. cloth_color = map.new();
  25. map.add(cloth_color, 0, 3361970);
  26. map.add(cloth_color, 1, 10040115);
  27. map.add(cloth_color, 2, 16701501);
  28. map.add(cloth_color, 3, 84395831);
  29. team_lists = map.new(); //Map mit Spielerlisten für jedes Team
  30. map.add(team_lists, 0, list.new());
  31. map.add(team_lists, 1, list.new());
  32. map.add(team_lists, 2, list.new());
  33. map.add(team_lists, 3, list.new());
  34. players = map.new(); //Alle Spieler (key) des Spiels und deren Teamzugehörigkeit (value)
  35. allteams = list.new(); //Alle Teams, die noch im Spiel sind
  36. waiters = list.new(); //Spieler in der Lobby ohne Teamzugehörigkeit
  37. spawn_prot = list.new();
  38. lifes = map.new();
  39. kills_map = map.new();
  40. deaths_map = map.new();
  41. cooldown_map = map.new();
  42. snowball = material.get("snowball");
  43. minigame.initStart();
  44. goto("simplelobby");
  45. @specificLobbyHandling
  46. player_name = player.getName(player);
  47. if(event == "minigame_join") {
  48. list.add(waiters, player_name);
  49. map.add(kills_map, player_name, 0);
  50. map.add(deaths_map, player_name, 0);
  51. living.setHealth(player, 20);
  52. player.setHunger(player, 20);
  53. player.setSaturation(player, 5);
  54. player.clearInventory(player);
  55. sb.add(player, 99, gamename);
  56. sb.add(player, 98, string.concat("Map: ", mapname));
  57. sb.add(player, 97, "2x10");
  58. sb.add(player, 96, sb.getSpacer());
  59. return;
  60. }
  61. if(event == "player_quit" || event == "player_giveup") {
  62. list.remove(waiters, player_name);
  63. team = map.get(players, player_name);
  64. if(team != null) {
  65. teamlist = map.get(team_lists, team);
  66. list.remove(teamlist, player_name);
  67. }
  68. map.remove(players, player_name);
  69. return;
  70. }
  71. if(event == "block_click") {
  72. if(slot.isOffHand(hand)) {
  73. return;
  74. }
  75. if(action != "RIGHT_CLICK_BLOCK") {
  76. return;
  77. }
  78. block_loc = block.getLocation(block);
  79. if(list.contains(joinblocks, block_loc)) {
  80. newteam = list.getIndexOf(joinblocks, block_loc);
  81. newteamlist = map.get(team_lists, newteam);
  82. if(list.contains(newteamlist, player_name)) {
  83. msg.prefix(player, gamename, "§eYou are already in this team.");
  84. return;
  85. }
  86. if(list.getSize(newteamlist) >= teamsize) {
  87. msg.prefix(player, gamename, "§eNo space for you in this team.");
  88. return;
  89. }
  90. list.remove(waiters, player_name);
  91. yetteam = map.get(players, player_name);
  92. if(yetteam != null) {
  93. yetteamlist = map.get(team_lists, yetteam);
  94. list.remove(yetteamlist, player_name);
  95. }
  96. list.add(newteamlist, player_name);
  97. map.add(players, player_name, newteam);
  98. msg.prefix(player, gamename, string.concat("§eYou joined the ", map.get(teamcolortext, newteam), " §eteam."));;
  99. }
  100. }
  101. return;
  102. @finalstart
  103. player_list = minigame.getPlayers(script_id);
  104. starttime = time.getMillis();
  105. event.load("projectile_hit");
  106. event.load("player_drop");
  107. event.load("living_death");
  108. event.load("player_post_respawn");
  109. while(list.getSize(waiters) != 0) {
  110. team = getTeamWithLowestPeople(team_lists, numberofteams);
  111. teamlist = map.get(team_lists, team);
  112. p_name = list.getIndex(waiters, 0);
  113. map.add(players, p_name, team);
  114. list.add(teamlist, p_name);
  115. list.remove(waiters, p_name);
  116. }
  117. max = 1;
  118. for(i = 0; i < numberofteams; i++) {
  119. teamlist = map.get(team_lists, i);
  120. size = list.getSize(teamlist);
  121. if(size > max) {
  122. max = size;
  123. }
  124. }
  125. team_lifes = max * 10;
  126. sb.clearGameAll();
  127. minigame.displayAll(99, gamename);
  128. for(i = 0; i < numberofteams; i++) {
  129. teamlist = map.get(team_lists, i);
  130. size = list.getSize(teamlist);
  131. if(size != 0) {
  132. list.add(allteams, i);
  133. map.add(lifes, i, team_lifes);
  134. minigame.displayAll(98 - i, string.concat(map.get(teamcolortext2, i), " Lifes: ", string.number(team_lifes)));
  135. }
  136. }
  137. minigame.displayAll(98 - i, sb.getSpacer());
  138. for(i = 0; i < list.getSize(player_list); i++) {
  139. p = player.get(list.getIndex(player_list, i));
  140. p_name = player.getName(p);
  141. msg.prefix(p, gamename, "The game has started.");
  142. team = map.get(players, p_name);
  143. giveSnowballs(p);
  144. player.setHunger(p, 20);
  145. player.setSaturation(p, 5);
  146. player.setGamemode(p, "SURVIVAL");
  147. player.setFly(p, false);
  148. entity.teleport(p, map.get(spawnlocs, team));
  149. color = map.get(colorcodes, team);
  150. player.action(p, text.new(string.concat(color, "Team ", map.get(teamcolortext2, team))));
  151. equipPlayer(p, team);
  152. minigame.setTabName(p, game_tab, color);
  153. }
  154. sgoto(40, "loop");
  155. @checkgame
  156. wait();
  157. if(event == "living_death") {
  158. if(!isPlayer(living_entity)) {
  159. goto("checkgame");
  160. }
  161. player = living_entity;
  162. }
  163. if(event == "entity_damage") {
  164. if(!isPlayer(entity)) {
  165. goto("checkgame");
  166. }
  167. player = entity;
  168. }
  169. if(event == "projectile_hit") {
  170. if(shooter == null || !isPlayer(shooter)) {
  171. goto("checkgame");
  172. }
  173. player = shooter;
  174. }
  175. if(player.hasMinigameId(player, script_id)) {
  176. player_name = player.getName(player);
  177. ignoreGoto(event);
  178. }
  179. goto("checkgame");
  180. @projectile_hit
  181. if(entity_hit != null) {
  182. if(!isPlayer(entity_hit)) {
  183. goto("checkgame");
  184. }
  185. entity_hit_name = player.getName(entity_hit);
  186. if(!list.contains(player_list, player.getUuid(entity_hit))) {
  187. minigame.msgAll(string.concat("Illegal Player ", entity_hit_name));
  188. goto("checkgame");
  189. }
  190. if(!list.contains(player_list, player.getUuid(player))) {
  191. minigame.msgAll(string.concat("Illegal Player ", entity_hit_name));
  192. goto("checkgame");
  193. }
  194. player_id = player.getId(entity_hit);
  195. if(list.contains(spawn_prot, player_id)) {
  196. goto("checkgame");
  197. }
  198. team = map.get(players, player_name);
  199. hit_team = map.get(players, entity_hit_name);
  200. if(team == hit_team) {
  201. goto("checkgame"); //Friendly-Firedly-Fire
  202. }
  203. player.clearInventory(entity_hit);
  204. giveSnowballs(entity_hit);
  205. map.add(kills_map, player_name, map.get(kills_map, player_name) + 1);
  206. map.add(deaths_map, entity_hit_name, map.get(deaths_map, entity_hit_name) + 1);
  207. new_lifes = map.get(lifes, hit_team) - 1;
  208. map.add(lifes, hit_team, new_lifes);
  209. minigame.displayAll(98 - hit_team, string.concat(map.get(teamcolortext2, hit_team), " Lifes: ", string.number(new_lifes)));
  210. loc = map.get(spawnlocs, hit_team);
  211. entity.teleport(entity_hit, loc);
  212. if(new_lifes == 0) {
  213. colorgameover(hit_team);
  214. }
  215. list.add(spawn_prot, player_id);
  216. sgoto(80, "remove_prot");
  217. }
  218. goto("checkgame");
  219. @remove_prot
  220. list.removeIndex(spawn_prot, 0);
  221. goto("checkgame");
  222. @player_post_respawn
  223. team = map.get(players, player_name);
  224. loc = map.get(spawnlocs, team);
  225. entity.teleport(player, loc);
  226. giveSnowballs(player);
  227. goto("checkgame");
  228. @living_death
  229. list.clear(drops);
  230. goto("checkgame");
  231. @entity_damage
  232. damage_type = damage.getType(damage_source);
  233. if(damage_type == "wither") {
  234. goto("checkgame");
  235. }
  236. cancel = true;
  237. goto("checkgame");
  238. @player_drop
  239. cancel = true;
  240. goto("checkgame");
  241. @block_break
  242. @block_place
  243. cancel = true;
  244. goto("checkgame");
  245. @loop
  246. for(i = 0; i < list.getSize(player_list); i++) {
  247. p = player.get(list.getIndex(player_list, i));
  248. p_name = player.getName(p);
  249. team = map.get(players, p_name);
  250. player.setHunger(p, 20);
  251. player.setSaturation(p, 5);
  252. player.action(p, text.new(string.concat(map.get(colorcodes, team), "Team ", map.get(teamcolortext2, team))));
  253. equipPlayer(p, team);
  254. }
  255. sgoto(40, "loop");
  256. goto("checkgame");
  257. @player_giveup
  258. @player_quit
  259. team = map.get(players, player_name);
  260. color = map.get(colorcodes, team);
  261. minigame.speakAll(gamename, string.concat(color, player_name, " §ehas left the game."));
  262. teamlist = map.get(team_lists, team);
  263. list.remove(teamlist, player_name);
  264. map.remove(players, player_name);
  265. script = script.getFromId(script_id);
  266. minigame.kickplayer(script, player);
  267. if(list.getSize(teamlist) == 0) {
  268. colorgameover(team);
  269. }
  270. goto("checkgame");
  271. function colorgameover(team) {
  272. tempcolortext = map.get($teamcolortext, team);
  273. minigame.speakAll($gamename, string.concat("§cThe ", tempcolortext, " §cTeam has been eliminated."));
  274. list.remove($allteams, team);
  275. if(list.getSize($allteams) == 1) {
  276. $endtime = time.getMillis();
  277. kickteam(team, true, false);
  278. win_team = list.getIndex($allteams, 0);
  279. kickteam(win_team, true, true);
  280. minigame.clearItems($middleloc, $radius);
  281. script = script.getFromId($script_id);
  282. minigame.term(script, $gamesignloc);
  283. term();
  284. }
  285. kickteam(team, false, false);
  286. }
  287. function kickteam(team, show_time, won) {
  288. teamlist = map.get($team_lists, team);
  289. for(i = 0; i < list.getSize(teamlist); i++) {
  290. p_name = list.getIndex(teamlist, i);
  291. p = read.player(p_name);
  292. showstats(p, show_time, won);
  293. script = script.getFromId($script_id);
  294. minigame.kickplayer(script, p);
  295. if(won) {
  296. //money.addBoost(p, 128);
  297. } else {
  298. //money.addBoost(p, 32);
  299. }
  300. }
  301. }
  302. function showstats(player, show_time, won) { //Player player, Boolean show_time, Boolean won
  303. player_name = player.getName(player);
  304. player_id = player.getId(player);
  305. last_record = ranking.getPoints($rankingtable, player_id);
  306. playedgames = minigame.getPlayed(player_id, $game_short) + 1;
  307. minigame.setPlayed(player_id, $game_short, playedgames);
  308. kills = map.get($kills_map, player_name);
  309. record = last_record + kills;
  310. ranking.setPoints($rankingtable, player_id, record);
  311. deaths = map.get($deaths_map, player_name);
  312. wongames = minigame.getWon(player, "snow");
  313. if(won) {
  314. wongames++;
  315. minigame.setWon(player, "snow", wongames);
  316. }
  317. minigame.statsHeader(player, $gamename, "§e");
  318. if(show_time) {
  319. time = ($endtime - $starttime) / 1000;
  320. minigame.statsLine(player, "§e", "Time", string.concat(string.number(math.rounddown(time / 60)), " min ", string.number(math.round(time % 60)), " s"));
  321. }
  322. minigame.statsLine(player, "§e", "Kills", string.number(kills));
  323. minigame.statsLine(player, "§e", "Deaths", string.number(deaths));
  324. if(deaths != 0) {
  325. kd = kills / deaths;
  326. minigame.statsLine(player, "§e", "K/D", string.number(math.roundcomma(kd, 2)));
  327. }
  328. minigame.statsLine(player, "§e", "Won games", string.number(wongames));
  329. minigame.statsLine(player, "§e", "Played games", string.number(playedgames));
  330. if(playedgames != 0) {
  331. minigame.statsLine(player, "§e", "Win ratio", string.concat(string.number(math.roundComma((wongames / playedgames) * 100, 2)), "%"));
  332. }
  333. }
  334. function giveSnowballs(player) {
  335. player.giveItem(player, $snow_stack);
  336. player.giveItem(player, $snow_stack);
  337. player.giveItem(player, $snow_stack);
  338. player.giveItem(player, $snow_stack);
  339. player.giveItem(player, $snow_stack);
  340. player.giveItem(player, $snow_stack);
  341. player.giveItem(player, $snow_stack);
  342. player.giveItem(player, $snow_stack);
  343. player.giveItem(player, $snow_stack);
  344. }
  345. function equipPlayer(player, team) {
  346. if(living.getEquip(player, slot.getHead()) == null) {
  347. color = map.get($cloth_color, team);
  348. living.setEquip(player, slot.getHead(), read.item(string.concat("{id:'minecraft:leather_helmet',Count:1b,tag:{display:{color:", color, "}}}")));
  349. living.setEquip(player, slot.getChest(), read.item(string.concat("{id:'minecraft:leather_chestplate',Count:1b,tag:{display:{color:", color, "}}}")));
  350. living.setEquip(player, slot.getLegs(), read.item(string.concat("{id:'minecraft:leather_leggings',Count:1b,tag:{display:{color:", color, "}}}")));
  351. living.setEquip(player, slot.getFeet(), read.item(string.concat("{id:'minecraft:leather_boots',Count:1b,tag:{display:{color:", color, "}}}")));
  352. }
  353. }
  354. function minigame.canStartIndiv() {
  355. if(list.getSize($waiters) > 0) {
  356. return true;
  357. }
  358. player_list = minigame.getPlayers(script_id);
  359. all_size = list.getSize(player_list);
  360. for(i = 0; i < $numberofteams; i++) {
  361. teamlist = map.get($team_lists, i);
  362. team_size = list.getSize(teamlist);
  363. if(team_size == all_size) {
  364. return false;
  365. }
  366. }
  367. return true;
  368. }