Paste #9819: Prison Script

Date: 2014/09/19 13:21:52 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


"StartPrison":
  type: world
  debug: false
  events:
    on server start:
    - ^inject SetRanks
    - run PrisonScoreboard

    on reload scripts:
    - ^inject SetRanks
    - ^foreach <w@Prison.players> {
      - ^flag %value% sbrank:!
      - ^flag %value% sbbalance:!
      - ^flag %value% sbnextrank:!
      - ^flag %value% sbneeded:!
      }
    - ^run PrisonScoreboard

    on player join:
    - ^scoreboard remove id:rank<player.name>
    - ^flag player sbrank:!
    - ^flag player sbbalance:!
    - ^flag player sbnextrank:!
    - ^flag player sbneeded:!
    - run StartPlayerScoreboardHeaders as:<player> instantly
    - execute as_player "/spawn"

    on player quit:
    - ^flag player sbrank:!
    - ^flag player sbbalance:!
    - ^flag player sbnextrank:!
    - ^flag player sbneeded:!

    on player right clicks dispenser:
    - if !<player.is_op> && <player.location.world> == w@Prison {
      - determine cancelled
      }
    on player right clicks dropper:
    - if !<player.is_op> && <player.location.world> == w@Prison {
      - determine cancelled
      }

    on sbreset command:
    - ^flag player sbrank:!
    - ^flag player sbbalance:!
    - ^flag player sbnextrank:!
    - ^flag player sbneeded:!
    - scoreboard remove id:rank<player.name>
    - run StartPlayerScoreboardHeaders as:<player>
    - determine fulfilled

"PrisonScoreboard":
  type: task
  debug: false
  script:
    - foreach <server.list_online_players> {
      - run UpdateScoreboard as:%value% instantly
      }
    - wait 10s
    - run PrisonScoreboard

"UpdateScoreboard":
  type: task
  debug: false
  script:
    - ^inject GetPlayerRank
    - ^define prank <player.flag[rank]>
    - ^define nrank <global.flag[Ranks.list].as_list.get[<global.flag[Ranks.list].as_list.find[%prank%].sub[1].as_int>]>
    - ^define balance <proc[formatmoney].context[<player.money>]>
    - ^define nextrank <proc[formatmoney].context[<global.flag[Ranks.%nrank%.Amount]>]>
    - ^define needed <global.flag[Ranks.%nrank%.Amount].sub[<player.money>]>
    - ^define needed <proc[formatmoney].context[<tern[<def[needed].as_int.is[LESS].than[0]>]:0||%needed%>]>
    - ^define pname <player.name>

    - if <player.flag[sbrank].is[!EQUALS].to[%prank%]> {
      - ^scoreboard remove id:rank%pname% "obj:<red>Ranking Info" score:8 lines:<player.flag[sbrank]>
      - ^flag player sbrank:%prank%
      - ^scoreboard add id:rank%pname% "obj:<red>Ranking Info" score:8 lines:%prank%
      }

    - if <player.flag[sbbalance].is[!EQUALS].to[<def[balance]>]> {
      - ^scoreboard remove id:rank%pname% "obj:<red>Ranking Info" score:6 lines:<player.flag[sbbalance]>
      - ^flag player "sbbalance:<def[balance]>"
      - ^scoreboard add id:rank%pname% "obj:<red>Ranking Info" score:6 lines:<def[balance]>
      }

    - if <player.flag[sbnextrank].is[!EQUALS].to[<def[nextrank]>]> {
      - ^scoreboard remove id:rank%pname% "obj:<red>Ranking Info" score:4 lines:<player.flag[sbnextrank]>
      - ^flag player sbnextrank:<def[nextrank]>
      - ^scoreboard add id:rank%pname% "obj:<red>Ranking Info" score:4 lines:<def[nextrank]>
      }

    - if <player.flag[sbneeded].is[!EQUALS].to[<def[needed]>]> {
      - ^scoreboard remove id:rank%pname% "obj:<red>Ranking Info" score:2 lines:<player.flag[sbneeded]>
      - ^flag player sbneeded:<def[needed]>
      - ^scoreboard add id:rank%pname% "obj:<red>Ranking Info" score:2 lines:<def[needed]>
      }

