OSDN Git Service

First version
[st-ro/stro.git] / npc / merchants / socket_enchant.txt
1 //===== rAthena Script =======================================
2 //= Episode 11.1 Socket Enchant NPC
3 //===== By: ==================================================
4 //= rAthena Dev Team
5 //===== Current Version: =====================================
6 //= 2.0a
7 //===== Compatible With: =====================================
8 //= rAthena Project
9 //===== Description: =========================================
10 //= [Official Conversion]
11 //= Adds slots to selected weapons and armor.
12 //===== Additional Comments: =================================
13 //= 0.1a added missing L_No: to 2 funcs [Lupus]
14 //= 0.1b Removed duplicates [Toms]
15 //= 0.2 Added missing next;'s [Evera]
16 //= 0.3 Fixed Zweihander[+] id [Lupus]
17 //= 1.0 Fixed ingredients check [Lupus]
18 //= 1.1 Updated to official. [SinSloth]
19 //= 1.1b Optimized/cleaned [ultramage]
20 //= 1.2 Fixed some typos and a nasty bug. [SinSloth]
21 //= 1.3 Fixed a wrong item ID with Sphinx Hat. [SinSloth]
22 //= 1.4 Corrected NPC names to fall within proper restrictions. [L0ne_W0lf]
23 //= 1.5 Removed Ontouch trigger area from NPCs. [L0ne_W0lf]
24 //= 1.6 Replaced effect numerics with constants. [Samuray22]
25 //= 1.7 Adjusted prices on some armor and weapons. [L0ne_W0lf]
26 //= 1.8 Added missing Gae Bolg and Dragon Slayer. [Kisuka]
27 //= 1.9 Moved Episode 12 items to separate NPC.
28 //=     Some cleanup & optimization. [Gepard]
29 //= 2.0 Duplicates now spawn from floating NPCs. [L0ne_W0lf]
30 //= 2.0a Added 'disable_items' command. [Euphy]
31 //============================================================
32
33 -       script  Seiyablem#dummy::SocketEnchant  -1,{
34         if (checkweight(1201,1) == 0)
35         {
36                 mes "- Wait a minute !! -";
37                 mes "- Currently you're carrying -";
38                 mes "- too many items with you. -";
39                 mes "- Please try again -";
40                 mes "- after you lose some weight. -";
41                 close;
42         }
43         mes "[Seiyablem]";
44         mes "I'm an engineer that specializes in adding Slots to normal Weapons and Armor.";
45         mes "My service fee, the required materials and the chance of success all depend on the specific item I'm working on.";
46         next;
47         mes "[Seiyablem]";
48         mes "Adding Slots may seem simple, but it's far more complicated than it looks.";
49         mes "If you're interested in my service, let me know.";
50         next;
51         switch(select("Add Slot to Weapon:Add Slot to Armor:Slot Attempt Info:Cancel"))
52         {
53                 case 1:
54                         mes "[Seiyablem]";
55                         mes "You want to add a Slot to a weapon?";
56                         mes "I categorize weapons by their difficulty in adding a Slot, C Class being easiest and S Class the most difficult.";
57                         mes "Which class would you like to try?";
58                         next;
59                         switch(select("C Class:B Class:A Class:S Class"))
60                         {
61                                 case 1:
62                                         mes "[Seiyablem]";
63                                         mes "C Class, eh?";
64                                         mes "Now, I can only upgrade certain equipment in that class, so please choose one of the following items, so we can try to add a Slot to it.";
65                                         next;
66                                         switch(select("Trident:Rope:Violin"))
67                                         {
68                                                 case 1: callfunc "Func_Socket",1460,1461,40,66,200,1010,10;
69                                                 case 2: callfunc "Func_Socket",1950,1951,40,66,200,1010,10;
70                                                 case 3: callfunc "Func_Socket",1901,1902,40,66,200,1010,10;
71                                         }
72                                 case 2:
73                                         mes "[Seiyablem]";
74                                         mes "B Class?";
75                                         mes "Alright, this is the average equipment category.";
76                                         mes "Please choose the weapon to which you'd like me to try to add a Slot.";
77                                         next;
78                                         switch(select("Chain:Gladius:Gakkung Bow:Pike:Haedonggum:Lute:Wire:Waghnakh:Arbalest Bow"))
79                                         {
80                                                 case 1: callfunc "Func_Socket",1519,1520,40,61,300,1010,10;
81                                                 case 2: callfunc "Func_Socket",1219,1220,40,61,300, 984, 1,999,5;
82                                                 case 3: callfunc "Func_Socket",1714,1716,40,61,300, 984, 2,999,5;
83                                                 case 4: callfunc "Func_Socket",1407,1408,40,61,200,1010,10;
84                                                 case 5: callfunc "Func_Socket",1123,1128,40,61,300, 984, 2,999,5;
85                                                 case 6: callfunc "Func_Socket",1905,1906,40,61,300,1011,10;
86                                                 case 7: callfunc "Func_Socket",1954,1955,40,61,300,1011,10;
87                                                 case 8: callfunc "Func_Socket",1801,1802,40,61,300,1010,10;
88                                                 case 9: callfunc "Func_Socket",1713,1715,40,61,300, 984, 2,999,5;
89                                         }
90                                 case 3:
91                                         mes "[Seiyablem]";
92                                         mes "Ooh, A Class.";
93                                         mes "This is some high risk territory!";
94                                         mes "Alright, which weapon would you like me to try adding a Slot?";
95                                         next;
96                                         switch(select("Hunter Bow:Survivor's Rod(INT):Zweihander:Flamberge:Infiltrator:Ballista:Stunner:Berserk:Claymore"))
97                                         {
98                                                 case 1: callfunc "Func_Socket",1718,1726,40,61,500,984,2,999,10;
99                                                 case 2: callfunc "Func_Socket",1619,1620,40,61,500,984,5,999,10;
100                                                 case 3: callfunc "Func_Socket",1168,1171,40,61,800,984,5,999,10;
101                                                 case 4: callfunc "Func_Socket",1129,1149,40,61,500,984,2,999,10;
102                                                 case 5: callfunc "Func_Socket",1261,1266,40,61,700,984,5,999,10;
103                                                 case 6: callfunc "Func_Socket",1722,1727,40,61,500,984,5,999,10;
104                                                 case 7: callfunc "Func_Socket",1522,1532,40,61,500,984,2,999,10;
105                                                 case 8: callfunc "Func_Socket",1814,1816,40,61,500,984,5,999,10;
106                                                 case 9: callfunc "Func_Socket",1163,1172,40,61,500,984,2,999,10; // NPC says "5 Oridecon" (Aegis) but takes only 2
107                                         }
108                                 case 4:
109                                         mes "[Seiyablem]";
110                                         mes "Whoa, whoa, whoa...";
111                                         mes "S class? Alright...";
112                                         mes "It'd be a near miracle if I can actually pull this off.";
113                                         mes "Okay... Which weapon shall we try adding a Slot to?";
114                                         next;
115                                         switch(select("Gungnir:Poison Knife:Ice Pick:Sucsamad:Ginnungagap:Cutlas:Crescent Scythe:Survivor's Rod(DEX)"))
116                                         {
117                                                 case 1: callfunc "Func_Socket", 1413, 1418,40,51,1000,984,5,999,10;
118                                                 case 2: callfunc "Func_Socket", 1239,13016,40,51,1000,984,5,999,10;
119                                                 case 3: callfunc "Func_Socket", 1230,13017,40,51,2000,984,5,999,10;
120                                                 case 4: callfunc "Func_Socket", 1236,13018,40,51,1000,984,5,999,10;
121                                                 case 5: callfunc "Func_Socket",13002,13019,40,51,1000,984,5,999,10;
122                                                 case 6: callfunc "Func_Socket", 1135,13400,40,51,1000,984,5,999,10;
123                                                 case 7: callfunc "Func_Socket", 1466, 1476,40,51,1000,984,5,999,10;
124                                                 case 8: callfunc "Func_Socket", 1617, 1618,40,51,2000,984,5,999,10;
125                                         }
126                         }
127                 case 2:
128                         mes "[Seiyablem]";
129                         mes "Armor, you said?";
130                         mes "Sure, no problem.";
131                         mes "Armor is divided into 4 different classes, depending on the work difficulty.";
132                         mes "C Class is the easiest one, and S Class he hardest one.";
133                         mes "Which class would you like to try?";
134                         next;
135                         switch(select("C Class:B Class:A Class:S Class"))
136                         {
137                                 case 1:
138                                         mes "[Seiyablem]";
139                                         mes "C Class Armor, eh?";
140                                         mes "Sounds reasonable.";
141                                         mes "Which armor would you like to try adding a Slot?";
142                                         next;
143                                         switch(select("Mantle:Coat:Circlet:Biretta"))
144                                         {
145                                                 case 1: callfunc "Func_Socket",2307,2308,40,66,200,999,3;
146                                                 case 2: callfunc "Func_Socket",2309,2310,40,66,200,999,3;
147                                                 case 3: callfunc "Func_Socket",2232,2233,40,66,200,999,3;
148                                                 case 4: callfunc "Func_Socket",2216,2217,40,66,200,999,3;
149                                         }
150                                 case 2:
151                                         mes "[Seiyablem]";
152                                         mes "You have chosen average B Class.";
153                                         mes "So, what kind of armor do you have?";
154                                         next;
155                                         switch(select("Mirror Shield:Chain Mail:Saint Robe:Silk Robe:Boots:Shoes:Muffler:Guard:Buckler:Shield:Bongun Hat"))
156                                         {
157                                                 case 1:  callfunc "Func_Socket",2107,2108,40,61,250,999,5;
158                                                 case 2:  callfunc "Func_Socket",2314,2315,40,61,250,999,5;
159                                                 case 3:  callfunc "Func_Socket",2325,2326,40,61,300,999,5;
160                                                 case 4:  callfunc "Func_Socket",2321,2322,40,61,300,999,5;
161                                                 case 5:  callfunc "Func_Socket",2405,2406,40,61,300,999,5;
162                                                 case 6:  callfunc "Func_Socket",2403,2404,40,61,300,999,5;
163                                                 case 7:  callfunc "Func_Socket",2503,2504,40,61,300,999,5;
164                                                 case 8:  callfunc "Func_Socket",2101,2102,40,61,300,999,5;
165                                                 case 9:  callfunc "Func_Socket",2103,2104,40,61,300,999,5;
166                                                 case 10: callfunc "Func_Socket",2105,2106,40,61,250,999,5;
167                                                 case 11: callfunc "Func_Socket",5046,5168,40,61,250,999,5;
168                                         }
169                                 case 3:
170                                         mes "[Seiyablem]";
171                                         mes "Ooh, A Class.";
172                                         mes "This is some high risk territory!";
173                                         mes "Alright, which armor would you like me to try adding a Slot?";
174                                         next;
175                                         switch(select("Gemmed Sallet:Bucket Hat:Memory Book:Tights:Legion Plate Armor:Full Plate:Thief Clothes:Greaves:Coif:Manteau:Helm:Ninja Suit:Orc Helm:Ancient Cape:Monk Hat:Golden Gear:Brooch:Munak Hat"))
176                                         {
177                                                 case 1:  callfunc "Func_Socket",2230,2231,40,61,400,985,1;
178                                                 case 2:  callfunc "Func_Socket",5114,5120,40,61,400,985,1;
179                                                 case 3:  callfunc "Func_Socket",2109,2121,40,61,400,985,1;
180                                                 case 4:  callfunc "Func_Socket",2330,2331,40,61,400,985,1;
181                                                 case 5:  callfunc "Func_Socket",2341,2342,40,61,400,985,1;
182                                                 case 6:  callfunc "Func_Socket",2316,2317,40,61,400,985,1;
183                                                 case 7:  callfunc "Func_Socket",2335,2336,40,61,400,985,1;
184                                                 case 8:  callfunc "Func_Socket",2411,2412,40,61,400,985,1;
185                                                 case 9:  callfunc "Func_Socket",5092,5093,40,61,400,985,1;
186                                                 case 10: callfunc "Func_Socket",2505,2506,40,61,400,985,1;
187                                                 case 11: callfunc "Func_Socket",2228,2229,40,61,400,985,1;
188                                                 case 12: callfunc "Func_Socket",2337,2359,40,61,400,985,1;
189                                                 case 13: callfunc "Func_Socket",2299,5157,40,61,400,985,1;
190                                                 case 14: callfunc "Func_Socket",2507,2525,40,61,400,985,1;
191                                                 case 15: callfunc "Func_Socket",2251,5158,40,61,400,985,1;
192                                                 case 16: callfunc "Func_Socket",2246,5159,40,61,400,985,1;
193                                                 case 17: callfunc "Func_Socket",2605,2625,40,61,400,985,1;
194                                                 case 18: callfunc "Func_Socket",2264,5167,40,61,300,985,1;
195                                         }
196                                 case 4:
197                                         mes "[Seiyablem]";
198                                         mes "Um... S Class?";
199                                         mes "You sure about this?";
200                                         mes "Alright... Let me know the Armor to which you'd like to add a Slot, and I'll tell what I need to try it.";
201                                         next;
202                                         switch(select("Majestic Goat:Spiky Band:Bone Helm:Corsair:Crown:Tiara:Sphinx Hat:Robe of Cast:Earring:Ring:Bow Thimble"))
203                                         {
204                                                 case 1:  callfunc "Func_Socket",2256,5160,40,51,2000,985,2;
205                                                 case 2:  callfunc "Func_Socket",2258,5161,40,51,2000,985,2;
206                                                 case 3:  callfunc "Func_Socket",5017,5162,40,51,2000,985,2;
207                                                 case 4:  callfunc "Func_Socket",5019,5163,40,51,2000,985,2;
208                                                 case 5:  callfunc "Func_Socket",2235,5165,40,51,2000,985,2;
209                                                 case 6:  callfunc "Func_Socket",2234,5164,40,51,2000,985,2;
210                                                 case 7:  callfunc "Func_Socket",5053,5166,40,51,1000,985,2;
211                                                 case 8:  callfunc "Func_Socket",2343,2360,40,51,1000,985,2;
212                                                 case 9:  callfunc "Func_Socket",2602,2622,40,51,1000,985,2;
213                                                 case 10: callfunc "Func_Socket",2601,2621,40,51,1000,985,2;
214                                                 case 11: callfunc "Func_Socket",2619,2671,40,51,1000,985,2;
215                                         }
216                         }
217                 case 3:
218                         mes "[Seiyablem]";
219                         mes "Well, I haven't really refined the art of Slot Addition.";
220                         mes "It's so complicated that I'd be lying if I told you that I knew every factor that affected the process.";
221                         mes "Still, I do notice a few trends...";
222                         next;
223                         mes "[Seiyablem]";
224                         mes "In some towns, Slot addition attempts are more successful for equipment with fewer upgrades.";
225                         mes "In other towns, the opposite is true.";
226                         mes "isn't that really peculiar?";
227                         next;
228                         mes "[Seiyablem]";
229                         mes "Oh, there's also something really important that you should know.";
230                         mes "If you ask me to add a Slot to something, make sure that you don't have multiples of it in your inventory.";
231                         next;
232                         mes "[Seiyablem]";
233                         mes "Here's an example: if you have a +7 Manteau and a normal Manteau in your inventory, then I will randomly pick one of them for my Slot Addition attempt.";
234                         mes "Just remember to be careful.";
235                         next;
236                         mes "[Seiyablem]";
237                         mes "Again, ^FF0000only carry one of the equipment to which you want me to add a Slot^000000.";
238                         mes "All other equipment with the same name should be placed in your Kafra Storage, got it?";
239                         close;
240                 case 4:
241                         mes "[Seiyablem]";
242                         mes "Take it easy, adventurer.";
243                         mes "If you ever want to try adding a Slot to some of your equipment, come back and let me know.";
244                         mes "Seeya~";
245                         close;
246         }
247 }
248
249 function        script  Func_Socket     {
250         .@item_id = getarg(0);
251         .@zeny_req = getarg(4);
252         setarray .@item_req[0], getarg(5), getarg(7,0);
253         setarray .@req_amount[0], getarg(6), getarg(8,0);
254
255         disable_items;
256         mes "[Seiyablem]";
257         mes "You want to add a Slot to a "+ getitemname(.@item_id) +"?";
258         mes "Alright, please bring me ^FF0000"+ .@req_amount[0] +" "+ getitemname(.@item_req[0]) + (.@req_amount[0] > 1 && .@item_req[0] != 999 ? "s":"") +"^000000, "+ (.@item_req[1] != 0 && .@req_amount[1] != 0 ? ("^FF0000"+ .@req_amount[1] +" "+ getitemname(.@item_req[1]) + (.@req_amount[1] > 1 && .@item_req[1] != 999 ? "s":"") + "^000000 ") : "") + "and my ^FF0000" + (.@zeny_req >= 1000 ? (.@zeny_req /1000 +",000") : .@zeny_req) +",000 zeny^000000 service fee.";
259         mes "Ah, and don't forget to bring that "+ getitemname(.@item_id) +"!";
260         next;
261         mes "[Seiyablem]";
262         if (getiteminfo(.@item_id,5) & EQP_HAND_R) // weapon
263         {
264                 mes "I can try to add a slot now if you have the required items and zeny.";
265                 mes "However, you should know that there's a chance that I might fail.";
266                 mes "Therefore, I need to give you a fair warning...";
267                 next;
268                 mes "[Seiyablem]";
269                 mes "If this attempt to add a Slot to your Weapon fails, then the ^FF0000Weapon^000000, ^FF0000and any Cards compounded to it will be destroyed^000000.";
270         }
271         else // armor
272         {
273                 mes "If you have all the required materials, my zeny service fee and the Armor, then we can go ahead with the Slot Addition attempt.";
274                 mes "But before that, I must warn you of the risk.";
275                 next;
276                 mes "[Seiyablem]";
277                 mes "If this attempt to add a Slot to your Armor fails, then the ^FF0000Armor^000000, ^FF0000it's upgrades^000000 ^FF0000and any Cards compounded to it will be destroyed^000000.";
278         }
279         mes "Do you still want to try to add a Slot?";
280         next;
281         switch(select("Attempt Slot Addition:Cancel"))
282         {
283                 case 1:
284                         if ((Zeny >= .@zeny_req*1000) && countitem(.@item_req[0]) >= .@req_amount[0] && countitem(getarg(7,512)) >= .@req_amount[1] && countitem(.@item_id) > 0)// if there's no getarg(7) and getarg(8) provided, check itemcount against 0 (we still need a valid item ID though)
285                         {
286                                 mes "[Seiyablem]";
287                                 mes "Alright then, let the work begin!";
288                                 mes "You'd better pray for a successful result.";
289                                 next;
290                                 set .@a, rand(1,100);
291                                 if ((.@a > getarg(2)) && (.@a < getarg(3)))
292                                 {
293                                         specialeffect getarg(3) == 51 ? EF_LORD : EF_SANCTUARY; // only S Class items have Lord of Vermillion effect
294                                         mes "[Seiyablem]";
295                                         mes "Great, it seems to be successful.";
296                                         mes "It looks pretty well done. Congratulations!";
297                                         delitem .@item_id,1;
298                                         delitem .@item_req[0],.@req_amount[0];
299                                         if (.@item_req[1] != 0 && .@req_amount[1] != 0)
300                                                 delitem .@item_req[1],.@req_amount[1];
301                                         Zeny = Zeny - .@zeny_req *1000;
302                                         getitem getarg(1),1;
303                                         next;
304                                         mes "[Seiyablem]";
305                                         mes "See you again, buddy!";
306                                         close;
307                                 }
308                                 else
309                                 {
310                                         specialeffect EF_SUI_EXPLOSION;
311                                         mes "[Seiyablem]";
312                                         mes "Wah! ...I am so sorry, it failed.";
313                                         mes "However, I am completely innocent.";
314                                         mes "This is your luck, and it is destined by god, okay?";
315                                         mes "Don't be so disappointed, and try next time.";
316                                         delitem .@item_id,1;
317                                         delitem .@item_req[0],.@req_amount[0];
318                                         if (.@item_req[1] != 0 && .@req_amount[1] != 0)
319                                                 delitem .@item_req[1],.@req_amount[1];
320                                         Zeny = Zeny - .@zeny_req *1000;
321                                         next;
322                                         mes "[Seiyablem]";
323                                         mes "I wish you good luck next time!";
324                                         close;
325                                 }
326                         }
327                         else
328                         {
329                                 mes "[Seiyablem]";
330                                 mes "I'd like to go ahead with this Slot Addition attempt, but you're missing a few things.";
331                                 mes "You sure that you have the equipment, required materials and the zeny?";
332                                 close;
333                         }
334                 case 2:
335                         mes "[Seiyablem]";
336                         mes "Need some time to think about it, huh?";
337                         mes "Alright, I can understand.";
338                         mes "Just remember that life's no fun if you're always playing it safe~";
339                         close;
340         }
341 }
342
343 payon,140,151,5 duplicate(SocketEnchant)        Seiyablem#pay   84
344 lhz_in02,281,35,5       duplicate(SocketEnchant)        Seiyablem#lhz   84
345 prt_in,33,70,5  duplicate(SocketEnchant)        Seiyablem#prt   84
346 morocc,51,41,4  duplicate(SocketEnchant)        Seiyablem#moc   84
347
348 -       script  Young Man#dummy::SocketMan      -1,{
349         mes "[Young Man]";
350         mes "I'm considering becoming a Slotting Engineer.";
351         mes "It's a new field where you can add Slots to equipment, and it'd be cool if I can work in such a lucrative career.";
352         next;
353         mes "[Young Man]";
354         mes "There's a huge element of luck involved in successfully adding Slots from what I can understand.";
355         mes "You fail sometimes, but if you're super lucky, you can add two Slots.";
356         mes "Crazy. Huh?";
357         next;
358         mes "[Young Man]";
359         mes "But don't get too excited.";
360         mes "Only certain equipment can handle the addition of two extra Slots.";
361         mes "There's so much more I have to learn before I can even be an apprentice...";
362         close;
363 }
364
365 prt_in,31,57,1  duplicate(SocketMan)    Young Man#prt   97
366 payon,143,143,7 duplicate(SocketMan)    Young Man#pay   97
367 morocc,60,42,3  duplicate(SocketMan)    Young Man#moc   97
368 lhz_in02,269,33,5       duplicate(SocketMan)    Young Man#lhz   97