summaryrefslogblamecommitdiff
path: root/npc/functions/banker.txt
blob: 5692d2382ead7dfee65ade5b2df00c4433df0ad3 (plain) (tree)




















































































































                                                                                                     

                                 


                                    
         





                                                             
                                                                            
































                                                                                            








                                                                                                                             
         
                         


                                                                    
                         


                      
 
// 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?"),
            rif(getcharid(2) > 0, l("I would like to open Guild Storage.")),
            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;
        case 4:
            if (getcharid(3) != getguildinfo(GUILDINFO_MASTER_CID, getcharid(2))) {
                mesn;
                mesq l("Only %s is authorized to use the Guild Storage.", getguildinfo(GUILDINFO_MASTER_NAME, getcharid(2)));
                break;
            } else {
                if (guildopenstorage())
                    mesc l("Storage temporarily unavailable, someone else might be using it.");
            }
        }
        if (@menu != 5) {
            speech S_FIRST_BLANK_LINE | S_LAST_NEXT | S_NO_NPC_NAME,
                l("Something else?");
        }
    } while (@menu != 5);
    closeclientdialog;
    goodbye;
    close;
}