inverting.txt 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. rankingtable = string.concat("invertranks", map);
  2. game_short = string.concat("inv", map);
  3. sign.started(gamesignloc);
  4. gamename = "§9Inverting";
  5. x1 = loc.getX(edge1);
  6. y1 = loc.getY(edge1);
  7. z1 = loc.getZ(edge1);
  8. x2 = loc.getX(edge2);
  9. y2 = loc.getY(edge2);
  10. z2 = loc.getZ(edge2);
  11. edgeblock_1 = block.get(edge1);
  12. event.load("block_break");
  13. event.load("block_click");
  14. event.load("player_giveup");
  15. event.load("player_quit");
  16. event.load("minigame_join");
  17. event.load("entity_damage");
  18. @wait
  19. wait();
  20. if(event == "entity_damage") {
  21. if(!isPlayer(entity)) {
  22. goto("wait");
  23. }
  24. player = entity;
  25. }
  26. if(!player.hasMinigameId(player, script_id)) {
  27. goto("wait");
  28. }
  29. if(event == "entity_damage") {
  30. cancel = true;
  31. goto("wait");
  32. }
  33. if(event == "minigame_join") {
  34. entity.teleport(player, tploc);
  35. living.cleareffects(player);
  36. living.setHealth(player, 20);
  37. player.setHunger(player, 20);
  38. player.setSaturation(player, 5);
  39. player.clearInventory(player);
  40. player.setGamemode(player, "SURVIVAL");
  41. player.setFly(player, true);
  42. lapis_block_type = material.get("minecraft:lapis_block");
  43. redstone_block_type = material.get("minecraft:redstone_block");
  44. gosub("newfield");
  45. fields = xlength * zlength;
  46. goto("wait");
  47. }
  48. if(event == "player_giveup" || event == "player_quit") {
  49. player.setFly(player, false);
  50. script = script.getFromId(script_id);
  51. sb.remove(player, 97);
  52. sb.remove(player, 98);
  53. sb.remove(player, 99);
  54. minigame.kickPlayer(script, player);
  55. minigame.term(script, gamesignloc);
  56. term();
  57. }
  58. if(event == "block_break") {
  59. cancel = true;
  60. goto("wait");
  61. }
  62. if(event == "block_click") {
  63. if(block == null) {
  64. goto("wait");
  65. }
  66. if(slot.isOffHand(hand)) {
  67. goto("wait");
  68. }
  69. block_loc = block.getLocation(block);
  70. tempx = loc.getBlockX(block_loc);
  71. tempy = loc.getBlockY(block_loc);
  72. tempz = loc.getBlockZ(block_loc);
  73. if(tempy != y1) {
  74. goto("wait");
  75. }
  76. if(tempx < x1 || tempx > x2) {
  77. goto("wait");
  78. }
  79. if(tempz < z1 || tempz > z2) {
  80. goto("wait");
  81. }
  82. clicked++;
  83. sb.add(player, 98, string.concat("Swaps: ", string.number(clicked)));
  84. if(inverting(block)) {
  85. goto("solved");
  86. }
  87. }
  88. goto("wait");
  89. @newfield
  90. sb.add(player, 99, gamename);
  91. clicked = 0;
  92. sb.add(player, 98, string.concat("Swaps: ", string.number(clicked)));
  93. sb.add(player, 97, sb.getSpacer());
  94. renewing = true;
  95. for(i = 0; i <= iterations; i++) {
  96. centerblock = block.get(loc.new(gamesworld, math.random(x1, x2), y1, math.random(z1, z2)));
  97. if(inverting(centerblock)) {
  98. goto("solved");
  99. }
  100. }
  101. renewing = false;
  102. return;
  103. function inverting(centerblock) {
  104. if($classic) {
  105. invertblock(centerblock);
  106. invertblock(block.mod(centerblock, -1, 0, 0));
  107. invertblock(block.mod(centerblock, 1, 0, 0));
  108. invertblock(block.mod(centerblock, 0, 0, 1));
  109. invertblock(block.mod(centerblock, 0, 0, -1));
  110. } else {
  111. for(x = -1; x <= 1; x++) {
  112. for(z = -1; z <= 1; z++) {
  113. invertblock(block.mod(centerblock, x, 0, z));
  114. }
  115. }
  116. }
  117. if(!$renewing) {
  118. i = 0;
  119. edgetype1 = block.getType($edgeblock_1);
  120. for(x = 0; x <= $xlength - 1; x++) {
  121. for(z = 0; z <= $zlength - 1; z++) {
  122. if(block.getType(block.mod($edgeblock_1, x, 0, z)) != edgetype1) {
  123. return false;
  124. }
  125. i++;
  126. }
  127. }
  128. return i == $fields;
  129. }
  130. return false;
  131. }
  132. function invertblock(block) {
  133. if(block.getType(block) == $lapis_block_type) {
  134. block.setMaterial(block, $redstone_block_type);
  135. } elseif(block.getType(block) == $redstone_block_type) {
  136. block.setMaterial(block, $lapis_block_type);
  137. }
  138. }
  139. @solved
  140. player_id = player.getId(player);
  141. last_record = ranking.getPoints(rankingtable, player_id);
  142. playedgames = minigame.getPlayed(player_id, game_short) + 1;
  143. minigame.setPlayed(player_id, game_short, playedgames);
  144. if(last_record == 0 || clicked < last_record) {
  145. if(last_record != 0) {
  146. diff = last_record - clicked;
  147. }
  148. last_record = clicked;
  149. }
  150. ranking.setPoints(rankingtable, player_id, last_record);
  151. minigame.statsHeader(player, gamename, "§e");
  152. minigame.statsLine(player, "§e", "Swaps", string.number(clicked));
  153. minigame.statsLine(player, "§e", "Your record", string.number(last_record));
  154. if(diff != null) {
  155. msg.string(player, string.concat(" §e- §rBeat own record by §e", string.number(diff)));
  156. diff = null;
  157. }
  158. minigame.statsLine(player, "§e", "Played games", string.number(playedgames));
  159. money.addBoost(player, money);
  160. gosub("newfield");
  161. goto("wait");