Paste #5172: Edit of P#5171 - Moving people on platform

Date: 2014/06/08 19:44:34 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


# Moving Parkour Maze
#
"MovingMaze":
  type: world
  debug: true
  events:
    on prison load:
      - inject SetPlatforms
      - inject InitMovingMaze

"SetPlatforms":
  type: task
  debug: true
  script:
    - ^flag global platform.1.min:l@373,40,-281,prison
    - ^flag global platform.1.max:l@370,40,-282,prison
    - ^flag global platform.1.mat:redstone_block
    - ^flag global platform.1.axis:
    - ^flag global platform.1.distance:5
    - ^flag global platform.1.direction:-1
    - ^flag global platform.2.min:l@375,40,-281,prison
    - ^flag global platform.2.max:l@376,40,-278,prison
    - ^flag global platform.2.mat:redstone_block
    - ^flag global platform.2.axis:y
    - ^flag global platform.2.distance:5
    - ^flag global platform.2.direction:1
    - ^flag global platform.3.min:l@352,6,-285,prison
    - ^flag global platform.3.max:l@354,6,-287,prison
    - ^flag global platform.3.mat:redstone_block
    - ^flag global platform.3.axis:y
    - ^flag global platform.3.distance:5
    - ^flag global platform.3.direction:1

"InitMovingMaze":
  type: task
  debug: true
  script:
#    - ^run LoopPlatform def:<global.flag[platform.1.min]>|<global.flag[platform.1.max]>|<global.flag[platform.1.mat]>|<global.flag[platform.1.axis]>|<global.flag[platform.1.distance]>|<global.flag[platform.1.direction]>|
#    - ^run LoopPlatform def:<global.flag[platform.2.min]>|<global.flag[platform.2.max]>|<global.flag[platform.2.mat]>|<global.flag[platform.2.axis]>|<global.flag[platform.2.distance]>|<global.flag[platform.2.direction]>|
    - ^run LoopPlatform def:<global.flag[platform.3.min]>|<global.flag[platform.3.max]>|<global.flag[platform.3.mat]>|<global.flag[platform.3.axis]>|<global.flag[platform.3.distance]>|<global.flag[platform.3.direction]>|
#    - run InitMovingMaze delay:10s

"LoopPlatform":
  type: task
  debug: true
  script:
    - ^define 1frontcorner <def[1]>
    - ^define 1backcorner <def[2]>
    - ^define material <def[3]>
    - ^define axis <def[4]>
    - ^define distance <def[5]>
    - ^define direction <def[6]>
    - ^define newpos <cu@%1frontcorner%|%1backcorner%.get_blocks>
    - ^define movement li@0
    - ^repeat %distance% {
      - ^define movement %movement%|<def[value].mul[%direction%].as_int>
      }
    - ^repeat %distance% {
      - ^define movement %movement%|<def[distance].sub[%value%].mul[%direction%].as_int>
      }
    - ^foreach %movement% {
      - ^define oldpos %newpos%
      - ^if %axis% == X {
        - ^define newpos <cu@<def[1frontcorner].add[%value%,0,0]>|<def[1backcorner].add[%value%,0,0]>.get_blocks>
        }
        else if %axis% == Y {
          - ^define spaceabove cu@<def[1frontcorner].add[0,%value%,0]>|<def[1backcorner].add[0,%value%,0]>
          - ^define newpos <def[spaceabove].get_blocks>
          - ^if <def[spaceabove].get_players || null > != null && %value% >> 0 {
            - ^foreach <def[spaceabove].get_players> {
              - ^push %value% destination:<def[value].location.add[0,1,0]>
              }
            }
        }
        else {
          - ^define newpos <cu@<def[1frontcorner].add[0,0,%value%]>|<def[1backcorner].add[0,0,%value%]>.get_blocks>
        }
      - ^define templist <def[oldpos].exclude[%newpos%]>
      - ^run ModifyBlocks def:<def[newpos].escaped>|%material% "delay:%loop_index%s"
      - ^if <def[templist].is_empty> {
        - announce "templist %templist%" to_ops
        - ^run ModifyBlocks def:<def[templist].escaped>|air "delay:%loop_index%s"
        }
      }

"ModifyBlocks":
  type: task
  debug: true
  script:
    - ^modifyblock <def[1].unescaped> <def[2]>