Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "&4[&eHelljump&4]" %%prefix
- "&4[&eHelljump&4]" %%objName
- "&e&lTime " %%objTime
- "&a&lScore " %%objScore
- "&b&lLevel " %%objLevel
- "Game start in..." %%objCounter
- 3 %startDelay
- $makeArena{ ## Config -> HelljumpArena
- 0 WAIT
- %%conf
- @conf.X <Double>
- @conf.Y <Double>
- @conf.Z <Double>
- @conf.World <World>
- LOCATION
- @conf.Radius <Double>
- SPHERE SOLIDBLOCKS <List> ScanPlatforms
- DUP !IF
- @objName "[$]&r can't create arena: no platforms" FORMAT PRINT
- DROP
- NULL RETURN
- THEN
- 0 TICKS
- @conf.Name <String>
- @HelljumpArena NEW
- }
- %HelljumpArena{ ## ([Platform] String(Name))
- %%name
- %%platforms
- NULL %%config
- NULL %%players
- [] %%gameThreads
- 0 %%score
- THIS %%arena
- NEWSCOREBOARD @objName "dummy" REGOBJECTIVE %%board
- @board @objName OBJECTIVE "SIDEBAR" SETOBJSLOT %%obj
- $regThread{
- @gameThreads SWAP ADD DROP
- }
- $platforms{@platforms}
- $stopThreads{
- @gameThreads:EACH{IF THIS STOP THEN}
- @gameThreads ACLEAR
- }
- $players{@players}
- $objective{@obj}
- $setBoardTime{ ## Integer ->
- @obj @objTime OBJSCORE SWAP SETSCORE DROP
- }
- $setBoardScore{ ## Integer ->
- @obj @objScore OBJSCORE SWAP SETSCORE DROP
- }
- $setBoardLevel{ ## Integer ->
- @obj @objLevel OBJSCORE SWAP SETSCORE DROP
- }
- $setBoardCounter{ ## Integer ->
- @obj @objCounter OBJSCORE SWAP SETSCORE DROP
- }
- $resetBoard{
- @board
- @objTime RESETPLAYERSCORES
- @objScore RESETPLAYERSCORES
- @objLevel RESETPLAYERSCORES
- @objCounter RESETPLAYERSCORES
- DROP
- }
- $start{ ## [Player] config
- %config
- @players IF
- :MAP{"Game already started" MSG} DROP
- RETURN
- THEN
- <List> :MAP{<Entity>} %players
- @players !IF RETURN THEN
- @players @platforms > IF
- @players :MAP{
- @objName "$&r Can't start game: players count > platforms count"
- FORMAT MSG
- }
- DROP
- RETURN
- THEN
- THIS:resetBoard
- HASHMAP %playerSaves
- @platforms :MAP{:center} %%points
- @platforms :EACH{:reset}
- @players :MAP{
- @playerSaves THIS THIS @PlayerSaver:snapshot MPUT DROP
- @board SETSCOREBOARD
- [] "Inventory" SETNBTQUERY
- CLEAREFFECTS
- 0 SETFALLDISTANCE
- "SURVIVAL" SETGAMEMODE
- 1000 SETFOOD
- 20 SETHEALTH
- @points POPRANDOM TP
- @objName "$&r game is started" FORMAT MSG
- } DROP
- THIS.game START THIS:regThread
- }
- $leave{ ## Player ->
- %p
- @players @p !AHAS IF RETURN THEN
- @players @p REM DROP
- @prefix @p @score @name "$&r &e$&r has &a&l$&r score in arena &6&l$&r" FORMAT BC
- @playerSaves @p MGET :restore
- @players !IF
- THIS:stop
- THEN
- }
- $checkPlayerInArena{ ## Player -> Boolean
- %%p
- @platforms CLONE %%plats
- BEGIN
- @plats
- WHILE
- @plats POP :center @p DISTANCE 2 < IF
- TRUE RETURN
- THEN
- REPEAT
- FALSE
- }
- $game{
- ## подготовка
- ListenerDamage{
- @Event:getEntity %%e
- @players @e AHAS !IF RETURN THEN
- TRUE @Event:setCancelled
- @Event:getCause %%cause
- @cause "FALL" = IF
- @e THIS:checkPlayerInArena !IF
- @e THIS:leave
- THEN
- RETURN
- THEN
- @cause "LAVA" = IF
- @e THIS:leave
- RETURN
- THEN
- @cause "VOID" = IF
- @e THIS:leave
- RETURN
- THEN
- } "EntityDamageEvent" REGISTER DROP
- ListenerQuit{
- @Event:getPlayer %%p
- @players @p AHAS !IF RETURN THEN
- @p THIS:leave
- } "PlayerQuitEvent" REGISTER DROP
- ListenerTeleport{
- @Event:getPlayer %%p
- @players @p AHAS !IF RETURN THEN
- TRUE @Event:setCancelled
- } "PlayerTeleportEvent" REGISTER DROP
- ListenerGameMode{
- @Event:getPlayer %%p
- @players @p AHAS !IF RETURN THEN
- TRUE @Event:setCancelled
- } "PlayerGameModeChangeEvent" REGISTER DROP
- ## обратный отсчет
- @startDelay %%delay
- @config IF
- @config.startDelay NULL = !IF
- @config.startDelay %delay
- THEN
- THEN
- BEGIN
- @delay 0 >
- WHILE
- @delay THIS:setBoardCounter
- @delay 1 - %delay
- 1 WAIT
- REPEAT
- THIS:resetBoard
- ## отсчет времени
- TimerCount{
- 1 %%t
- BEGIN
- @t THIS:setBoardTime
- @t 1 + %t
- 20 TICKS
- REPEAT
- } START THIS:regThread
- 30.0 %period
- 0 %level
- 0 %score
- ## игра!
- @level THIS:setBoardLevel
- BEGIN
- @players
- WHILE
- @score 1000 MOD !IF
- @level 1 + %level
- @level THIS:setBoardLevel
- @period 0.85 D* 4 MAX %period
- THEN
- @platforms:SELECT{:status 2 =} %%live
- @live 1 > IF ## есть больше одной живой платформы
- @live ARANDOM %%platform
- PlatformLiveCycle{
- @platform %%p
- @period 4 D* @p:destroy
- @period 2 @level + D* TICKS
- @p:regen
- } START THIS:regThread
- @score 50 + %score
- @score THIS:setBoardScore
- THEN
- @period DUP RANDOM D* D+ 3 MAX TICKS
- REPEAT
- THIS:stop
- }
- $stop{
- @players NULL = IF RETURN THEN
- THIS:stopThreads
- BEGIN
- @players
- WHILE
- @players POP THIS:leave
- REPEAT
- THIS:platforms:EACH{:reset}
- NULL %config
- NULL %players
- NULL %playerSaves
- 0 %score
- }
- }
- %Platform{ ## [Blocks]
- %%blocks
- 0 %%status ## 0 - нету, 1 - реген, 2 - есть, 3 - взрывается
- @blocks 0 EL <Location> 1:1:1 LV+ %%center
- @blocks :MAP{<ItemStack>} %%blocksIs
- $isSolid{@status 1 >}
- $status{@status}
- $setStatus{%status}
- $reset{
- THIS:blocks %%bl
- THIS:blocksIs %%bis
- @bl SIZE 0 @DO{
- @bl I ELEMENT
- @bis I ELEMENT
- SETBLOCK
- DROP
- }
- 2 THIS:setStatus
- }
- $destroy{ ## Integer(delay) ->
- %%delay
- THIS:status 2 = !IF RETURN THEN
- 3 THIS:setStatus
- THIS:center 2 LY+ "Primed_TNT" SPAWNMOB
- 0 SETYIELD
- "GHAST_FIREBALL" 1 1 SOUND
- @delay 80 MIN TICKS
- 0 SAFEEXPLODE
- REMOVE
- ARRAY %%fbs
- THIS:blocks %bs
- THIS:blocksIs %bis
- @bs
- :MAP{0 SETBLOCK}
- SIZE 0 @DO{
- @bs I ELEMENT
- @bis I ELEMENT
- SPAWNFALLINGBLOCK @fbs SWAP ADD
- DROP
- }
- { 7 TICKS @fbs :EACH{RM}} START
- 0 THIS:setStatus
- }
- $startDestroy{ ## Integer(delay) -> Thread
- %%delay
- {@delay THIS:destroy} START
- }
- $regen{
- @status 0 = !IF RETURN THEN
- 1 THIS:setStatus
- ARRAY %%fbs
- THIS:blocks %bs
- THIS:blocksIs %bis
- @bs SIZE 0 @DO{
- @bs I ELEMENT -2 BLRY
- @bis I ELEMENT
- SPAWNFALLINGBLOCK @fbs SWAP ADD
- DROP
- }
- @fbs
- :MAP{0.5 THROW} DROP
- {10 TICKS @fbs :EACH{RM}} START
- 10 TICKS
- THIS:reset
- 2 THIS:setStatus
- }
- $startRegen{ ## -> Thread
- {THIS:regen} START
- }
- $blocks{@blocks}
- $blocksIs{@blocksIs}
- $center{@center CLONE}
- }
- %ScanPlatforms{ ## [Block] -> [Platform]
- <List>
- :MAP{<Block>}
- :SELECT{ -2 BLRY !}:SELECT{0:-1:0 BLRV !}:SELECT{0:1:0 BLRV !}:SELECT{0:2:0 BLRV !}
- :SELECT{1:-2:0 BLRV !}:SELECT{1:-1:0 BLRV !}:SELECT{1:1:0 BLRV !}:SELECT{1:2:0 BLRV !}
- :SELECT{0:-2:1 BLRV !}:SELECT{0:-1:1 BLRV !}:SELECT{0:1:1 BLRV !}:SELECT{0:2:1 BLRV !}
- :SELECT{1:-2:1 BLRV !}:SELECT{1:-1:1 BLRV !}:SELECT{1:1:1 BLRV !}:SELECT{1:2:1 BLRV !}
- :SELECT{-1:0:-1 BLRV !}:SELECT{-1:0:0 BLRV !}:SELECT{-1:0:1 BLRV !}:SELECT{-1:0:2 BLRV !}
- :SELECT{0:0:-1 BLRV !}:SELECT{0:0:2 BLRV !}
- :SELECT{1:0:-1 BLRV !}:SELECT{1:0:2 BLRV !}
- :SELECT{2:0:-1 BLRV !}:SELECT{2:0:0 BLRV !}:SELECT{2:0:1 BLRV !}:SELECT{2:0:2 BLRV !}
- :SELECT{DUP 1 BLRX BID SWAP BID =}
- :SELECT{DUP 1 BLRZ BID SWAP BID =}
- :SELECT{DUP 1 0 1 BLR BID SWAP BID =}
- :MAP{
- DROP
- [
- THIS,
- THIS 1 BLRX,
- THIS 1 BLRZ,
- THIS 1 BLRZ 1 BLRX
- ] @Platform NEW
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment