//================= Hercules Script ======================================= //= _ _ _ //= | | | | | | //= | |_| | ___ _ __ ___ _ _| | ___ ___ //= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| //= | | | | __/ | | (__| |_| | | __/\__ \ //= \_| |_/\___|_| \___|\__,_|_|\___||___/ //================= License =============================================== //= This file is part of Hercules. //= http://herc.ws - http://github.com/HerculesWS/Hercules //= //= Copyright © 2012-2015 Hercules Dev Team //= Copyright © rAthena Dev Team //= Copyright © Euphy //= //= Hercules is free software: you can redistribute it and/or modify //= it under the terms of the GNU General Public License as published by //= the Free Software Foundation, either version 3 of the License, or //= (at your option) any later version. //= //= This program is distributed in the hope that it will be useful, //= but WITHOUT ANY WARRANTY; without even the implied warranty of //= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //= GNU General Public License for more details. //= //= You should have received a copy of the GNU General Public License //= along with this program. If not, see <http://www.gnu.org/licenses/>. //========================================================================= //= Renewal Refining NPCs //================= Description =========================================== //= Renewal-specific refining NPCs and material merchants. //================= Current Version ======================================= //= 1.3 //========================================================================= //== +11 and above Refiners ================================ prt_in,90,72,5 script Vestri#prt 4_M_DWARF,{ callfunc "refinenew","Vestri",0; end; } morocc_in,64,41,5 script Vestri#moc 4_M_DWARF,{ callfunc "refinenew","Vestri",0; end; } payon_in01,18,132,3 script Vestri#pay 4_M_DWARF,{ callfunc "refinenew","Vestri",0; end; } //== +11 and above Refiner Function ======================== // To allow auto safe refining/multiple refining set the second argument to '1' // in the function call. // If you enable this function, be sure to edit the value of .@safe to the max // safe refine in refine_db.txt as well. // // On official servers, if an item is unsuccessfully refined it will break at a // 20% rate and downgrade at an 80% rate. function script refinenew { disable_items; mes "["+ getarg(0) +"]"; mes "I am the best Armsmith ever!"; mes "I don't refine normal, boring items."; mes "I only refine items that are Level 10 or higher."; next; mes "["+ getarg(0) +"]"; mes "Anyway, you may use my services if your item is Level 10 or higher."; mes "What do you want me to refine?"; next; setarray .@position$[1],"Head","Body","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3"; .@menu$ = ""; for(.@i = 1; .@i<=10; ++.@i) { if (getequipisequiped(.@i)) { .@menu$ += .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]"; .@equipped = 1; } .@menu$ += ":"; } if (.@equipped == 0) { mes "[" + getarg(0) + "]"; mes "I don't think I can refine any items you have..."; close; } .@part = select(.@menu$); if (!getequipisequiped(.@part)) { //custom check mes "[" + getarg(0) + "]"; mes "You're not wearing"; mes "anything there that"; mes "I can refine."; emotion e_an; close; } if (!getequipisenableref(.@part)) { mes "[" + getarg(0) + "]"; mes "I don't think I can"; mes "refine this item at all..."; close; } if (getequiprefinerycnt(.@part) < 10) { mes "["+ getarg(0) +"]"; mes "I said I don't work with items that are lower than Level 10."; close; } if (getequiprefinerycnt(.@part) >= 20) { //custom check mes "["+ getarg(0) +"]"; mes "I can't refine this"; mes "any more. This is as"; mes "refined as it gets!"; close; } .@refineitemid = getequipid(.@part); // save id of the item .@refinerycnt = getequiprefinerycnt(.@part); //save refinery count if ((getequipweaponlv(.@part) >= 1) && (getequipweaponlv(.@part) <= 4)) { .@type$ = "weapon"; .@material = 6224; //Bradium .@price = 100000; switch(getequipweaponlv(.@part)) { case 1: .@safe = 10; break; case 2: .@safe = 10; break; case 3: .@safe = 10; break; case 4: .@safe = 10; break; } mes "["+ getarg(0) +"]"; mes "Hmm a weapon, is that ok?"; mes "If you want to refine this weapon,"; mes "I will need 1 ^003366Bradium^000000 and 100,000 zeny."; } else { .@type$ = "armor"; .@material = 6223; //Carnium .@price = 100000; .@safe = 10; mes "["+ getarg(0) +"]"; mes "Hmm an armor, is that ok?"; mes "If you want to refine this armor,"; mes "I will need 1 ^003366Carnium^000000 and 100,000 zeny."; } mes "Are you sure you want to continue?"; next; if(select("Yes", "No") == 2){ mes "["+ getarg(0) +"]"; mes "Hm... if you mind... never mind..."; close; } if (getarg(1) != 1) { if (getequippercentrefinery(.@part) < 100) { mes "["+ getarg(0) +"]"; mes "This "+.@type$+" already has been refined serveral times."; mes "It could be downgraded if I try again."; mes "It won't break for sure."; next; mes "["+ getarg(0) +"]"; mes "You could be ^FF0000lowering the upgrade level^000000 of the "+.@type$+" by -2 or -3,"; mes "but it won't breaks, you won't lose ^FF0000any cards^000000 or special properties added to it."; next; mes "["+ getarg(0) +"]"; mes "Do you still want me to refine it?"; mes "I think I have given you enough warning."; next; if(select("Yes.", "No.") == 2) { mes "["+ getarg(0) +"]"; mes "Well, no challenge is one way to go..."; mes "No risk... that could be wise."; close; } } if (countitem(.@material) < 1 || Zeny < .@price) { mes "["+ getarg(0) +"]"; mes "Hm. You don't seem to have enough money or "+getitemname(.@material)+"."; mes "Please come back when you have them."; close; } Zeny -= .@price; delitem .@material,1; //custom checks if (getequipisequiped(.@part) == 0) { // hacker has removed the item (not changed, why?) mes "[" + getarg(0) + "]"; mes "Look here... you don't have any items on..."; close; } if (getequiprefinerycnt(.@part) != .@refinerycnt || getequipid(.@part) != .@refineitemid) { // hacker has changed the item mes "[" + getarg(0) + "]"; emotion e_an; mes "Wait a second..."; mes "Do you think I'm stupid?!"; mes "You switched the item while I wasn't looking! Get out of here!"; close; } if (getequippercentrefinery(.@part) > rand(100)) { mes "Clang! Clang! Clang! Clang!"; successrefitem .@part; if ( getequiprefinerycnt( .@part ) > 10 ) announce strcharinfo( 0 ) + " refine his/her item for +" + getequiprefinerycnt( .@part ) + " now!", 0; next; emotion e_no1; mes "["+ getarg(0) +"]"; mes "Good! Succes!!!"; mes "I am the best Armsmith."; close; } else { if (rand(100) < 80) { mes "["+ getarg(0) +"]"; mes "Clang! Clang! Clang! Clang!"; downrefitem .@part, 2; // Failed refine attempts decrease the item's refine level by 3 next; emotion (!rand(5))?e_cash:e_omg; mes "["+ getarg(0) +"]"; mes "Ahhh!!!"; next; mes "["+ getarg(0) +"]"; mes "Oh my god!"; mes "The upgrade level has dropped..."; } else { mes "["+ getarg(0) +"]"; mes "Clang! Clang! Clang!"; downrefitem .@part, 3; next; emotion (!rand(5))?e_cash:e_omg; mes "["+ getarg(0) +"]"; mes "Hmmm!"; next; mes "["+ getarg(0) +"]"; mes "Oh my! I've failed to refine stuff..."; mes "I didn't mean it!"; } mes "I could have made a mistake even though I am the best Armsmith ever."; mes "It just wasn't meant to be."; next; mes "["+ getarg(0) +"]"; mes "I will do a better job next time! Don't worry!"; close; } } //- New +11 and above Refining Functions - if (getequiprefinerycnt(.@part) < .@safe) { mes "[" + getarg(0) + "]"; mes "I can refine this to the safe limit or a desired number of times. It's your choice."; next; .@menu2 = select("To the safe limit, please.","I'll decide how many times.","I've changed my mind..."); } else .@menu2 = 2; switch(.@menu2){ case 1: .@refinecnt = .@safe - getequiprefinerycnt(.@part); break; case 2: mes "[" + getarg(0) + "]"; mes "How many times would you like me to refine your item?"; next; input .@refinecnt; .@refinecheck = .@refinecnt + getequiprefinerycnt(.@part); if (.@refinecnt < 1 || .@refinecheck > 20) { mes "[" + getarg(0) + "]"; mes "I can't refine this item that many times."; close; } if (.@refinecheck > .@safe) { .@refinecheck -= .@safe; mes "[" + getarg(0) + "]"; mes "This will try to refine the equipment " + .@refinecheck + " times past the safe limit. Your equipment may be destroyed... is that ok?"; next; if(select("Yes...","No...") == 2){ mes "[" + getarg(0) + "]"; mes "You said so... So be it."; close; } } break; case 3: mes "[" + getarg(0) + "]"; mes "You said so... So be it."; close; } .@fullprice = .@price * .@refinecnt; mes "[" + getarg(0) + "]"; mes "That will cost you " + .@refinecnt + " " + getitemname(.@material) + " and " + .@fullprice + " Zeny. Is that ok?"; next; if(select("Yes", "No...") == 2){ mes "[" + getarg(0) + "]"; mes "You said so... So be it."; close; } if (countitem(.@material) < .@refinecnt || Zeny < .@fullprice) { mes "[" + getarg(0) + "]"; mes "Hm. You don't seem to have enough money or "+getitemname(.@material)+"."; mes "Please come back when you have them."; close; } Zeny -= .@fullprice; delitem .@material,.@refinecnt; while(.@refinecnt){ if (getequipisequiped(.@part) == 0) { mes "[" + getarg(0) + "]"; mes "Look here... you don't have any items on..."; close; } if (getequipid(.@part) != .@refineitemid || (.@menu2 == 1 && getequippercentrefinery(.@part) < 100)) { mes "[" + getarg(0) + "]"; mes "Clang... No, but did you imagine I could be so stupid?!"; mes "You changed it..."; mes "Get out before I stun you with my Hammer!!"; close; } if (getequippercentrefinery(.@part) > rand(100)) { mes "Clang! Clang! Clang! Clang!"; successrefitem .@part; if ( getequiprefinerycnt( .@part ) > 10 ) announce strcharinfo( 0 ) + " refine his/her item for +" + getequiprefinerycnt( .@part ) + " now!", 0; --.@refinecnt; next; } else { if (rand(100) < 80) { mes "["+ getarg(0) +"]"; mes "Clang! Clang! Clang! Clang!"; downrefitem .@part, 2; // Failed refine attempts decrease the item's refine level by 3 next; emotion (!rand(5))?e_cash:e_omg; mes "["+ getarg(0) +"]"; mes "Ahhh!!!"; next; mes "["+ getarg(0) +"]"; mes "Oh my god!"; mes "The upgrade level has dropped..."; } else { mes "["+ getarg(0) +"]"; mes "Clang! Clang! Clang!"; downrefitem .@part, 3; next; emotion (!rand(5))?e_cash:e_omg; mes "["+ getarg(0) +"]"; mes "Hmmm!"; next; mes "["+ getarg(0) +"]"; mes "Oh my! I've failed to refine stuff..."; mes "I didn't mean it!"; } mes "I could have made a mistake even though I am the best Armsmith ever."; mes "It just wasn't meant to be."; next; mes "["+ getarg(0) +"]"; mes "I will do a better job next time! Don't worry!"; close; } } emotion e_no1; mes "["+ getarg(0) +"]"; mes "Good! Succes!!!"; mes "I am the best Blacksmith."; close; } //== Ori/Elu to Carnium/Bradium Refiners =================== - script Austri#ref FAKE_NPC,{ if (checkweight(Knife,1) == 0) { mes "- Wait a minute !! -"; mes "- Currently you're carrying -"; mes "- too many items with you. -"; mes "- Please try again -"; mes "- after you lose some weight. -"; close; } mes "[Austri]"; mes "If you bring me 3"; mes "Oridecon or Elunium"; mes "I can exchange them for"; mes "Bradium or Carnium."; mes "Just give me 50,000z."; next; switch(select("Oridecon to Bradium.", "Elunium to Carnium.", "Purified Bradium to Carnium.", "No thanks.")) { case 1: setarray .@i[0],984,3,6224; //Oridecon -> Bradium break; case 2: setarray .@i[0],985,3,6223; //Elunium -> Carnium break; case 3: setarray .@i[0],6090,1,6223; //Purified_Bradium -> Carnium break; case 4: mes "[Austri]"; mes "Hmm..."; close; } if (countitem(.@i[0]) >= .@i[1] && Zeny >= 50000) { delitem .@i[0],.@i[1]; Zeny -= 50000; getitem .@i[2],1; mes "[Austri]"; if (.@i[0] == 6090) { mes "Refining with Refined Bradium"; mes "can be a little expensive."; mes "I can exchange it for some Carnium."; } else mes "Ok! Here's your "+getitemname(.@i[2])+"."; mes "Take it and use it well."; close; } mes "[Austri]"; mes "You better not be trying"; mes "to cheat me because you"; mes "don't have enough money"; mes "or "+getitemname(.@i[0])+"."; close; } prt_in,85,71,5 duplicate(Austri#ref) Austri#prt 4_M_DWARF payon_in01,14,125,5 duplicate(Austri#ref) Austri#pay 4_M_DWARF morocc_in,60,38,5 duplicate(Austri#ref) Austri#moc 4_M_DWARF //== Malangdo Refiner ====================================== malangdo,224,172,6 script Clink#mal_normal 4_CAT_SAILOR1,{ disable_items; mes "[Clink]"; mes "My cool dad Holink said I have the world's greatest refine hammer!!"; mes "Meow Meow~"; mes "Who do you think I am?"; mes "Yes!!! You!! You want to refine?"; next; setarray .@position$[1],"Head","Body","Left Hand","Right Hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3"; .@menu$ = ""; for(.@i = 1; .@i<=10; ++.@i) .@menu$ += ((getequipisequiped(.@i))?getequipname(.@i):.@position$[.@i]+"-[Empty]")+":"; .@part = select(.@menu$); if (!getequipisequiped(.@part)) { mes "[Clink]"; switch(.@part) { case 1: mes "Dad said. There's no cure for stupidity..."; break; case 2: mes "There's nothing to see here!!"; break; case 3: mes "What an arrogant left hand this is!"; break; case 4: mes "What an arrogant right hand this is!"; break; case 5: mes "Get that dirty thing off my face!!"; break; case 6: mes "Kyaong~! Do not provoke me."; break; case 7: case 8: mes "Where is the accessory?"; break; case 9: case 10: mes "Are you talking about the other head part?"; break; } close; } if (!getequipisenableref(.@part)) { mes "[Clink]"; mes "This can't be refined!!"; close; } if (getequiprefinerycnt(.@part) >= 10) { mes "[Clink]"; mes "Perfect refining. Did I do this for you?"; close; } mes "[Clink]"; switch(getequipweaponlv(.@part)) { default: case 0: // Armor .@price = 2000; .@material = 985; //Elunium .@type$ = "armor"; mes "Hmm, an armor refine? Someone like you?"; break; case 1: // Level 1 Weapon .@price = 50; .@material = 1010; //Phracon .@type$ = "weapon"; mes "A level 1 weapon?"; mes "Urr... Annoying... Okay, let's try..."; break; case 2: // Level 2 Weapon .@price = 200; .@material = 1011; //Emveretarcon .@type$ = "weapon"; mes "A level 2 weapon?"; break; case 3: // Level 3 Weapon .@price = 20000; .@material = 984; //Oridecon .@type$ = "weapon"; mes "Woot!! A level 3 weapon? Impressive~"; break; case 4: // Level 4 Weapon .@price = 50000; .@material = 984; //Oridecon .@type$ = "weapon"; mes "Wow!... A level 4 weapon~!!"; break; } mes "You need ^ff9999"+getitemname(.@material)+"^000000 and ^ff9999"+.@price+"^000000 Zeny. Do you have them?"; next; if(select("Yes, I do!!", "Forget about it!!") == 2) { mes "[Clink]"; mes "I knew it!!"; mes "I knew you were not worth trying my magical refining hammer for."; close; } if (getequippercentrefinery(.@part) < 100) { mes "[Clink]"; mes "Wow!!"; mes "This "+.@type$+" has been refined quite a bit, huh?"; mes "You do know that this might break, right?"; next; mes "[Clink]"; mes "If you break the "+.@type$+", you can never use it again."; mes "Cards and enchant effects..."; mes "the ^ff0000whole thing will disappear^000000."; mes "You still up for this~?"; next; if(select("Yes, I am!!", "Forget about it!!") == 2) { mes "[Clink]"; mes "I knew it!!"; mes "You can't even take this big step. Don't think about refining..."; close; } } if (countitem(.@material) == 0 || Zeny < .@price) { mes "[Clink]"; mes "Hey you!! Didn't I tell you"; mes "that you need ^ff9999"+getitemname(.@material)+"^000000 and ^ff9999"+.@price+"^000000 Zeny??!!"; close; } delitem .@material,1; Zeny -= .@price; if (getequippercentrefinery(.@part) <= rand(100)) { downrefitem .@part, 2; mes "[Clink]"; mes "Cry Hammer!! Cry!!!"; next; switch(rand(1,5)) { case 1: emotion e_sob; break; case 2: emotion e_swt2; break; case 3: emotion e_wah; break; case 4: emotion e_hmm; break; case 5: emotion e_lv2; break; } mes "[Clink]"; mes "Huh?! I failed?!"; next; mes "[Clink]"; mes "Arrgg~ It's all~ Broken...? What a pity~"; next; mes "[Clink]"; mes "Hey...!! Get me another one."; mes "This is not possible."; mes "How can my hammer fail from refining?"; close; } successrefitem .@part; mes "[Clink]"; mes "Cry Hammer!! Cry!!!"; next; emotion e_kis; mes "[Clink]"; mes "Ok!! Perfect!!"; mes "There's nothing I can't refine"; mes "with this special hammer."; mes "You can praise me!!"; mes "What a day!!"; close; }
How to make equipment +10 above won't drop and stay +10 if fail.
Below Scipts too because there is 2 refiner +10 above, thanks!
//================= Hercules Script ======================================= //= _ _ _ //= | | | | | | //= | |_| | ___ _ __ ___ _ _| | ___ ___ //= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| //= | | | | __/ | | (__| |_| | | __/\__ \ //= \_| |_/\___|_| \___|\__,_|_|\___||___/ //================= License =============================================== //= This file is part of Hercules. //= http://herc.ws - http://github.com/HerculesWS/Hercules //= //= Copyright © 2012-2015 Hercules Dev Team //= Copyright © Euphy //= //= Hercules is free software: you can redistribute it and/or modify //= it under the terms of the GNU General Public License as published by //= the Free Software Foundation, either version 3 of the License, or //= (at your option) any later version. //= //= This program is distributed in the hope that it will be useful, //= but WITHOUT ANY WARRANTY; without even the implied warranty of //= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //= GNU General Public License for more details. //= //= You should have received a copy of the GNU General Public License //= along with this program. If not, see <http://www.gnu.org/licenses/>. //========================================================================= //= HD Refiners //================= Description =========================================== //= Refiners that use HD ores to refine equipment. //================= Additional Comments =================================== //= Upon failure, the equipment is not destroyed; rather, its refine level //= decreases by 1. The success rate is identical to that for Enriched ores. //= - "Blacksmith Mighty Hammer" only refines from +7~9. //= - "Basta" only refines from +10 and up. //================= Current Version ======================================= //= 1.0 //========================================================================= //== Blacksmith Mighty Hammer (+7~9) ======================= - script ::MightyHammer FAKE_NPC,{ disable_items; mes "[Blacksmith Mighty Hammer]"; mes "Unlike others, I am a blacksmith who refines a very limited number of items."; mes "I refine only items that are ^CC0000+7 to +9^000000."; next; mes "[Blacksmith Mighty Hammer]"; mes "My specialty is that even if my refining fails, the refine level decreases by 1 without losing the gear. Isn't it great?"; next; mes "[Blacksmith Mighty Hammer]"; mes "So lets kick this into overdrive, what d' ya say? What item do you want to refine?"; next; setarray .@position$[1],"Head","Body","Left Hand","Right Hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3"; .@menu$ = ""; for(.@i = 1; .@i<=10; ++.@i) .@menu$ += ((getequipisequiped(.@i))?getequipname(.@i):.@position$[.@i]+"-[Not equipped]")+":"; .@part = select(.@menu$); if (!getequipisequiped(.@part)) { mes "[Blacksmith Mighty Hammer]"; switch(.@part) { case 1: mes "I'm a blacksmith, not a hairstylist."; break; case 2: mes "With my hammer, I will make you a star of the sky."; break; case 3: case 4: mes "Making artificial hands is not my specialty."; break; case 5: mes "Bring out the item so I can refine it!"; break; case 6: mes "Where is this foot odor coming from?"; break; case 7: case 8: mes "Where is the accessory?"; break; case 9: mes "What do you want me to refine?"; break; case 10: mes "Huh? What do you want me to do?"; break; } close; } if (!getequipisenableref(.@part)) { mes "[Blacksmith Mighty Hammer]"; mes "This item can't be refined."; close; } if (getequiprefinerycnt(.@part) < 7 || getequiprefinerycnt(.@part) > 9) { mes "[Blacksmith Mighty Hammer]"; mes "I only handle items with refine levels from +7 to +9."; close; } switch(getequipweaponlv(.@part)) { default: case 0: .@price = 20000; .@material = 6241; //HD_Elunium break; case 1: case 2: case 3: case 4: .@price = 20000; .@material = 6240; //HD_Oridecon break; } mes "[Blacksmith Mighty Hammer]"; mes "In order to refine the gear you selected you need ^ff9999"+getitemname(.@material)+"^000000 and 20,000 zeny as a fee."; mes "Do you have them ready?"; next; if(select("Yes", "No") == 2) { mes "[Blacksmith Mighty Hammer]"; mes "I will wait until you are ready."; close; } if (getequippercentrefinery(.@part) < 100) { mes "[Blacksmith Mighty Hammer]"; mes "It looks like this item will likely fail to be refined."; mes "Well, even if it fails, it only decreases by 1 refine level."; mes "Would you like to continue refining?"; next; if(select("Yes", "No") == 2) { mes "[Blacksmith Mighty Hammer]"; mes "Only those who overcome fear of failure will obtain a masterpiece."; close; } } if (countitem(.@material) == 0 || Zeny < .@price) { mes "[Blacksmith Mighty Hammer]"; mes "Didn't you just say you had everything ready?"; close; } delitem .@material,1; Zeny -= .@price; mes "[Blacksmith Mighty Hammer]"; mes "Tac! Tac! Tac!"; if (getequippercentrefinery(.@part) > rand(100) || getequippercentrefinery(.@part) > rand(100)) { successrefitem .@part; if ( getequiprefinerycnt( .@part ) > 9 ) announce strcharinfo( 0 ) + " refine his/her item for +" + getequiprefinerycnt( .@part ) + " now!", 0; next; emotion e_no1; mes "[Blacksmith Mighty Hammer]"; mes "The sound refreshes my mind everytime I hear it."; mes "Here, have it. Refine succeeded flawlessly!"; close; } downrefitem .@part; next; emotion e_omg; mes "[Blacksmith Mighty Hammer]"; mes "Oops!!"; next; mes "[Blacksmith Mighty Hammer]"; mes "I am sure a person like you would never blame me for a decrease in refine level by 1. Hmm."; close; } prt_in,59,54,3 duplicate(MightyHammer) Mighty Hammer#prt 4_M_DWARF morocc_in,65,30,3 duplicate(MightyHammer) Mighty Hammer#morocc 4_M_DWARF payon,148,176,3 duplicate(MightyHammer) Mighty Hammer#pay 4_M_DWARF alberta_in,16,56,3 duplicate(MightyHammer) Mighty Hammer#alb 4_M_DWARF yuno_in01,171,18,3 duplicate(MightyHammer) Mighty Hammer#yuno 4_M_DWARF ein_in01,22,82,3 duplicate(MightyHammer) Mighty Hammer#ein 4_M_DWARF lhz_in02,280,19,3 duplicate(MightyHammer) Mighty Hammer#lhz 4_M_DWARF //- iRO NPC locations - //moc_para01,38,185,4 duplicate(MightyHammer) Mighty Hammer#ed 4_M_DWARF //payon,174,133,4 duplicate(MightyHammer) Mighty Hammer#im 4_M_DWARF //== Basta (+10 and up) ==================================== - script ::Basta FAKE_NPC,{ disable_items; mes "[Basta]"; mes "I'm the best Blacksmith in the whole world, Basta."; mes "But I don't provide a normal refine service."; mes "I only refine equipment ^CC0000over +10^000000."; next; mes "[Basta]"; mes "Which equipment do you want to refine?"; next; setarray .@position$[1],"Head","Body","Left Hand","Right Hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3"; .@menu$ = ""; for(.@i = 1; .@i<=10; ++.@i) .@menu$ += ((getequipisequiped(.@i))?getequipname(.@i):.@position$[.@i]+"-[Unequipped]")+":"; .@part = select(.@menu$); if (!getequipisequiped(.@part)) { mes "[Basta]"; switch(.@part) { case 1: mes "Is your head an equipment?"; break; case 2: mes "What do you want me to do?"; break; case 3: case 4: mes "Making artificial hands is not my specialty."; break; case 5: mes "Do you even know what a robe is?"; break; case 6: mes "If you want to refine your feet, don't come to me, try running a marathon."; break; case 7: case 8: mes "Where is the accessory?"; break; case 9: mes "Well... I don't see any equipment worth refining."; break; case 10: mes "I can't make you smart. Go see a school teacher for that."; break; } close; } if (!getequipisenableref(.@part)) { mes "[Basta]"; mes "Even I cannot refine this item. There's no way."; close; } if (getequiprefinerycnt(.@part) < 10) { mes "[Basta]"; mes "Haven't I told you? I only refine equipments that are +10 and above."; close; } if (getequiprefinerycnt(.@part) == 20) { mes "[Basta]"; mes "This weapon is perfect, no need to refine it anymore~"; close; } switch(getequipweaponlv(.@part)) { default: case 0: .@price = 100000; .@material = 6225; //HD_Carnium .@type$ = "armor"; break; case 1: case 2: case 3: case 4: .@price = 100000; .@material = 6226; //HD_Bradium .@type$ = "weapon"; break; } mes "[Basta]"; mes "Hmm... is this the one you want to refine?"; mes "To refine this equipment, I need 1 ^ff9999"+getitemname(.@material)+"^000000 and 100,000 zeny as a fee."; mes "Do you really want to refine this?"; next; if(select("Yes", "No") == 2) { mes "[Basta]"; mes "Okay. If that's what you want..."; close; } if (getequippercentrefinery(.@part) < 100) { mes "[Basta]"; mes "This "+.@type$+" has already been refined pretty high."; mes "If you try to refine it more, the refine level could decrease."; next; mes "[Basta]"; mes "I am different from the blacksmiths in others places."; mes "It is impossible that the refine level will drop by, say, 3 or 4... that sounds scary."; mes "Here it can only decrease by 1 level."; next; mes "[Basta]"; mes "Compared to other blacksmiths, the risk is smaller."; mes "I've given all precautions. Do you want to try it?"; next; if(select("Yes", "No") == 2) { mes "[Basta]"; mes "Well~"; mes "Not challenging at all could also be a kind of wisdom in life."; close; } } if (countitem(.@material) == 0 || Zeny < .@price) { mes "[Basta]"; mes "Hmm... You didn't bring all the materials needed."; mes "Come back when you have them all."; close; } delitem .@material,1; Zeny -= .@price; mes "Pow! Pow! Pow! Pow!"; if (getequippercentrefinery(.@part) > rand(100) || getequippercentrefinery(.@part) > rand(100)) { successrefitem .@part; if ( getequiprefinerycnt( .@part ) > 10 ) announce strcharinfo( 0 ) + " refine his/her item for +" + getequiprefinerycnt( .@part ) + " now!", 0; next; emotion e_no1; mes "[Basta]"; mes "Great! Nicely done!!"; mes "I really am the best blacksmith in the whole wide world!"; close; } downrefitem .@part; next; emotion (!rand(5))?e_cash:e_omg; mes "[Basta]"; mes "Aaaaaaaaaaak!!!"; next; mes "[Basta]"; mes "Damn it!"; mes "Refining failed and refine level has decreased!"; mes "Even the best blacksmith in the world doesn't guarantee 100% success!"; mes "Too bad."; next; mes "[Basta]"; mes "I'll do better next time! Don't worry!"; close; } prt_in,57,54,3 duplicate(Basta) Basta#prt 4_M_DWARF morocc_in,68,30,3 duplicate(Basta) Basta#morocc 4_M_DWARF payon,148,174,3 duplicate(Basta) Basta#payon 4_M_DWARF alberta_in,18,56,3 duplicate(Basta) Basta#alberta 4_M_DWARF yuno_in01,173,18,3 duplicate(Basta) Basta#yuno 4_M_DWARF ein_in01,24,82,3 duplicate(Basta) Basta#einbroch 4_M_DWARF lhz_in02,280,17,3 duplicate(Basta) Basta#lighthalzen 4_M_DWARF