knockfight.txt 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. rankingtable = "knockranks";
  2. game_short = "knock";
  3. event.load("player_toss");
  4. event.load("function_key");
  5. event.load("living_hurt");
  6. kf_skills = list.new();
  7. addKnockfightSkill("Speed", "km:skill44", 30);
  8. addKnockfightSkill("JumpBoost", "km:skill15", 30);
  9. addKnockfightSkill("Slowness", "km:skill53", 30);
  10. addKnockfightSkill("Blindness", "km:skill55", 30);
  11. addKnockfightSkill("Kick", "km:skill9", 60);
  12. resettime = 180; //Zeit in Ticks, wie lange der letzte Schläger gehalten wird
  13. stick = read.item("minecraft:stick");
  14. enchantment.add(enchantment.get("minecraft:knockback"), stick, 2);
  15. resetblocks = list.new();
  16. gamename = "§cKnockFight";
  17. gosub("setstart");
  18. goto("simplelobby");
  19. @finalstart
  20. player_list = minigame.getPlayers(script_id);
  21. size = list.getSize(player_list);
  22. cooldown_map = map.new();
  23. lifes = map.new();
  24. lastdamage = map.new();
  25. knockedcounter = map.new();
  26. resetlist = list.new();
  27. for(i = 0; i < size; i++) {
  28. p_uuid = list.getIndex(player_list, i);
  29. p = player.get(p_uuid);
  30. msg.prefix(p, gamename, "The game has started.");
  31. resetplayer(p);
  32. entity.teleport(p, list.getIndex(startlocs, i));
  33. player.setGamemode(p, "survival");
  34. player.setFly(p, false);
  35. map.add(knockedcounter, p_uuid, 0);
  36. player.giveItem(p, stick);
  37. map.add(lastdamage, p_uuid, null);
  38. map.add(lifes, p_uuid, startlifes);
  39. setStackIcons(p);
  40. status.add(p, 0, "§cCooldowns");
  41. }
  42. gosub("updatedisplay");
  43. @checkgame
  44. wait();
  45. if(event == "living_hurt") {
  46. if(!isPlayer(living_entity)) {
  47. goto("checkgame");
  48. }
  49. player = living_entity;
  50. }
  51. if(player.hasMinigameId(player, script_id)) {
  52. player_name = player.getName(player);
  53. ignoreGoto(event);
  54. }
  55. goto("checkgame");
  56. @player_toss
  57. cancel = true;
  58. player.giveItem(player, item);
  59. goto("checkgame");
  60. @living_hurt
  61. player_uuid = player.getUuid(player);
  62. damage_type = damage.getType(damage_source);
  63. if(damage_type == "player") {
  64. sec_player = player.getFromDamageSource(damage_source);
  65. if(player.hasMinigameId(sec_player, script_id)) {
  66. cancel = true;
  67. player.setSaturation(sec_player, 5);
  68. map.add(lastdamage, player_uuid, player.getUuid(sec_player));
  69. list.add(resetlist, player_uuid);
  70. sgoto(resettime, "resetdamager");
  71. }
  72. goto("checkgame");
  73. }
  74. if(damage_type == "fall") {
  75. cancel = true;
  76. goto("checkgame");
  77. }
  78. if(damage_type == "outOfWorld") {
  79. cancel = true;
  80. player_uuid = player.getUuid(player);
  81. lastdamager_uuid = map.get(lastdamage, player_uuid);
  82. if(lastdamager_uuid == null) {
  83. minigame.speakAll(gamename, concat("§6", player_name, " §rfell."));
  84. } else {
  85. minigame.speakAll(gamename, concat("§6", player_name, " §rwas knocked down by §6", player.getName(lastdamager_uuid), "."));
  86. map.add(knockedcounter, lastdamager_uuid, map.get(knockedcounter, lastdamager_uuid) + 1);
  87. }
  88. entity.teleport(player, list.getIndex(startlocs, math.random(0, list.getSize(startlocs) - 1)));
  89. new_lifes = map.get(lifes, player_uuid) - 1;
  90. map.add(lifes, player_uuid, new_lifes);
  91. gosub("updatedisplay");
  92. if(new_lifes == 0) {
  93. minigame.speakAll(gamename, concat("§6", player_name, " §rhas been eliminated."));
  94. goto("leavegame");
  95. }
  96. }
  97. goto("checkgame");
  98. @block_break
  99. @block_place
  100. cancel = true;
  101. goto("checkgame");
  102. @function_key
  103. if(key > list.getSize(kf_skills)) {
  104. goto("checkgame");
  105. }
  106. skill = list.getIndex(kf_skills, key - 1);
  107. skill_name = skill[0];
  108. last_exe_time = getKfLastExeTime(player, skill_name);
  109. needed_cooldown = skill[2];
  110. now_time = time.getMillis();
  111. diff_time = math.roundUp((now_time - last_exe_time) / 1000);
  112. if(diff_time < needed_cooldown) {
  113. player.action(player, concat("§a", text.number(needed_cooldown - diff_time), "s cooldown left"));
  114. goto("checkgame");
  115. }
  116. if(key == 1) {
  117. entity.addEffect(player, "speed", 200, 1);
  118. } elseif(key == 2) {
  119. entity.addEffect(player, "jump_boost", 200, 2);
  120. } elseif(key == 3) {
  121. iter = list.iterator(player_list);
  122. while(hasNext(iter)) {
  123. p = player.get(next(iter));
  124. if(p != player) {
  125. entity.addEffect(p, "slowness", 160, 1);
  126. }
  127. }
  128. } elseif(key == 4) {
  129. iter = list.iterator(player_list);
  130. while(hasNext(iter)) {
  131. p = player.get(next(iter));
  132. if(p != player) {
  133. entity.addEffect(p, "blindness", 160, 1);
  134. }
  135. }
  136. } elseif(key == 5) {
  137. opp = player.getTargetEntity(player, 4, "net.minecraft.entity.player.PlayerEntity");
  138. if(opp == null) {
  139. player.action(player, "§aNo enemy targeted.");
  140. goto("checkgame");
  141. }
  142. array = entity.getLook(player);
  143. x = array[0] * 2;
  144. z = array[2] * 2;
  145. entity.throw(opp, x, 1, z);
  146. }
  147. setKfLastExeTime(player, skill_name);
  148. status.addTimed(player, key, needed_cooldown * 20, concat("Cooldown ", skill_name));
  149. minigame.speakAll(gamename, concat("§6", player_name, "§r used §2", skill_name, "."));
  150. goto("checkgame");
  151. @resetdamager
  152. map.add(lastdamage, list.getIndex(resetlist, 0), null);
  153. list.removeIndex(resetlist, 0);
  154. goto("checkgame");
  155. @player_giveup
  156. @player_logout
  157. minigame.speakAll(gamename, concat("§6", player_name, " §rhas left the game."));
  158. @leavegame
  159. script = script.getFromId(script_id);
  160. minigame.kickPlayer(script, player);
  161. gosub("updatedisplay");
  162. showstats(player, false);
  163. if(list.getSize(player_list) < minplayers) {
  164. winner = player.get(list.getIndex(player_list, 0));
  165. showstats(winner, true);
  166. minigame.kickPlayer(script, winner);
  167. minigame.term(script, gamesignloc);
  168. term();
  169. }
  170. goto("checkgame");
  171. function setKfLastExeTime(player, skill_name) {
  172. player_uuid = player.getUuid(player);
  173. player_map = map.getOrDefault($cooldown_map, player_uuid, map.new());
  174. map.add(player_map, skill_name, time.getMillis());
  175. map.add($cooldown_map, player_uuid, player_map);
  176. }
  177. function getKfLastExeTime(player, skill_name) {
  178. player_map = map.get($cooldown_map, player.getUuid(player));
  179. if(player_map == null) {
  180. return 0;
  181. }
  182. return map.getOrDefault(player_map, skill_name, 0);
  183. }
  184. function setStackIcons(player) {
  185. for(h = 0; h < list.getSize($kf_skills); h++) {
  186. skill = list.getIndex($kf_skills, h);
  187. icon = skill[1];
  188. stacks.set(player, h, icon);
  189. }
  190. stacks.setActive(player, true);
  191. }
  192. function addKnockfightSkill(skill_name, icon, cooldown) {
  193. skill = array.new(3);
  194. skill[0] = skill_name;
  195. skill[1] = icon;
  196. skill[2] = cooldown; //s
  197. list.add($kf_skills, skill);
  198. }
  199. function showstats(player, won) { //showstats(Player player, Boolean won)
  200. player_name = player.getName(player);
  201. player_id = player.getId(player);
  202. playedgames = minigame.getPlayed(player_id, $game_short) + 1;
  203. minigame.setPlayed(player_id, $game_short, playedgames);
  204. last_record = ranking.getPoints($rankingtable, player_id);
  205. knockedplayers = map.get($knockedcounter, player.getUuid(player));
  206. points = last_record + knockedplayers;
  207. ranking.setPoints($rankingtable, player_id, points);
  208. wongames = minigame.getWon(player, "knock");
  209. if(won) {
  210. wongames++;
  211. minigame.setWon(player, "knock", wongames);
  212. winningtext = "Yes";
  213. } else {
  214. winningtext = "No";
  215. }
  216. minigame.statsHeader(player, $gamename, "§e");
  217. minigame.statsLine(player, "§e", "Kills", text.number(knockedplayers));
  218. minigame.statsLine(player, "§e", "Won games", text.number(wongames));
  219. minigame.statsLine(player, "§e", "Played games", text.number(playedgames));
  220. if(playedgames != 0) {
  221. minigame.statsLine(player, "§e", "Win ratio", concat(text.number(math.roundComma((wongames / playedgames) * 100, 2)), "%"));
  222. }
  223. minigame.statsLine(player, "§e", "Won", winningtext);
  224. }
  225. @updatedisplay
  226. minigame.displayResetAll();
  227. minigame.displayAll(0, gamename);
  228. for(i = 0; i < list.getSize(player_list); i++) {
  229. p_uuid = list.getIndex(player_list, i);
  230. minigame.displayAll(i + 1, concat("§c", text.number(map.get(lifes, p_uuid)), " §r", player.getName(p_uuid)));
  231. }
  232. return;