portal_core.txt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. sign.started(gamesignloc);
  2. event.load("player_move");
  3. event.load("entity_damage");
  4. event.load("player_quit");
  5. event.load("player_giveup");
  6. event.load("minigame_join");
  7. event.load("block_break");
  8. gamename = "§aPortal";
  9. maxplayers = 1;
  10. //----------------------------------------------------
  11. @wait
  12. wait();
  13. if(event == "entity_damage") {
  14. if(!isPlayer(entity)) {
  15. goto("wait");
  16. }
  17. player = entity;
  18. }
  19. if(!player.hasMinigameId(player, script_id)) {
  20. goto("wait");
  21. }
  22. if(event == "minigame_join"){
  23. player.clearInventory(player);
  24. entity.teleport(player, Start_Pos);
  25. }
  26. if(event == "player_move"){
  27. move_type = map.getOrDefault(id_effects, id, "none");
  28. if(move_type == "speed_gel"){
  29. gel.speed(player);
  30. }
  31. elseif(move_type == "jump_gel"){
  32. gel.jump(player);
  33. }
  34. elseif(move_type == "portal"){
  35. portal.enter(player, id);
  36. }
  37. elseif(move_type == "end"){
  38. game_stop("You did it!");
  39. }
  40. }
  41. if(event == "block_break"){
  42. cancel = true;
  43. goto("wait");
  44. }
  45. if(event == "entity_damage") {
  46. cancel = true;
  47. goto("wait");
  48. }
  49. if(event == "player_quit"){
  50. game_stop(null);
  51. }
  52. if(event == "player_giveup"){
  53. game_stop("You have left the game");
  54. }
  55. goto("wait");
  56. //----------------------------------------------------
  57. function gel.speed(player){
  58. living.addEffect(player,"SPEED",5,3,true);
  59. }
  60. function gel.jump(player){
  61. if(!player.isSneaking(player)){
  62. motion = entity.getMotion(player);
  63. look = entity.getLook(player);
  64. x = motion[0]+look[0]/3;
  65. y = 1.01;
  66. z = motion[2]+look[2]/3;
  67. entity.setMotion(player, x, y, z);
  68. }
  69. }
  70. function portal.create(to_loc, mid_loc, Direction_in, Direction_out){
  71. array = array.new(4);
  72. array[0] = Direction_in;//east // south
  73. array[1] = Direction_out;//east -> +X, west -> -X, south -> +Z, north -> -Z
  74. array[2] = to_loc;
  75. array[3] = mid_loc;
  76. return array;
  77. }
  78. function portal.enter(player, id){
  79. array = map.get($portals, id);
  80. Direction_in = array[0];
  81. Direction_out = array[1];
  82. to_loc = array[2];
  83. mid_loc = array[3];
  84. player_loc = entity.getLocation(player);
  85. player_yaw = loc.getYaw(player_loc);
  86. if(Direction_in == "east"){
  87. player_X = loc.getX(player_loc);
  88. mid_X = loc.getX(mid_loc);
  89. dif = mid_X - player_X;
  90. rel_yaw = player_yaw+90;
  91. }
  92. elseif(Direction_in == "south"){
  93. player_Z = loc.getZ(player_loc);
  94. mid_Z = loc.getZ(mid_loc);
  95. dif = mid_Z - player_Z;
  96. rel_yaw = player_yaw;
  97. }
  98. if(Direction_out == "east"){
  99. tp_loc = loc.mod(to_loc, 2*dif, 0, 0);
  100. rel_yaw += -90;
  101. }
  102. elseif(Direction_out == "south"){
  103. tp_loc = loc.mod(to_loc, 0, 0, 2*dif);
  104. }
  105. elseif(Direction_out == "west"){
  106. tp_loc = loc.mod(to_loc, -2*dif, 0, 0);
  107. rel_yaw += 90;
  108. }
  109. elseif(Direction_out == "north"){
  110. tp_loc = loc.mod(to_loc, 0, 0, -2*dif);
  111. rel_yaw += 180;
  112. }
  113. if(rel_yaw > 180){
  114. rel_yaw -= 360;
  115. }elseif(rel_yaw <= -180){
  116. rel_yaw += 360;
  117. }
  118. loc.setYaw(tp_loc, rel_yaw);
  119. loc.setPitch(tp_loc, loc.getPitch(player_loc));
  120. entity.teleport(player, tp_loc);
  121. }
  122. function game_stop(message){
  123. if(message != null){
  124. msg.prefix($player, $gamename, message);
  125. }
  126. script = script.getFromId($script_id);
  127. minigame.kickPlayer(script, $player);
  128. minigame.term(script, $gamesignloc);
  129. term();
  130. }