Paste #29206: Edit of P#29205 - Edit of P#29204 - Withdraw / Deposit REGEX ?

Date: 2016/01/27 05:35:09 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


bank_world:
    type: world

    events:
        on bank command:
        - narrate "<green>Your current bank account balance is β<player.flag[bankbalance]>"
        - determine fulfilled 

        on 6:00 in world:
        - ^run "global_announce"
        - ^run "apply_money_interest"

        on 18:00 in world:
        - ^run "global_announce"

        on player join:
        - ^run "bank_interest_announce"

banker_format:
    type: format
    format: <white><Bank Clerk><&co> <light_purple><text>

banker:
    type: assignment
    default constants:
        signup_bonus: 1000.0
        daily_interest: 0.0000001
        daily_interest_online: 0.000001
    actions:
        on assignment:
        - trigger name:proximity toggle:true radius:2
        - trigger name:click toggle:true
        - equip i@paper

    interact scripts:
    - 10 bankerscript

bankerscript:
    type: interact
    steps:
        1:
            proximity trigger:
                entry:
                    script:
                    - if <player.flag[hasBankAccount]> != true {
                      - ^run "welcome_task"
                      }
                      else {
                      - ^run "manage_account_task"
                      }
            click trigger:
                script:
                - if <player.flag[hasBankAccount]> == true {
                    - ^run "manage_account_task"
                  }
                  else {
                  - ^run "welcome_task"
                  }
                exit:
                    script:
                    - narrate format:banker_format "<light_purple>Thank you for visiting! We hope to see you again!"
                    - trigger name:chat toggle:false
        2:
            chat trigger:
                'open_account':
                    trigger: '/REGEX:(1|Yes|y)/'
                    script:
                    - if <player.flag[hadBankAccount]> != true {
                      - narrate format:banker_format "<light_purple>That<&sq>s great! Here<&sq>s your <green>β<npc.constant[signup_bonus]> <light_purple> for opening an account"
                      - narrate "<light_purple>Your bank account has been opened and now has a balance of <green>β<npc.constant[signup_bonus]><light_purple>."
                      - announce "<aqua><player.name><light_purple> has just opened a bank account and received <green>β<npc.constant[signup_bonus]><light_purple> for free!  Come open yours today if you haven<&sq>t already!"
                      - ^flag player hadBankAccount:true
                      - ^flag player bankbalance:<npc.constant[signup_bonus]>
                      }
                    - ^flag player hasBankAccount:true
                    - narrate "<light_purple>Your bank account has been opened."
                    - trigger name:chat toggle:false
                    - ^run "manage_account_task"
                'deny_account':
                    trigger: '/REGEX:(2|No|n)/'
                    script:
                    - narrate format:banker_format "Oh okay ... Thank you for visiting! We hope to see you again!"
                    - trigger name:chat toggle:false
                    - ^zap step:1
            proximity trigger:
                exit:
                    script:
                    - narrate "<aqua>The Bank Clerk looks sad"
                    - narrate format:banker_format "<light_purple>I<&sq>ll take that as a no."
                    - trigger name:chat toggle:false
                    - ^zap step:1
        3:
            chat trigger:
                'deposit_money':
                    trigger: '/REGEX:(1|deposit|d)/'
                    script:
                    - ^run "deposit_money_task"
                'withdraw_money':
                    trigger: '/REGEX:(2|withdraw|w)/'
                    script:
                    - ^run "withdraw_money_task"
                'check_balance':
                    trigger: '/REGEX:(3|balance|b)/'
                    script:
                    - narrate "<light_purple>Your current balance is <green>β<player.flag[bankbalance]>"
                    - ^run "manage_account_task"
                'close_account':
                    trigger: '/REGEX:(4|close|c)/'
                    script:
                    - narrate format:banker_format "<light_purple>Oh no! Are you sure that you<&sq>d like to do that? You<&sq>ve earned <green>β<player.flag[player_overall_interest]><light_purple> in interest so far."
                    - narrate "<light_purple>1<aqua>) <dark_red>Yes I<&sq>m sure. Close my account"
                    - narrate "<light_purple>2<aqua>) <dark_green>No, I want to keep my account open!"
                    - trigger name:chat toggle:true
                    - ^zap step:6                    
                'admin_check_ledger':
                    trigger: '/REGEX:(5|ledger|l)/'
                    script:
                    - ^run "admin_check_ledger_task"
            proximity trigger:
                exit:
                    script:
                    - narrate format:banker_format "<light_purple>Thank you for visiting! We hope to see you again!"
                    - trigger name:chat toggle:false
                    - ^zap step:1
        4:
            chat trigger:
                'deposit_money_amount':
                    trigger: '/REGEX:^\d+.(\d){1,2}$/'
                    script:
                    - ^if '<player.money>' >= <player.chat_history>
                      narrate format:banker_format "<light_purple>There is now <green>β<player.flag[bankbalance]><light_purple> in your account"
                      else narrate format:banker_format "<light_purple>You don<&sq>t have <green>β<player.chat_history><light_purple> to deposit!"
                    - trigger name:chat toggle:false
                    - ^run "manage_account_task"
                'deposit_money_all': 
                    trigger: '/all/' 
                    script: 
                    - trigger name:chat toggle:false 
                    - narrate "You have deposited all of your money into the bank!" 
                    - flag player bankbalance:+:<player.money> 
                    - ^take money qty:<player.money> 
                    - ^run "manage_account_task" 
            proximity trigger:
                exit:
                    script:
                    - narrate format:banker_format "<light_purple>Thank you for visiting! We hope to see you again!"
                    - trigger name:chat toggle:false
                    - ^zap step:1
        5:
            chat trigger:
                'withdraw_money_amount':
                    trigger: '/REGEX:^\d+.(\d){1,2}$/'
                    script:
                        - ^if '<player.flag[bankbalance]>' >= <player.chat_history>
                          narrate format:banker_format "<light_purple>You have withdrawn <green>β<player.chat_history><light_purple> from your account; your remaining balance is <green>β<player.flag[bankbalance]>"
                          else narrate format:banker_format "<light_purple>You don<&sq>t have <green>β<player.chat_history><light_purple> to withdraw!"
                        - trigger name:chat toggle:false
                        - ^run "manage_account_task"
                'withdraw_money_all':
                    trigger: '/all/'
                    script: 
                    - trigger name:chat toggle:false
                    - narrate "<light_purple>You have emptied your bank account!"
                    - narrate "<light_purple>You are now holding <green>β<player.money><light_purple>!"
                    - ^give money qty:<player.flag[bankbalance]>
                    - flag player 'bankbalance:0'
                    - ^run "manage_account_task"
            proximity trigger:
                exit:
                    script:
                    - narrate format:banker_format "<light_purple>Thank you for visiting! We hope to see you again!"
                    - trigger name:chat toggle:false
                    - ^zap step:1
        6:
            chat trigger:
                'close_account':
                    trigger: '/REGEX:(1|y|yes|close)/'
                    script:
                    - trigger name:chat toggle:false
                    - narrate "<aqua>The Bank Clerk looks sad"
                    - ^give money qty:<player.flag[bankbalance]>
                    - narrate "<light_purple>You are now holding <green>β<player.money><light_purple>!"
                    - flag player 'bankbalance:0'
                    - flag player 'hasBankAccount:false'
                    - narrate format:banker_format "<light_purple>Your account has been closed."
                    - ^disengage
                'dont_close_account':
                    trigger: '/REGEX:(2|n|no|keep)/'
                    script:
                    - trigger name:chat toggle:false
                    - narrate format:banker_format "<light_purple>Oh good!  You had me worried there for a minute!"
                    - ^run "manage_account_task"
            proximity trigger:
                exit:
                    script:
                    - narrate format:banker_format "<light_purple>Thank you for your time with us! We hope to see you again soon!"
                    - trigger name:chat toggle:false
                    - ^zap step:1

