123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- sign.started(gamesignloc);
- event.load("block_click");
- event.load("entity_damage");
- event.load("player_move");
- event.load("player_quit");
- event.load("player_giveup");
- event.load("minigame_join");
- event.load("block_break");
- games = world.getGames();
- gamename = "§a4D-Jump'n'Run";
- maxplayers = 1;
- air_material = material.get("AIR");
- x1 = loc.getX(Edge_1);
- x2 = loc.getX(Edge_2);
- x3 = loc.getX(Edge_3);
- x4 = x3 + x2 - x1;
- Spawn_X = loc.getX(Start_Pos)-0.5;
- y1 = loc.getY(Edge_1);
- y2 = loc.getY(Edge_2);
- y3 = loc.getY(Edge_3);
- y4 = y3 + y2 - y1;
- Spawn_Y = loc.getY(Start_Pos);
- z1 = loc.getZ(Edge_1);
- z2 = loc.getZ(Edge_2);
- z3 = loc.getZ(Edge_3);
- z4 = z3 + z2 - z1;
- Spawn_Z = loc.getZ(Start_Pos)-0.5;
- //XYZ -> WYZ -> XYW -> XYZ
- Dimension_Blocks = list.new();
- event.addMoveData(loc1, loc2, -1, -1);
- currently_active_dimensions = 0; //0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
- current_layer = array.new(6);
- current_layer[0] = 0;//0 = W, 1 = X, 2 = Z
- current_layer[1] = 0;//current_layer[a] 0 = W, 1 = X, 2 = Z
- current_layer[2] = 0;
- current_layer[3] = 0;
- current_layer[4] = 0;
- current_layer[5] = 0;
- difference_array = array.new(6);
- difference_array[0] = Layer_amount;
- difference_array[1] = x2-x1;
- difference_array[2] = z2-z2;
- difference_array[3] = Layer_amount;
- difference_array[4] = x2-x1;
- difference_array[5] = z2-z2;
- @wait
- wait();
- if(event == "entity_damage") {
- if(!isPlayer(entity)) {
- goto("wait");
- }
- player = entity;
- }
- if(!player.hasMinigameId(player, script_id)) {
- goto("wait");
- }
- if(event == "minigame_join"){
- msg.prefix(player, $gamename, "Game is Loading, please be patient.");
- entity.teleport(player, Start_Pos);
- player.clearInventory(player);
- player_inv = player.getInv(player);
- waitfor(10);
- remove_blocks();
- $currently_active_dimensions = 0;
- $current_layer[$currently_active_dimensions] = 0;
- inv.setItem(player_inv, 0, item.custom.create("ARROW_LEFT",1,"Turn down","Interdimensionally"));
- inv.setItem(player_inv, 1, item.custom.create("ARROW_RIGHT",1,"Turn up","Interdimensionally"));
- inv.setItem(player_inv, 2, item.custom.create("ARROW_DOWN",1,"Move down","background axis"));
- inv.setItem(player_inv, 3, item.custom.create("ARROW_UP",1,"Move up","background axis"));
- c = 0;
- for(layer_var = 0; layer_var < Layer_amount; layer_var++){
- x_d = layer_var * Layer_difference_X;
- y_d = layer_var * Layer_difference_Y;
- z_d = layer_var * Layer_difference_Z;
- for(x = x1 - x_d; x <= x2 - x_d; x++){
- for(y = y1 - y_d; y <= y2 - y_d; y++){
- for(z = z1 - z_d; z <= z2 - z_d; z++){
- c++;
- if(c > 500){
- c = 0;
- waitfor(2);
- }
- temp_block = block.get(loc.new(games, x, y, z));
- if(!block.isAir(temp_block)){
- D_Array = array.new(4);
- D_Array[0] = x - x1 + x_d;//X
- D_Array[1] = y - y1 + y_d;//Y
- D_Array[2] = z - z1 + z_d;//Z
- D_Array[3] = layer_var;//W
- temp_array = array.new(2);
- temp_array[0] = D_Array;
- temp_array[1] = block.getType(temp_block);
- list.add(Dimension_Blocks, temp_array);//Dimensional_Blocks -> Koords4D,Block
- }
- }
- }
- }
- }
- place_blocks($current_layer, Dimension_Blocks);
- msg.prefix(player, $gamename, "Game has loaded.");
- //msg.dev(list.getSize(Dimension_Blocks));
- goto("wait");
- }
- if(event == "block_break"){
- cancel = true;
- goto("wait");
- }
- if(event == "entity_damage") {
- cancel = true;
- goto("wait");
- }
- if(event == "block_click"){
- if(slot.isoffhand(hand)){
- goto("wait");
- }
- if(action == "PHYSICAL"){
- goto("wait");
- }
- player_hand = living.getHand(player);
- if(!item.hasName(player_hand)){
- goto("wait");
- }
- item_name = string.text(item.getName(player_hand));
- if(item_name == "Turn down"){
- goto("dimensional_turn_down");
- }
- if(item_name == "Turn up"){
- goto("dimensional_turn_up");
- }
- if(item_name == "Move down"){
- goto("remove_layer");
- }
- if(item_name == "Move up"){
- goto("add_layer");
- }
- goto("wait");
- }
- if(event == "player_move"){
- //if(current_layer[1] == finish_layer){
- game_stop("You did it!");
- //}
- goto("wait");
- }
- if(event == "player_quit"){
- game_stop(null);
- }
- if(event == "player_giveup"){
- game_stop("You left :(");
- }
- goto("wait");
- @remove_layer
- temp_player_loc = entity.getLocation(player);
- if(current_layer[currently_active_dimensions] <= 0 || current_layer[currently_active_dimensions] > difference_array[currently_active_dimensions] - 1){
- if(current_layer[currently_active_dimensions] == 0){
- current_layer[currently_active_dimensions] = -1;
- remove_blocks();
- }
- if(current_layer[currently_active_dimensions] > difference_array[currently_active_dimensions] - 1){
- current_layer[currently_active_dimensions]--;
- }
- }else{
- remove_blocks();
- current_layer[currently_active_dimensions]--;
- place_blocks(current_layer, Dimension_Blocks);
- }
- if(currently_active_dimensions < 3){
- current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
- }else{
- current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
- }
- entity.teleport(player,loc.mod(temp_player_loc, 0, 0.1, 0));
- goto("wait");
- @add_layer
- temp_player_loc = entity.getLocation(player);
- if(current_layer[currently_active_dimensions] >= difference_array[currently_active_dimensions] - 1 || current_layer[currently_active_dimensions] < -1){
- if(current_layer[currently_active_dimensions] == difference_array[currently_active_dimensions] - 1){
- remove_blocks();
- }
- if(current_layer[currently_active_dimensions] < -1){
- current_layer[currently_active_dimensions]++;
- }
- }else{
- remove_blocks();
- current_layer[currently_active_dimensions]++;
- place_blocks(current_layer, Dimension_Blocks);
- }
- if(currently_active_dimensions < 3){
- current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
- }else{
- current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
- }
- entity.teleport(player,loc.mod(temp_player_loc, 0, 0.1, 0));
- goto("wait");
- @dimensional_turn_up
- remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
- temp_layer = current_layer[currently_active_dimensions];
- temp_player_loc = entity.getLocation(player);
- if(currently_active_dimensions == 0){//XYZ to WYZ
- currently_active_dimensions++;//0 = W, 1 = X, 2 = Z
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(temp_player_loc))-Spawn_X;
- entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
- }elseif(currently_active_dimensions == 1){//WYZ to WYX
- currently_active_dimensions++;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
- }elseif(currently_active_dimensions == 2){//WYX to ZYX
- currently_active_dimensions++;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
- entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
- }elseif(currently_active_dimensions == 3){//ZYX to ZYW
- currently_active_dimensions++;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
- }elseif(currently_active_dimensions == 4){//ZYW to XYW
- currently_active_dimensions++;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
- entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
- }elseif(currently_active_dimensions == 5){//XYW to XYZ
- currently_active_dimensions = 0;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
- }
- if(currently_active_dimensions < 3){//um es nicht bei jedem if-else schreiben zu m?ssen, und die layer aktiv zu halten.
- current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
- }else{
- current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
- }
- place_blocks(current_layer, Dimension_Blocks);
- goto("wait");
- @dimensional_turn_down
- remove_blocks();//0 = XYZ, 1 = WYZ, 2 = WYX, 3 = ZYX, 4 = ZYW, 5 = XYW
- temp_layer = current_layer[currently_active_dimensions];
- temp_player_loc = entity.getLocation(player);
- if(currently_active_dimensions == 0){//XYZ to XYW
- currently_active_dimensions = 5;//0 = W, 1 = X, 2 = Z, 3 = W, 4 = X, 5 = Z
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
- }elseif(currently_active_dimensions == 1){//WYZ to XYZ
- currently_active_dimensions--;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
- entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
- }elseif(currently_active_dimensions == 2){//WYX to WYZ
- currently_active_dimensions--;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
- }elseif(currently_active_dimensions == 3){//ZYX to WYX
- currently_active_dimensions--;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
- entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
- }elseif(currently_active_dimensions == 4){//ZYW to ZYX
- currently_active_dimensions--;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getZ(entity.getLocation(player)))-Spawn_Z;
- entity.teleport(player, loc.mod(Edge_3, loc.getX(temp_player_loc)-Spawn_X, loc.getY(temp_player_loc)-Spawn_Y, temp_layer+0.5));
- }elseif(currently_active_dimensions == 5){//XYW to ZYW
- currently_active_dimensions--;
- current_layer[currently_active_dimensions] = math.roundDown(loc.getX(entity.getLocation(player)))-Spawn_X;
- entity.teleport(player, loc.mod(Edge_3, temp_layer+0.5, loc.getY(temp_player_loc)-Spawn_Y, loc.getZ(temp_player_loc)-Spawn_Z));
- }
- if(currently_active_dimensions < 3){
- current_layer[currently_active_dimensions+3] = current_layer[currently_active_dimensions];
- }else{
- current_layer[currently_active_dimensions-3] = current_layer[currently_active_dimensions];
- }
- place_blocks(current_layer, Dimension_Blocks);
- goto("wait");
- function remove_blocks(){
- c = 0;
- for(x = $x3; x < $x3 + $x2 - $x1 + 1; x++){
- for(y = $y3; y < $y3 + $y2 - $y1 + 1; y++){
- for(z = $z3; z < $z3 + $z2 - $z1 + 1; z++){
- c++;
- if(c > 750){
- c = 0;
- waitfor(2);
- }
- block.setmaterial(block.get(loc.new($games, x, y, z)), $air_material);
- }
- }
- }
- }
- function place_blocks(current_layer, Dimension_Blocks){
- c = 0;
- temp_a_d = $currently_active_dimensions;
- temp_c_l = current_layer[temp_a_d];
- for(a = 0; a < list.getSize(Dimension_Blocks); a++){
- c++;
- if(c > 750){
- c = 0;
- waitfor(2);
- }
- temp_array = list.getIndex(Dimension_Blocks, a);
- D_Array = temp_array[0];//temp_array[1] ist der Block-Type, bei remove egal. D_Array[0] = x, D_Array[1] = y, D_Array[2] = z, D_Array[3] = w
- //0 = XYZ, 1 = WYZ, 2 = XYW
- //x3+x-x1+x_d, y3+y-y1+y_d, z3+z-z1+z_d
- X_place = 0;
- Y_place = -1;
- Z_place = 0;
- if(temp_a_d == 0){//0 = XYZ
- if(D_Array[3] == temp_c_l){
- X_place = D_Array[0];
- Y_place = D_Array[1];
- Z_place = D_Array[2];
- }
- }elseif(temp_a_d == 1){//1 = WYZ
- if(D_Array[0] == temp_c_l){
- X_place = D_Array[3];
- Y_place = D_Array[1];
- Z_place = D_Array[2];
- }
- }elseif(temp_a_d == 2){//2 = WYX
- if(D_Array[2] == temp_c_l){
- X_place = D_Array[3];
- Y_place = D_Array[1];
- Z_place = D_Array[0];
- }
- }elseif(temp_a_d == 3){//3 = ZYX
- if(D_Array[3] == temp_c_l){
- X_place = D_Array[2];
- Y_place = D_Array[1];
- Z_place = D_Array[0];
- }
- }elseif(temp_a_d == 4){//4 = ZYW
- if(D_Array[0] == temp_c_l){
- X_place = D_Array[2];
- Y_place = D_Array[1];
- Z_place = D_Array[3];
- }
- }elseif(temp_a_d == 5){//5 = XYW
- if(D_Array[2] == temp_c_l){
- X_place = D_Array[0];
- Y_place = D_Array[1];
- Z_place = D_Array[3];
- }
- }
- if(Y_place > -1){
- X_place = X_place + $x3;
- Y_place = Y_place + $y3;
- Z_place = Z_place + $z3;
- if(X_place < $x4+1 && Y_place < $y4+1 && Z_place < $z4+1){
- block.setmaterial(block.get(loc.new($games,X_place,Y_place,Z_place)), temp_array[1]);
- }
- }
- }
- }
- function game_stop(message){
- if(message != null){
- msg.prefix($player, $gamename, message);
- }
- script = script.getFromId($script_id);
- minigame.kickPlayer(script, $player);
- minigame.term(script, $gamesignloc);
- term();
- }
|