bank_world: type: world events: on bank command: - narrate "Your current bank account balance is β" - 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: <&co> 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 != true { - ^run "welcome_task" } else { - ^run "manage_account_task" } click trigger: script: - if == true { - ^run "manage_account_task" } else { - ^run "welcome_task" } exit: script: - narrate format:banker_format "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 != true { - narrate format:banker_format "That<&sq>s great! Here<&sq>s your β for opening an account" - narrate "Your bank account has been opened and now has a balance of β." - announce " has just opened a bank account and received β for free! Come open yours today if you haven<&sq>t already!" - ^flag player hadBankAccount:true - ^flag player bankbalance: } - ^flag player hasBankAccount:true - narrate "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 "The Bank Clerk looks sad" - narrate format:banker_format "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 "Your current balance is β" - ^run "manage_account_task" 'close_account': trigger: '/REGEX:(4|close|c)/' script: - narrate format:banker_format "Oh no! Are you sure that you<&sq>d like to do that? You<&sq>ve earned β in interest so far." - narrate "1) Yes I<&sq>m sure. Close my account" - narrate "2) 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 "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 '' >= narrate format:banker_format "There is now β in your account" else narrate format:banker_format "You don<&sq>t have β 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:+: - ^take money qty: - ^run "manage_account_task" proximity trigger: exit: script: - narrate format:banker_format "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 '' >= narrate format:banker_format "You have withdrawn β from your account; your remaining balance is β" else narrate format:banker_format "You don<&sq>t have β to withdraw!" - trigger name:chat toggle:false - ^run "manage_account_task" 'withdraw_money_all': trigger: '/all/' script: - trigger name:chat toggle:false - narrate "You have emptied your bank account!" - narrate "You are now holding β!" - ^give money qty: - flag player 'bankbalance:0' - ^run "manage_account_task" proximity trigger: exit: script: - narrate format:banker_format "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 "The Bank Clerk looks sad" - ^give money qty: - narrate "You are now holding β!" - flag player 'bankbalance:0' - flag player 'hasBankAccount:false' - narrate format:banker_format "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 "Oh good! You had me worried there for a minute!" - ^run "manage_account_task" proximity trigger: exit: script: - narrate format:banker_format "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 != true { - narrate format:banker_format "Open a bank account today and get β!" - narrate format:banker_format "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 "1) Yes let<&sq>s open an account" - narrate "2) No thank you, not today" - trigger name:chat toggle:true - ^zap step:2 "s@bankerscript" } else { - narrate format:banker_format "It looks like you don<&sq>t have an account with us; open a bank account today and earn money on your savings!" - narrate "1) Yes let<&sq>s open an account" - narrate "2) 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 "What would you like to do?" - narrate "1) Deposit money" - narrate "2) Withdraw money" - narrate "3) Check your balance" - narrate "4) Close your account" - ^if || || { - narrate " --- Admin Menu ---" - narrate "5) Check Ledger" } - ^zap step:3 "s@bankerscript" admin_check_ledger_task: type: task speed: 1t script: - ^if || || { - narrate " --- Ledger ---" - flag global total_balance:0 - foreach { - define player %value% - ^if <%player%.flag[hasBankAccount]> == true { - narrate "<%player%.name> has $<%player%.flag[bankbalance]>" - flag global total_balance:+:<%player%.flag[bankbalance]> } } } - ^zap step:3 "s@bankerscript" deposit_money_task: type: task speed: 1t script: - narrate "You have β." - narrate format:banker_format "How much money would you like to deposit?" - narrate "Please wait one moment then type the amount you would like to deposit or type all to deposit all of your money." - ^zap step:4 "s@bankerscript" deposit_procedure: type: procedure script: - define to_deposit '' - flag player 'bankbalance:+:%to_deposit%' - ^take money qty:%to_deposit% - determine "" withdraw_money_task: type: task speed: 1t script: - narrate "Your account balance is β" - narrate format:banker_format "How much would you like to withdraw?" - narrate "Please wait one moment then type the amount to withdraw or type all to withdraw all" - ^zap step:5 "s@bankerscript" withdraw_procedure: type: procedure script: - define to_withdraw '' - flag player 'bankbalance:-:%to_withdraw%' - ^give money qty:%to_withdraw% - determine "" global_announce: type: task script: - foreach { - define signup_bonus '<%value%.constant[signup_bonus]>' } - foreach { - ^if <%value%.flag[hadBankAccount]> != true { - narrate "The bank is now open!" targets:%value% - narrate "Come open your account today and get a bonus β%signup_bonus%!" targets:%value% } - ^if <%value%.flag[hasBankAccount]> != true { - narrate "The bank is now open!" targets:%value% - narrate "Come open your account today and earn money on your savings!" targets:%value% } } apply_money_interest: type: task script: - foreach { - define interest '<%value%.constant[daily_interest]>' - define interest_online '<%value%.constant[daily_interest_online]>' } - foreach { - 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 "Bank<&co> You received β<%player%.flag[player_interest]> in interest, and now have β<%player%.flag[bankbalance]> 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 == true { - ^if > 0 { - narrate 'Bank<&co> You have earned β in interest since you last logged on.' - narrate 'Bank<&co> You have earned β in overall interest.' - flag player player_sincelogin_interest:0 } }