welcome_task:
    type: task
    speed: 1t
    script:
    - if <player.flag[hadBankAccount]> != true {
      - narrate format:banker_format "<light_purple>Open a bank account today and get <green>β<npc.constant[signup_bonus]><light_purple>!"
      - narrate format:banker_format "<light_purple>It looks like you don<&sq>t have an account. Would you like to open one? You<&sq>ll get a special bonus for doing so."
      - narrate "<light_purple>1<aqua>) <dark_green>Yes let<&sq>s open an account"
      - narrate "<light_purple>2<aqua>) <dark_red>No thank you, not today"
      - trigger name:chat toggle:true
      - ^zap step:2 "s@bankerscript"
      } else {
        - narrate format:banker_format "<light_purple>It looks like you don<&sq>t have an account with us; open a bank account today and earn money on your savings!"
      - narrate "<light_purple>1<aqua>) <dark_green>Yes let<&sq>s open an account"
      - narrate "<light_purple>2<aqua>) <dark_red>No thank you, not today"
      - trigger name:chat toggle:true
      - ^zap step:2 "s@bankerscript"
      }
manage_account_task:
    type: task
    speed: 1t
    script:
    - trigger name:chat toggle:true
    - narrate format:banker_format "<light_purple>What would you like to do?"
    - narrate "<light_purple>1<aqua>) <green>Deposit<light_purple> money"
    - narrate "<light_purple>2<aqua>) <green>Withdraw<light_purple> money"
    - narrate "<light_purple>3<aqua>) <light_purple>Check your <green>balance"
    - narrate "<light_purple>4<aqua>) <dark_red>Close <light_purple>your account"
    - ^if <player.in_group[admin]> || <player.in_group[owner]> || <player.is_op> {
        - narrate "<gold> --- Admin Menu ---"
        - narrate "<light_purple>5<aqua>) <light_purple>Check Ledger"
        }
    - ^zap step:3 "s@bankerscript"
