#include maps\mp\zombies\_zm_banking; #include maps\mp\_utility; #include common_scripts\utility; #include maps\mp\zombies\_zm_utility; init() { onplayerconnect_callback(::onplayerconnect_bank_deposit_box); if (!isDefined(level.ta_vaultfee)) { level.ta_vaultfee = 100; } if (!isDefined(level.ta_tellerfee)) { level.ta_tellerfee = 100; } } onplayerconnect_bank_deposit_box() { self.account_value = 0; self thread gain_interest_after_rounds(); } gain_interest_after_rounds() { self endon("disconnect"); while (1) { level waittill("end_of_round"); self.account_value *= 1.1; if (self.account_value > level.bank_account_max) { self.account_value = level.bank_account_max; } self notify("update_account_value"); } } bank_deposit_box() { level.bank_deposit_max_amount = 250000; level.bank_deposit_ddl_increment_amount = 1000; level.bank_account_max = level.bank_deposit_max_amount / level.bank_deposit_ddl_increment_amount; level.bank_account_increment = int(level.bank_deposit_ddl_increment_amount / 1000); deposit_triggers = getstructarray("bank_deposit", "targetname"); array_thread(deposit_triggers, ::bank_deposit_unitrigger); withdraw_triggers = getstructarray("bank_withdraw", "targetname"); array_thread(withdraw_triggers, ::bank_withdraw_unitrigger); } bank_deposit_unitrigger() { bank_unitrigger("bank_deposit", ::trigger_deposit_update_prompt, ::trigger_deposit_think, 5, 5, undefined, 5); } bank_withdraw_unitrigger() { bank_unitrigger("bank_withdraw", ::trigger_withdraw_update_prompt, ::trigger_withdraw_think, 5, 5, undefined, 5); } trigger_deposit_think() { self endon("kill_trigger"); while (1) { self waittill("trigger", player); while (!is_player_valid(player)) { continue; } if (player.account_value < level.bank_account_max) { account_value = level.bank_account_increment; score = level.bank_deposit_ddl_increment_amount; if (score > player.score) { account_value = player.score / level.bank_deposit_ddl_increment_amount; score = player.score; } if ((player.account_value + account_value) > level.bank_account_max) { account_value = level.bank_account_max - player.account_value; score = round_up_to_ten(int(account_value * level.bank_deposit_ddl_increment_amount)); score -= score % 10; } player playsoundtoplayer("zmb_vault_bank_deposit", player); player.score -= score; player.account_value += account_value; if (isDefined(level.custom_bank_deposit_vo)) { player thread [[level.custom_bank_deposit_vo]](); } if ((player.score <= 0) || (player.account_value >= level.bank_account_max)) { self sethintstring(""); } } else { player thread do_player_general_vox("general", "exert_sigh", 10, 50); } self thread show_balance(player); } } trigger_withdraw_think() { self endon("kill_trigger"); while (1) { self waittill("trigger", player); while (!is_player_valid(player)) { continue; } if (player.account_value > 0) { score = level.bank_deposit_ddl_increment_amount; account_value = level.bank_account_increment; if (account_value > player.account_value) { account_value = player.account_value; score = round_up_to_ten(int(account_value * level.bank_deposit_ddl_increment_amount)); } player playsoundtoplayer("zmb_vault_bank_withdraw", player); player.score += score; level notify("bank_withdrawal"); player.account_value -= account_value; if (isDefined(level.custom_bank_withdrawl_vo)) { player thread [[level.custom_bank_withdrawl_vo]](); } else { player thread do_player_general_vox("general", "exert_laugh", 10, 50); } if (player.account_value <= 0) { self sethintstring(""); } } else { player thread do_player_general_vox("general", "exert_sigh", 10, 50); } self thread show_balance(player); } } trigger_deposit_update_prompt(player) { self thread show_balance(player); if ((player.score <= 0) || (player.account_value >= level.bank_account_max)) { self sethintstring(""); return 0; } self sethintstring(&"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount); return 1; } trigger_withdraw_update_prompt(player) { self thread show_balance(player); if (player.account_value <= 0) { self sethintstring(""); return 0; } self sethintstring(&"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount); return 1; } show_balance(player) { stub = self.stub; if (!isDefined(stub.bankbalancehud)) { stub.bankbalancehud = []; } num = player getentitynumber(); if (isDefined(stub.bankbalancehud[num])) { player notify("update_account_value"); return; } hud = newclienthudelem(player); hud.alignx = "center"; hud.aligny = "middle"; hud.horzalign = "center"; hud.vertalign = "bottom"; hud.y = -100; hud.foreground = 1; hud.hidewheninmenu = 1; hud.font = "default"; hud.fontscale = 1; hud.alpha = 1; hud.color = (1, 1, 1); hud.label = &"ZOMBIE_HUD_ACCOUNT_BALANCE"; stub.bankbalancehud[num] = hud; hud thread update_balance(player); while (isDefined(self)) { if (!player isTouching(self) || !is_player_valid(player) || player isSprinting() || player isThrowingGrenade()) { hud.alpha = 0; wait 0.05; continue; } hud.alpha = 1; wait 0.05; } stub.bankbalancehud[num] destroy(); stub.bankbalancehud[num] = undefined; } update_balance(player) { self endon("death"); while (1) { self setvalue(round_up_to_ten(int(player.account_value * level.bank_deposit_ddl_increment_amount))); player waittill("update_account_value"); } }