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

Revision 1, 8.7 kB (checked in by jinshiro, 17 years ago)
RevLine 
[1]1//===== eAthena Script =======================================
2//= Kafra Express - Refining Module
3//===== By: ==================================================
4//= Skotlex
5//===== Current Version: =====================================
6//= 2.8
7//===== Compatible With: =====================================
8//= eAthena SVN R3424+
9//===== Description: =========================================
10//= Part of the Kafra Express Script Package.
11//= Does item forging, ore purifying and repairing.
12//= Can also sell phracon/emveretarcon
13//===== Additional Comments: =================================
14//= See config.txt for configuration.
15//============================================================
16
17-       script  keInit_refine   -1,{
18OnInit: //Load Config
19        donpcevent "keConfig::OnLoadRefine";
20        end;
21}
22
23function        script  F_keRefine      {
24
25function SF_refine;
26function SF_repair;
27function SF_purify;
28function SF_sellOres;
29
30        do {
31                set @kmenu, select(
32                        "- Return",
33                        "- Refine Equipment",
34                        "- Repair Equipment",
35                        "- Buy Ores",
36                        "- Purify Ores"
37                );
38                switch(@kmenu) {
39                case 2: //Refine
40                        SF_refine();
41                        break;
42                case 3: //Repair
43                        SF_repair();
44                        break;
45                case 4: //Buy Ore
46                        SF_sellOres();
47                        break;
48                case 5: //Purify Ore
49                        SF_purify();
50                        break;
51                }
52        } while (@kmenu > 1);
53        return;
54
55//Subfunction SF_refine, presents the refining menu.
56function        SF_refine {
57        do {
58                set @part, select(
59                        "- Cancel upgrading",
60                        "- "+getequipname(1),
61                        "- "+getequipname(2),
62                        "- "+getequipname(3),
63                        "- "+getequipname(4),
64                        "- "+getequipname(5),
65                        "- "+getequipname(6),
66                        "- "+getequipname(7),
67                        "- "+getequipname(8),
68                        "- "+getequipname(9),
69                        "- "+getequipname(10)
70                );
71                set @part, @part-1;
72                if (@part == 0)
73                        break;
74                if (getequipisequiped(@part) == 0) {
75                        callfunc "F_keIntro", e_swt, "There is nothing to refine there...";
76                } else
77                if(getequipisenableref(@part) == 0 && $@kerf_refineAll == 0) {
78                        callfunc "F_keIntro", -1, "Sorry, this item cannot be refined.";
79                } else
80                if(getequiprefinerycnt(@part) >= $@kerf_maxLv) {
81                        callfunc "F_keIntro", -1, "This item cannot be refined further.";
82                        break;
83                } else {
84                        switch (getequipweaponlv(@part))
85                        {
86                        case 0: //Armor
87                                set @mat,985;
88                                set @cost,$@kerf_armorCost;
89                                break;
90                        case 1:
91                                set @mat,1010;
92                                set @cost,$@kerf_weaponLv1Cost;
93                                break;
94                        case 2:
95                                set @mat,1011;
96                                set @cost,$@kerf_weaponLv2Cost;
97                                break;
98                        case 3:
99                                set @mat,984;
100                                set @cost,$@kerf_weaponLv3Cost;
101                                break;
102                        default:
103                                set @mat,984;
104                                set @cost,$@kerf_weaponLv4Cost;
105                                break;
106                        }
107                        set @cost, callfunc("F_keCost",@cost,$@kerf_discount);
108                        do {
109                                if ($@kerf_safe==0 && getequippercentrefinery(@part) < 100) {
110                                        if ($@kerf_showChance) {
111                                                if (select(
112                                                        "- Return ("+(100-getequippercentrefinery(@part))+"% chance refine will fail)",
113                                                        "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)") != 2)
114                                                        break;
115                                        } else {
116                                                if (select(
117                                                        "- Return (Upgrade not safe, item might break!)",
118                                                        "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)") != 2)
119                                                        break;
120                                        }
121                                } else {
122                                        if (select(
123                                                "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)",
124                                                "- Cancel") != 1)
125                                                break;
126                                }
127                                if (getequiprefinerycnt(@part) >= $@kerf_maxLv) {
128                                        callfunc "F_keIntro", e_ok, "This item has reached it's maximum level.";
129                                        break;
130                                }
131                                if (countitem(@mat) < 1) {
132                                        callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
133                                        break;
134                                }
135                                if (!(callfunc("F_keCharge",@cost,$@kerf_discount,1))) {
136                                        callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
137                                        break;
138                                }
139                                delitem @mat,1;
140                                if ($@kerf_safe || getequippercentrefinery(@part)>rand(100)) {
141                                        successrefitem @part;
142                                        emotion e_rock;
143                                } else {
144                                        failedrefitem @part;
145                                        callfunc "F_keIntro", e_swt, "...sorry.";
146                                        break;
147                                }
148                        } while (1);
149                }
150        } while (@part > 0);
151        return;
152}
153
154//Subfunction: SF_repair()
155function        SF_repair {
156        set @cost,callfunc("F_keCost",$@kerf_repairCost,$@kerf_repairDiscount);
157        do {
158                set @broken1,getbrokenid(1);
159                if(@broken1==NULL) {
160                        callfunc "F_keIntro", -1, "You don't need anything repaired for now.";
161                        return;
162                }
163                set @broken2,getbrokenid(2);
164                set @broken3,getbrokenid(3);
165                set @broken4,getbrokenid(4);
166                set @broken5,getbrokenid(5);
167                set @broken6,getbrokenid(6);
168                set @broken7,getbrokenid(7);
169                set @broken8,getbrokenid(8);
170                set @broken9,getbrokenid(9);
171                set @broken10,getbrokenid(10);
172
173                if ($@kerf_repairSteel)
174                        set @str$,"- Cancel (Repairing costs "+@cost+"z and 1 "+getitemname(999);
175                else
176                        set @str$,"- Cancel (Repairing costs "+@cost+"z)";
177
178                set @idRepair, select(
179                        @str$,
180                        getitemname(@broken1),
181                        getitemname(@broken2),
182                        getitemname(@broken3),
183                        getitemname(@broken4),
184                        getitemname(@broken5),
185                        getitemname(@broken6),
186                        getitemname(@broken7),
187                        getitemname(@broken8),
188                        getitemname(@broken9),
189                        getitemname(@broken10)
190                );
191                set @idRepair, @idRepair-1;
192                if (@idRepair == 0) break;
193                if ($@kerf_repairSteel && countitem(999) < 1) {
194                        callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
195                        return;
196                }
197                if (!(callfunc("F_keCharge", $@kerf_repairCost, $@kerf_repairDiscount,1))) {
198                        callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
199                        return;
200                }
201                if ($@kerf_repairSteel) delitem 999,1;
202                repair(@idRepair);
203                emotion e_lv2;
204        } while (@idRepair > 0);
205}
206
207//Subfunction: SF_purify()
208function SF_purify {
209        if ($@kerf_purifyAll) {
210                set @submenu, select (
211                        "- Return",
212                        "- Purify "+getitemname(984)+" (need 5 "+getitemname(756)+")",
213                        "- Purify "+getitemname(985)+" (need 5 "+getitemname(757)+")",
214                        "- Purify "+getitemname(998)+" (need 2 "+getitemname(1002)+")",
215                        "- Temper "+getitemname(999)+" (need 5 "+getitemname(998)+", 1 "+getitemname(1003)+")",
216                        "- Temper "+getitemname(994)+" (need 10 "+getitemname(990)+")",
217                        "- Temper "+getitemname(995)+" (need 10 "+getitemname(991)+")",
218                        "- Temper "+getitemname(996)+" (need 10 "+getitemname(992)+")",
219                        "- Temper "+getitemname(997)+" (need 10 "+getitemname(993)+")",
220                        "- Temper "+getitemname(1000)+" (need 10 "+getitemname(1001)+")"
221                );
222        } else {
223                set @submenu, select(
224                        "- Return",
225                        "- Purify "+getitemname(984)+" (need 5 "+getitemname(756)+")",
226                        "- Purify "+getitemname(985)+" (need 5 "+getitemname(757)+")"
227                );
228        }
229        switch (@submenu) {
230        case 2: //Oridecon
231                set @item, 984;
232                set @rough, 756;
233                set @qty, 5;
234                break;
235        case 3: //Elunium
236                set @item, 985;
237                set @rough, 757;
238                set @qty, 5;
239                break;
240        case 4: //Iron
241                set @item, 998;
242                set @rough, 1002;
243                set @qty, 2;
244                break;
245        case 5: //Steel
246                set @item,999;
247                set @rough,998;
248                set @qty,5;
249                set @rough2,1003;
250                set @qty2,1;
251
252                set @count,countitem(@rough1);
253                set @count2,countitem(@rough2);
254                if (@count < @qty || @count2 < @qty2) {
255                        callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
256                        return;
257                }
258                set @count, @count/@qty;
259                set @count2, @count2/@qty2;
260                if (@count2 < @count)
261                        set @count,@count2;
262                delitem @rough2,@qty2*@count;
263                break;
264        case 6: //Fire
265                set @item, 994;
266                set @rough, 990;
267                set @qty, 10;
268                break;
269        case 7: //Ice   
270                set @item, 995;
271                set @rough, 991;
272                set @qty, 10;
273                break;
274        case 8: //Wind
275                set @item, 996;
276                set @rough, 992;
277                set @qty, 10;
278                break;
279        case 9: //Earth
280                set @item, 997;
281                set @rough, 993;
282                set @qty, 10;
283                break;
284        case 10: //Star
285                set @item, 1000;
286                set @rough, 1001;
287                set @qty, 10;
288                break;
289        default:
290                return;
291        }
292        set @count,countitem(@rough);
293        if (@count < @qty) {
294                callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
295                return;
296        }
297        set @count, @count/@qty;
298        delitem @rough,@qty*@count;
299        getitem @item,@count;
300        emotion e_paper;
301}
302
303//Subfunction: SF_sellOres()
304function SF_sellOres {
305        do {
306                set @submenu, select(
307                        "- Return",
308                        "- Buy "+getitemname(1010)+" (200z each)",
309                        "- Buy "+getitemname(1011)+" (1000z each)"
310                );
311                switch (@submenu) {
312                case 2: //Phracon
313                        set @mat, 1010;
314                        set @cost, 200;
315                        break;
316                case 3: //Emveratarcon
317                        set @mat, 1011;
318                        set @cost, 1000;
319                        break;
320                default:
321                        return;
322                }
323                input @qty;
324                set @cost,@cost*@qty;
325                if (@qty < 1) {
326                        callfunc "F_keIntro", e_pif, "That is NOT a valid quantity...";
327                } else if (@cost > Zeny) {
328                        callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
329                } else if (@cost < 0) {
330                        callfunc "F_keIntro", e_swt2, "Sorry, that's too much! Try buying less...";
331                } else {
332                        set Zeny,Zeny-@cost;
333                        getitem @mat,@qty;
334                        emotion e_paper;
335                }
336        } while (@submenu > 1);
337}
338
339}
Note: See TracBrowser for help on using the browser.