DPOH-VAR

Helljump

Aug 19th, 2013
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 7.31 KB | None | 0 0
  1. "&4[&eHelljump&4]" %%prefix
  2. "&4[&eHelljump&4]" %%objName
  3. "&e&lTime " %%objTime
  4. "&a&lScore " %%objScore
  5. "&b&lLevel " %%objLevel
  6. "Game start in..." %%objCounter
  7. 3 %startDelay
  8.  
  9. $makeArena{ ## Config -> HelljumpArena
  10.     0 WAIT
  11.     %%conf
  12.     @conf.X <Double>
  13.     @conf.Y <Double>
  14.     @conf.Z <Double>
  15.     @conf.World <World>
  16.     LOCATION
  17.     @conf.Radius <Double>
  18.     SPHERE SOLIDBLOCKS <List> ScanPlatforms
  19.     DUP !IF
  20.         @objName "[$]&r can't create arena: no platforms" FORMAT PRINT
  21.         DROP
  22.         NULL RETURN
  23.     THEN
  24.     0 TICKS
  25.     @conf.Name <String>
  26.     @HelljumpArena NEW
  27. }
  28.  
  29. %HelljumpArena{ ## ([Platform] String(Name))
  30.     %%name
  31.     %%platforms
  32.     NULL %%config
  33.     NULL %%players
  34.     [] %%gameThreads
  35.     0 %%score
  36.     THIS %%arena
  37.    
  38.     NEWSCOREBOARD @objName "dummy" REGOBJECTIVE %%board
  39.     @board @objName OBJECTIVE "SIDEBAR" SETOBJSLOT %%obj
  40.    
  41.     $regThread{
  42.         @gameThreads SWAP ADD DROP
  43.     }
  44.    
  45.     $platforms{@platforms}
  46.    
  47.     $stopThreads{
  48.         @gameThreads:EACH{IF THIS STOP THEN}
  49.         @gameThreads ACLEAR
  50.     }
  51.    
  52.     $players{@players}
  53.     $objective{@obj}
  54.    
  55.     $setBoardTime{ ## Integer ->
  56.         @obj @objTime OBJSCORE SWAP SETSCORE DROP
  57.     }
  58.     $setBoardScore{ ## Integer ->
  59.         @obj @objScore OBJSCORE SWAP SETSCORE DROP
  60.     }
  61.     $setBoardLevel{ ## Integer ->
  62.         @obj @objLevel OBJSCORE SWAP SETSCORE DROP
  63.     }
  64.     $setBoardCounter{ ## Integer ->
  65.         @obj @objCounter OBJSCORE SWAP SETSCORE DROP
  66.     }
  67.     $resetBoard{
  68.         @board
  69.          @objTime RESETPLAYERSCORES
  70.          @objScore RESETPLAYERSCORES
  71.          @objLevel RESETPLAYERSCORES
  72.          @objCounter RESETPLAYERSCORES
  73.         DROP
  74.     }
  75.     $start{ ## [Player] config
  76.         %config
  77.         @players IF
  78.             :MAP{"Game already started" MSG} DROP
  79.             RETURN
  80.         THEN
  81.         <List> :MAP{<Entity>} %players
  82.         @players !IF RETURN THEN
  83.         @players @platforms > IF
  84.             @players :MAP{
  85.                 @objName "$&r Can't start game: players count > platforms count"
  86.                 FORMAT MSG
  87.             }
  88.             DROP
  89.             RETURN
  90.         THEN
  91.         THIS:resetBoard
  92.         HASHMAP %playerSaves
  93.         @platforms :MAP{:center} %%points
  94.         @platforms :EACH{:reset}
  95.         @players :MAP{
  96.             @playerSaves THIS THIS @PlayerSaver:snapshot MPUT DROP
  97.             @board SETSCOREBOARD
  98.             [] "Inventory" SETNBTQUERY
  99.             CLEAREFFECTS
  100.             0 SETFALLDISTANCE
  101.             "SURVIVAL" SETGAMEMODE
  102.             1000 SETFOOD
  103.             20 SETHEALTH
  104.             @points POPRANDOM TP
  105.             @objName "$&r game is started" FORMAT MSG
  106.         } DROP
  107.         THIS.game START THIS:regThread
  108.     }
  109.    
  110.     $leave{ ## Player ->
  111.         %p
  112.         @players @p !AHAS IF RETURN THEN
  113.         @players @p REM DROP
  114.         @prefix @p @score @name "$&r &e$&r has &a&l$&r score in arena &6&l$&r" FORMAT BC
  115.        
  116.         @playerSaves @p MGET :restore
  117.         @players !IF
  118.             THIS:stop
  119.         THEN
  120.     }
  121.    
  122.     $checkPlayerInArena{ ## Player -> Boolean
  123.         %%p
  124.         @platforms CLONE %%plats
  125.         BEGIN
  126.             @plats
  127.         WHILE
  128.             @plats POP :center @p DISTANCE 2 < IF
  129.                 TRUE RETURN
  130.             THEN
  131.         REPEAT
  132.         FALSE
  133.     }
  134.    
  135.     $game{
  136.         ## подготовка
  137.         ListenerDamage{
  138.             @Event:getEntity %%e
  139.             @players @e AHAS !IF RETURN THEN
  140.             TRUE @Event:setCancelled
  141.             @Event:getCause %%cause
  142.             @cause "FALL" = IF
  143.                 @e THIS:checkPlayerInArena !IF
  144.                     @e THIS:leave
  145.                 THEN
  146.                 RETURN
  147.             THEN
  148.             @cause "LAVA" = IF
  149.                 @e THIS:leave
  150.                 RETURN
  151.             THEN
  152.             @cause "VOID" = IF
  153.                 @e THIS:leave
  154.                 RETURN
  155.             THEN
  156.         } "EntityDamageEvent" REGISTER DROP
  157.         ListenerQuit{
  158.             @Event:getPlayer %%p
  159.             @players @p AHAS !IF RETURN THEN
  160.             @p THIS:leave
  161.         } "PlayerQuitEvent" REGISTER DROP
  162.         ListenerTeleport{
  163.             @Event:getPlayer %%p
  164.             @players @p AHAS !IF RETURN THEN
  165.             TRUE @Event:setCancelled
  166.         } "PlayerTeleportEvent" REGISTER DROP
  167.         ListenerGameMode{
  168.             @Event:getPlayer %%p
  169.             @players @p AHAS !IF RETURN THEN
  170.             TRUE @Event:setCancelled
  171.         } "PlayerGameModeChangeEvent" REGISTER DROP
  172.        
  173.         ## обратный отсчет
  174.         @startDelay %%delay
  175.         @config IF
  176.             @config.startDelay NULL = !IF
  177.                 @config.startDelay %delay
  178.             THEN
  179.         THEN
  180.         BEGIN
  181.             @delay 0 >
  182.         WHILE
  183.             @delay THIS:setBoardCounter
  184.             @delay 1 - %delay
  185.             1 WAIT
  186.         REPEAT
  187.         THIS:resetBoard
  188.         ## отсчет времени
  189.         TimerCount{
  190.             1 %%t
  191.             BEGIN
  192.                 @t THIS:setBoardTime
  193.                 @t 1 + %t
  194.                 20 TICKS
  195.             REPEAT
  196.         } START THIS:regThread
  197.         30.0 %period
  198.         0 %level
  199.         0 %score
  200.         ## игра!
  201.         @level THIS:setBoardLevel
  202.         BEGIN
  203.             @players
  204.         WHILE
  205.             @score 1000 MOD !IF
  206.                 @level 1 + %level
  207.                 @level THIS:setBoardLevel
  208.                 @period 0.85 D* 4 MAX %period
  209.             THEN
  210.             @platforms:SELECT{:status 2 =} %%live
  211.             @live 1 > IF ## есть больше одной живой платформы
  212.                 @live ARANDOM %%platform
  213.                 PlatformLiveCycle{
  214.                     @platform %%p
  215.                     @period 4 D* @p:destroy
  216.                     @period 2 @level + D* TICKS
  217.                     @p:regen
  218.                 } START THIS:regThread
  219.                 @score 50 + %score
  220.                 @score THIS:setBoardScore
  221.             THEN
  222.             @period DUP RANDOM D* D+ 3 MAX TICKS
  223.         REPEAT
  224.        
  225.         THIS:stop
  226.     }
  227.    
  228.     $stop{
  229.         @players NULL = IF RETURN THEN
  230.         THIS:stopThreads
  231.         BEGIN
  232.             @players
  233.         WHILE
  234.             @players POP THIS:leave
  235.         REPEAT
  236.         THIS:platforms:EACH{:reset}
  237.         NULL %config
  238.         NULL %players
  239.         NULL %playerSaves
  240.         0 %score
  241.     }
  242. }
  243.  
  244. %Platform{ ## [Blocks]
  245.     %%blocks
  246.     0 %%status ## 0 - нету, 1 - реген, 2 - есть, 3 - взрывается
  247.     @blocks 0 EL <Location> 1:1:1 LV+ %%center
  248.     @blocks :MAP{<ItemStack>} %%blocksIs
  249.     $isSolid{@status 1 >}
  250.     $status{@status}
  251.     $setStatus{%status}
  252.     $reset{
  253.         THIS:blocks %%bl
  254.         THIS:blocksIs %%bis
  255.         @bl SIZE 0 @DO{
  256.             @bl I ELEMENT
  257.             @bis I ELEMENT
  258.             SETBLOCK
  259.             DROP
  260.         }
  261.         2 THIS:setStatus
  262.     }
  263.     $destroy{ ## Integer(delay) ->
  264.         %%delay
  265.         THIS:status 2 = !IF RETURN THEN
  266.         3 THIS:setStatus
  267.         THIS:center 2 LY+ "Primed_TNT" SPAWNMOB
  268.          0 SETYIELD
  269.          "GHAST_FIREBALL" 1 1 SOUND
  270.          @delay 80 MIN TICKS
  271.          0 SAFEEXPLODE
  272.          REMOVE
  273.         ARRAY %%fbs
  274.         THIS:blocks %bs
  275.         THIS:blocksIs %bis
  276.         @bs
  277.          :MAP{0 SETBLOCK}
  278.         SIZE 0 @DO{
  279.             @bs I ELEMENT
  280.             @bis I ELEMENT
  281.             SPAWNFALLINGBLOCK @fbs SWAP ADD
  282.             DROP
  283.         }
  284.         { 7 TICKS @fbs :EACH{RM}} START
  285.         0 THIS:setStatus
  286.     }
  287.     $startDestroy{ ## Integer(delay) -> Thread
  288.         %%delay
  289.         {@delay THIS:destroy} START
  290.     }
  291.     $regen{
  292.         @status 0 = !IF RETURN THEN
  293.         1 THIS:setStatus
  294.         ARRAY %%fbs
  295.         THIS:blocks %bs
  296.         THIS:blocksIs %bis
  297.         @bs SIZE 0 @DO{
  298.             @bs I ELEMENT -2 BLRY
  299.             @bis I ELEMENT
  300.             SPAWNFALLINGBLOCK @fbs SWAP ADD
  301.             DROP
  302.         }
  303.         @fbs
  304.          :MAP{0.5 THROW} DROP
  305.         {10 TICKS @fbs :EACH{RM}} START
  306.         10 TICKS
  307.         THIS:reset     
  308.         2 THIS:setStatus
  309.     }
  310.     $startRegen{ ## -> Thread
  311.         {THIS:regen} START
  312.     }
  313.     $blocks{@blocks}
  314.     $blocksIs{@blocksIs}
  315.     $center{@center CLONE}
  316. }
  317.  
  318. %ScanPlatforms{ ## [Block] -> [Platform]
  319.     <List>
  320.      :MAP{<Block>}
  321.      :SELECT{ -2 BLRY !}:SELECT{0:-1:0 BLRV !}:SELECT{0:1:0 BLRV !}:SELECT{0:2:0 BLRV !}
  322.      :SELECT{1:-2:0 BLRV !}:SELECT{1:-1:0 BLRV !}:SELECT{1:1:0 BLRV !}:SELECT{1:2:0 BLRV !}
  323.      :SELECT{0:-2:1 BLRV !}:SELECT{0:-1:1 BLRV !}:SELECT{0:1:1 BLRV !}:SELECT{0:2:1 BLRV !}
  324.      :SELECT{1:-2:1 BLRV !}:SELECT{1:-1:1 BLRV !}:SELECT{1:1:1 BLRV !}:SELECT{1:2:1 BLRV !}
  325.      :SELECT{-1:0:-1 BLRV !}:SELECT{-1:0:0 BLRV !}:SELECT{-1:0:1 BLRV !}:SELECT{-1:0:2 BLRV !}
  326.      :SELECT{0:0:-1 BLRV !}:SELECT{0:0:2 BLRV !}
  327.      :SELECT{1:0:-1 BLRV !}:SELECT{1:0:2 BLRV !}
  328.      :SELECT{2:0:-1 BLRV !}:SELECT{2:0:0 BLRV !}:SELECT{2:0:1 BLRV !}:SELECT{2:0:2 BLRV !}
  329.      :SELECT{DUP 1 BLRX BID SWAP BID =}
  330.      :SELECT{DUP 1 BLRZ BID SWAP BID =}
  331.      :SELECT{DUP 1 0 1 BLR BID SWAP BID =}
  332.      :MAP{
  333.         DROP
  334.         [
  335.          THIS,
  336.          THIS 1 BLRX,
  337.          THIS 1 BLRZ,
  338.          THIS 1 BLRZ 1 BLRX
  339.         ] @Platform NEW
  340.      }
  341. }
Advertisement
Add Comment
Please, Sign In to add comment