admin_check_ledger_task:
    type: task
    speed: 1t
    script:
    - ^if <player.in_group[admin]> || <player.in_group[owner]> || <player.is_op> {
        - narrate "<gold> --- Ledger ---"
        - flag global total_balance:0
        - foreach <server.list_players> {
            - define player %value%
            - ^if <%player%.flag[hasBankAccount]> == true {
                - narrate "<aqua><%player%.name> <white>has <yellow>$<%player%.flag[bankbalance]>"
                - flag global total_balance:+:<%player%.flag[bankbalance]>
                }
            }
        }
    - ^zap step:3 "s@bankerscript"
deposit_money_task:
    type: task 
    speed: 1t 
    script: 
    - narrate "<light_purple>You have <green>β<player.money><light_purple>." 
    - narrate format:banker_format "<light_purple>How much money would you like to deposit?" 
    - narrate "<light_purple>Please wait one moment then type the amount you would like to deposit or type <aqua>all<light_purple> to deposit all of your money." 
    - ^zap step:4 "s@bankerscript"
deposit_procedure:
    type: procedure
    script:
    - define to_deposit '<player.chat_history>'
    - flag player 'bankbalance:+:%to_deposit%'
    - ^take money qty:%to_deposit%
    - determine "<flag.p:bankbalance>"
withdraw_money_task:
    type: task
    speed: 1t
    script:
    - narrate "<light_purple>Your account balance is <green>β<player.flag[bankbalance]>"
    - narrate format:banker_format "<light_purple>How much would you like to withdraw?"
    - narrate "<light_purple>Please wait one moment then type the amount to withdraw or type <aqua>all<light_purple> to withdraw all"
    - ^zap step:5 "s@bankerscript"
withdraw_procedure:
    type: procedure
    script:
    - define to_withdraw '<player.chat_history>'
    - flag player 'bankbalance:-:%to_withdraw%'
    - ^give money qty:%to_withdraw%
    - determine "<flag.p:bankbalance>"
global_announce:
    type: task
    script:
    - foreach <server.get_npcs_assigned[banker]> {
      - define signup_bonus '<%value%.constant[signup_bonus]>'
      }
    - foreach <server.list_online_players> { 
        - ^if <%value%.flag[hadBankAccount]> != true {
            - narrate "<aqua>The bank is now open!" targets:%value%
            - narrate "<aqua>Come open your account today and get a bonus <green>β%signup_bonus%<aqua>!" targets:%value%
            } 
        - ^if <%value%.flag[hasBankAccount]> != true {
            - narrate "<aqua>The bank is now open!" targets:%value%
            - narrate "<aqua>Come open your account today and earn money on your savings!" targets:%value%
            }
        } 
apply_money_interest:
    type: task
    script:
    - foreach <server.get_npcs_assigned[banker]> {
      - define interest '<%value%.constant[daily_interest]>'
      - define interest_online '<%value%.constant[daily_interest_online]>'
      }
    - foreach <server.list_players> {
        - define player %value%
        - ^if <%player%.flag[hasBankAccount]> == true {
            - flag %player% player_interest:<%player%.flag[bankbalance]>
            - ^if <%player%.is_online> {
                - flag %player% player_interest:*:%interest_online%
                } else {
                - flag %player% player_interest:*:%interest%
                }

            - flag %player% player_interest:*:100
            - flag %player% player_interest:<%player%.flag[player_interest].asint>
            - flag %player% player_interest:/:100

            - flag %player% player_overall_interest:+:<%player%.flag[player_interest]>
            - flag %player% player_overall_interest:*:100
            - flag %player% player_overall_interest:<%player%.flag[player_overall_interest].asint>
            - flag %player% player_overall_interest:/:100

            - flag %player% player_sincelogin_interest:+:<%player%.flag[player_interest]>
            - flag %player% player_sincelogin_interest:*:100
            - flag %player% player_sincelogin_interest:<%player%.flag[player_sincelogin_interest].asint>
            - flag %player% player_sincelogin_interest:/:100

            - flag %player% bankbalance:+:<%player%.flag[player_interest]>
            - flag %player% bankbalance:*:100
            - flag %player% bankbalance:<%player%.flag[bankbalance].asint>
            - flag %player% bankbalance:/:100

            - ^if <%player%.is_online> {
                - narrate "<aqua>Bank<&co> <light_purple>You received <green>β<%player%.flag[player_interest]><light_purple> in interest, and now have <green>β<%player%.flag[bankbalance]><light_purple> in your bank." targets:%player%
                - flag %player% player_sincelogin_interest:0
                }
            }
        }
    - execute as_server 'denizen save'
    - execute as_server 'citizens save'

bank_interest_announce:
    type: task
    speed: 1t
    script:
    - ^if <player.flag[hasBankAccount]> == true {
        - ^if <player.flag[player_sincelogin_interest]> > 0 {
            - narrate '<aqua>Bank<&co> <light_purple>You have earned <green>β<player.flag[player_sincelogin_interest]><light_purple> in interest since you last logged on.'
            - narrate '<aqua>Bank<&co> <light_purple>You have earned <green>β<player.flag[player_overall_interest]><light_purple> in overall interest.'
            - flag player player_sincelogin_interest:0
            }
        }