// Bank scripts
function script Banking {
do
{
if (BankVault > 0) {
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("You currently have @@ GP on your bank account.",
format_number(BankVault)),
l("What do you want to do with your money?");
} else {
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("What do you want to do with your money?");
}
select
rif(Zeny > 0, l("Deposit.")),
rif(BankVault > 0, l("Withdraw.")),
l("I'm done.");
switch (@menu)
{
case 1:
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("How much do you want to deposit?");
menuint
l("Other."), -1,
rif(Zeny >= 1000, format_number(1000) + " GP."), 1000,
rif(Zeny >= 2500, format_number(2500) + " GP."), 2500,
rif(Zeny >= 5000, format_number(5000) + " GP."), 5000,
rif(Zeny >= 10000, format_number(10000) + " GP."), 10000,
rif(Zeny >= 25000, format_number(25000) + " GP."), 25000,
rif(Zeny >= 50000, format_number(50000) + " GP."), 50000,
rif(Zeny >= 100000, format_number(100000) + " GP."), 100000,
l("All of my money."), -2,
l("I changed my mind."), -3;
switch (@menuret) {
case -1:
input @menuret;
break;
case -2:
@menuret = Zeny;
}
if (@menuret > 0) {
if (@menuret > Zeny) {
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("You do not have enough Gold on yourself.");
break;
}
@menuret = min(MAX_BANK_ZENY, @menuret); // make sure the variable can't overflow
.@before = BankVault; // amount before the deposit
.@max = MAX_BANK_ZENY - BankVault; // maximum possible deposit
.@deposit = min(.@max, @menuret); // actual deposit
if (.@deposit > 0) {
BankVault += .@deposit; // add to bank
Zeny -= .@deposit; // remove from inventory
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("You made a cash deposit of @@ GP.", format_number(.@deposit));
}
}
break;
case 2:
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("How much do you want to withdraw?");
menuint
l("Other."), -1,
rif(BankVault >= 1000, format_number(1000) + " GP."), 1000,
rif(BankVault >= 2500, format_number(2500) + " GP."), 2500,
rif(BankVault >= 5000, format_number(5000) + " GP."), 5000,
rif(BankVault >= 10000, format_number(10000) + " GP."), 10000,
rif(BankVault >= 25000, format_number(25000) + " GP."), 25000,
rif(BankVault >= 50000, format_number(50000) + " GP."), 50000,
rif(BankVault >= 100000, format_number(100000) + " GP."), 100000,
l("All of my money."), -2,
l("I changed my mind."), -3;
switch (@menuret)
{
case -1:
input @menuret;
break;
case -2:
@menuret = BankVault;
}
if (@menuret > 0) {
if (@menuret > BankVault) {
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("You do not have enough Gold Pieces on your bank account.");
break;
}
@menuret = min(MAX_ZENY, @menuret); // make sure the variable can't overflow
.@before = Zeny; // amount before the withdrawal
.@max = MAX_ZENY - Zeny; // maximum possible withdrawal
.@withdrawal = min(.@max, @menuret); // actual withdrawal
if (.@withdrawal > 0) {
Zeny += .@withdrawal; // add to inventory
BankVault -= .@withdrawal; // remove from bank
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("You withdrew a total of @@ GP.", format_number(.@withdrawal));
}
}
break;
default: return;
}
} while (true);
}
function script Banker {
mesn;
mes l("\"Welcome to the bank!");
mes l("How can I help you?\"");
next;
do
{
select
l("I would like to store some items."),
l("I would like to perform money transactions."),
l("Did I received any mail?"),
l("Bye.");
switch (@menu) {
case 1:
closeclientdialog;
openstorage;
close;
break;
case 2:
Banking();
// Shader quest
if (BankVault >= 10000000 &&
BaseLevel >= 85 &&
getq(General_Banker) < 1) {
mesq l("Oh.");
next;
mesq l("It seems you managed to amass quite a fortune!");
next;
mesq l("Thank you for using our services. Please accept this little gift.");
setq General_Banker, 1;
getitem CashiersShade, 1;
next;
}
break;
case 3:
// NOTE: These values are HARDCODED, do not try changing it!
mesc l("Note: Transfering items on mail cost %s GP/item", fnum(2500));
mesc l("Money transference will have a %d %% fee as well.", 2);
next;
closeclientdialog;
openmail();
close;
break;
}
if (@menu != 4) {
speech S_FIRST_BLANK_LINE | S_LAST_NEXT | S_NO_NPC_NAME,
l("Something else?");
}
} while (@menu != 4);
closeclientdialog;
goodbye;
close;
}