knockfight.txt 7.4 KB

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