jumpnrun.txt 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. event.load("entity_damage");
  2. event.load("player_move");
  3. event.load("player_quit");
  4. event.load("player_giveup");
  5. event.load("minigame_join");
  6. rankingtable = "jumpranks";
  7. game_short = "jr";
  8. maxplayers = 1;
  9. gamesignloc = minigame.getSignLoc("jrmap");
  10. sign.started(gamesignloc);
  11. gamename = "§aJump'n'Run";
  12. jump_sound = sound.get("ENTITY_ITEM_PICKUP");
  13. sound_category_ambient = sound.getCategory("AMBIENT");
  14. air = material.getAir();
  15. color_list = list.new();
  16. list.add(color_list, "blue");
  17. list.add(color_list, "red");
  18. list.add(color_list, "yellow");
  19. list.add(color_list, "green");
  20. list.add(color_list, "orange");
  21. list.add(color_list, "purple");
  22. list.add(color_list, "white");
  23. list.add(color_list, "black");
  24. list.add(color_list, "light_gray");
  25. list.add(color_list, "gray");
  26. list.add(color_list, "magenta");
  27. list.add(color_list, "brown");
  28. list.add(color_list, "lime");
  29. list.add(color_list, "cyan");
  30. list.add(color_list, "light_blue");
  31. list.add(color_list, "pink");
  32. wool_list = list.new();
  33. concrete_list = list.new();
  34. iter = list.iterator(color_list);
  35. while(hasNext(iter)) {
  36. color_string = next(iter);
  37. list.add(wool_list, material.get(string.concat(color_string, "_wool")));
  38. list.add(concrete_list, material.get(string.concat(color_string, "_concrete")));
  39. }
  40. @wait
  41. wait();
  42. if(event == "entity_damage") {
  43. if(!isPlayer(entity)) {
  44. goto("wait");
  45. }
  46. player = entity;
  47. }
  48. if(player.hasMinigameId(player, script_id)) {
  49. ignoreGoto(event);
  50. }
  51. goto("wait");
  52. @minigame_join
  53. player_record = ranking.getPoints(rankingtable, player);
  54. server_record = ranking.getPointsFromRank(rankingtable, 1, "DESC", null);
  55. goto("newgame");
  56. @newgame
  57. index = math.random(0, 15);
  58. wool_block = list.getIndex(wool_list, index);
  59. concrete_block = list.getIndex(concrete_list, index);
  60. points = 0;
  61. sb.add(player, 99, "§6Jump'n'Run");
  62. sb.add(player, 98, string.concat("Your Points: §e", string.number(points)));
  63. sb.add(player, 95, sb.getSpacer());
  64. updateDisplayRecords(player, player_record, server_record);
  65. player.setGamemode(player, "ADVENTURE");
  66. title.send(player, text.new(gamename), text.new(""));
  67. player.clearInventory(player);
  68. living.setHealth(player, 20);
  69. player.setHunger(player, 20);
  70. player.setSaturation(player, 5);
  71. x = math.random(5000, 5100);
  72. z = math.random(5000, 5100);
  73. previous_loc = loc.new(world.getGames(), x, 15, z);
  74. entity.teleport(player, loc.mod(previous_loc, 0.5, 1, 0.5));
  75. previous_block = block.get(previous_loc);
  76. goto("newblock");
  77. @newblock
  78. a = getRelativeJumpCoords();
  79. new_block = getNewLoc(previous_block, a[0], a[1], a[2]);
  80. block.setMaterial(new_block, wool_block);
  81. block.setMaterial(previous_block, concrete_block);
  82. new_loc = block.getLocation(new_block);
  83. sound.spawn(new_loc, jump_sound, sound_category_ambient);
  84. setMoveEvent(new_loc, player.getUuid(player));
  85. goto("wait");
  86. @entity_damage
  87. cancel = true;
  88. damage_source_type = damage.getType(damage_source);
  89. if(damage_source_type == "outOfWorld") {
  90. //sollte der spieler durch das auffangnetz MoveData:fall_id durchfallen und im Void landen
  91. resetBlocks(previous_block, new_block);
  92. showStats(player, points);
  93. goto("player_giveup");
  94. }
  95. goto("wait");
  96. @player_move
  97. if(id == fall_id) {
  98. resetBlocks(previous_block, new_block);
  99. showStats(player, points);
  100. goto("newgame");
  101. }
  102. block.setMaterial(previous_block, air);
  103. previous_block = new_block;
  104. points++;
  105. sb.add(player, 98, string.concat("Your Points: §e", string.number(points)));
  106. player.setHunger(player, 20);
  107. player.setSaturation(player, 5);
  108. goto("newblock");
  109. @player_giveup
  110. @player_quit
  111. resetBlocks(previous_block, new_block);
  112. showStats(player, points);
  113. player.setGamemode(player, "SURVIVAL");
  114. script = script.getFromId(script_id);
  115. minigame.kickPlayer(script, player);
  116. minigame.term(script, gamesignloc);
  117. term();
  118. function showStats(player, points) {
  119. minigame.addPlayed(player, $game_short, 1);
  120. minigame.statsHeader(player, $gamename, "§e");
  121. minigame.statsLine(player, "§e", "Points", string.number(points));
  122. if($player_record < points) {
  123. ranking.setPoints($rankingtable, player, points);
  124. minigame.statsLine(player, "§e", "Beat own record by", string.number(points - $player_record));
  125. $player_record = points;
  126. }
  127. if($player_record > $server_record) {
  128. $server_record = $player_record;
  129. }
  130. minigame.statsLine(player, "§e", "Your Record", string.number($player_record));
  131. minigame.statsLine(player, "§e", "Server Record", string.number($server_record));
  132. //money.addBoost(player, math.round(points));
  133. }
  134. function resetBlocks(old_block, new_block) {
  135. block.setMaterial(old_block, $air);
  136. block.setMaterial(new_block, $air);
  137. }
  138. function updateDisplayRecords(player, player_record, server_record) {
  139. sb.add(player, 97, string.concat("Your Record: §e", string.number(player_record)));
  140. sb.add(player, 96, string.concat("Server Record: §e", string.number(server_record)));
  141. }
  142. function setMoveEvent(loc, player_uuid) {
  143. move_loc1 = loc.mod(loc, 0, 1, 0);
  144. move_loc2 = loc.mod(loc, 1, 2, 1);
  145. event.addMoveData(move_loc1, move_loc2, -1, -1, player_uuid);
  146. if($fall_id != null) {
  147. event.removeMoveData($fall_id);
  148. }
  149. fall_loc1 = loc.mod(move_loc1, -10, -10, -10);
  150. fall_loc2 = loc.mod(move_loc1, 10, -2, 10);
  151. $fall_id = event.addMoveData(fall_loc1, fall_loc2, -1, -1, player_uuid);
  152. }
  153. function getNewLoc(old_block, x, y, z) {
  154. new_block = block.mod(old_block, x, y, z);
  155. if(!block.isAir(new_block)) {
  156. new_block = getNewLoc(old_block, x, y, z);
  157. }
  158. new_loc = block.getLocation(new_block);
  159. if(loc.getY(new_loc) > 319) {
  160. loc.setY(new_loc, 319);
  161. }
  162. return new_block;
  163. }
  164. function getRelativeJumpCoords() {
  165. y = math.random(0, 1);
  166. x = math.random(0, 4);
  167. if(y == 0) {
  168. if(x < 2) {
  169. z = math.random(2, 4);
  170. } elseif(x < 4) {
  171. z = math.random(0, 4);
  172. } elseif(x == 4) {
  173. z = math.random(0, 3);
  174. }
  175. } else {
  176. if(x == 0) {
  177. z = math.random(2, 4);
  178. } elseif(x == 1) {
  179. z = math.random(2, 3);
  180. } elseif(x < 4) {
  181. z = math.random(0, 3);
  182. } elseif(x == 4) {
  183. z = 0;
  184. }
  185. }
  186. x = randomSign(x);
  187. z = randomSign(z);
  188. a = array.new(3);
  189. a[0] = x;
  190. a[1] = y;
  191. a[2] = z;
  192. return a;
  193. }
  194. function randomSign(value) {
  195. sign = math.random(0, 1);
  196. if(sign == 0) {
  197. return value *= -1;
  198. }
  199. return value;
  200. }