root/npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt @ 1

Revision 1, 5.8 kB (checked in by jinshiro, 17 years ago)
RevLine 
[1]1//===== eAthena Script =======================================
2//= Kafra Express - Bank Module
3//===== By: ==================================================
4//= Skotlex
5//===== Current Version: =====================================
6//= 2.8
7//===== Compatible With: =====================================
8//= eAthena SVN R3524+
9//===== Description: =========================================
10//= Part of the Kafra Express Script Package.
11//= Offers banking services with daily interests, and
12//= withdrawal/deposit fees.
13//===== Additional Comments: =================================
14//= See config.txt for configuration.
15//============================================================
16
17-       script  keInit_bank     -1,{
18OnInit: //Load Config
19        donpcevent "keConfig::OnLoadBank";
20        end;
21}
22
23function        script  F_keBank        {
24
25        function        SF_calcInterest;
26        SF_calcInterest();
27       
28        do {
29                set @feeD,callfunc("F_keCost",$@kebk_depositCost,100);
30                set @maxDep,Zeny;
31                if (@maxDep > $@kebk_maxTransact)
32                        set @maxDep,$@kebk_maxTransact;
33                if (#ke_bank + @maxDep > $@kebk_capacity)
34                        set @maxDep,$@kebk_capacity-#ke_bank;
35
36                set @feeW,callfunc("F_keCost",$@kebk_withdrawCost,100);
37                set @maxWith,#ke_bank-(#ke_bank*@feeW/100);
38                if (@maxWith > $@kebk_maxTransact)
39                        set @maxWith,$@kebk_maxTransact;
40               
41                if (#ke_bank < $@kebk_capacity) {
42                        set @kmenu, select(
43                                "- Return (balance is "+#ke_bank+"z)",
44                                "- Deposit (up to "+@maxDep+"z - "+@feeD+"% fee)",
45                                "- Withdraw (up to "+@maxWith+"z + "+@feeW+"% fee)",
46                                "- Transfer from 1st B.o.P. ("+#bankstorage+"z)",
47                                "- Transfer from 2nd B.o.P. ("+#kafrabank+"z)"
48                        );
49                } else {
50                        set @kmenu, select(
51                                "- Return (balance is "+#ke_bank+"z)",
52                                "- Withdraw (up to "+@maxWith+"z + "+@feeW+"% fee)",
53                                "- Transfer from 1st B.o.P. ("+#bankstorage+"z)",
54                                "- Transfer from 2nd B.o.P. ("+#kafrabank+"z)"
55                        );
56                        if (@kmenu > 1)
57                                set @kmenu, @kmenu+1;
58                }
59                switch (@kmenu) {
60                case 2: //Deposit
61                        input @amount; 
62                        if (@amount < $@kebk_minTransact) {
63                                callfunc "F_keIntro", -1, "Sorry, the minimum transaction value is "+$@kebk_minTransact+"z.";
64                                break;
65                        }
66                        if (@amount > @maxDep) {
67                                callfunc "F_keIntro", e_an, "You can't deposit that quantity!";
68                                break;
69                        }
70                        set #ke_bank,#ke_bank+@amount-(@amount*@feeD/100);
71                        if ($@kebk_useGlobalBank)
72                                set $ke_globalbank, $ke_globalbank +@amount*@feeD/100;
73                        set Zeny,Zeny-@amount;
74                        emotion e_cash;
75                        break;
76
77                case 3: //Withdraw
78                        input @amount;
79                        if (@amount < $@kebk_minTransact) {
80                                callfunc "F_keIntro", -1, "Sorry, the minimum transaction value is "+$@kebk_minTransact+"z.";
81                                break;
82                        }
83                        if (@amount > @maxWith) {
84                                callfunc "F_keIntro", e_X, "You can't withdraw that quantity!";
85                                break;
86                        }
87                        set #ke_bank,#ke_bank-@amount-(@amount*@feeW/100);
88                        if ($@kebk_useGlobalBank)
89                                set $ke_globalbank, $ke_globalbank +@amount*@feeW/100;
90                        set Zeny,Zeny+@amount;
91                        emotion e_oh;
92                        break;
93                       
94                case 4: //1st B.o.P.
95                        if (#bankstorage==0) {
96                                callfunc "F_keIntro", -1, "Sorry, there is nothing left to transfer.";
97                                break;
98                        }
99                        callfunc "F_keIntro", -1, #bankstorage+"z have been transferred from your account in the First Bank of Prontera.";
100                        set #ke_bank,#ke_bank+#bankstorage;
101                        set #bankstorage,0;
102                        break;
103
104                case 5: //2nd B.o.P.
105                        if (#kafrabank==0) {
106                                callfunc "F_keIntro", -1, "Sorry, there is nothing left to transfer.";
107                                break;
108                        }
109                        callfunc "F_keIntro", -1, #kafrabank+"z have been transferred from your account in the Second Bank of Prontera.";
110                        set #ke_bank,#ke_bank+#kafrabank;
111                        set #kafrabank,0;
112                        break;
113                }
114        } while (@kmenu > 1);
115return;
116
117//Subfunction: SF_calcInterest
118//Calculates the interests gained on the account. Uses 30-day months
119function        SF_calcInterest {
120        set @day,gettime(5);
121        if (@day>30)
122                set @day,30; //Use 30 day-months
123        set @month,gettime(6);
124        if (#ke_banktick == 0) { //Init bank.
125                set #ke_banktick,gettime(6)*30+@day;
126                if ($@kebk_monMaintenance < 1) return;
127                set #ke_bankmtick,@month;
128                return;
129        }
130        set @banktick,gettime(6)*30+@day;
131        if (@banktick == #ke_banktick) return;
132        if (@banktick < #ke_banktick) { //Year change.
133                do {
134                        set #ke_banktick,#ke_banktick-360;
135                        if ($@kebk_monMaintenance > 0) set #ke_bankmtick,#ke_bankmtick-12;
136                } while (@banktick < #ke_banktick);
137        }
138        if ($@kebk_monMaintenance > 0 && #ke_bankmtick < @month){       //Month change
139                set @qty,0;
140                do {
141                        if (#ke_bank < $@kebk_monMaintenance) {
142                                if (@qty>0)
143                                        mes "You've been charged "+@qty+"z for account maintenance, but it was not enough.";
144                                if ($@kebk_useGlobalBank)
145                                        set $ke_globalbank, $ke_globalbank + @qty;
146                                mes "You owe the Bank "+($@kebk_monMaintenance*(#ke_bankmtick-@month))+"z for maintenance costs. Until paid you won't earn interests...";
147                                return;
148                        }
149                        set @qty, @qty+$@kebk_monMaintenance;
150                        set #ke_bankmtick,#ke_bankmtick+1;
151                        set #ke_bank, #ke_bank-$@kebk_monMaintenance;
152                } while (#ke_bankmtick < @month);
153                mes "You've been charged "+@qty+"z for account maintenance.";
154                if ($@kebk_useGlobalBank)
155                        set $ke_globalbank, $ke_globalbank + @qty;
156        }
157        set @qty,0;
158        if (#ke_bank > $@kebk_monMaintenance && #ke_bank < $@kebk_capacity)
159        {
160                if (#ke_bank > 1000000) //Overflow protection
161                        set @qty,(#ke_bank/10000)*$@kebk_dayInterest*(@banktick-#ke_banktick);
162                else
163                        set @qty,#ke_bank*$@kebk_dayInterest*(@banktick-#ke_banktick)/10000;
164        }
165        set #ke_banktick,@banktick;
166        if (@qty == 0) return;
167        if (@qty < 0) {
168                callfunc "F_keIntro", -1, "Sorry, your gained interests have been cancelled for being way too much.";
169                return;
170        }
171        if (#ke_bank + @qty > $@kebk_capacity)
172                set #ke_bank, $@kebk_capacity;
173        else
174                set #ke_bank,#ke_bank+@qty;
175
176        callfunc "F_keIntro", -1, "Since your last visit, you've earned an interest of "+@qty+"z!";
177}       //SF end
178
179}
180
Note: See TracBrowser for help on using the browser.