"StartPlayerScoreBoardHeaders":
  type: task
  debug: false
  script:
    - ^define pname <player.name>
    - ^scoreboard add id:rank%pname% "obj:<red>Ranking Info" score:9 "lines:<blue><bold>Rank"
    - ^scoreboard add id:rank%pname% "obj:<red>Ranking Info" score:7 "lines:<blue><bold>Balance"
    - ^scoreboard add id:rank%pname% "obj:<red>Ranking Info" score:5 "lines:<blue><bold>Next Rank"
    - ^scoreboard add id:rank%pname% "obj:<red>Ranking Info" score:3 "lines:<blue><bold>Needed"
    - ^scoreboard id:rank%pname% viewers:%pname%
    - run UpdateScoreboard instantly

"GetPlayerRank":
  type: task
  debug: false
  script:
    - foreach <global.flag[Ranks.List].as_list> {
      - if <player.in_group[%value%]> {
        - ^flag player rank:%value%
        - foreach stop
        }
      }
    - if !<player.has_flag[rank]> ^flag player rank:Prisoner

"SetRanks":
  type: task
  debug: false
  script:
    - ^flag global Ranks:!
    - ^flag global Ranks.List:|:Free|Z|Y|X|W|V|U|T|S|R|Q|P|O|N|M|L|K|J|I|H|G|F|E|D|C|B|A|Prisoner
    - ^flag global Ranks.Prisoner.Amount:0
    - ^flag global Ranks.A.Amount:0
    - ^flag global Ranks.B.Amount:30000
    - ^flag global Ranks.C.Amount:75000
    - ^flag global Ranks.D.Amount:120000
    - ^flag global Ranks.E.Amount:200000
    - ^flag global Ranks.F.Amount:400000
    - ^flag global Ranks.G.Amount:750000
    - ^flag global Ranks.H.Amount:1000000
    - ^flag global Ranks.I.Amount:5000000
    - ^flag global Ranks.J.Amount:10000000
    - ^flag global Ranks.K.Amount:15000000
    - ^flag global Ranks.L.Amount:20000000
    - ^flag global Ranks.M.Amount:30000000
    - ^flag global Ranks.N.Amount:50000000
    - ^flag global Ranks.O.Amount:75000000
    - ^flag global Ranks.P.Amount:100000000
    - ^flag global Ranks.Q.Amount:200000000
    - ^flag global Ranks.R.Amount:400000000
    - ^flag global Ranks.S.Amount:750000000
    - ^flag global Ranks.T.Amount:1000000000
    - ^flag global Ranks.U.Amount:1500000000
    - ^flag global Ranks.V.Amount:2000000000
    - ^flag global Ranks.W.Amount:3000000000
    - ^flag global Ranks.X.Amount:5000000000
    - ^flag global Ranks.Y.Amount:7500000000
    - ^flag global Ranks.Z.Amount:10000000000
    - ^flag global Ranks.Free.Amount:20000000000


#
#   Inject task script for all mines to rank up
#
"rankup":
  type: assignment
  debug: true
  script:
    # If the NPC guard has the mission flag and the players flag for that mission is false
    - ^define mine <npc.name.char_at[1]>
    - ^define pmine <global.flag[Ranks.list].as_list.get[<global.flag[Ranks.list].as_list.find[%mine%].add[1].as_int>]>
    - if <player.in_group[%mine%]> {
      - ^narrate "You have already ranked up to %mine%, please proceed to the mine or use /warp %mine%."
      } else if !<player.in_group[%pmine%]> {
      - ^narrate "You haven't achieved Rank %pmine% yet.  Come back later."
      } else if <player.money> >= <global.flag[Ranks.%mine%.Amount].as_int> {
      - ^narrate "Taking your fee to rank up."
      - ^take money qty:<global.flag[Ranks.%mine%.Amount].as_int>
      - ^narrate "You have now achieved the <gold>Prisoner Rank of %mine%!"
      - ^announce "<white>Prisoner <gold><player.name><white> has achieved <red> Rank %mine%"
      - ^wait 1
      - ^group add %mine% world:prison
      - ^narrate "You may now proceed to mine %mine%."
      } else {
      - ^narrate "You don't have the required fee to rank up."
      - ^narrate "Come back when you have <proc[formatmoney].context[<global.flag[Ranks.%mine%.Amount]>]>."
      }
      # - ^execute as_server "manselect Prison"
      # - ^execute as_server "manuaddsub <player.name> %mine%"