[1] | 1 | //===== eAthena Script ======================================= |
---|
| 2 | //= Refining NPCs |
---|
| 3 | //===== By: ================================================== |
---|
| 4 | //= Syrus22 (1.1) dafide18 (1.4) Skotlex (1.5) |
---|
| 5 | //===== Current Version: ===================================== |
---|
| 6 | //= 2.3 |
---|
| 7 | //===== Compatible With: ===================================== |
---|
| 8 | //= Any Athena Version |
---|
| 9 | //===== Description: ========================================= |
---|
| 10 | //= Refining NPCs and Metal Salesmen. |
---|
| 11 | //===== Additional Comments: ================================= |
---|
| 12 | //= 1.0 - by A bunch of people! |
---|
| 13 | //= Syrus22 - Completely redid the script using functions... also |
---|
| 14 | //= added the option for auto safe refining and multiple refining. |
---|
| 15 | //= 1.1 - Negative input bug fixed [Lupus] |
---|
| 16 | //= 1.2 - Added additional reparimen in morroc and payon. Added |
---|
| 17 | //= Christopher the blacksmith in Geffen. Edited some dialogue [kobra_k88] |
---|
| 18 | //= 1.3 - New Payon Locations [Darkchild] |
---|
| 19 | //= Corrected zeny subtraction thx to jpnmania77.[kobra_k88] |
---|
| 20 | //= 1.3a - Temporary corrected an exploit. Need to check sources |
---|
| 21 | //= to fully fix bug [Shinigami] |
---|
| 22 | //= Fixed repairman prices [shadowlady] |
---|
| 23 | //= Fixed bug that skips requirements thanks to sir_loon [massdriller] |
---|
| 24 | //= Fixed itemid error thanks to -Vitamin- [massdriller] |
---|
| 25 | //= 1.4 - check again item in refining procedure to avoid |
---|
| 26 | //= hacker that can change item [dafide18] |
---|
| 27 | //= 1.5 - Fixed crashing due to badly used callfunc's [Skotlex] |
---|
| 28 | // Lupus, don't rollback this important fix again! >.< |
---|
| 29 | //= 1.5a - Corrected an unneeded callfunc, fixed the anti-bot |
---|
| 30 | //= exploit ruining the safe refine loop. [Skotlex] |
---|
| 31 | //= 1.5b - Fixed Spelling mistakes. [Nexon] |
---|
| 32 | //= 1.6 - Replaced all breaks for ends as per the new script engine [Skotlex] |
---|
| 33 | //= 1.7 - Added Einbroch Refiners (Custom names ^^;) and a duplicated BS Shop. [Poki#3] |
---|
| 34 | //= 1.8 - Added Lighthalzen Refiners (Custom names again ^^;) [Poki#3] |
---|
| 35 | //= 1.8a - Fixed wrong indication thanks to NeoSaro [Lupus] |
---|
| 36 | //= 1.9 - Rewrote repairman, removed the Steel from repair cost [DracoRPG] |
---|
| 37 | //= 2.0 - Fixed missed equppment presence check. Thx2 Coltaro [Lupus] |
---|
| 38 | //= 2.0a - Added weight checks thanks to Neouni [Playtester] |
---|
| 39 | //= 2.0b - Fixed the names of Lighthalzen and Einbroch refiners thanks to Maud_Dib [Kargha] |
---|
| 40 | //= 2.1 - Removed Duplicates [Silent] |
---|
| 41 | //= 2.2 - Changed name from "Emvertacon" to "Emveretarcon". [Samuray22] |
---|
| 42 | // - Thanks to Barron-Monster. |
---|
| 43 | //= 2.2b - Changed name from "Pharacon" to "Phracon". [Samuray22] |
---|
| 44 | // - Thanks to Barron-Monster. |
---|
| 45 | //= 2.3 Corrected NPC names to fall within proper restrictions. [L0ne_W0lf] |
---|
| 46 | //============================================================ |
---|
| 47 | |
---|
| 48 | |
---|
| 49 | //========================================================= |
---|
| 50 | // Christopher: Geffen Blacksmith |
---|
| 51 | //========================================================= |
---|
| 52 | geffen_in,110,172,2 script Christopher#1::Chrisbs 63,{ |
---|
| 53 | mes "[Christopher Guillenrow]"; |
---|
| 54 | mes "Welcome to Christopher's Workshop. Ye can find all yer forging equipment here. So what can I help ye with?"; |
---|
| 55 | M_Menu: |
---|
| 56 | next; |
---|
| 57 | menu "Purchase Anvil",M_0, "Purchase Forging Item",M_1, "Purchase Metal",M_2, "Purify Rough Ores",M_3, "Cancel",M_End; |
---|
| 58 | |
---|
| 59 | M_0: |
---|
| 60 | mes "[Christopher Guillenrow]"; |
---|
| 61 | mes "Higher quality Anvils gives ye a better chance ta make better weapons, ye know. But they cost more than yer typical ones."; |
---|
| 62 | next; |
---|
| 63 | menu "Anvil - 30000z.",sM_Anvil, "Oridecon Anvil - 120000z.",sM_OriAnvil, "Golden Anvil - 300000z.",sM_GolAnvil, |
---|
| 64 | "Better Anvil than others",sM_BetAnvil, "Cancel",M_Menu; |
---|
| 65 | |
---|
| 66 | sM_Anvil: |
---|
| 67 | if(Zeny < 30000) goto L_NoZeny; |
---|
| 68 | if(checkweight(986,1) == 0 ) goto L_OverWeight; |
---|
| 69 | set Zeny, Zeny - 30000; |
---|
| 70 | getitem 986,1; |
---|
| 71 | mes "[Christopher Guillenrow]"; |
---|
| 72 | mes "This is the cheapest one but it's very efficient."; |
---|
| 73 | next; |
---|
| 74 | goto L_Thanks; |
---|
| 75 | sM_OriAnvil: |
---|
| 76 | if(Zeny < 120000) goto L_NoZeny; |
---|
| 77 | if(checkweight(987,1) == 0 ) goto L_OverWeight; |
---|
| 78 | set Zeny, Zeny - 120000; |
---|
| 79 | getitem 987,1; |
---|
| 80 | mes "[Christopher Guillenrow]"; |
---|
| 81 | mes "Ah! Ye have a good eye for anvils. This here is the proper anvil for a Blacksmith."; |
---|
| 82 | next; |
---|
| 83 | goto L_Thanks; |
---|
| 84 | sM_GolAnvil: |
---|
| 85 | if(Zeny < 300000) goto L_NoZeny; |
---|
| 86 | if(checkweight(988,1) == 0 ) goto L_OverWeight; |
---|
| 87 | set Zeny, Zeny - 300000; |
---|
| 88 | mes "[Christopher Guillenrow]"; |
---|
| 89 | mes "This is the best anvil in my workshop! With this ye'll be the best Blasksmith in no time."; |
---|
| 90 | getitem 988,1; |
---|
| 91 | next; |
---|
| 92 | goto L_Thanks; |
---|
| 93 | sM_BetAnvil: |
---|
| 94 | mes "[Christopher Guillenrow]"; |
---|
| 95 | mes "I'm sorry but I don't have anything better than a Golden Anvil."; |
---|
| 96 | mes "Maybe 'Ringgel' the legendary Anvil maker would have one... but he be a hard fellow ta find."; |
---|
| 97 | close; |
---|
| 98 | |
---|
| 99 | M_1: |
---|
| 100 | mes "[Christopher Guillenrow]"; |
---|
| 101 | mes "A respectable Blacksmith uses fine tools. Ye will come ta know my tools as being the finest around!"; |
---|
| 102 | mes "Choose anything you want."; |
---|
| 103 | sM_Menu1: |
---|
| 104 | next; |
---|
| 105 | menu "Mini-Furnace - 150z.",sM_Furn, "Iron Hammer - 1000z.",sM_IrHam, "Golden Hammer - 3000z.",sM_GldHam, |
---|
| 106 | "Oridecon Hammer - 5000z.",sM_OriHam, "Cancel",M_Menu; |
---|
| 107 | |
---|
| 108 | sM_Furn: |
---|
| 109 | mes "[Christopher Guillenrow]"; |
---|
| 110 | mes "This is a prerequisite for Metal refining!!"; |
---|
| 111 | mes "So, how many do ye wish to buy? If you want to quit, please input the number '0'. However, you the maximum amount you can buy is 1000"; |
---|
| 112 | set @input, 0; |
---|
| 113 | input @input; |
---|
| 114 | next; |
---|
| 115 | if(@input < 1 ) goto sM_Menu1; |
---|
| 116 | if(@input > 1000 ) goto sM_Max; |
---|
| 117 | if(Zeny < 150 * @input) goto L_NoZeny; |
---|
| 118 | if(checkweight(612,@input) == 0 ) goto L_OverWeight; |
---|
| 119 | set Zeny, Zeny - (150 * @input); |
---|
| 120 | getitem 612, @input; |
---|
| 121 | goto L_Thanks; |
---|
| 122 | sM_IrHam: |
---|
| 123 | if(Zeny < 1000) goto L_NoZeny; |
---|
| 124 | if(checkweight(613,1) == 0 ) goto L_OverWeight; |
---|
| 125 | set Zeny, Zeny - 1000; |
---|
| 126 | getitem 613,1; |
---|
| 127 | goto L_Thanks; |
---|
| 128 | sM_GldHam: |
---|
| 129 | if(Zeny < 3000) goto L_NoZeny; |
---|
| 130 | if(checkweight(614,1) == 0 ) goto L_OverWeight; |
---|
| 131 | set Zeny, Zeny - 3000; |
---|
| 132 | getitem 614,1; |
---|
| 133 | goto L_Thanks; |
---|
| 134 | sM_OriHam: |
---|
| 135 | if(Zeny < 5000) goto L_NoZeny; |
---|
| 136 | if(checkweight(615,1) == 0 ) goto L_OverWeight; |
---|
| 137 | set Zeny, Zeny - 5000; |
---|
| 138 | getitem 615,1; |
---|
| 139 | goto L_Thanks; |
---|
| 140 | sM_Max: |
---|
| 141 | mes "[Christopher Guillenrow]"; |
---|
| 142 | mes "Sorry, you can't buy more than 1000 furnace at a time."; |
---|
| 143 | close; |
---|
| 144 | |
---|
| 145 | M_2: |
---|
| 146 | mes "[Christopher Guillenrow]"; |
---|
| 147 | mes "I have 2 kinds of metals for sale. Which do ye like?"; |
---|
| 148 | set @chris, 1; |
---|
| 149 | set @name$, "Christopher Guillenrow"; |
---|
| 150 | callfunc "phramain"; |
---|
| 151 | |
---|
| 152 | M_3: |
---|
| 153 | mes "[Christopher Guillenrow]"; |
---|
| 154 | mes "I can purify yer rough Oridecon and rough Elunium ores. I'll need 5 rough ores to make 1 pure one."; |
---|
| 155 | mes "Well... which one do ye want ta make?"; |
---|
| 156 | set @chris, 1; |
---|
| 157 | set @name$, "Christopher Guillenrow"; |
---|
| 158 | callfunc "orimain"; |
---|
| 159 | |
---|
| 160 | M_End: |
---|
| 161 | close; |
---|
| 162 | |
---|
| 163 | L_NoZeny: |
---|
| 164 | mes "[Christopher Guillenrow]"; |
---|
| 165 | mes "I don't think I can let ye have this at a lower price. I can't afford ta loose profits because of ye."; |
---|
| 166 | emotion 4; |
---|
| 167 | close; |
---|
| 168 | |
---|
| 169 | L_OverWeight: |
---|
| 170 | mes "[Christopher Guillenrow]"; |
---|
| 171 | mes "You don't seem to have enough strength to carry this."; |
---|
| 172 | close; |
---|
| 173 | |
---|
| 174 | L_Thanks: |
---|
| 175 | mes "[Christopher Guillenrow]"; |
---|
| 176 | mes "Thank you for shopping at my workshop. Feel free to come anytime whenever you need."; |
---|
| 177 | emotion 15; |
---|
| 178 | close; |
---|
| 179 | } |
---|
| 180 | |
---|
| 181 | ein_in01,38,29,6 duplicate(Chrisbs) Christopher#2 63 |
---|
| 182 | |
---|
| 183 | //===================================================================================== |
---|
| 184 | // Weapon/Armor Refiners |
---|
| 185 | //===================================================================================== |
---|
| 186 | prt_in,63,60,4 script Hollengrhen 85,{ |
---|
| 187 | set @name$,"Hollengrhen"; |
---|
| 188 | callfunc "refinemain"; |
---|
| 189 | end; |
---|
| 190 | } |
---|
| 191 | morocc_in,73,38,4 script Aragham 99,{ |
---|
| 192 | set @name$,"Aragham"; |
---|
| 193 | callfunc "refinemain"; |
---|
| 194 | end; |
---|
| 195 | } |
---|
| 196 | payon,144,173,4 script Antonio 88,{ |
---|
| 197 | set @name$,"Antonio"; |
---|
| 198 | callfunc "refinemain"; |
---|
| 199 | end; |
---|
| 200 | } |
---|
| 201 | alberta_in,28,58,4 script Fredrik 85,{ |
---|
| 202 | set @name$,"Fredrik"; |
---|
| 203 | callfunc "refinemain"; |
---|
| 204 | end; |
---|
| 205 | } |
---|
| 206 | yuno_in01,164,26,6 script Disturb 88,{ |
---|
| 207 | set @name$,"Disturb"; |
---|
| 208 | callfunc "refinemain"; |
---|
| 209 | end; |
---|
| 210 | } |
---|
| 211 | ein_in01,24,87,6 script Manthasman 826,{ |
---|
| 212 | set @name$,"Manthasman Pruhag"; |
---|
| 213 | callfunc "refinemain"; |
---|
| 214 | end; |
---|
| 215 | } |
---|
| 216 | lhz_in02,282,20,7 script Fulerr 869,{ |
---|
| 217 | set @name$,"Fulerr"; |
---|
| 218 | callfunc "refinemain"; |
---|
| 219 | end; |
---|
| 220 | } |
---|
| 221 | |
---|
| 222 | //============================================================ |
---|
| 223 | //= Main Refiner Function |
---|
| 224 | //============================================================ |
---|
| 225 | //= To allow auto safe refining/multiple refining set the |
---|
| 226 | //= @features variable to 1 |
---|
| 227 | //============================================================ |
---|
| 228 | function script refinemain { |
---|
| 229 | set @features,0; |
---|
| 230 | |
---|
| 231 | mes "[" + @name$ + "]"; |
---|
| 232 | mes "I am the Armsmith... I can refine any weapon or piece of armor you choose!"; |
---|
| 233 | mes "Which piece of equipment do you want to refine?"; |
---|
| 234 | M_Menu: |
---|
| 235 | next; |
---|
| 236 | menu getequipname(1),PART1,getequipname(2),PART2,getequipname(3),PART3,getequipname(4),PART4,getequipname(5),PART5, |
---|
| 237 | getequipname(6),PART6,getequipname(7),PART7,getequipname(8),PART8,getequipname(9),PART9,getequipname(10),PART10; |
---|
| 238 | |
---|
| 239 | //Head Gear |
---|
| 240 | PART1: |
---|
| 241 | set @part,1; |
---|
| 242 | if (getequipisequiped(1)) goto CHECK1; |
---|
| 243 | mes "[" + @name$ + "]"; |
---|
| 244 | mes "Do you want me to refine your dumb brain?"; |
---|
| 245 | emotion 6; |
---|
| 246 | goto M_Menu; |
---|
| 247 | //Armor |
---|
| 248 | PART2: |
---|
| 249 | set @part,2; |
---|
| 250 | if (getequipisequiped(2)) goto CHECK1; |
---|
| 251 | mes "[" + @name$ + "]"; |
---|
| 252 | mes "Do you want me to melt your body with blazing heat...?"; |
---|
| 253 | emotion 6; |
---|
| 254 | goto M_Menu; |
---|
| 255 | //Left Hand |
---|
| 256 | PART3: |
---|
| 257 | set @part,3; |
---|
| 258 | if (getequipisequiped(3)) goto CHECK1; |
---|
| 259 | mes "[" + @name$ + "]"; |
---|
| 260 | mes "I can't make your left hand into an ultimate weapon..."; |
---|
| 261 | emotion 4; |
---|
| 262 | goto M_Menu; |
---|
| 263 | //Right Hand |
---|
| 264 | PART4: |
---|
| 265 | set @part,4; |
---|
| 266 | if (getequipisequiped(4)) goto CHECK1; |
---|
| 267 | mes "[" + @name$ + "]"; |
---|
| 268 | mes "I can't make your right hand into an ultimate weapon..."; |
---|
| 269 | emotion 4; |
---|
| 270 | goto M_Menu; |
---|
| 271 | //Garment |
---|
| 272 | PART5: |
---|
| 273 | set @part,5; |
---|
| 274 | if (getequipisequiped(5)) goto CHECK1; |
---|
| 275 | mes "[" + @name$ + "]"; |
---|
| 276 | mes "Look here... you don't have any Garments on..."; |
---|
| 277 | goto M_Menu; |
---|
| 278 | //Foot Gear |
---|
| 279 | PART6: |
---|
| 280 | set @part,6; |
---|
| 281 | if (getequipisequiped(6)) goto CHECK1; |
---|
| 282 | mes "[" + @name$ + "]"; |
---|
| 283 | mes "Ack!! Those are some stinky feet. I definitely can't refine those... uck!!"; |
---|
| 284 | emotion 16; |
---|
| 285 | goto M_Menu; |
---|
| 286 | //Accessory1 |
---|
| 287 | PART7: |
---|
| 288 | set @part,7; |
---|
| 289 | if (getequipisequiped(7)) goto CHECK1; |
---|
| 290 | mes "[" + @name$ + "]"; |
---|
| 291 | mes "What do you mean by Accessory? Which One?"; |
---|
| 292 | emotion 20; |
---|
| 293 | goto M_Menu; |
---|
| 294 | //Accessory2 |
---|
| 295 | PART8: |
---|
| 296 | set @part,8; |
---|
| 297 | if (getequipisequiped(8)) goto CHECK1; |
---|
| 298 | mes "[" + @name$ + "]"; |
---|
| 299 | mes "What do you mean by Accessory? Which One?"; |
---|
| 300 | emotion 20; |
---|
| 301 | goto M_Menu; |
---|
| 302 | PART9: |
---|
| 303 | set @part,9; |
---|
| 304 | if (getequipisequiped(9)) goto CHECK1; |
---|
| 305 | mes "[" + @name$ + "]"; |
---|
| 306 | mes "What do you want from me? There's nothing equipped there..."; |
---|
| 307 | emotion 20; |
---|
| 308 | goto M_Menu; |
---|
| 309 | PART10: |
---|
| 310 | set @part,10; |
---|
| 311 | if (getequipisequiped(10)) goto CHECK1; |
---|
| 312 | mes "[" + @name$ + "]"; |
---|
| 313 | mes "What do you want from me? There's nothing equipped there..."; |
---|
| 314 | emotion 20; |
---|
| 315 | goto M_Menu; |
---|
| 316 | |
---|
| 317 | //Check if the item is refinable... |
---|
| 318 | CHECK1: |
---|
| 319 | if(getequipisenableref(@part)) goto CHECK2; |
---|
| 320 | mes "[" + @name$ + "]"; |
---|
| 321 | mes "I can't work on this item..."; |
---|
| 322 | close; |
---|
| 323 | |
---|
| 324 | //Check if the item is identified... (Don't know why this is in here... but kept it anyway) |
---|
| 325 | CHECK2: |
---|
| 326 | if(getequipisidentify(@part)) goto CHECK3; |
---|
| 327 | mes "[" + @name$ + "]"; |
---|
| 328 | mes "You must appraise this item first."; |
---|
| 329 | close; |
---|
| 330 | |
---|
| 331 | //Check to see if the items is already +10 |
---|
| 332 | CHECK3: |
---|
| 333 | if(getequiprefinerycnt(@part) < 10) goto REFINE0; |
---|
| 334 | mes "[" + @name$ + "]"; |
---|
| 335 | mes "This weapon is already at its maximum level and can no longer be refined."; |
---|
| 336 | close; |
---|
| 337 | |
---|
| 338 | //Refine Armor |
---|
| 339 | REFINE0: |
---|
| 340 | set @refineitemid, getequipid(@part); // save id of the item |
---|
| 341 | set @refinerycnt, getequiprefinerycnt(@part); //save refinery count |
---|
| 342 | if(getequipweaponlv(@part) > 0) goto REFINE1; |
---|
| 343 | set @matname$,"Elunium"; |
---|
| 344 | set @material,985; |
---|
| 345 | set @price,2000; |
---|
| 346 | set @safe,4; |
---|
| 347 | if(@features == 1) goto L_refinefeatures; |
---|
| 348 | goto L_refinenormal; |
---|
| 349 | //Refine Level 1 Weapon |
---|
| 350 | REFINE1: |
---|
| 351 | if(getequipweaponlv(@part) > 1) goto REFINE2; |
---|
| 352 | set @matname$,"Phracon"; |
---|
| 353 | set @material,1010; |
---|
| 354 | set @price,50; |
---|
| 355 | set @safe,7; |
---|
| 356 | if(@features == 1) goto L_refinefeatures; |
---|
| 357 | goto L_refinenormal; |
---|
| 358 | //Refine Level 2 Weapon |
---|
| 359 | REFINE2: |
---|
| 360 | if(getequipweaponlv(@part) > 2) goto REFINE3; |
---|
| 361 | set @matname$,"Emveretarcon"; |
---|
| 362 | set @material,1011; |
---|
| 363 | set @price,200; |
---|
| 364 | set @safe,6; |
---|
| 365 | if(@features == 1) goto L_refinefeatures; |
---|
| 366 | goto L_refinenormal; |
---|
| 367 | //Refine Level 3 Weapon |
---|
| 368 | REFINE3: |
---|
| 369 | if(getequipweaponlv(@part) > 3) goto REFINE4; |
---|
| 370 | set @matname$,"Oridecon"; |
---|
| 371 | set @material,984; |
---|
| 372 | set @price,5000; |
---|
| 373 | set @safe,5; |
---|
| 374 | if(@features == 1) goto L_refinefeatures; |
---|
| 375 | goto L_refinenormal; |
---|
| 376 | //Refine Level 4 Weapon |
---|
| 377 | REFINE4: |
---|
| 378 | set @matname$,"Oridecon"; |
---|
| 379 | set @material,984; |
---|
| 380 | set @price,20000; |
---|
| 381 | set @safe,4; |
---|
| 382 | if(@features == 1) goto L_refinefeatures; |
---|
| 383 | goto L_refinenormal; |
---|
| 384 | |
---|
| 385 | L_refinenormal: |
---|
| 386 | mes "[" + @name$ + "]"; |
---|
| 387 | mes "To refine this stuff, I need ^ff9999" + @matname$ + "^000000 and the fee " + @price + " Zeny."; |
---|
| 388 | mes "Continue?"; |
---|
| 389 | next; |
---|
| 390 | menu "Yes",-,"No",Lcancel; |
---|
| 391 | |
---|
| 392 | if (getequippercentrefinery(@part) == 100) goto L_Sub; |
---|
| 393 | mes "[" + @name$ + "]"; |
---|
| 394 | mes "Hmm... Hold on! This piece of equipment has already been refined to its maximum safety level."; |
---|
| 395 | mes "I must warn you if it is refined ANYMORE, It could be DESTROYED and become USELESS!!"; |
---|
| 396 | next; |
---|
| 397 | mes "["+@name$+"]"; |
---|
| 398 | mes "Do you still wish you refine it? If so I will not be able to guarantee my work..."; |
---|
| 399 | next; |
---|
| 400 | menu "Yes",-,"No",Lcancel1; |
---|
| 401 | |
---|
| 402 | L_Sub: |
---|
| 403 | if ((countitem(@material) < 1) || (Zeny < @price)) goto Lcancel2; |
---|
| 404 | set Zeny,Zeny-@price; |
---|
| 405 | delitem @material,1; |
---|
| 406 | |
---|
| 407 | Lrefine: |
---|
| 408 | if (getequipisequiped(@part) == 0) goto LNoItem; // hacker has removed the item (not changed, why?) |
---|
| 409 | if (getequipid(@part) != @refineitemid) goto LNoFake; // hacker has changed the item |
---|
| 410 | if (getequiprefinerycnt(@part) != @refinerycnt) goto LNoFake; // hacker has changed the item |
---|
| 411 | if (getequippercentrefinery(@part) <= rand(100)) goto Lfail; |
---|
| 412 | mes "["+@name$+"]"; |
---|
| 413 | mes "Clang! Clang! Clang!"; |
---|
| 414 | successrefitem @part; |
---|
| 415 | next; |
---|
| 416 | mes "["+@name$+"]"; |
---|
| 417 | mes "HAHA! It seems my skills haven't gotten rusty yet! Splendid... just splendid..."; |
---|
| 418 | emotion 21; |
---|
| 419 | close; |
---|
| 420 | |
---|
| 421 | Lfail: |
---|
| 422 | mes "[" + @name$ + "]"; |
---|
| 423 | mes "Clang! Clang! Clang!"; |
---|
| 424 | failedrefitem @part; |
---|
| 425 | next; |
---|
| 426 | mes "["+@name$+"]"; |
---|
| 427 | mes "Aaahhh!! Oh no...!!"; |
---|
| 428 | emotion 16; |
---|
| 429 | next; |
---|
| 430 | mes "["+@name$+"]"; |
---|
| 431 | mes "Eh..Ehem... I'm sorry but the refining process ^ff0000failed^000000."; |
---|
| 432 | next; |
---|
| 433 | mes "["+@name$+"]"; |
---|
| 434 | mes "I am deeply ashamed of what I've done... but I DID warn you earlier about the risks."; |
---|
| 435 | close; |
---|
| 436 | |
---|
| 437 | LNoItem: |
---|
| 438 | mes "[" + @name$ + "]"; |
---|
| 439 | mes "Look here... you don't have any Items on..."; |
---|
| 440 | close; |
---|
| 441 | |
---|
| 442 | LNoFake: |
---|
| 443 | mes "[" + @name$ + "]"; |
---|
| 444 | mes "Clan... No, but Did you imagine I could be so stupid !?!"; |
---|
| 445 | mes "You have changed it..."; |
---|
| 446 | mes "Go out before I stun you with my Hammer!!!"; |
---|
| 447 | close; |
---|
| 448 | |
---|
| 449 | Lcancel: |
---|
| 450 | mes "[" + @name$ + "]"; |
---|
| 451 | mes "You said so..Hmm so be it..."; |
---|
| 452 | close; |
---|
| 453 | |
---|
| 454 | Lcancel1: |
---|
| 455 | mes "[" + @name$ + "]"; |
---|
| 456 | mes "Good Choice."; |
---|
| 457 | mes "Ah... good choice. I'd feel awful if I'd destroyed another persons piece of equipment with my own hands."; |
---|
| 458 | close; |
---|
| 459 | |
---|
| 460 | Lcancel2: |
---|
| 461 | mes "[" + @name$ + "]"; |
---|
| 462 | mes "Is that all you got? Unfortunately I can't work for you at a lower price. Try putting yourself in my shoes."; |
---|
| 463 | close; |
---|
| 464 | |
---|
| 465 | // New Refining Functions ======================== |
---|
| 466 | L_refinefeatures: |
---|
| 467 | if(getequiprefinerycnt(@part) >= @safe) goto Lnosafe; |
---|
| 468 | mes "[" + @name$ + "]"; |
---|
| 469 | mes "I can refine this to the safe limit or a desired number of times... it's your choice..."; |
---|
| 470 | next; |
---|
| 471 | menu "To the safe limit please.",Lsafe,"I'll decide how many times.",Lnosafe,"I've changed my mind...",Lcancel; |
---|
| 472 | |
---|
| 473 | Lsafe: |
---|
| 474 | set @refinecnt,@safe - getequiprefinerycnt(@part); |
---|
| 475 | set @fullprice,@price * @refinecnt; |
---|
| 476 | mes "[" + @name$ + "]"; |
---|
| 477 | mes "That will cost you " + @refinecnt + " " + @matname$ + " and " + @fullprice + " Zeny. Is that ok?"; |
---|
| 478 | next; |
---|
| 479 | menu "Yes",-,"No...",Lcancel; |
---|
| 480 | if((countitem(@material) < @refinecnt) || (Zeny < @fullprice)) goto Lcancel2; |
---|
| 481 | set Zeny,Zeny - @fullprice; |
---|
| 482 | delitem @material,@refinecnt; |
---|
| 483 | goto L_refinesafe; |
---|
| 484 | |
---|
| 485 | Lnosafe: |
---|
| 486 | mes "[" + @name$ + "]"; |
---|
| 487 | mes "So how many times would you like me to refine your item?"; |
---|
| 488 | next; |
---|
| 489 | input @refinecnt; |
---|
| 490 | if (@refinecnt<1) goto Lcancel3; //fixed by Lupus |
---|
| 491 | set @refinecheck,@refinecnt + getequiprefinerycnt(@part); |
---|
| 492 | if(@refinecheck > 10) goto Lcancel3; |
---|
| 493 | set @fullprice,@price * @refinecnt; |
---|
| 494 | mes "[" + @name$ + "]"; |
---|
| 495 | mes "This will cost you " + @refinecnt + " " + @matname$ + " and " + @fullprice + " Zeny... Is that ok?"; |
---|
| 496 | next; |
---|
| 497 | menu "Yes...",-,"No...",Lcancel; |
---|
| 498 | if(@refinecheck > @safe) goto Lwarn; |
---|
| 499 | if((countitem(@material) < @refinecnt) || (Zeny < @fullprice)) goto Lcancel2; |
---|
| 500 | set Zeny,Zeny - @fullprice; |
---|
| 501 | delitem @material,@refinecnt; |
---|
| 502 | goto L_refinenumber; |
---|
| 503 | end; |
---|
| 504 | |
---|
| 505 | Lwarn: |
---|
| 506 | set @refinecheck,@refinecheck - @safe; |
---|
| 507 | mes "[" + @name$ + "]"; |
---|
| 508 | mes "This will try to refine the equipment " + @refinecheck + " times past the safe limit. Your equipment may be destroyed... is that ok?"; |
---|
| 509 | next; |
---|
| 510 | menu "Yes",-,"No...",Lcancel1; |
---|
| 511 | if((countitem(@material) < @refinecnt) || (Zeny < @fullprice)) goto Lcancel2; |
---|
| 512 | set Zeny,Zeny - @fullprice; |
---|
| 513 | delitem @material,@refinecnt; |
---|
| 514 | goto L_refinenumber; |
---|
| 515 | |
---|
| 516 | Lcancel3: |
---|
| 517 | mes "[" + @name$ + "]"; |
---|
| 518 | mes "I can't refine this item that many times."; |
---|
| 519 | close; |
---|
| 520 | |
---|
| 521 | // SubFunction: Safe Refine --------------------- |
---|
| 522 | L_refinesafe: |
---|
| 523 | if (getequipisequiped(@part) == 0) goto LNoItem; // hacker has removed the item (no changed, why?) |
---|
| 524 | if (getequipid(@part) != @refineitemid) goto LNoFake; // hacker has changed the item |
---|
| 525 | if (getequippercentrefinery(@part) < 100) goto LNoFake; // hacker has changed the item (it is not safe anymore) |
---|
| 526 | mes "Clang, clang!!!"; |
---|
| 527 | successrefitem @part; |
---|
| 528 | emotion 21; |
---|
| 529 | set @refinecnt,@refinecnt - 1; |
---|
| 530 | next; |
---|
| 531 | if(@refinecnt == 0) goto Lend; |
---|
| 532 | goto L_refinesafe; |
---|
| 533 | |
---|
| 534 | Lend: |
---|
| 535 | mes "[" + @name$ + "]"; |
---|
| 536 | mes "All finished... Come again soon."; |
---|
| 537 | close; |
---|
| 538 | |
---|
| 539 | // SubFunction: Refine |
---|
| 540 | L_refinenumber: |
---|
| 541 | if (getequipisequiped(@part) == 0) goto LNoItem; // hacker has removed the item (no changed, why?) |
---|
| 542 | if (getequipid(@part) != @refineitemid) goto LNoFake; // hacker has changed the item |
---|
| 543 | mes "Clang, clang!!!"; |
---|
| 544 | if (getequippercentrefinery(@part)<=rand(100)) goto Lfail_number; |
---|
| 545 | successrefitem @part; |
---|
| 546 | emotion 21; |
---|
| 547 | set @refinecnt,@refinecnt - 1; |
---|
| 548 | next; |
---|
| 549 | if(@refinecnt == 0) goto Lend; |
---|
| 550 | goto L_refinenumber; |
---|
| 551 | |
---|
| 552 | Lfail_number: |
---|
| 553 | failedrefitem @part; |
---|
| 554 | emotion 23; |
---|
| 555 | mes "[" + @name$ + "]"; |
---|
| 556 | mes "WAHHHH!!! I'm so sorry... I warned you this could happen..."; |
---|
| 557 | set @refinecnt,@refinecnt - 1; |
---|
| 558 | if(@refinecnt == 0) goto Lend2; |
---|
| 559 | mes "Here's the unused Zeny and Material back..."; |
---|
| 560 | getitem @material,@refinecnt; |
---|
| 561 | set @fullprice,@refinecnt * @price; |
---|
| 562 | set Zeny,Zeny + @fullprice; |
---|
| 563 | |
---|
| 564 | Lend2: |
---|
| 565 | close; |
---|
| 566 | } |
---|
| 567 | |
---|
| 568 | |
---|
| 569 | |
---|
| 570 | //============================================================================== |
---|
| 571 | // Material Salesmen |
---|
| 572 | //============================================================================== |
---|
| 573 | prt_in,56,69,4 script Vurewell 86,{ |
---|
| 574 | set @name$,"Vurewell"; |
---|
| 575 | callfunc "phramain"; |
---|
| 576 | end; |
---|
| 577 | } |
---|
| 578 | payon,145,178,4 script Begnahd 88,{ |
---|
| 579 | set @name$,"Begnahd"; |
---|
| 580 | callfunc "phramain"; |
---|
| 581 | end; |
---|
| 582 | } |
---|
| 583 | morocc_in,65,37,4 script Sade 99,{ |
---|
| 584 | set @name$,"Sade"; |
---|
| 585 | callfunc "phramain"; |
---|
| 586 | end; |
---|
| 587 | } |
---|
| 588 | alberta_in,18,59,5 script Kahlamanlith 86,{ |
---|
| 589 | set @name$,"Kahlamanlith"; |
---|
| 590 | callfunc "phramain"; |
---|
| 591 | end; |
---|
| 592 | } |
---|
| 593 | yuno_in01,171,26,6 script Dillemat 88,{ |
---|
| 594 | set @name$,"Dillemat"; |
---|
| 595 | callfunc "phramain"; |
---|
| 596 | end; |
---|
| 597 | } |
---|
| 598 | ein_in01,15,87,7 script Tirehaus 86,{ |
---|
| 599 | set @name$,"Tirehaus"; |
---|
| 600 | callfunc "phramain"; |
---|
| 601 | end; |
---|
| 602 | } |
---|
| 603 | lhz_in02,278,24,3 script Krugg 86,{ |
---|
| 604 | set @name$,"Krugg"; |
---|
| 605 | callfunc "phramain"; |
---|
| 606 | end; |
---|
| 607 | } |
---|
| 608 | |
---|
| 609 | //============================================================ |
---|
| 610 | //= Material Salesmen Functions |
---|
| 611 | //============================================================ |
---|
| 612 | function script phramain { |
---|
| 613 | if(@chris == 1) goto M_Menu; |
---|
| 614 | mes "[" + @name$ + "]"; |
---|
| 615 | mes "Hello, Im selling metals I just mined."; |
---|
| 616 | mes "They are Phracon and Emveretarcon."; |
---|
| 617 | mes "Would you like to buy some?"; |
---|
| 618 | M_Menu: |
---|
| 619 | set @chris, 0; |
---|
| 620 | next; |
---|
| 621 | menu"Phracon - 200z",PHARA,"Emveretarcon - 1000z",EMVER; |
---|
| 622 | |
---|
| 623 | PHARA: |
---|
| 624 | set @itemid,1010; |
---|
| 625 | set @value,200; |
---|
| 626 | goto CONTINUE; |
---|
| 627 | |
---|
| 628 | EMVER: |
---|
| 629 | set @itemid,1011; |
---|
| 630 | set @value,1000; |
---|
| 631 | |
---|
| 632 | CONTINUE: |
---|
| 633 | mes "[" + @name$ + "]"; |
---|
| 634 | mes "How many would you like?"; |
---|
| 635 | next; |
---|
| 636 | input @ammount; |
---|
| 637 | if (@ammount <= 0) goto L_BELOW; |
---|
| 638 | if (@ammount > 999) goto L_ABOVE; |
---|
| 639 | if (zeny < @value * @ammount) goto L_NOZENY; |
---|
| 640 | if (checkweight(@itemid,@ammount) == 0) goto L_WEIGHT; |
---|
| 641 | set Zeny,Zeny-@value*@ammount; |
---|
| 642 | getitem @itemid,@ammount; |
---|
| 643 | mes "[" + @name$ + "]"; |
---|
| 644 | mes "Here you go."; |
---|
| 645 | close; |
---|
| 646 | |
---|
| 647 | L_NOZENY: |
---|
| 648 | mes "You do not have enough zeny!"; |
---|
| 649 | close; |
---|
| 650 | L_WEIGHT: |
---|
| 651 | mes "You can't hold that many of that item!"; |
---|
| 652 | close; |
---|
| 653 | L_BELOW: |
---|
| 654 | mes "You have to buy a POSITIVE amount of items!"; |
---|
| 655 | close; |
---|
| 656 | L_ABOVE: |
---|
| 657 | mes "You can't buy this much of this item!"; |
---|
| 658 | close; |
---|
| 659 | } |
---|
| 660 | |
---|
| 661 | |
---|
| 662 | |
---|
| 663 | //============================================================================== |
---|
| 664 | // Ori/Elu Refiners |
---|
| 665 | //============================================================================== |
---|
| 666 | prt_in,63,69,4 script Dietrich 84,{ |
---|
| 667 | set @name$,"Dietrich"; |
---|
| 668 | callfunc "orimain"; |
---|
| 669 | end; |
---|
| 670 | } |
---|
| 671 | payon,137,178,4 script Hakhim 88,{ |
---|
| 672 | set @name$,"Hakhim"; |
---|
| 673 | callfunc "orimain"; |
---|
| 674 | end; |
---|
| 675 | } |
---|
| 676 | morocc_in,72,32,4 script Abdul 99,{ |
---|
| 677 | set @name$,"Abdul"; |
---|
| 678 | callfunc "orimain"; |
---|
| 679 | end; |
---|
| 680 | } |
---|
| 681 | alberta_in,21,63,5 script Xenophon 84,{ |
---|
| 682 | set @name$,"Xenophon"; |
---|
| 683 | callfunc "orimain"; |
---|
| 684 | end; |
---|
| 685 | } |
---|
| 686 | yuno_in01,171,22,6 script Delayt 88,{ |
---|
| 687 | set @name$,"Delayt"; |
---|
| 688 | callfunc "orimain"; |
---|
| 689 | end; |
---|
| 690 | } |
---|
| 691 | ein_in01,18,82,6 script Matestein 84,{ |
---|
| 692 | set @name$,"Matestein"; |
---|
| 693 | callfunc "orimain"; |
---|
| 694 | end; |
---|
| 695 | } |
---|
| 696 | lhz_in02,281,24,5 script Fruel 84,{ |
---|
| 697 | set @name$,"Fruel"; |
---|
| 698 | callfunc "orimain"; |
---|
| 699 | end; |
---|
| 700 | } |
---|
| 701 | |
---|
| 702 | //============================================================ |
---|
| 703 | //= Ori/Elu Functions |
---|
| 704 | //============================================================ |
---|
| 705 | function script orimain { |
---|
| 706 | if(@chris == 1) goto M_Menu; |
---|
| 707 | mes "[" + @name$ + "]"; |
---|
| 708 | mes "If you bring Rough Oridecons and"; |
---|
| 709 | mes "Rough Eluniums to me,"; |
---|
| 710 | mes "I can refine them for you."; |
---|
| 711 | mes "However, you must bring 5 of each."; |
---|
| 712 | M_Menu: |
---|
| 713 | set @chris, 0; |
---|
| 714 | next; |
---|
| 715 | menu "Make Oridecon",M_Ori, "Make Elunium",M_Elu, "Ask about enchanted stones",M_Stones; |
---|
| 716 | |
---|
| 717 | M_Ori: |
---|
| 718 | if(countitem(756) < 5) goto L_NoOri; |
---|
| 719 | delitem 756,5; |
---|
| 720 | getitem 984,1; |
---|
| 721 | mes "[" + @name$ + "]"; |
---|
| 722 | mes "As promised, here's your oridecon."; |
---|
| 723 | mes "Come back again anytime."; |
---|
| 724 | close; |
---|
| 725 | |
---|
| 726 | L_NoOri: |
---|
| 727 | mes "[" + @name$ + "]"; |
---|
| 728 | mes "Huh? You're kidding, right? Didn't I say I can't make you an Oridecon unless you bring me 5 rough ones?"; |
---|
| 729 | close; |
---|
| 730 | M_Elu: |
---|
| 731 | if(countitem(757) < 5) goto L_NoElu; |
---|
| 732 | delitem 757,5; |
---|
| 733 | getitem 985,1; |
---|
| 734 | mes "[" + @name$ + "]"; |
---|
| 735 | mes "As promised, here's your elunium."; |
---|
| 736 | mes "Come back again anytime."; |
---|
| 737 | close; |
---|
| 738 | |
---|
| 739 | L_NoElu: |
---|
| 740 | mes "[" + @name$ + "]"; |
---|
| 741 | mes "Huh? You're kidding, right? Didn't I say I can't make you an Elunium unless you bring me 5 rough ones?"; |
---|
| 742 | close; |
---|
| 743 | M_Stones: |
---|
| 744 | mes "[" + @name$ + "]"; |
---|
| 745 | mes "Enchanted stones, huh..."; |
---|
| 746 | next; |
---|
| 747 | mes "[" + @name$ + "]"; |
---|
| 748 | mes "Well, in the 20 years that I've been a stone smith I've heard of them many times... though I've never actually seen them before."; |
---|
| 749 | next; |
---|
| 750 | mes "[" + @name$ + "]"; |
---|
| 751 | mes "I've been told that enchanted stones possess different elemental properties such as ^5533FFWater, Earth, Fire, and Wind^000000."; |
---|
| 752 | next; |
---|
| 753 | mes "[" + @name$ + "]"; |
---|
| 754 | mes "If someone combines an Enchanted Stone with a weapon during the refining process, that weapon will possess the same property as the stone."; |
---|
| 755 | next; |
---|
| 756 | mes "[" + @name$ + "]"; |
---|
| 757 | mes "Of course, that person needs to be skillful enough to work on it."; |
---|
| 758 | goto M_Menu; |
---|
| 759 | } |
---|
| 760 | |
---|
| 761 | |
---|
| 762 | |
---|
| 763 | //===================================================================================== |
---|
| 764 | // Equipment Repairmen |
---|
| 765 | //===================================================================================== |
---|
| 766 | prt_in,62,54,2 script Grendal 84,{ |
---|
| 767 | set @name$,"Grendal"; |
---|
| 768 | callfunc "repairmain"; |
---|
| 769 | end; |
---|
| 770 | } |
---|
| 771 | //Temp Spot, Not Sure Where To place |
---|
| 772 | payon,149,182,2 script Repairman#01 88,{ |
---|
| 773 | set @name$,"Repairman"; |
---|
| 774 | callfunc "repairmain"; |
---|
| 775 | end; |
---|
| 776 | } |
---|
| 777 | morocc_in,71,40,2 script Repairman#02 99,{ |
---|
| 778 | set @name$,"Repairman"; |
---|
| 779 | callfunc "repairmain"; |
---|
| 780 | end; |
---|
| 781 | } |
---|
| 782 | lhz_in02,284,14,3 script Repairman#03 86,{ |
---|
| 783 | set @name$,"Repairman"; |
---|
| 784 | callfunc "repairmain"; |
---|
| 785 | end; |
---|
| 786 | } |
---|
| 787 | |
---|
| 788 | //============================================================ |
---|
| 789 | //= Equipment Repair Function |
---|
| 790 | //============================================================ |
---|
| 791 | function script repairmain { |
---|
| 792 | set @repairprice,5000; |
---|
| 793 | mes "[" + @name$ + "]"; |
---|
| 794 | mes "I am the Repair Smith and I can repair any Arms you want."; |
---|
| 795 | mes "Tell me which Equipment you want to repair."; |
---|
| 796 | next; |
---|
| 797 | if(getbrokenid(1)==NULL) { |
---|
| 798 | mes "[" + @name$ + "]"; |
---|
| 799 | mes "Looks like you don't need anything repaired today..."; |
---|
| 800 | close; |
---|
| 801 | } |
---|
| 802 | set @choice,select(getitemname(getbrokenid(1)),getitemname(getbrokenid(2)), |
---|
| 803 | getitemname(getbrokenid(3)),getitemname(getbrokenid(4)),getitemname(getbrokenid(5)), |
---|
| 804 | getitemname(getbrokenid(6)),getitemname(getbrokenid(7)),getitemname(getbrokenid(8)), |
---|
| 805 | getitemname(getbrokenid(9)),getitemname(getbrokenid(10))); |
---|
| 806 | mes "[" + @name$ + "]"; |
---|
| 807 | mes "You're gonna repair " + getitemname(getbrokenid(@choice)) + "."; |
---|
| 808 | mes "To repair this, I need " + @repairprice + " Zeny."; |
---|
| 809 | mes "Continue?"; |
---|
| 810 | next; |
---|
| 811 | if(select("Yes","No") == 2) { |
---|
| 812 | mes "[" + @name$ + "]"; |
---|
| 813 | mes "Ok, but don't expect to be using that..."; |
---|
| 814 | close; |
---|
| 815 | } |
---|
| 816 | if (Zeny < @repairprice) { |
---|
| 817 | mes "[" + @name$ + "]"; |
---|
| 818 | mes "Is it all you got?"; |
---|
| 819 | mes "Unfortunately, I have kids to feed..."; |
---|
| 820 | close; |
---|
| 821 | } |
---|
| 822 | set Zeny,Zeny-@repairprice; |
---|
| 823 | repair(@choice); |
---|
| 824 | close; |
---|
| 825 | |
---|
| 826 | } |
---|