snowgame.txt 11 KB

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