summaryrefslogtreecommitdiff
path: root/npc/pre-re/merchants
diff options
context:
space:
mode:
authorshennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-07-08 19:30:07 +0000
committershennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-07-08 19:30:07 +0000
commit31825ccc2dde034a218d9ad466dd721c40b5651d (patch)
tree961b976e45988f7f7158d33b3f11a18688f34b1f /npc/pre-re/merchants
parent22c75b070526de8b103032f5bf13504af81e0095 (diff)
downloadhercules-31825ccc2dde034a218d9ad466dd721c40b5651d.tar.gz
hercules-31825ccc2dde034a218d9ad466dd721c40b5651d.tar.bz2
hercules-31825ccc2dde034a218d9ad466dd721c40b5651d.tar.xz
hercules-31825ccc2dde034a218d9ad466dd721c40b5651d.zip
Okie ladies and gentleman if this commit breaks anything it's jman's and maki's fault, yes, blame them.
Fixing pre-re / re npc support, moving /config/ folder to src root so other servers may also make use of the #define renewal dir and other stuff. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16382 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'npc/pre-re/merchants')
-rw-r--r--npc/pre-re/merchants/3rd_trader.txt521
-rw-r--r--npc/pre-re/merchants/advanced_refiner.txt159
-rw-r--r--npc/pre-re/merchants/alchemist.txt276
-rw-r--r--npc/pre-re/merchants/ammo_boxes.txt138
-rw-r--r--npc/pre-re/merchants/ammo_dealer.txt126
-rw-r--r--npc/pre-re/merchants/buying_shops.txt248
-rw-r--r--npc/pre-re/merchants/cash_hair.txt125
-rw-r--r--npc/pre-re/merchants/cash_trader.txt27
-rw-r--r--npc/pre-re/merchants/cashheadgear_dye.txt119
-rw-r--r--npc/pre-re/merchants/clothes_dyer.txt144
-rw-r--r--npc/pre-re/merchants/diamond.txt244
-rw-r--r--npc/pre-re/merchants/dye_maker.txt201
-rw-r--r--npc/pre-re/merchants/elemental_trader.txt160
-rw-r--r--npc/pre-re/merchants/enchan_arm.txt132
-rw-r--r--npc/pre-re/merchants/falcon_flute.txt123
-rw-r--r--npc/pre-re/merchants/gemstone.txt117
-rw-r--r--npc/pre-re/merchants/hair_dyer.txt409
-rw-r--r--npc/pre-re/merchants/hair_style.txt1303
-rw-r--r--npc/pre-re/merchants/icecream.txt86
-rw-r--r--npc/pre-re/merchants/inn.txt279
-rw-r--r--npc/pre-re/merchants/kunai_maker.txt103
-rw-r--r--npc/pre-re/merchants/manuk.txt68
-rw-r--r--npc/pre-re/merchants/milk_trader.txt80
-rw-r--r--npc/pre-re/merchants/novice_exchange.txt394
-rw-r--r--npc/pre-re/merchants/old_pharmacist.txt262
-rw-r--r--npc/pre-re/merchants/quivers.txt178
-rw-r--r--npc/pre-re/merchants/refine.txt1867
-rw-r--r--npc/pre-re/merchants/renters.txt381
-rw-r--r--npc/pre-re/merchants/shops.txt380
-rw-r--r--npc/pre-re/merchants/shops_re.txt42
-rw-r--r--npc/pre-re/merchants/socket_enchant.txt362
-rw-r--r--npc/pre-re/merchants/socket_enchant2.txt470
-rw-r--r--npc/pre-re/merchants/splendide.txt117
-rw-r--r--npc/pre-re/merchants/wander_pet_food.txt75
34 files changed, 9716 insertions, 0 deletions
diff --git a/npc/pre-re/merchants/3rd_trader.txt b/npc/pre-re/merchants/3rd_trader.txt
new file mode 100644
index 000000000..d8b543968
--- /dev/null
+++ b/npc/pre-re/merchants/3rd_trader.txt
@@ -0,0 +1,521 @@
+//===== rAthena Script =======================================
+//= 3rd Item Seller
+//===== By: ==================================================
+//= Masao
+//= Mercurial
+//===== Current Version: =====================================
+//= 1.1
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Sells some 3rd Job related Items.
+//===== Additional Comments: =================================
+//= v1.1 Optimized Poison Herb Salesman NPC
+//= v1.0 First Version.
+//============================================================
+
+
+job3_guil01,79,96,3 script Poison Herb Salesman::PHS 877,{
+
+ // We are unsure about agis script command equivalent please refer to 3rd_trader.sc line 3
+ //if( (countitem(1201)>=30000) || checkweight() )
+
+ for(set .x,0; .x<getarraysize(.herbs); set .x,.x+1)
+ {
+ if(!checkweight(.herbs[.x],.maxHerbs))
+ {
+ mes "- Wait a minute !! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please try again -";
+ mes "- after you loose some weight. -";
+ close;
+ }
+ }
+
+ mes .npcName$;
+ mes "I am the professional";
+ mes "poison herb seller.";
+ mes "Which one do you want?";
+ mes "They cost "+.herbCost[0]+" zeny each!";
+ set .herbType,select("Nerium:Rantana:Makulata:Seratum:Scopolia:Amoena:Poison Kit")-1;
+ next;
+ if(.herbType==(getarraysize(.herbs)-1))
+ {
+ mes .npcName$;
+ mes "You can only buy";
+ mes "1 Poison Kit and it costs "+.herbCost[(getarraysize(.herbs)-1)]+" zeny.";
+ mes "Will you buy it?";
+
+ switch(select("Yes, I will.:No, I won't."))
+ {
+ case 1:
+ if(Zeny < .poisHerbCost)
+ {
+ next;
+ mes .npcName$;
+ mes "Please check the money you have.";
+ mes "It doesn't seem like you have enough money.";
+ close;
+ }
+ else
+ {
+ set Zeny,Zeny-.poisHerbCost;
+ getitem .herbs[getarraysize(.herbs)-1],1;
+ next;
+ mes .npcName$;
+ mes "Thank you. See you~!";
+ close;
+ }
+ break;
+ case 2:
+ next;
+ mes "[Poison Herb Salesman]";
+ mes "Well, I see. See you~!";
+ close;
+ break;
+ }
+ }
+ else
+ {
+ mes .npcName$;
+ mes "How many do you want? You can";
+ mes "only buy a maximum of "+.maxHerbs+" ea";
+ mes "and if you want to cancel, enter '0'.";
+ input .herbsCount;
+ if(.herbsCount<=0) // check if player canceled herb purchase
+ {
+ next;
+ mes .npcName$;
+ mes "You've cancelled the trade.";
+ close;
+ }
+ else if(.herbsCount>.maxHerbs) // checks if herbs count exceeds maxHerbs limit
+ {
+ next;
+ mes .npcName$;
+ mes "Please check the maximum";
+ mes "amount and then try again.";
+ close;
+ }
+ else if(.herbsCount+countitem(.herbs[.herbType]) > .maxItemStack) // Check item stack according to Aegis script
+ {
+ mes "- Wait a minute !! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please try again -";
+ mes "- after you loose some weight. -";
+ close;
+ }
+ else
+ {
+ if(Zeny<(.herbsCount*.herbCost)) // Check if Zeny is enough
+ {
+ next;
+ mes .npcName$;
+ mes "Please check the money you have.";
+ mes "It doesn't seem like you have enough money.";
+ close;
+ }
+ else // all requirements are met give the item
+ {
+ set Zeny,Zeny-(.herbsCount*.herbCost);
+ getitem .herbs[.herbType],.herbsCount;
+ next;
+ mes .npcName$;
+ mes "Thank you. See you~!";
+ close;
+ }
+ }
+ }
+OnInit:
+// Initialize Item Id's on script engine Init Event
+ set .npcName$,"[Poison Herb Salesman]";
+ setarray .herbs[0],7932,7933,7934,7935,7936,7937,7931;
+ setarray .herbCost[0],4000,4000,4000,4000,4000,4000,5000;
+ set .maxHerbs,2000;
+ set .poisHerbCost,5000;
+ set .maxItemStack,30000;
+}
+
+
+job3_rune01,90,62,3 script Rune Salesman::runesale 853,{
+
+ if(checkweight(1201,1) == 0 || MaxWeight - Weight < 20000)
+ {
+ mes "- Wait a minute !! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please try again -";
+ mes "- after you loose some weight. -";
+ close;
+ }
+
+ mes "[Rune Salesman]";
+ mes "Hey, do you need Runes?!";
+ mes "I sell all kinds of Rune Stones!";
+ mes "What kind of Rune do you want?";
+ next;
+ switch(select("Buy high-quality Rune Stones.:Buy ordinary Rune Stones."))
+ {
+ case 1:
+ mes "[Rune Salesman]";
+ mes "High-quality Runes!";
+ mes "They cost 2,500 zeny each!";
+ mes "Tell me how many you want to buy";
+ mes "and remember, you can only";
+ mes "buy a maximum amount of 2000 ea!";
+ next;
+ input .@amount;
+ if(.@amount == 0)
+ {
+ mes "[Rune Salesman]";
+ mes "You're not buying? Go away!";
+ close;
+ }
+ else if(.@amount > 2000)
+ {
+ mes "[Rune Salesman]";
+ mes "Please check the maximum";
+ mes "amount and then come back to me again!";
+ close;
+ }
+ else if(Zeny < .@amount * 2500)
+ {
+ mes "[Rune Salesman]";
+ mes "Money! Money!";
+ mes "You are short of money!";
+ mes "Check the amount of money you have!!";
+ close;
+ }
+ set .@checkweight,.@amount * 100;
+ if (MaxWeight < .@checkweight)
+ {
+ mes "[Rune Salesman]";
+ mes "You're not able to carry it, so why are you trying to buy it?!";
+ close;
+ }
+ set Zeny,Zeny - .@amount * 2500;
+ getitem 12734,.@amount;
+ mes "[Rune Salesman]";
+ mes "You can buy more again.";
+ mes "So, see you later.";
+ close;
+ case 2:
+ mes "[Rune Salesman]";
+ mes "Ordinary Rune Stones?";
+ mes "They cost 1,000 zeny each!";
+ mes "Tell me how many you want to buy";
+ mes "and remember, you can only";
+ mes "buy a maximum amount of 2000 ea!";
+ next;
+ input .@amount;
+ if(.@amount == 0)
+ {
+ mes "[Rune Salesman]";
+ mes "You're not buying? Go away!";
+ close;
+ }
+ else if(.@amount > 2000)
+ {
+ mes "[Rune Salesman]";
+ mes "Please check the maximum";
+ mes "amount and then come back to me again!";
+ close;
+ }
+ else if(Zeny < .@amount * 1000)
+ {
+ mes "[Rune Salesman]";
+ mes "Money! Money!";
+ mes "You are short of money!";
+ mes "Check the amount of money you have!!";
+ close;
+ }
+ set .@checkweight,.@amount * 100;
+ if (MaxWeight < .@checkweight)
+ {
+ mes "[Rune Salesman]";
+ mes "You're not able to carry it, so why are you trying to buy it?!";
+ close;
+ }
+ set Zeny,Zeny - .@amount * 1000;
+ getitem 12737,.@amount;
+ mes "[Rune Salesman]";
+ mes "You can buy more again.";
+ mes "So, see you later.";
+ close;
+ }
+}
+
+job3_guil01,91,93,3 script Rare Herb Collector 49,{
+
+ if(checkweight(1201,1) == 0 || MaxWeight - Weight < 20000)
+ {
+ mes "- Wait a minute !! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please try again -";
+ mes "- after you loose some weight. -";
+ close;
+ }
+
+ if (Class == 4059 || Class == 4065)
+ {
+ mes "[Rare Poison Herb Collector]";
+ mes "I wander around the world and collect rare poison herbs. Recently, I am dealing in the herb called Izidor. If you are interested, you can buy them.";
+ next;
+ switch(select("How can I buy them?:Exchange it with Animal Blood:Exchange it with a Bitter Herb:Exchange it with a Deadly Noxious Herb:Exchange it with a Frozen Rose:Exchange it with Ment:Exchange it with Hinalle"))
+ {
+ case 1:
+ mes "[Rare Poison Herb Collector]";
+ mes "You can buy any of those items for 10,000 zeny: Animal Blood, Bitter Herb, Deadly Noxious Herb, Frozen Rose, Ment or Hinalle. ";
+ next;
+ mes "[Rare Poison Herb Collector]";
+ mes "Why I ask for money? That is just to pay a little respect to a collector like me. Ha ha ha...";
+ close;
+ case 2:
+ if ((countitem(702) > 0) && (Zeny > 9999))
+ {
+ mes "[Rare Poison Herb Collector]";
+ mes "Thank you. I've received your payment.";
+ delitem 702,1;
+ set Zeny,Zeny - 10000;
+ getitem 709,1;
+ close;
+ }
+ mes "[Rare Poison Herb Collector]";
+ mes "Hey, try again after you've prepared all the requirements for the exchange.";
+ close;
+ case 3:
+ if ((countitem(621) > 0) && (Zeny > 9999))
+ {
+ mes "[Rare Poison Herb Collector]";
+ mes "Thank you. I've received your payment.";
+ delitem 621,1;
+ set Zeny,Zeny - 10000;
+ getitem 709,1;
+ close;
+ }
+ mes "[Rare Poison Herb Collector]";
+ mes "Hey, try again after you've prepared all the requirements for the exchange.";
+ close;
+ case 4:
+ if ((countitem(631) > 0) && (Zeny > 9999))
+ {
+ mes "[Rare Poison Herb Collector]";
+ mes "Thank you. I've received your payment.";
+ delitem 631,1;
+ set Zeny,Zeny - 10000;
+ getitem 709,1;
+ close;
+ }
+ mes "[Rare Poison Herb Collector]";
+ mes "Hey, try again after you've prepared all the requirements for the exchange.";
+ close;
+ case 5:
+ if ((countitem(749) > 0) && (Zeny > 9999))
+ {
+ mes "[Rare Poison Herb Collector]";
+ mes "Thank you. I've received your payment.";
+ delitem 749,1;
+ set Zeny,Zeny - 10000;
+ getitem 709,1;
+ close;
+ }
+ mes "[Rare Poison Herb Collector]";
+ mes "Hey, try again after you've prepared all the requirements for the exchange.";
+ close;
+ case 6:
+ if ((countitem(605) > 0) && (Zeny > 9999))
+ {
+ mes "[Rare Poison Herb Collector]";
+ mes "Thank you. I've received your payment.";
+ delitem 605,1;
+ set Zeny,Zeny - 10000;
+ getitem 709,1;
+ close;
+ }
+ mes "[Rare Poison Herb Collector]";
+ mes "Hey, try again after you've prepared all the requirements for the exchange.";
+ close;
+ case 7:
+ if ((countitem(703) > 0) && (Zeny > 9999))
+ {
+ mes "[Rare Poison Herb Collector]";
+ mes "Thank you. I've received your payment.";
+ delitem 703,1;
+ set Zeny,Zeny - 10000;
+ getitem 709,1;
+ close;
+ }
+ mes "[Rare Poison Herb Collector]";
+ mes "Hey, try again after you've prepared all the requirements for the exchange.";
+ close;
+ }
+ }
+ mes "[Rare Poison Herb Collector]";
+ mes "I wander around the world and collect rare poison herbs. But I don't feel like selling my herbs to a person like you... ha ha ha...";
+ close;
+}
+
+gef_tower,105,172,5 script Point Salesman#Sorcerer 700,{
+
+ if(checkweight(1201,1) == 0 || MaxWeight - Weight < 20000)
+ {
+ mes "- Wait a minute !! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please try again -";
+ mes "- after you loose some weight. -";
+ close;
+ }
+
+ mes "[Point Salesman]";
+ mes "Hello. I'm selling a catalyst that are called ^FF0000Points^000000 for Sorcerers. What would you like?";
+ next;
+ switch(select("Scarlet Points - 200z:Lime Green Points - 200z:Indigo Points - 200z:Yellow Wish Points - 200z:Cancel"))
+ {
+ case 1:
+ mes "[Point Salesman]";
+ mes "You have chosen Scarlet Points.";
+ mes "How many do you want?";
+ mes "If you want to cancel, enter 0.";
+ next;
+ input .@amount;
+ if (.@amount == 0)
+ {
+ mes "[Point Salesman]";
+ mes "You've cancelled the trade.";
+ close;
+ }
+ set .@po_weight,.@amount * 10;
+ set .@tt_weight,MaxWeight - .@po_weight;
+ set .@po_money,.@amount * 200;
+ if (.@tt_weight > 0)
+ {
+ if (Zeny >= .@po_money)
+ {
+ set Zeny,Zeny - .@po_money;
+ getitem 6360,.@amount;
+ mes "[Point Salesman]";
+ mes "Thank you very much. See you~!";
+ close;
+ }
+ mes "[Point Salesman]";
+ mes "You don't seem to have enough money.";
+ close;
+ }
+ mes "[Point Salesman]";
+ mes "You don't have enough space in your inventory to buy this amount.";
+ close;
+ case 2:
+ mes "[Point Salesman]";
+ mes "You have chosen Lime Green Points.";
+ mes "How many do you want?";
+ mes "If you want to cancel, enter 0.";
+ next;
+ input .@amount;
+ if (.@amount == 0)
+ {
+ mes "[Point Salesman]";
+ mes "You've cancelled the trade.";
+ close;
+ }
+ set .@po_weight,.@amount * 10;
+ set .@tt_weight,MaxWeight - .@po_weight;
+ set .@po_money,.@amount * 200;
+ if (.@tt_weight > 0)
+ {
+ if (Zeny >= .@po_money)
+ {
+ set Zeny,Zeny - .@po_money;
+ getitem 6363,.@amount;
+ mes "[Point Salesman]";
+ mes "Thank you very much. See you~!";
+ close;
+ }
+ mes "[Point Salesman]";
+ mes "You don't seem to have enough money.";
+ close;
+ }
+ mes "[Point Salesman]";
+ mes "You don't have enough space in your inventory to buy this amount.";
+ close;
+ case 3:
+ mes "[Point Salesman]";
+ mes "You have chosen Indigo Points.";
+ mes "How many do you want?";
+ mes "If you want to cancel, enter 0.";
+ next;
+ input .@amount;
+ if (.@amount == 0)
+ {
+ mes "[Point Salesman]";
+ mes "You've cancelled the trade.";
+ close;
+ }
+ set .@po_weight,.@amount * 10;
+ set .@tt_weight,MaxWeight - .@po_weight;
+ set .@po_money,.@amount * 200;
+ if (.@tt_weight > 0)
+ {
+ if (Zeny >= .@po_money)
+ {
+ set Zeny,Zeny - .@po_money;
+ getitem 6361,.@amount;
+ mes "[Point Salesman]";
+ mes "Thank you very much. See you~!";
+ close;
+ }
+ mes "[Point Salesman]";
+ mes "You don't seem to have enough money.";
+ close;
+ }
+ mes "[Point Salesman]";
+ mes "You don't have enough space in your inventory to buy this amount.";
+ close;
+ case 4:
+ mes "[Point Salesman]";
+ mes "You have chosen Yellow Wish Points.";
+ mes "How many do you want?";
+ mes "If you want to cancel, enter 0.";
+ next;
+ input .@amount;
+ if (.@amount == 0)
+ {
+ mes "[Point Salesman]";
+ mes "You've cancelled the trade.";
+ close;
+ }
+ set .@po_weight,.@amount * 10;
+ set .@tt_weight,MaxWeight - .@po_weight;
+ set .@po_money,.@amount * 200;
+ if (.@tt_weight > 0)
+ {
+ if (Zeny >= .@po_money)
+ {
+ set Zeny,Zeny - .@po_money;
+ getitem 6362,.@amount;
+ mes "[Point Salesman]";
+ mes "Thank you very much. See you~!";
+ close;
+ }
+ mes "[Point Salesman]";
+ mes "You don't seem to have enough money.";
+ close;
+ }
+ mes "[Point Salesman]";
+ mes "You don't have enough space in your inventory to buy this amount.";
+ close;
+ case 5:
+ mes "[Point Salesman]";
+ mes "You can't find the stuff you need?";
+ close;
+ }
+}
+
+
+morocc,190,96,4 duplicate(PHS) Poison Herb Salesman#moc 877
+lhz_in02,16,205,4 duplicate(PHS) Poison Herb Salesman#lhz 877
+prontera,168,228,3 duplicate(runesale) Rune Salesman#1 853 \ No newline at end of file
diff --git a/npc/pre-re/merchants/advanced_refiner.txt b/npc/pre-re/merchants/advanced_refiner.txt
new file mode 100644
index 000000000..70b11c167
--- /dev/null
+++ b/npc/pre-re/merchants/advanced_refiner.txt
@@ -0,0 +1,159 @@
+//===== rAthena Script =======================================
+//= Advanced Refiner
+//===== By: ==================================================
+//= L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.4
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Refiner that uses Enriched ores to increase upgrade success.
+//= After a conversation with Doddler, it's been established that
+//= the advanced refiner works similar the the "Bubble Gum" item.
+//= The success percentage is not "increased" however, if it fails
+//= You get a second try. This tries twice at the same time,
+//= effectively giving you a re-roll on your attempt.
+//= - Dialog is only partly official to iRO.
+//= - Uses the iRO position for this NPC.
+//===== Additional Comments: =================================
+//= 1.0 First Version. [L0ne_W0lf]
+//= 1.1 Fixed a weird carriage return. o_o [L0ne_W0lf]
+//= 1.2 Optimizing refine method [Zephyrus]
+//= 1.3 Typo fixes [Yommy]
+//= 1.4 Removed unnecessary dialogs [Zephyrus]
+//============================================================
+
+payon,174,138,0 script Suhnbi#cash 85,{
+ mes "[Suhnbi]";
+ mes "I am the Armsmith";
+ mes "I can refine all kinds of weapons,";
+ mes "armor and equipment, so let me";
+ mes "know what you want to refine.";
+ next;
+ setarray .@position$[1], "Head","Body","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3";
+ set .@menu$,"";
+ for( set .@i,1; .@i <= 10; set .@i,.@i+1 )
+ {
+ if( getequipisequiped(.@i) )
+ set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]";
+
+ set .@menu$, .@menu$ + ":";
+ }
+ set .@part,select(.@menu$);
+
+ if( !getequipisequiped(.@part) )
+ close;
+
+ if( !getequipisenableref(.@part) )
+ {
+ mes "[Suhnbi]";
+ mes "I don't think I can refine this item at all.";
+ close;
+ }
+ if( !getequipisidentify(.@part) )
+ {
+ mes "[Suhnbi]";
+ mes "This has not been identified. So, it can't be refined...";
+ close;
+ }
+ if( getequiprefinerycnt(.@part) >= 10 )
+ {
+ mes "[Suhnbi]";
+ mes "This item cannot be refined because it has already reached its maximum level...";
+ close;
+ }
+
+ // Make sure you have the neccessary items and Zeny to refine your items
+ // Determines chance of failure and verifies that you want to continue.
+ switch( getequipweaponlv(.@part) )
+ {
+ case 1: callsub S_RefineValidate,1,7620,50,.@part; break;
+ case 2: callsub S_RefineValidate,2,7620,200,.@part; break;
+ case 3: callsub S_RefineValidate,3,7620,5000,.@part; break;
+ case 4: callsub S_RefineValidate,4,7620,20000,.@part; break;
+ default: callsub S_RefineValidate,0,7619,2000,.@part; break;
+ }
+
+ if( getequippercentrefinery(.@part) > rand(100) || getequippercentrefinery(.@part) > rand(100) )
+ {
+ mes "[Suhnbi]";
+ mes "Clink! Clank! Clunk!";
+ SuccessRefItem .@part;
+ next;
+ Emotion e_no1;
+ mes "[Suhnbi]";
+ mes "Here you are! It's done.";
+ mes "It's been a while since I've made such a fine weapon. You must be happy because it has become stronger!";
+ close;
+ }
+ mes "[Suhnbi]";
+ mes "Clink! Clank! Clunk!";
+ FailedRefItem .@part;
+ next;
+ if (rand(5) == 1){
+ Emotion e_cash;
+ } else {
+ Emotion e_omg;
+ }
+ mes "[Suhnbi]";
+ mes "Cough!!!!";
+ next;
+ mes "[Suhnbi]";
+ mes "Cough...Cough..";
+ mes "What a shame...";
+ mes "Your equipment broke during the refining process. I had told you earlier this might happen!";
+ close;
+
+S_RefineValidate:
+ mes "[Suhnbi]";
+ if (getarg(0))
+ mes "A level " + getarg(0) + " weapon...";
+ mes "To refine this I need one ^ff9999" + getitemname(getarg(1)) + "^000000 and a service fee of " + getarg(2) + " Zeny.";
+ mes "Do you wish to continue?";
+ next;
+ if( select("Yes:No") == 1 )
+ {
+ if( getequippercentrefinery(getarg(3)) < 100 )
+ {
+ mes "[Suhnbi]";
+ mes "Wow!!";
+ mes "This weapon, probably";
+ mes "looks like it's been refined...";
+ mes "many times...";
+ mes "It may break if";
+ mes "you refine it again.";
+ next;
+ mes "And if it breaks,";
+ mes "you can't use it anymore!";
+ mes "All the cards in it and the";
+ mes "properties";
+ mes "^ff0000will be lost^000000!!";
+ mes "^ff0000 besides, the equipment will break!^000000";
+ mes " ";
+ mes "Are you sure you still want to continue?";
+ next;
+ if( select("Yes:No") == 2 )
+ {
+ mes "[Suhnbi]";
+ mes "I completely agree...";
+ mes "I might be a great refiner, but sometimes even I make mistakes.";
+ close;
+ }
+ }
+ if( countitem(getarg(1)) > 0 && Zeny > getarg(2) )
+ {
+ delitem getarg(1), 1;
+ set Zeny, Zeny - getarg(2);
+ return;
+ }
+ mes "[Suhnbi]";
+ mes "You don't seem to have enough Zeny or " + getitemname(getarg(1)) + "...";
+ mes "Go get some more. I'll be here all day if you need me.";
+ close;
+ }
+ mes "[Suhnbi]";
+ mes "Yeah... There's no need to rush.";
+ mes "Take your time.";
+ close;
+} \ No newline at end of file
diff --git a/npc/pre-re/merchants/alchemist.txt b/npc/pre-re/merchants/alchemist.txt
new file mode 100644
index 000000000..b99f7bf25
--- /dev/null
+++ b/npc/pre-re/merchants/alchemist.txt
@@ -0,0 +1,276 @@
+//===== rAthena Script =======================================
+//= Alchemist Shop
+//===== By: ==================================================
+//= rAthena Team
+//===== Current Version: =====================================
+//= 1.7
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Selling Alchemist Materials and Manuals
+//===== Additional Comments: =================================
+//= 1.1 fixed Medicine Bowl issue, thanx 2 MasterOfMuppets
+//= 1.2 Reddozen's fixes of typos. added optional Elemental
+//= Potion Guide. [Lupus]
+//= 1.3 Deleted Elemental Potions Guide due to original quest [Lupus]
+//= 1.4 Alchemists can now purchase 2000 Medicine Bowls at once. [SinSloth]
+//= 1.5 Updated to Aegis 10.3 Standards. [L0ne_W0lf]
+//= 1.6 Corrected canceling purchase. [L0ne_W0lf]
+//= 1.7 Updated to match AEGIS script. [Masao]
+//============================================================
+
+alde_alche,31,186,3 script Craft Book Salesman#alde 883,{
+
+ mes "[Craft Book Salesman]";
+ mes "Welcome.";
+ mes "I'm here to sell";
+ mes "^0000FFspecial craft books^000000 for Geneticists.";
+ next;
+ mes "[Craft Book Salesman]";
+ mes "Geneticists have some skills";
+ mes "that require craft books to activate.";
+ next;
+ mes "[Craft Book Salesman]";
+ mes "The more craft books you have,";
+ mes "the more skills you can use.";
+ next;
+ mes "[Craft Book Salesman]";
+ mes "Please understand that";
+ mes "I specialize in the sale of these special books and";
+ mes "I ^FF0000don't sell other items^000000.";
+ next;
+ mes "[Craft Book Salesman]";
+ mes "Okay then, here's the list of available craft books.";
+ next;
+ switch(select("[Apple Bomb Craft Book] 100,000 zeny:[Pineapple Bomb Craft Book] 100,000 zeny:[Coconut Bomb Craft Book] 100,000 zeny:[Melon Bomb Craft Book] 100,000 zeny:[Banana Bomb Craft Book] 100,000 zeny:[Plant Gene Cultivation Method] 100,000 zeny:[Superior Potion Craft Manual] 100,000 zeny:[Mix Cooking Book] 100,000 zeny:[Health Improvement Research Book] 100,000 zeny:[Vigor Drink Recipe] 100,000 zeny:Close")){
+ case 1:
+ callsub S_SellManual,6279,100000;
+ break;
+ case 2:
+ callsub S_SellManual,6280,100000;
+ break;
+ case 3:
+ callsub S_SellManual,6281,100000;
+ break;
+ case 4:
+ callsub S_SellManual,6282,100000;
+ break;
+ case 5:
+ callsub S_SellManual,6283,100000;
+ break;
+ case 6:
+ callsub S_SellManual,6284,100000;
+ break;
+ case 7:
+ callsub S_SellManual,6285,100000;
+ break;
+ case 8:
+ callsub S_SellManual,11022,100000;
+ break;
+ case 9:
+ callsub S_SellManual,11023,100000;
+ break;
+ case 10:
+ callsub S_SellManual,11024,100000;
+ break;
+ case 11:
+ mes "[Craft Book Salesman]";
+ mes "Thank you for your patronage.";
+ mes "Please come again.";
+ close;
+ }
+
+S_SellManual:
+ mes "[Craft Book Salesman]";
+ mes ""+getitemname(getarg(0))+"?";
+ mes "That'll be "+getarg(1)+" zeny ea.";
+ mes "How many of these books would you like to purchase?";
+ next;
+ input .@amount;
+ if (.@amount == 0) {
+ mes "[Craft Book Salesman]";
+ mes "Would you like to see some different books?";
+ close;
+ }
+ if (.@amount < 1 || .@amount > 99 ){
+ mes "[Craft Book Salesman]";
+ mes "You cannot purchase more than 100 at a time.";
+ close;
+ }
+ mes "[Craft Book Salesman]";
+ mes "You've entered "+.@amount+"x "+getitemname(getarg(0))+".";
+ mes "That'll be "+getarg(1) * .@amount+" Zeny.";
+ mes "Would you like to continue?";
+ next;
+ if (select("Yes:No") == 1) {
+ if (Zeny < getarg(1) * .@amount) {
+ mes "[Craft Book Salesman]";
+ mes "You don't";
+ mes "have enough zeny.";
+ mes "Check how much zeny";
+ mes "you have first.";
+ close;
+ }
+ if (checkweight(getarg(0),.@amount) == 0){
+ mes "[Craft Book Salesman]";
+ mes "It doesn't seem like you can carry everything.";
+ mes "Please check the space in your inventory.";
+ close;
+ }
+ mes "[Craft Book Salesman]";
+ mes "Thank you for your patronage.";
+ set Zeny,Zeny - getarg(1) * .@amount;
+ getitem getarg(0),.@amount;
+ close;
+ }
+ mes "[Craft Book Salesman]";
+ mes "Please take your time";
+ mes "before you make your decision.";
+ close;
+}
+
+alde_alche,24,188,3 script Guild Dealer 740,{
+ if (checkweight(1201,1) == 0) {
+ mes "- Wait a minute! -";
+ mes "- Currently you are carrying -";
+ mes "- too many items with you. -";
+ mes "- Please come back again -";
+ mes "- after you store some items into kafra storage. -";
+ close;
+ }
+ mes "[Gever Al Sharp]";
+ mes "Welcome to the";
+ mes "Alchemist Union.";
+ mes "How can I assist you today?";
+ next;
+ switch(select("Purchase materials.:Purchase a production manual.:Quit.")) {
+ case 1:
+ mes "[Gever Al Sharp]";
+ mes "What would you like?";
+ next;
+ if (select("Medicine Bowl - 8 Zeny:Cancel.") == 1) {
+ mes "[Gever Al Sharp]";
+ mes "How many do you want?";
+ mes "Enter '0' if you want to quit.";
+ next;
+ while(1) {
+ input .@input,0,2001;
+ if (.@input == 0) {
+ mes "[Gever Al Sharp]";
+ mes "The deal was cancelled.";
+ mes "Come again next time.";
+ close;
+ }
+ else if (.@input < 1 || .@input > 2000) {
+ mes "[Gever Al Sharp]";
+ mes "The number must";
+ mes "be less than 2000.";
+ next;
+ }
+ else {
+ break;
+ }
+ }
+ set .@sell,.@input * 8;
+ set .@item_weight,.@input * 10;
+ if (Zeny < .@sell) {
+ mes "[Gever Al Sharp]";
+ mes "You don't";
+ mes "have enough zeny.";
+ mes "Check how much zeny";
+ mes "you have first.";
+ close;
+ }
+ if ((MaxWeight - Weight) < .@item_weight) {
+ mes "[Gever Al Sharp]";
+ mes "It doesn't seem like";
+ mes "you can carry everything.";
+ mes "Please check the space";
+ mes "in your inventory.";
+ close;
+ }
+ set zeny,zeny-.@sell;
+ getitem 7134,.@input; //Medicine_Bowl
+ mes "[Gever Al Sharp]";
+ mes "Thank you.";
+ mes "Come again.";
+ close;
+ }
+ mes "[Gever Al Sharp]";
+ mes "Well then,";
+ mes "come again when";
+ mes "you need to purchase";
+ mes "materials related to";
+ mes "Alchemy, alright?";
+ close;
+ case 2:
+ mes "[Gever Al Sharp]";
+ mes "What do you need?";
+ mes "Manuals are generally 100,000 zeny. But there are a couple of special manuals that will cost more.";
+ next;
+ switch(select("Potion Creation Guide:Alcohol Creation Guide:Bottle Grenade Creation Guide:Acid Bottle Creation Guide:Plant Bottle Creation Guide:Marine Sphere Bottle Creation Guide:Glistening Coat Creation Guide:Condensed Potion Creation Guide:Cancel Deal.")) {
+ case 1:
+ callsub S_SellManual,7144,100000; //Normal_Potion_Book
+ break;
+ case 2:
+ callsub S_SellManual,7127,100000; //Alcol_Create_Book
+ break;
+ case 3:
+ callsub S_SellManual,7128,100000; //FireBottle_Create_Book
+ break;
+ case 4:
+ callsub S_SellManual,7129,100000; //Acid_Create_Book
+ break;
+ case 5:
+ callsub S_SellManual,7130,100000; //Plant_Create_Book
+ break;
+ case 6:
+ callsub S_SellManual,7131,100000; //Mine_Create_Book
+ break;
+ case 7:
+ callsub S_SellManual,7132,100000; //Coating_Create_Book
+ break;
+ case 8:
+ callsub S_SellManual,7133,240000; //Slim_Potion_Create_Book
+ break;
+ case 9:
+ mes "[Gever Al Sharp]";
+ mes "Well then...";
+ mes "Come back if you";
+ mes "ever need to buy";
+ mes "a production manual.";
+ close;
+ }
+ case 3:
+ mes "[Gever Al Sharp]";
+ mes "Alright then,";
+ mes "have a good day.";
+ close;
+ }
+
+S_SellManual:
+ if (Zeny < getarg(1)) {
+ mes "[Gever Al Sharp]";
+ mes "You don't";
+ mes "have enough zeny.";
+ mes "Check how much zeny";
+ mes "you have first.";
+ close;
+ }
+ mes "[Gever Al Sharp]";
+ mes ""+getitemname(getarg(0))+"?";
+ mes "That'll be "+getarg(1)+" zeny.";
+ next;
+ if (select("Purchase.:Quit.") == 1) {
+ set zeny,zeny-getarg(1);
+ getitem getarg(0),1;
+ mes "[Gever Al Sharp]";
+ mes "Thank you for";
+ mes "your patronage.";
+ close;
+ }
+ mes "[Gever Al Sharp]";
+ mes "Come again";
+ mes "next time.";
+ close;
+}
diff --git a/npc/pre-re/merchants/ammo_boxes.txt b/npc/pre-re/merchants/ammo_boxes.txt
new file mode 100644
index 000000000..fcad5a0ea
--- /dev/null
+++ b/npc/pre-re/merchants/ammo_boxes.txt
@@ -0,0 +1,138 @@
+//===== rAthena Script =======================================
+//= Magazine Dealer Kenny
+//===== By: ==================================================
+//= rAthena dev team
+//===== Current Version: =====================================
+//= 1.4
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Turns bullets into magazines/packs.
+//===== Additional Comments: =================================
+//= 1.0 First version. [SinSloth]
+//= 1.1 Optimized version - Reduced to only one function [SinSloth]
+//= 1.2 Optimized^2, corrected npc's name [ultramage]
+//= 1.2a Optimized. Please, ommit extra NPC names [Lupus]
+//= 1.3 Updated to match AEGIS script. [Kisuka]
+//= 1.4 Updated to match AEGIS script again. [Masao]
+//============================================================
+
+izlude,171,127,3 script Magazine Dealer Kenny::mdk 83,{
+ if(BaseJob == Job_Gunslinger) {
+ mes "[Kenny]";
+ mes "Welcome to my Magazine Shop.";
+ mes "As you may know, large numbers";
+ mes "of bullets can be carried more";
+ mes "easily when they're in Magazines. Now, can I interest you in";
+ mes "anything in particular?";
+ next;
+ switch(select("Wind Sphere Pack:Shadow Sphere Pack:Poison Sphere Pack:Water Sphere Pack:Fire Sphere Pack:Cartridge:Blood Cartridge:Silver Cartridge:Cancel")) {
+ case 1: callfunc "Func_Casing",13204,12144; break;
+ case 2: callfunc "Func_Casing",13206,12145; break;
+ case 3: callfunc "Func_Casing",13205,12146; break;
+ case 4: callfunc "Func_Casing",13207,12147; break;
+ case 5: callfunc "Func_Casing",13203,12148; break;
+ case 6: callfunc "Func_Casing",13200,12149; break;
+ case 7: callfunc "Func_Casing",13202,12150; break;
+ case 8: callfunc "Func_Casing",13201,12151; break;
+ case 9:
+ mes "[Kenny]";
+ mes "Well, if you ever find";
+ mes "that you have too many";
+ mes "bullets, come and see me.";
+ mes "It's a smart idea to store";
+ mes "bullets with my Magazines.";
+ close;
+ }
+ }
+ mes "[Kenny]";
+ mes "Welcome to my shop.";
+ mes "Here, I provide Magazines";
+ mes "and Cartridges for Gunslingers.";
+ mes "Sorry, but it doesn't look like";
+ mes "my services would be of any";
+ mes "use to you, adventurer.";
+ next;
+ mes "[Kenny]";
+ mes "Eh, but if you happen to";
+ mes "know any Gunslingers, send";
+ mes "them my way. You can never";
+ mes "have too many bullets.";
+ close;
+}
+
+function script Func_Casing {
+ mes "[Kenny]";
+ mes "Now, you can trade";
+ mes "500 "+getitemname(getarg(0))+"s";
+ mes "and 500 zeny for 1 "+getitemname(getarg(1))+", so make sure";
+ mes "you have sufficient bullets";
+ mes "and zeny for this exchange.";
+ next;
+ mes "[Kenny]";
+ mes "You can exchange 500 "+getitemname(getarg(0))+"s and 500 zeny";
+ mes "with 1 "+getitemname(getarg(1))+".";
+ next;
+ mes "[Kenny]";
+ mes "Remember that I can't give";
+ mes "you more than 50 Magazines";
+ mes "at a time. Now please enter";
+ mes "the number of Magazines you";
+ mes "want to receive. If you want to cancel, then just enter ''0.''";
+ next;
+ input .@amount;
+ if(.@amount > 50 || .@amount == 0) {
+ mes "[Kenny]";
+ mes "Hey, I can't give you";
+ mes "that many Magazines.";
+ mes "Please try again, and";
+ mes "enter a number no";
+ mes "greater than 50.";
+ close;
+ }
+ if (countitem(getarg(0)) >= (500*.@amount)) {
+ if (Zeny >= (500*.@amount)) {
+ if (checkweight(getarg(1),.@amount) == 0) {
+ mes "[Kenny]";
+ mes "Hey, you've got a lot";
+ mes "of junk crammed in your";
+ mes "Inventory. Free up some";
+ mes "space, and then come back";
+ mes "and trade your bullets for";
+ mes "some Magazines later, okay?";
+ close;
+ }else{
+ mes "[Kenny]";
+ mes "Alright, here are";
+ mes "your Magazines. Thanks";
+ mes "for visiting my shop, and";
+ mes "I hope that you use all";
+ mes "of your ammo wisely.";
+ set Zeny,Zeny-500*.@amount;
+ delitem getarg(0),500*.@amount;
+ getitem getarg(1),.@amount;
+ close;
+ }
+ }else{
+ mes "[Kenny]";
+ mes "Sorry, but you don't";
+ mes "have enough zeny for";
+ mes "this Magazine exchange.";
+ mes "Come back to my shop";
+ mes "after you've saved up";
+ mes "some more money.";
+ close;
+ }
+ }else{
+ mes "[Kenny]";
+ mes "Sorry, but you don't";
+ mes "have enough bullets for";
+ mes "this Magazine exchange.";
+ mes "Maybe you should double";
+ mes "check your Inventory, and";
+ mes "then come back to me later.";
+ close;
+ }
+}
+
+alberta,118,157,3 duplicate(mdk) Magazine Dealer Tonny 83
diff --git a/npc/pre-re/merchants/ammo_dealer.txt b/npc/pre-re/merchants/ammo_dealer.txt
new file mode 100644
index 000000000..ea5f9a803
--- /dev/null
+++ b/npc/pre-re/merchants/ammo_dealer.txt
@@ -0,0 +1,126 @@
+//===== rAthena Script =======================================
+//= Bullet Dealer Tony
+//===== By ===================================================
+//= Playtester, Paradox924X
+//===== Version ==============================================
+//= 1.5
+//===== Compatible With ======================================
+//= rAthena SVN
+//===== Description ==========================================
+//= Bullet trader.
+//===== Comments =============================================
+//= 1.0 First version [Playtester]
+//= 1.1 Converted from Aegis [Paradox924X]
+//= 1.2 More optimized conversion [Legionaire]
+//= 1.2a Removed .GATs [Lupus]
+//= 1.3 Fixed [Playtester] Optimized. Got rid of @vars [Lupus]
+//= 1.4 Updated to match AEGIS script. [Kisuka]
+//= 1.5 Updated to match AEGIS script again. [Masao]
+//============================================================
+
+alberta,118,160,3 script Bullet Dealer Tony#alb::bdt 86,{
+ if (BaseJob == Job_Gunslinger) {
+ mes "[Tony]";
+ mes "I'm Tony, the Bullet Dealer.";
+ mes "Come to me whenever you're";
+ mes "short on ammo. Just bring me";
+ mes "the materials, and I'll make";
+ mes "you the bullets you need.";
+ next;
+ switch(select("Poison Sphere:Flare Sphere:Lighting Sphere:Blind Sphere:Freezing Sphere:Cancel")) {
+ case 1: callfunc "Bullet_Trade",937,10,13205; break;
+ case 2: callfunc "Bullet_Trade",7097,2,13203; break;
+ case 3: callfunc "Bullet_Trade",7053,3,13204; break;
+ case 4: callfunc "Bullet_Trade",1024,5,13206; break;
+ case 5: callfunc "Bullet_Trade",7054,2,13207; break;
+ case 6:
+ mes "[Tony]";
+ mes "Changed your mind?";
+ mes "Well, if you ever need";
+ mes "any bullets, I'll be right";
+ mes "here. Come back whenever";
+ mes "you think you'll need more";
+ mes "ammunition, Gunslinger.";
+ close;
+ }
+ }
+ mes "[Tony]";
+ mes "Hey, I'm Tony. I'm in";
+ mes "charge of distributing";
+ mes "and making bullets for";
+ mes "Gunslingers. It's just";
+ mes "how our guild likes";
+ mes "to do things.";
+ next;
+ mes "[Tony]";
+ mes "I'm sorry if you came";
+ mes "here to buy some bullets.";
+ mes "I can only do business with";
+ mes "fully fledged Gunslingers.";
+ close;
+}
+
+function script Bullet_Trade {
+ mes "[Tony]";
+ mes "For every set of";
+ mes "30 "+getitemname(getarg(2))+"s,";
+ mes "you must give me";
+ mes "1 Emveretarcon,";
+ mes "1 Phracon, and";
+ mes ""+getarg(1)+" "+getitemname(getarg(0))+".";
+ next;
+ mes "[Tony]";
+ mes "Remember that I can give";
+ mes "a maximum of 500 sets of";
+ mes "30 bullets at a time. Please";
+ mes "enter the number of bullet sets";
+ mes "that you'd like. If you want to";
+ mes "cancel, then just enter ''0.''";
+ next;
+ input .@amount;
+ if (.@amount < 1 || .@amount > 500) {
+ mes "[Tony]";
+ mes "Hey, I can't give you";
+ mes "that many bullets. Don't";
+ mes "forget to enter a number";
+ mes "that's no higher than 500";
+ mes "if you want to trade your";
+ mes "items for some bullets.";
+ close;
+ }
+ if (countitem(1010) >= .@amount && countitem(1011) >= .@amount && countitem(getarg(0)) >= (.@amount*getarg(1))) {
+ if (checkweight(getarg(2),.@amount * 30) == 0) {
+ mes "[Tony]";
+ mes "Eh? Your Inventory doesn't";
+ mes "have enough space for this";
+ mes "many bullets. Come back later";
+ mes "after you make more space";
+ mes "available. Try putting some of";
+ mes "your things into Kafra Storage.";
+ close;
+ }else{
+ mes "[Tony]";
+ mes "Great, everything seems";
+ mes "to be in order. Let me take";
+ mes "these materials, and here are";
+ mes "your bullets. It's a pleasure";
+ mes "to do business with you~";
+ delitem 1010,.@amount;
+ delitem 1011,.@amount;
+ delitem getarg(0),.@amount * getarg(1);
+ getitem getarg(2),.@amount * 30;
+ close;
+ }
+ }else{
+ mes "[Tony]";
+ mes "Huh. It looks like you";
+ mes "don't have enough materials";
+ mes "for that many bullets. Well,";
+ mes "it's no problem. Just come";
+ mes "back after gathering everything";
+ mes "that you need, okay?";
+ close;
+ }
+}
+
+izlude,171,133,3 duplicate(bdt) Bullet Dealer Tony#iz 86
diff --git a/npc/pre-re/merchants/buying_shops.txt b/npc/pre-re/merchants/buying_shops.txt
new file mode 100644
index 000000000..19bbbe28f
--- /dev/null
+++ b/npc/pre-re/merchants/buying_shops.txt
@@ -0,0 +1,248 @@
+//===== rAthena Script =======================================
+//= Buying Shop Licenses
+//===== By: ==================================================
+//= Kisuka
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Buying Shop Licenses
+//===== Additional Comments: =================================
+//= 1.0 First version. [Kisuka]
+//============================================================
+
+// Black Marketeer (Buy Licenses - Non-Merchant Classes)
+//============================================================
+que_job01,68,84,1 script Black Marketeer#Buying 881,{
+ if(getskilllv("ALL_BUYING_STORE") == 1) {
+ mes "[Mr. Jass]";
+ mes "Hey, you already made a contract with Hugh.";
+ mes "I don't have any business with you.";
+ close;
+ }else{
+ mes "[Mr. Jass]";
+ mes "You must need something badly to come to find me.";
+ mes "What do you want?";
+ next;
+ switch(select("Bulk Buyer Shop License:Who are you?:Nothing, nothing!")) {
+ case 1:
+ mes "[Mr. Jass]";
+ mes "I knew it!";
+ mes "Sure, I can make it for you.";
+ mes "Mine looks just like the authentic one that Merchants get from that bastard Mr. Hugh!";
+ next;
+ mes "[Mr. Jass]";
+ mes "And my license is better 'cuz you don't need ta' learn any skills.";
+ mes "How many do you want?";
+ next;
+ mes "[Mr. Jass]";
+ mes "Just so you know, I can only make them in small quantities, up to 10 at a time.";
+ mes "It'll cost 500 zeny for each one.";
+ next;
+ while(1) {
+ input .@input;
+ mes "[Mr. Jass]";
+ if(.@input == 0) {
+ mes "Don't you need those licenses?";
+ close;
+ }
+ else if(.@input > 10) {
+ mes "I can only make up to 10 at a time, you know.";
+ next;
+ }
+ else {
+ mes "It'll cost "+(.@input*500)+" zeny.";
+ if(Zeny < (.@input*500)) {
+ mes "but you don't have enough money.";
+ next;
+ mes "[Mr. Jass]";
+ mes "Don't you know the basics of business? Everything has a price.";
+ mes "If you want something, you gotta pay for it.";
+ }else{
+ mes "Ha... Ha ha ha!";
+ mes "Mr. Hugh, I'll take over your license business. You'll see!";
+ mes "*Giggle Giggle*";
+ getitem 12548,.@input; // Shabby_Purchase_Street
+ set Zeny,Zeny-(.@input*500);
+ }
+ close;
+ }
+ }
+
+ case 2:
+ mes "[Mr. Jass]";
+ mes "I left my hometown a long time ago.";
+ mes "It's meaningless to ask who I am because all I've got left now is my hatred.";
+ next;
+ mes "[Mr. Jass]";
+ mes "...";
+ mes "Hugh is a corrupt merchant with no sense of business ethics.";
+ mes "My sole purpose in life is to destroy Hugh.";
+ next;
+ mes "[Mr. Jass]";
+ mes "Aw, I drank too much... (*Hic*)";
+ mes "That's just the alohol talking.";
+ mes "Please forget anything I said.";
+ close;
+ case 3:
+ mes "[Mr. Jass]";
+ mes "Alright, alright! You don't have to yell.";
+ mes "Just leave me alone if you've got no business with me.";
+ close;
+ }
+ }
+}
+
+// Purchasing Team (Learn Skill - Merchant Classes)
+//============================================================
+alberta_in,58,52,4 script Purchasing Team#Buying 59,{
+ if(BaseClass == Job_Merchant && getskilllv("MC_VENDING") >= 1) {
+ if(getskilllv("ALL_BUYING_STORE") == 1) {
+ mes "[Mr. Hugh]";
+ mes "I'm Hugh from the Purchasing Team.";
+ mes "How may I help you today?";
+ next;
+ if(select("Purchase Bulk Buyer Shop License:Quit") == 2) {
+ mes "[Mr. Hugh]";
+ mes "Please feel free to ask me if you need any Bulk Buyer Shop Licenses.";
+ mes "Come again~";
+ close;
+ }
+ mes "[Mr. Hugh]";
+ mes "It's 200 zeny for each Bulk Buyer Shop License, and you may purchase up to 50 at a time.";
+ mes "How many licenses do you need?";
+ next;
+ while(1) {
+ input .@input;
+ mes "[Mr. Hugh]";
+ if(.@input == 0) {
+ mes "You have cancelled the trade.";
+ mes "Have a good day.";
+ close;
+ }
+ if(.@input > 50) {
+ mes "Please enter a value of 50 or less.";
+ next;
+ }
+ else{
+ mes "It'll cost "+(.@input*200)+" zeny for "+.@input+" licenses.";
+ if(Zeny < (.@input*200)) {
+ mes "but you don't seem to have enough money.";
+ }else{
+ mes "Thank you for your patronage.";
+ getitem 6377,.@input; // Buy_Stall_Permit
+ set Zeny,Zeny-(.@input*200);
+ }
+ close;
+ }
+ }
+ }else{
+ mes "[Mr. Hugh]";
+ mes "I'm Hugh from the Purchasing Team at the Alberta Merchant Guild.";
+ mes "You're...";
+ next;
+ mes "[Mr. Hugh]";
+ mes "Did you know? Our guild has issued a license to allow individuals to buy goods from others.";
+ next;
+ select("I've never had problems buying items...");
+ mes "[Mr. Hugh]";
+ mes "You're right, but think about it:";
+ mes "haven't you had a hard time buying in bulk?";
+ mes "You'd have to find and talk to everyone that has an item you want.";
+ mes "Pretty inconvenient, isn't it?";
+ next;
+ mes "[Mr. Hugh]";
+ mes "Since buying in bulk is an important issue to us Merchants,";
+ mes "I've proposed an innovative plan to our guild, based on my 10 years of experience in making purchases.";
+ next;
+ mes "[Mr. Hugh]";
+ mes "'Let Individuals Open";
+ mes "a Bulk Buyer Shop!'";
+ mes "That's the title of my proposal.";
+ mes "You'll see, when you read it...";
+ next;
+ mes "[Mr. Hugh]";
+ mes "...";
+ mes "...(Mr. Hugh yammers on and on with all the details.)";
+ next;
+ select("Alright, what's your point?");
+ mes "[Mr. Hugh]";
+ mes "Oh, yes. In summary,";
+ mes "you can buy certain items in bulk through Vending.";
+ next;
+ mes "[Mr. Hugh]";
+ mes "In order to open a Bulk Buyer Shop, you need a license issued from the Merchant Guild.";
+ next;
+ mes "[Mr. Hugh]";
+ mes "You need it every time you open the shop. We're expecting a significant increase in profits through this new kind of licensing.";
+ next;
+ mes "[Mr. Hugh]";
+ mes "That's the point of my proposal!";
+ mes "Our president was so happy to hear that we're going to make big bucks!";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Please get to the point already!";
+ next;
+ mes "[Mr. Hugh]";
+ mes "Don't be so impatient, alright?";
+ mes "My point is, we can let you open the Bulk Buyer Shop if you've learned Vending.";
+ next;
+ mes "[Mr. Hugh]";
+ mes "Of course, we charge 10,000 zeny as a one-time registration fee.";
+ mes "You will need the ^4A4AFFBulk Buyer Shop License^000000 every time you open the shop.";
+ next;
+ mes "[Mr. Hugh]";
+ mes "Say, would you like to register now?";
+ mes "If you do, I'll teach you how to open the Bulk Buyer Shop.";
+ next;
+ if(select("Learn how to open Bulk Buyer Shop:Cancel") == 2) {
+ mes "[Mr. Hugh]";
+ mes "Man, that's disappointing!";
+ mes "Using this bulk buyer option can benefit your business in many ways, but it's your call.";
+ mes "I'm always open for consultation!";
+ close;
+ }
+ mes "[Mr. Hugh]";
+ if(Zeny < 10000) {
+ mes "The registration fee is 10,000 zeny.";
+ mes "Please have the fee ready first.";
+ close;
+ }else{
+ mes "You've made a good decision.";
+ mes "Please give me the registration fee, and sign right here....";
+ next;
+ input .@name$;
+ mes "[Mr. Hugh]";
+ mes .@name$+"....";
+ mes "I like your handwriting.";
+ mes "Okay, you're now approved to open the Bulk Buyer Shop.";
+ set Zeny,Zeny-10000;
+ getitem 6377,5; // Buy_Stall_Permit
+ skill "ALL_BUYING_STORE",1,0;
+ next;
+ mes "[Mr. Hugh]";
+ mes "Currently, only normal items ^8C2121EXCEPT^000000 equipment, certain potions, and hand-crafted items can be purchased in bulk, but this can still be very beneficial to you, depending on how you use it.";
+ next;
+ mes "[Mr. Hugh]";
+ mes "Oh, and you need at least one of the item that you want to buy in your inventory because you have to show it to other through your shop.";
+ next;
+ mes "[Mr. Hugh]";
+ mes "Your skill should now be registered in your skill window. If you can't see it you probably have to minimize your Skill List and check the 3rd Job Tab.";
+ next;
+ mes "[Mr. Hugh]";
+ mes "I've given you 5 Bulk Buyer Shop Licenses for your trial.";
+ mes "Enjoy shopping!";
+ close;
+ }
+ }
+ }else{
+ mes "[Mr. Hugh]";
+ mes "I'm Hugh from the Purchasing Team at the Alberta Merchant Guild.";
+ mes "I'd love to chat, but I'm too busy at the moment.";
+ next;
+ mes "[Mr. Hugh]";
+ mes "My time is solely dedicated to our customers in the Merchant industry.";
+ close;
+ }
+}
diff --git a/npc/pre-re/merchants/cash_hair.txt b/npc/pre-re/merchants/cash_hair.txt
new file mode 100644
index 000000000..168445fa0
--- /dev/null
+++ b/npc/pre-re/merchants/cash_hair.txt
@@ -0,0 +1,125 @@
+//===== rAthena Script =======================================
+//= Cash Hair Stylist
+//===== By: ==================================================
+//= Kisuka
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Exchange cash item, New_Style_Coupon, for new hair styles.
+//===== Additional Comments: =================================
+//= 1.0 First Version. [Kisuka]
+//============================================================
+
+itemmall,19,74,5 script Stylist#cash 91,{
+ mes "[Stylist]";
+ mes "Hey, I'm Kaniki.";
+ mes "I'm here to start a new";
+ mes "trend by introducing my";
+ mes "special new hairstyles!";
+ mes "Give me a ^FF0000New Style Coupon^000000,";
+ mes "and I'll change your hair~";
+ next;
+ if (Sex == 1) {
+ mes "[Kaniki]";
+ mes "I have two special";
+ mes "hairstyles for men, the";
+ mes "Emergency Heal Perm";
+ mes "and the Aura Blade Cut.";
+ mes "and aura blade cut.";
+ next;
+ cutin "hair_m_24.bmp",4;
+ mes "[Kaniki]";
+ mes "This is the Emergency";
+ mes "Heal Perm. It's a brand";
+ mes "new style I invented recently.";
+ mes "What do you think? Cool, huh?";
+ next;
+ cutin "",255;
+ cutin "hair_m_25.bmp",4;
+ mes "[Kaniki]";
+ mes "Now this is the Aura";
+ mes "Blade Cut. You haven't";
+ mes "seen anything like it";
+ mes "before, haven't you?";
+ next;
+ cutin "",255;
+ }else{
+ mes "[Kaniki]";
+ mes "I have two new hairstyles for";
+ mes "women, the Assumptio Perm";
+ mes "and the Soul Changer Cut.";
+ mes "Do you want to see how";
+ mes "these styles look?";
+ next;
+ cutin "hair_f_24.bmp",4;
+ mes "[Kaniki]";
+ mes "This is the Assumptio";
+ mes "Perm. It'd really good";
+ mes "on you, wouldn't it?";
+ next;
+ cutin "",255;
+ cutin "hair_f_25.bmp",4;
+ mes "[Kaniki]";
+ mes "Next is the Soul";
+ mes "Changer Cut. What do";
+ mes "you think? Isn't it nice?";
+ next;
+ cutin "",255;
+ }
+ mes "[Kaniki]";
+ mes "Have you decided";
+ mes "if you'd like me to";
+ mes "change your hairstyle?";
+ next;
+ if(select("Change Hairstyle:Don't Change") == 1) {
+ if (countitem(7622) > 0) {
+ mes "[Kaniki]";
+ mes "Great, you brought";
+ mes "a New Style Coupon!";
+ mes "Alright, which hairstyle";
+ mes "did you want to have?";
+ next;
+ if (Sex == 1) {
+ if(select("Emergency Heal Perm:Aura Blade Cut") == 1) {
+ delitem 7622,1; // New_Style_Coupon
+ setlook 1,24;
+ }else{
+ delitem 7622,1; // New_Style_Coupon
+ setlook 1,25;
+ }
+ }else{
+ if(select("Assumptio Perm:Soul Changer Cut") == 1) {
+ delitem 7622,1; // New_Style_Coupon
+ setlook 1,24;
+ }else{
+ delitem 7622,1; // New_Style_Coupon
+ setlook 1,25;
+ }
+ }
+ mes "[Kaniki]";
+ mes "There--! It's done!";
+ mes "How do you like your";
+ mes "new hair? Well, I hope";
+ mes "to see you again. Take care!";
+ close;
+ }else{
+ mes "[Kaniki]";
+ mes "I'm sorry, but I can";
+ mes "only provide my hairstyling";
+ mes "service if you bring a New";
+ mes "Style Coupon. Please come";
+ mes "back to me after you manage to";
+ mes "get one of those coupons, okay?";
+ close;
+ }
+ }
+ mes "[Kaniki]";
+ mes "Really? Oh, that's too bad.";
+ mes "Well, if you ever change your";
+ mes "mind about updating your";
+ mes "hairstyle, come back";
+ mes "and let me know, okay?";
+ close;
+}
diff --git a/npc/pre-re/merchants/cash_trader.txt b/npc/pre-re/merchants/cash_trader.txt
new file mode 100644
index 000000000..2de6e794e
--- /dev/null
+++ b/npc/pre-re/merchants/cash_trader.txt
@@ -0,0 +1,27 @@
+//===== rAthena Script =======================================
+//= Cash Shop NPCs
+//===== By: ==================================================
+//= L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.1
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Sell Cash shop items.
+//= Based on iRO's Cash shop. Headgears omitted.
+//===== Additional Comments: =================================
+//= 1.0 First Version. Sample shop per-say.
+//= 1.1 FIxed typo. (bugreport:1078) [L0ne_W0lf]
+//============================================================
+
+// Payon
+//============================================================
+// Sells:
+// Battle Manual Box, Life Insurance Box, Bubble Gum Box,
+// Kafra Card Box, Giant Fly Wing Box, Neuralizer Box,
+// Token of Ziegfried Box, Enriched Oridecon and Elunium,
+// Assumpito, Wind Walk, Aspersio, Adreniline Rush,
+// Blessing and Increase Agility Scroll boxes, Dungeon
+// Teleport Scroll Box, Stat Food boxes, and Gym Passes.
+
+payon,171,142,4 cashshop Kafra Shop Employee 116,12900:1000,12901:200,12902:1000,12909:100,12910:100,12911:1500,12922:150,7619:100,7620:100,12916:150,12917:150,12915:100,12918:100,12913:125,12914:125,13553:50,12903:100,12904:100,12905:100,12906:100,12907:100,12908:100,7776:50
diff --git a/npc/pre-re/merchants/cashheadgear_dye.txt b/npc/pre-re/merchants/cashheadgear_dye.txt
new file mode 100644
index 000000000..fa309738a
--- /dev/null
+++ b/npc/pre-re/merchants/cashheadgear_dye.txt
@@ -0,0 +1,119 @@
+//===== rAthena Script =======================================
+//= Headgear Dyer (Cash)
+//===== By: ==================================================
+//= Xantara
+//= Maud_Dib
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Change headgear's color. Cost is a Mysterious Dyestuff
+//===== Additional Comments: =================================
+//= v1.0 First / Optimized Version
+//============================================================
+
+prt_in,253,168,4 script Alora 862,{
+
+// Mysterious Dyestuff
+ set .@dyeID, 6220;
+// Headgear Choices
+ setarray .@hgn$[1], "Mage Hat","Beanie","Drooping Cat","Deviruchi Hat","Wig","Ribbon","Magestic Goat";
+// Mage Hats - Normal, Yellow, Blue, Brown, Gray, Red
+ setarray .@hg_1[1], 5027, 5242, 5241, 5240, 5239, 5238;
+// Beanies - Normal, Pink, Blue, Brown
+ setarray .@hg_2[1], 5076, 5237, 5236, 5235;
+// Drooping Cats - Normal, Blue, Brown, Gray, Pink, Yellow
+ setarray .@hg_3[1], 5058, 5233, 5231, 5230, 5232, 5234;
+// Deviruchi Hats - Normal, Red, Gray, Brown
+ setarray .@hg_4[1], 5038, 5227, 5228, 5229;
+// Wigs - Happy, Shiny, Marvelous, Fantastic
+ setarray .@hg_5[1], 5273, 5274, 5275, 5276;
+// Ribbons - Normal, Black, Yellow, Green, Pink, Red, Orange, White
+ setarray .@hg_6[1], 2208, 5191, 5192, 5193, 5194, 5195, 5196, 5197;
+// Magestic Goats - Normal, Evolved
+ setarray .@hg_7[1], 2256, 5217;
+
+ mes "[Alora]";
+ mes "Hello, I can change your headgear's color if you bring me a Mysterious Dyestuff.";
+ next;
+ mes "[Alora]";
+ mes "Do you have a headgear that you would like to dye?";
+ next;
+ for(set .@i,1; .@i < getarraysize(.@hgn$); set .@i,.@i+1) {
+ if(.@i == 1) set .@menu$, .@hgn$[.@i];
+ else set .@menu$, .@menu$ +":"+ .@hgn$[.@i];
+ }
+ set .@menu$, .@menu$ +":Cancel";
+ set .@t, select(.@menu$);
+ if(.@t == getarraysize(.@hgn$)) {
+ mes "[Alora]";
+ mes "Have a good journey adventurer!";
+ mes "If you ever are curious to try a new color on your Kafra headgear or the ones you found on your adventures please come to me!";
+ close;
+ }
+ mes "[Alora]";
+ mes "Okay, what color do you want to change it to?";
+ next;
+ for(set .@i,1; .@i < getarraysize(getd(".@hg_"+.@t+"")); set .@i,.@i+1) {
+ if(.@i == 1 && .@t != 5)
+ set .@menu$, "Normal";
+ else if(.@i == 1 && .@t == 5)
+ set .@menu$, getitemname(getd(".@hg_"+.@t+"["+.@i+"]"));
+ else {
+ sscanf(getitemname(getd(".@hg_"+.@t+"["+.@i+"]")),"%s "+ .@hgn$[.@t],.@colour$);
+ set .@menu$, .@menu$ +":"+ .@colour$;
+ }
+ }
+ set .@menu$, .@menu$ +":Cancel";
+ set .@c, select(.@menu$);
+ if(.@c == getarraysize(getd(".@hg_"+.@t+""))) {
+ mes "[Alora]";
+ mes "Oh, okay no problem!";
+ close;
+ }
+ set .@dyHG, getd(".@hg_"+.@t+"["+.@c+"]");
+ mes "[Alora]";
+ mes "Oh I'm so excited aren't you?";
+ mes "And just to be sure, what color is the "+ .@hgn$[.@t] +" you want me to use?";
+ next;
+ mes "[Alora]";
+ mes "Please understand that I'm going to use the ^FF00001st "+ .@hgn$[.@t] +" of that color in your inventory!^000000";
+ next;
+ mes "[Alora]";
+ mes "Any upgrades and cards will be dissolved by the mysterious dye, so be sure you are ok with having a ^0000FF+0 "+ getitemname(.@dyHG) +" without any cards.^000000";
+ next;
+ mes "["+ strcharinfo(0) +"]";
+ mes "Ok, thanks for the warning, I think I'll give you my";
+ next;
+ set .@menu$, "Nevermind";
+ for(set .@i,1; .@i < getarraysize(getd(".@hg_"+.@t+"")); set .@i,.@i+1) {
+ if(.@i == 1) set .@menu$, .@menu$ +":Normal "+ getitemname(getd(".@hg_"+.@t+"["+.@i+"]"));
+ else set .@menu$, .@menu$ +":"+ getitemname(getd(".@hg_"+.@t+"["+.@i+"]"));
+ }
+ set .@mine, select(.@menu$) - 1;
+ if(!.@mine) {
+ mes "[Alora]";
+ mes "It's best to be very sure, have a safe journey.";
+ close;
+ }
+ set .@myHG, getd(".@hg_"+.@t+"["+.@mine+"]");
+ if(.@dyHG == .@myHG) {
+ mes "[Alora]";
+ mes "Woah what happened?";
+ close;
+ }
+ if(!countitem(.@dyeID) || !countitem(.@myHG)) {
+ mes "[Alora]";
+ mes "Oh my, you seem to be missing something.";
+ close;
+ }
+ mes "[Alora]";
+ mes "Looks great doesn't it?!";
+ mes "I hope you'll come back to dye more pretty headgears!";
+ delitem .@dyeID,1; // Dyestuff
+ delitem .@myHG,1; // Your headgear
+ getitem .@dyHG,1; // Dyed headgear
+ close;
+} \ No newline at end of file
diff --git a/npc/pre-re/merchants/clothes_dyer.txt b/npc/pre-re/merchants/clothes_dyer.txt
new file mode 100644
index 000000000..489194428
--- /dev/null
+++ b/npc/pre-re/merchants/clothes_dyer.txt
@@ -0,0 +1,144 @@
+//===== rAthena Script =======================================
+//= Clothes Dyer
+//===== By: ==================================================
+//= Usnul
+//===== Current Version: =====================================
+//= 2.5
+//===== Compatible With: =====================================
+//= rAthena 1.0+
+//===== Description: =========================================
+//= Clothes dyer with standard palletes
+//===== Additional Comments: =================================
+//= Fully working
+//= 2.1 Shortened some labels to make this script loading,
+//= Added Black+White Colors desc [Lupus]
+//= 2.1a - added adv classes + baby class support [Lupus]
+//= 2.2 - Spell checked. [Nexon]
+//= 2.3 - Fixed dis $hit! [Poki#3]
+//= 2.4 - Disabled cloth dyeing since it's not implemented
+// on official servers and cause your client to crash
+// [Playtester]
+//= 2.5 - Optimized. [Euphy]
+//============================================================
+
+prt_in,284,168,2 script Dyer Ginedin Rephere 55,{
+function Dyes;
+
+ set .@EnableDyes,1; // Disable (set to 0) if palettes cause errors [see note v2.4]
+
+ set .n$,"[Dyer Ginedin Rephere]";
+ mes .n$;
+ mes "11... 12... Mmm... good. I think I'll be able to finish before tonight's party. Oh! I didn't notice you were here!";
+ while(1) {
+ next;
+ mes .n$;
+ mes "How may I assist you?";
+ next;
+ switch(select("- Talk:- Dye Clothing:- Price List:- ^777777Cancel^000000")) {
+ case 1:
+ mes .n$;
+ mes "Life may have gotten a bit better, but when I look at all of the orders I've received... Whew!";
+ mes "It seems that the young women of Rune Midgard must be very well off these days.";
+ next;
+ mes .n$;
+ mes "Not that I think that they are indulging in anything luxurious, mind you.";
+ mes "I don't think there is anything wrong with the pursuit of beauty and being fashionable.";
+ next;
+ mes .n$;
+ mes "For us humans, who have no colorful fur or decorative scales, clothes are one of the few ways we have to display our personality, style, and beauty.";
+ next;
+ mes .n$;
+ mes "Haha... When I think about it, I really feel that my job is worthwhile. I believe that I provide a service that the people desire.";
+ next;
+ mes .n$;
+ mes "Can you feel it too? The energy that is released when rough fabric and leather are brought to life with color?.....";
+ next;
+ mes .n$;
+ mes "Although the process is very tedious and time consuming, the joy and happiness I feel when a dress is finished more than makes up for all of the hard work!!";
+ break;
+ case 2:
+ mes .n$;
+ if (!.@EnableDyes) {
+ mes "Sorry, I'm too busy with other jobs to dye your clothes."; break; }
+ mes "Oh... you need my work? Well... okay, sounds good.";
+ next;
+ mes .n$;
+ mes "Please choose a color";
+ mes "that suits you.";
+ next;
+ set .@eac, eaclass();
+ switch(roclass(eaclass()&EAJ_UPPERMASK)) {
+
+ // Dyes(<color value>,<dye number>{,...});
+ // Colors: [1]Orange, [2]Violet, [3]Red, [4]Black, [5]Green, [6]Blue, [7]White, [8]Yellow
+
+ case Job_Novice: if (Sex) Dyes(4,1,6,2,5,3); else Dyes(6,1,3,2,5,3,4,4);
+ case Job_Swordman: if (Sex) Dyes(4,1,6,2,5,3); else Dyes(3,1,5,3,4,4);
+ case Job_Mage: if (Sex) Dyes(3,1,2,2,1,3,7,4); else Dyes(3,1,2,2,7,3,4,4);
+ case Job_Archer: if (Sex) Dyes(4,1,2,2,5,3); else Dyes(3,1,5,2,7,3,4,4);
+ case Job_Acolyte: if (Sex) Dyes(6,1,3,2,7,3,4,4); else Dyes(3,1,5,3,4,4);
+ case Job_Merchant: if (Sex) Dyes(4,1,6,2,5,3); else Dyes(2,1,5,3,4,4);
+ case Job_Thief: if (Sex) Dyes(5,1,3,2,7,4); else Dyes(3,1,7,3,4,4);
+ case Job_Knight: case Job_Crusader: if (Sex) Dyes(2,1,3,3,4,4); else Dyes(6,1,7,3,4,4);
+ case Job_Priest: case Job_Monk: if (Sex) Dyes(6,1,5,2,3,3,7,4); else Dyes(3,1,5,2,7,3,4,4);
+ case Job_Wizard: case Job_Sage: if (Sex) Dyes(6,1,5,3,4,4); else Dyes(3,1,6,2,7,3,5,4);
+ case Job_Blacksmith: case Job_Alchemist: if (Sex) Dyes(4,4,5,2,7,3); else Dyes(3,1,5,2,2,3,4,4);
+ case Job_Hunter: case Job_Bard: case Job_Dancer: if (Sex) Dyes(4,1,6,2,5,3); else Dyes(6,1,5,3,2,4);
+ case Job_Assassin: case Job_Rogue: if (Sex) Dyes(6,1); else Dyes(4,1,8,2,7,3);
+ case Job_SuperNovice: if (Sex) Dyes(2,1,6,2,5,3,4,4); else Dyes(6,1,3,2,5,3,4,4);
+ default:
+ mes "Wow, I've never seen clothes like that before! I'm sorry, but I don't think I can paint it.";
+ close; }
+ case 3:
+ mes .n$;
+ mes "Each color costs 10000z and 1 dye:";
+ mes " ";
+ mes " - ^FF4422Red^000000: Scarlet Dyestuffs";
+ mes " - ^D5A500Yellow^000000: Lemon Dyestuffs";
+ mes " - ^AA00AAViolet^000000: Violet Dyestuffs";
+ mes " - ^FF8800Orange^000000: Orange Dyestuffs";
+ mes " - ^4422FFBlue^000000: CobaltBlue Dyestuffs";
+ mes " - ^009500Green^000000: DarkGreen Dyestuffs";
+ mes " - Black: Black Dyestuffs";
+ mes " - White: White Dyestuffs";
+ break;
+ case 4:
+ goto L_End; } }
+L_End:
+ mes .n$;
+ mes "Make yourself at home. Even though I don't have time for you.";
+ close;
+
+function Dyes {
+ setarray .@DyeName$[0],"the default color","Orange","Violet","Red","Black","Green","Blue","White","Yellow";
+ setarray .@DyeItems[0],0,980,981,975,983,979,978,982,976;
+ set .@menu$,"- Default:";
+ for(set .@i,0; 1; set .@i,.@i+2) {
+ if (!getarg(.@i,0)) break;
+ set .@menu$, .@menu$+"- "+.@DyeName$[getarg(.@i)]+":"; }
+ set .@menu$, .@menu$+"- ^777777Cancel^000000";
+ set .@s, select(.@menu$)-1;
+ if (.@s==.@i-2) goto L_End;
+ mes .n$;
+ if (!.@s) {
+ mes "I can change your dye to";
+ mes "the default for free.";
+ mes "Are you sure?";
+ next;
+ if(select("Yes:No")==2) goto L_End;
+ mes .n$;
+ setlook 7,0;
+ mes "Your clothes have been dyed "+.@DyeName$[0]+".";
+ close; }
+ if (!countitem(.@DyeItems[getarg((.@s-1)*2)])) {
+ mes "For me to dye your clothes, I'll need the appropriate Dyestuffs. Please check my price list for the information.";
+ close; }
+ if (Zeny < 10000) {
+ mes "I'm sorry, but you don't have enough money.";
+ close; }
+ delitem .@DyeItems[getarg((.@s-1)*2)],1;
+ set Zeny, Zeny-10000;
+ setlook 7, ((.@s)?(getarg((.@s-1)*2+1)):0);
+ mes "Your clothes have been dyed "+((.@s)?.@DyeName$[getarg((.@s-1)*2)]:.@DyeName$[0])+".";
+ close; }
+} \ No newline at end of file
diff --git a/npc/pre-re/merchants/diamond.txt b/npc/pre-re/merchants/diamond.txt
new file mode 100644
index 000000000..118a3d111
--- /dev/null
+++ b/npc/pre-re/merchants/diamond.txt
@@ -0,0 +1,244 @@
+//===== rAthena Script =======================================
+//= Rare Diamond Merchant
+//===== By: ==================================================
+//= Z3R0
+//===== Current Version: =====================================
+//= 1.5
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Exchanges 17 Carat Diamond
+//===== Additional Comments: =================================
+//= v1.0 First / Optimized Version
+//= v1.1 Adjusted for Missing ; on Line #271 (#15425)
+//= v1.2 Removed Comments per Request (#15426)
+//= v1.3 Changed Emotion # to Const Definition (#15427)
+//= v1.4 Removed Double Space on Line #148 (#15428)
+//= v1.5 Added This Version History (#15429)
+//============================================================
+
+- script RareDiamondMerchant 58,{
+
+ set .@npc$, "[Rare Diamond Merchant]";
+
+ mes .@npc$;
+ mes "Ladies and Gentlemen! ! !";
+ mes "You've heard rumors but you've never once seen with your own eyes";
+ mes "the world's rarest diamond!";
+ mes "The ^FF82FF'17 Carat Diamond'^000000 is currently on sale for a cheap price!!";
+ mes "If valuable diamonds interest you then listen up!";
+ next;
+
+ mes .@npc$;
+ mes "You can give the diamond as a gift to your lover.";
+ mes "The receiver of the ^FF82FF'17 Carat Diamond'^000000 will cherish it";
+ mes "and treasure you in their heart.";
+ emotion e_loud;
+ next;
+
+ mes .@npc$;
+ mes "What? You don't have a lover?";
+ mes "You can still just hang on to it for yourself.";
+ mes "The enchanting aura of the ^FF82FF'17 Carat Diamond'^000000 is likely";
+ mes "to bring love into your life.";
+ next;
+
+ mes .@npc$;
+ mes "Known as the captivating diamond of diamonds...";
+ mes "It is the ^FF82FF'17 Carat Diamond'^000000!";
+ next;
+
+ set .@menu$, "^FF82FF'17 Carat Diamond'^000000?";
+ if (countitem(6024))
+ set .@menu$, .@menu$ + ":Exchange my 17 Carat Diamond for zeny...";
+
+ switch(select(.@menu$)) {
+ case 1:
+ mes .@npc$;
+ mes "Yes!";
+ mes "Hehe, the ^FF82FF'17 Carat Diamond'^000000 you see right now";
+ mes "is one of the highest quality 17 carat diamonds.";
+ mes "Comparing it to any pea-sized, colorless rock you may have";
+ mes "dug up from Morroc is unspeakable!";
+ emotion e_omg;
+ next;
+
+ mes .@npc$;
+ mes "Some claim that this is the very same diamond";
+ mes "that was seen by Kachua in Comodo!";
+ next;
+
+ if (select("End Conversation:How much is it?") == 1) {
+ mes .@npc$;
+ mes "It's rather inexpensive!";
+ mes "If you're interested, talk to me any time!";
+ close;
+ }
+
+ mes .@npc$;
+ mes "Of course! The most important thing is price!";
+ mes "As I've said earlier, the ^FF82FF'17 Carat Diamond'^000000 has been";
+ mes "appraised as a 17 carat diamond.";
+ mes "There aren't many like it in the world.";
+ next;
+
+ mes .@npc$;
+ mes "The price is a mere 500 million zeny!";
+ mes "There is also a 1,000,000z service fee.";
+ mes "Compared to the quality of the diamond";
+ mes "this is a small price to pay.";
+ next;
+
+ if (select("^828282It's too expensive.^000000:I'll buy it.") == 1) {
+ mes .@npc$;
+ mes "To say that a diamond such as the";
+ mes "^FF82FF'17 Carat Diamond'^000000 is too expensive, ";
+ mes "you leave me speechless.";
+ close;
+ }
+
+ mes .@npc$;
+ mes "OOOH! I knew from the moment I saw you that you were the rightful";
+ mes "owner of this wonderful diamond.";
+ mes "I'm glad I wasn't wrong!";
+ mes "I believe this diamond will suit you quite well.";
+ mes "All I need from you is to complete this contract.";
+ next;
+
+ while(1) {
+ if (select("^B9062FI will sign the contract.^000000:^828282Nevermind, I changed my mind.^000000") == 2) {
+ mes .@npc$;
+ mes "I see, that's too bad..";
+ close;
+ }
+
+ mes .@npc$;
+ mes "What is your name?";
+ next;
+
+ mes "[" + strcharinfo(0) + "]";
+ mes "My name is " + strcharinfo(0) + ".";
+ next;
+
+ mes .@npc$;
+ mes "Alright then, please sign here.";
+ next;
+
+ input .@charname$;
+ if (.@charname$ == strcharinfo(0)) {
+ mes .@npc$;
+ mes "Okay, good.";
+ mes "All that is left now is payment.";
+ next;
+
+ if (Zeny >= 501000000) {
+ mes .@npc$;
+ mes ". . . . . .";
+ next;
+
+ mes .@npc$;
+ mes "Calculating the price and service fee..";
+ mes "501,000,000 zeny.";
+ mes "Amount has been confirmed.";
+ emotion e_loud;
+ set Zeny, Zeny - 501000000;
+ getitem 6024, 1;
+ next;
+
+ mes .@npc$;
+ mes "You may exchange the diamond back for zeny at any time.";
+ mes "However, there will be a 1,000,000z service fee.";
+ mes "Thank you for your business.";
+ emotion e_thx;
+ close;
+ }
+ else {
+ mes .@npc$;
+ mes "Hm?";
+ mes "I'm sorry, but you don't have sufficient funds.";
+ mes "Including the service fee, a total of 501,000,000z is required.";
+ mes "Please check your zeny balance and try again.";
+ emotion e_hmm;
+ close;
+ }
+ }
+ else {
+ mes .@npc$;
+ mes "Is this really your signature?";
+ mes "Will sign again to confirm?";
+ next;
+ }
+ }
+ case 2:
+ mes .@npc$;
+ mes "AAH. You would like to exchange your ^FF82FF'17 Carat Diamond'^000000 for zeny?";
+ emotion e_gasp;
+ next;
+ if (select("Yes:No") == 2) {
+ mes .@npc$;
+ mes "Then, what is it you desire?..";
+ mes ". . . . . ....";
+ emotion e_dots;
+ close;
+ }
+
+ mes .@npc$;
+ mes "I see. After I receive your signature, ";
+ mes "You must offer your ^FF82FF'17 Carat Diamond'^000000.";
+ mes "Also don't forget there is a 1,000,000z service fee!";
+ next;
+
+ mes .@npc$;
+ mes "What is your name?";
+ next;
+
+ mes "[" + strcharinfo(0) + "]";
+ mes "My name is " + strcharinfo(0) + ".";
+ next;
+
+ mes .@npc$;
+ mes "Alright then, please sign here.";
+ next;
+
+ while (1) {
+ if (select("Sign:Don't Sign") == 2) {
+ mes .@npc$;
+ mes "The trade cannot be completed without your signature.";
+ close;
+ }
+
+ input .@charname$;
+ if (.@charname$ == strcharinfo(0)) {
+ mes .@npc$;
+ mes "Your signature has been received.";
+ mes "I will now take your ^FF82FF'17 Carat Diamond'^000000..";
+ mes "You will receive ^0000FF499,000,000z^000000 afterwards.";
+ next;
+
+ mes .@npc$;
+ mes "Thank you for your business.";
+ mes "Whenever you need a ^FF82FF'17 Carat Diamond'^000000,";
+ mes "come back anytime with 500 million zeny.";
+ emotion e_thx;
+ delitem 6024, 1;
+ set Zeny, Zeny + 499000000;
+ close;
+ }
+ else {
+ mes .@npc$;
+ mes "Is this really your signature?";
+ mes "Will sign again to confirm?";
+ next;
+ }
+ }
+ }
+}
+
+prontera,165,89,6 duplicate(RareDiamondMerchant) Rare Diamond Merchant#1 58
+geffen,106,63,6 duplicate(RareDiamondMerchant) Rare Diamond Merchant#2 58
+morocc,146,100,6 duplicate(RareDiamondMerchant) Rare Diamond Merchant#3 58
+alberta,129,60,6 duplicate(RareDiamondMerchant) Rare Diamond Merchant#4 58
+lighthalzen,163,65,6 duplicate(RareDiamondMerchant) Rare Diamond Merchant#5 58
+rachel,106,142,6 duplicate(RareDiamondMerchant) Rare Diamond Merchant#6 58
+payon,180,130,6 duplicate(RareDiamondMerchant) Rare Diamond Merchant#7 58
diff --git a/npc/pre-re/merchants/dye_maker.txt b/npc/pre-re/merchants/dye_maker.txt
new file mode 100644
index 000000000..632e14f17
--- /dev/null
+++ b/npc/pre-re/merchants/dye_maker.txt
@@ -0,0 +1,201 @@
+//===== rAthena Script =======================================
+//= Dye Maker
+//===== By: ==================================================
+//= rAthena Dev Team
+//===== Current Version: =====================================
+//= 1.4
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//===== Additional Comments: =================================
+//= 1.0 Fully working [kobra_k88]
+//= 1.1 Spell Checked [Nexon]
+//= 1.2 Rescripted to Aegis 10.3 standard. [L0ne_W0lf]
+//= 1.2b Fixed typos in variable names [ultramage]
+//= 1.3 Made the checks more dynamic [ultramage]
+//= 1.3b Fixed incorrect checking loop structure [ultramage]
+//= 1.4 Added a checkweight. [L0ne_W0lf]
+//============================================================
+
+morocc_in,146,99,3 script Java Dullihan 58,{
+ if ((MaxWeight-Weight) < 200 || checkweight(1201,1) == 0) {
+ mes "- Wait a moment! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please come back later -";
+ mes "- after you put some items into kafra storage. -";
+ close;
+ }
+ mes "[Dye Maker Java Dullihan]";
+ mes "Wow...";
+ mes "Such a nice day. Days like this are perfect to make dyes.";
+ next;
+ switch(select("Talk:Make Dyestuffs:Cancel")) {
+ case 1:
+ mes "[Dye Maker Java Dullihan]";
+ mes "Erm, I don't really have much to say to you. But, if you would like me to tell you about my life, I can do that. It's a little long and boring, but would you like to listen?";
+ next;
+ if (select("Listen:Don't Listen") == 1) {
+ mes "[Dye Maker Java Dullihan]";
+ mes "As long as I can remember, my father has been making dyes. He used to spend countless hours making dyes of different colors. Even when my mother passed away, he never stopped.";
+ next;
+ mes "[Dye Maker Java Dullihan]";
+ mes "At one point in my life, I became rebellious and ran away from home. I didn't want to be stuck to the family business and wanted to try other things.";
+ next;
+ mes "[Dye Maker Java Dullihan]";
+ mes "Anyways...";
+ mes "I eventually wound up back home to carry on the family tradition, making dyes for 15 years already. I guess it was really in my blood.";
+ next;
+ mes "[Dye Maker Java Dullihan]";
+ mes "Something I realized these days is that now I can understand my father. Why my father devoted everything to making dyes...";
+ next;
+ mes "[Dye Maker Java Dullihan]";
+ mes "In the middle of all that tedious and hard work, he probably felt the magic of those colors passing on so many dreams for other people.";
+ next;
+ mes "[Dye Maker Java Dullihan]";
+ mes "It was probably for those dreams that he tried so hard to make dyes for his customers...";
+ next;
+ mes "[Dye Maker Java Dullihan]";
+ mes "Heh... How do I know this? Well, that's the way I feel right now. Since a couple years ago, I've been able to hear what the colors were saying...";
+ next;
+ mes "[Dye Maker Java Dullian]";
+ mes "Just watch. Someday, I'm going to succeed in making the color my father wanted to, but never got the chance to make.";
+ close;
+ }
+ mes "[Dye Maker Java Dullihan]";
+ mes "Ahahahaha...";
+ mes "Well, I guess no one would want to listen to a measly dyemaker's story anyway. Hahaha....";
+ close;
+
+ case 2:
+ mes "[Dye Maker Java Dullihan]";
+ mes "Great! If you want it, I'll make it for you. I promise I'll make you the color you want. But what color dye would you like to make? The fee is different depending on the color.";
+ next;
+ mes "[Dye Maker Java Dullihan]";
+ mes "Why, do you ask? Just remember that there are colors that are easy to make, and those that require more effort and work. Please don't think the fee is too expensive.";
+ next;
+ mes "[Dye Maker Java Dullihan]";
+ mes "The color of the dye is special, made with all my heart and soul.";
+ next;
+ switch(select("Scarlet Dyestuffs:Lemon Dyestuffs:Cobaltblue Dyestuffs:Darkgreen Dyestuffs:Orange Dyestuffs:Violet Dyestuffs:White Dyestuffs:Black Dyestuffs:Cancel")) {
+ case 1: callsub S_MakeDye,1,1; break;
+ case 2: callsub S_MakeDye,2,1; break;
+ case 3: callsub S_MakeDye,3,2; break;
+ case 4: callsub S_MakeDye,4,3; break;
+ case 5: callsub S_MakeDye,5,4; break;
+ case 6: callsub S_MakeDye,6,4; break;
+ case 7: callsub S_MakeDye,7,4; break;
+ case 8: callsub S_MakeDye,8,4; break;
+ case 9:
+ mes "[Dye Maker Java Dullihan]";
+ mes "Eeeehhhh!! What's this? You change your mind now!? So disappointing...";
+ close;
+ }
+
+ case 3:
+ mes "[Dye Maker Java Dullihan]";
+ mes "I'm not bragging or anything. But I have the skills to make dyestuff. If you ever need dyestuff, please come to me. I'll make them for you at a reasonable price.";
+ close;
+ }
+
+S_MakeDye:
+ mes "[Dye Maker Java Dullihan]";
+ switch(getarg(0)) {
+ case 1:
+ mes "Mmm... I need 30 Red Herbs, 1 Counteragent, and 1 Empty Bottle to make Red Dyestuffs. The fee is only 3000 zeny to make it.";
+ setarray .@item[0], 507, 973, 713;
+ setarray .@count[0], 30, 1, 1;
+ set .@cost,3000;
+ set .@dyestuff,975;
+ break;
+ case 2:
+ mes "Mmm... I need 30 Yellow Herbs, 1 Couneragent, and 1 Empty Bottle to make Lemon Dyestuffs. The fee is only 3000 zeny to make it.";
+ setarray .@item[0], 508, 973, 713;
+ setarray .@count[0], 30, 1, 1;
+ set .@cost,3000;
+ set .@dyestuff,976;
+ break;
+ case 3:
+ mes "Mmm... I need 20 Blue Herbs, 1 Counteragent, and 1 Empty Bottle to make Cobaltblue Dyestuff. It's hard to use the Blue Herb, so the fee is going to be 3500 zeny.";
+ setarray .@item[0], 510, 973, 713;
+ setarray .@count[0], 20, 1, 1;
+ set .@cost,3500;
+ set .@dyestuff,978;
+ break;
+ case 4:
+ mes "Mmm... I need 5 Blue Herbs, 20 Green Herbs, 20 Yellow Herbs, 1 Counteragent, 1 Mixture, and 1 Empty Bottle to make Darkgreen Dyestuffs. Don't get all of the materials confused. The fee is only 5000 zeny.";
+ setarray .@item[0], 510, 511, 508, 974, 973, 713;
+ setarray .@count[0], 5, 20, 20, 1, 1, 1;
+ set .@cost,5000;
+ set .@dyestuff,979;
+ break;
+ case 5:
+ mes "Mmm... I need 20 Red Herbs, 20 Yellow Herbs, 1 Counteragent, 1 Mixture, and 1 Empty Bottle to make Orange Dyestuff. The fee is going to be 5000 zeny.";
+ setarray .@item[0], 507, 508, 974, 973, 713;
+ setarray .@count[0], 20, 20, 1, 1, 1;
+ set .@cost,5000;
+ set .@dyestuff,980;
+ break;
+ case 6:
+ mes "Mmm... I need 10 Blue Herbs, 30 Red Herbs, 1 Counteragent, 1 Mixture, and 1 Empty Bottle to make Violet Dyestuffs. The fee will be 5000 zeny.";
+ setarray .@item[0], 510, 507, 974, 973, 713;
+ setarray .@count[0], 10, 30, 1, 1, 1;
+ set .@cost,5000;
+ set .@dyestuff,981;
+ break;
+ case 7:
+ mes "Mmm... I need 30 White Herbs, 1 Counteragent, and 1 Empty bottle to make White Dyestuffs. The fee will be 3000 zeny.";
+ setarray .@item[0], 509, 973, 713;
+ setarray .@count[0], 30, 1, 1;
+ set .@cost,3000;
+ set .@dyestuff,982;
+ break;
+ case 8:
+ mes "Mmm... I need 30 of each Red, Yellow, and Green Herb, 5 Blue Herbs, 1 Counteragent, 1 Mixture, and 1 Empty Bottle. The process takes longer and more effort than the others, so it is going to be 7000 zeny.";
+ setarray .@item[0], 507, 508, 511, 510, 974, 973, 713;
+ setarray .@count[0], 30, 30, 30, 5, 1, 1, 1;
+ set .@cost,7000;
+ set .@dyestuff,983;
+ break;
+ }
+ next;
+ mes "[Dye Maker Java Dullihan]";
+ switch(getarg(1)) {
+ case 1: mes "Ah! I think you would have everything ready. Would you like to start the process?"; break;
+ case 2: mes "Okay! I believe you would have everything ready. Would you like to start the process?"; break;
+ case 3: mes "Okay! I believe you would have everything ready. Shall we begin the process?"; break;
+ case 4: mes "Okay! I believe you would have everything prepared. Would you like to start the process?"; break;
+ }
+ next;
+ if (select("Make Dyestuffs:Cancel") == 1) {
+ set .@size, getarraysize(.@item);
+ // check requirements
+ for( set .@i,0 ; .@i < .@size ; set .@i,.@i+1 )
+ if( countitem(.@item[.@i]) < .@count[.@i] )
+ break;
+ if( .@i < .@size || Zeny < .@cost ) {
+ mes "[Dye Maker Java Dullihan]";
+ mes "Hmmm. Not enough...";
+ mes "I don't think I'll be able to make the color you want with those materials. Why don't you go get some more materials...?";
+ close;
+ }
+ // delete items
+ for (set .@i, 0; .@i < .@size ; set .@i, .@i+1)
+ delitem .@item[.@i], .@count[.@i];
+ set zeny,zeny-.@cost;
+ // get dyestuff
+ getitem .@dyestuff,1;
+
+ mes "[Dye Maker Java Dullihan]";
+ mes "Hmm... It came out pretty well. A very rich color. Of course I'll be trying harder to make a more charming color...";
+ next;
+ mes "[Dye Maker Java Dullihan]";
+ mes "Well, then. Stop by whenever you need more dyes.";
+ close;
+ }
+ mes "[Dye Maker Java Dullihan]";
+ mes "Eeeehhhh!! What's this?";
+ mes "You change your mind now!? So disappointing...";
+ return;
+}
diff --git a/npc/pre-re/merchants/elemental_trader.txt b/npc/pre-re/merchants/elemental_trader.txt
new file mode 100644
index 000000000..3d30b1668
--- /dev/null
+++ b/npc/pre-re/merchants/elemental_trader.txt
@@ -0,0 +1,160 @@
+//===== rAthena Script =======================================
+//= Elemental Stone Trader
+//===== By: ==================================================
+//= rAthena Team & MasterOfMuppets
+//===== Current Version: =====================================
+//= 1.1
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Trade impure types of elemental stones for pure ones.
+//===== Additional Comments: =================================
+//= 1.0 Rescripted to Aegis 10.3 standards. [L0ne_W0lf]
+//= 1.1 Optimized. [Euphy]
+//============================================================
+
+ama_in02,61,27,7 script Alchemist#ama 749,{
+ mes "[Laspuchin Gregory]";
+ mes "KeekeekeeKeheheh.";
+ mes "This is amazing!";
+ mes "The results are extraordinary!!";
+ next;
+ mes "[Laspuchin Gregory]";
+ mes "Using my skills in this distant";
+ mes "land was unexpected...";
+ mes "Keheheh... The lord of palace";
+ mes "was quite accomodating.";
+ next;
+ mes "[Laspuchin Gregory]";
+ mes "Oops, I better be careful...";
+ mes "If the guild finds out my";
+ mes "location, stupid Myster will";
+ mes "get mad at me. Kehehehkeh...";
+ next;
+ mes "[Laspuchin Gregory]";
+ mes "What? Wanna say something?";
+ mes "If you are here for tourism,";
+ mes "enjoy your day off, then go back to your hometown.";
+ mes "Keekeekee... Or else,";
+ mes "I will let you taste my acid bottle...!";
+ next;
+ if (select("Please, excuse me:Do you need help?") == 1) {
+ mes "[Laspuchin Gregory]";
+ mes "Keheheh... Did you hear";
+ mes "what I said? It would be";
+ mes "better to forget...";
+ mes "Keekeekeekeekee...";
+ close;
+ }
+ mes "[Laspuchin Gregory]";
+ mes "Help, eh?...";
+ mes "Now that I think about it...";
+ mes "I need some items right now...";
+ mes "Keeheeheekeehee...";
+ next;
+ mes "[Laspuchin Gregory]";
+ mes "Sir Laspuchin needs some";
+ mes "enchant stones for an experiment.";
+ mes "I will use it efficiently...";
+ mes "Do you have them now?";
+ next;
+ if (select("Nope:I got some") == 1) {
+ mes "[Laspuchin Gregory]";
+ mes "Then, find 8 stones of one kind.";
+ mes "If you bring 8 of one kind of";
+ mes "enchant stones, I will change it";
+ mes "to a better one...";
+ next;
+ mes "[Laspuchin Gregory]";
+ mes "Then, find 8 stones of one kind.";
+ mes "not the round gemstones but";
+ mes "enchant stones.";
+ mes "If you bring the wrong stones,";
+ mes "I will throw a flame bottle!";
+ next;
+ mes "[Laspuchin Gregory]";
+ mes "Bring me stones, slave~!!";
+ mes "And keep your promise! Kehehehkehkeh...";
+ close;
+ }
+ mes "[Laspuchin Gregory]";
+ mes "Uh-huh, what did you bring?";
+ next;
+ setarray .@Items[1],995,997,994,996;
+ set .@i, .@Items[select("Mystic Frozen:Great Nature:Flame Heart:Rough Wind")];
+ mes "[Laspuchin Gregory]";
+ if (countitem(.@i) > 7) {
+ mes "I will take 8 of them and";
+ mes "give you an enchant stone.";
+ mes "How's that sound?";
+ mes "Keheheh.....";
+ next;
+ mes "[Laspuchin Gregory]";
+ mes "HeeHee, what do you want? Choose one!";
+ next;
+ set .@menu$, "";
+ for(set .@j,1; .@j<5; set .@j,.@j+1) {
+ if (.@Items[.@j] != .@i) set .@menu$, .@menu$+getitemname(.@Items[.@j]);
+ set .@menu$, .@menu$+":";
+ }
+ set .@menu$, .@menu$+"Cancel the trade";
+ set .@j, select(.@menu$);
+ mes "[Laspuchin Gregory]";
+ if (.@j == 5) {
+ mes "Oh, well.";
+ mes "Don't tell anyone about my location...";
+ mes "Keheheh...after all, you did promise~";
+ close;
+ }
+ else if (.@j == 4) {
+ if (countitem(.@i) > 11) {
+ delitem .@i,12;
+ getitem 996,1;
+ mes "Kehhehheh, You know something?";
+ mes "I don't have many of those";
+ mes "so I'm going to take ^0000FF12^000000 of yours, okay?";
+ mes "Of course, it is okay.";
+ mes "It is an honor to help Laspuchin!";
+ close;
+ }
+ mes "Keheheh, You know something.";
+ mes "I don't have many of these so";
+ mes "I can't just get 8 of yours.";
+ mes "If you want to change them to Rough Wind,";
+ mes "bring me 4 more stones. 8 + 4 = 12...";
+ mes "Requires ^0000FF12^000000 stones.";
+ next;
+ mes "[Laspuchin Gregory]";
+ mes "Bring me stones, slave~!!";
+ mes "And keep your promise! Kehheheheheh...";
+ close;
+ }
+ else {
+ delitem .@i,8;
+ getitem .@Items[.@j],1;
+ mes "Keheheh! You've chosen a good one!";
+ mes "Use it well...";
+ mes "Bring me other stones if you have them!";
+ close;
+ }
+ } else if (countitem(.@i)) {
+ mes "You can't help Laspuchin with just a couple";
+ mes "of enchant stones... I said 8!";
+ mes "Bring me just 8 stones!";
+ mes "Keheheh.....";
+ next;
+ mes "[Laspuchin Gregory]";
+ mes "Bring me stones, slave~!!";
+ mes "And keep your promise! Keheheheheh...";
+ close;
+ }
+ mes "Keheheh~ Check your pockets";
+ mes "before you tell me";
+ mes "how foolish you are.....";
+ next;
+ mes "[Laspuchin Gregory]";
+ mes "Bring me stones! You said you are going to help me!";
+ mes "Keep your promises! Kehehehkehkeh...";
+ close;
+} \ No newline at end of file
diff --git a/npc/pre-re/merchants/enchan_arm.txt b/npc/pre-re/merchants/enchan_arm.txt
new file mode 100644
index 000000000..60acac1c4
--- /dev/null
+++ b/npc/pre-re/merchants/enchan_arm.txt
@@ -0,0 +1,132 @@
+//===== rAthena Script =======================================
+//= Armor Enchanter
+//===== By: ==================================================
+//= L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.2
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Add a +1, +2, or +3 random stat to a specified armor.
+//===== Additional Comments: =================================
+//= 1.0 First version.
+//= 1.1 Corrected typo (Sit -> Suit) (bugreport:4586)
+//= 1.2 Optimized. [Euphy]
+//============================================================
+
+prontera,165,60,2 script Apprentice Craftsman 73,{
+ mes "[Apprentice Craftsman]";
+ if (Zeny > 399999) {
+ mes "I've been studying ways to enhance an armor to maximize it's capability.";
+ next;
+ mes "[Apprentice Craftsman]";
+ mes "Enchanting is an awesome skill that infuses a mysterious status power into the armor's hidden socket.";
+ next;
+ mes "[Apprentice Craftsman]";
+ mes "However, you have to keep in mind that if there are two armors of the same kind in your possession, the Enchantment will be applied in the order they are placed in your inventory.";
+ next;
+ mes "[Apprentice Craftsman]";
+ mes "In that case, the Enchantment may be applied to an item which you didn't mean to Enchant. So just bring ^5555ffONE Armor^000000 you want enchanted to be safe...";
+ next;
+ mes "[Apprentice Craftsman]";
+ mes "I'm not responsible for what would happen if you have more than one of the same kind in your inventory.";
+ next;
+ switch(select("Non Slotted Armor.:Slotted Armor.:High Grade Armor.:Maybe next time.")) {
+ case 1:
+ setarray .@Items[0],2307,2309,2314,2316,2321,2325,2327,2328,2330,2332,2334,2335,2341,2344,2346,2348,2350,2337,2386,2394,2395,2396;
+ set .@j,50;
+ break;
+ case 2:
+ setarray .@Items[0],2311,2318,2319,2320,2308,2310,2315,2317,2322,2324,2326,2331,2333,2336,2342,2345,2347,2349,2351;
+ set .@j,55;
+ set .@k,1;
+ break;
+ case 3:
+ setarray .@Items[0],2364,2365,2391,2374,2375,2376,2377,2378,2379,2380,2381,2382,2387,2388,2389,2390;
+ set .@j,60;
+ break;
+ case 4:
+ mes "[Apprentice Craftsman]";
+ mes "Please come back when you have any interest in enchanting your armor.";
+ close;
+ }
+ set .@menu$,"";
+ for(set .@i,0; .@i<getarraysize(.@Items); set .@i,.@i+1)
+ set .@menu$, .@menu$+getitemname(.@Items[.@i])+((.@k)?" [1]":"")+":";
+ callsub S_EnchantArmor, .@Items[select(.@menu$)-1], .@j;
+ end;
+ }
+ else {
+ mes "I am in charge of Enchanting Armors. Simply put, I've been studying ways to power-up armor.";
+ next;
+ mes "[Apprentice Craftsman]";
+ mes "If by any chance, you would want to enchant your armor, bring me 400,000 zeny and the armor you want to enchant and you are all set to go.";
+ close;
+ }
+
+S_EnchantArmor:
+ set .@itemid,getarg(0);
+ set .@failrate,getarg(1);
+ mes "[Apprentice Craftsman]";
+ if ((countitem(.@itemid) > 0) && (countitem(.@itemid) < 2)) {
+ mes "Socket enchant wil cost you 400,000 zeny. And there will be a random option enchanted. Of course, there is a chance of breaking your armor.";
+ next;
+ mes "[Apprentice Craftsman]";
+ mes "First and most importantly.";
+ mes "^ff5555Existing Refine Level of the Armor";
+ mes "and Cards will be GONE.^000000";
+ mes "Do you still want to try an Enchant?";
+ next;
+ if(select("Hmm... Let me think it over.:Go ahead.")==1) {
+ mes "[Apprentice Craftsman]";
+ mes "Well, I can't blame you. Safety first, eh?";
+ mes "Now you have a nice day.";
+ close;
+ }
+ mes "[Apprentice Craftsman]";
+ mes "Quite of an adventurer huh? Well, shall we?";
+ close2;
+ specialeffect2 EF_MAPPILLAR;
+ if (Zeny < 400000) {
+ mes "[Apprentice Craftsman]";
+ mes "Sorry, but you don't have enough zeny.";
+ close;
+ }
+ progressbar "ffff00",7;
+ set .@enc_ran,rand(1,.@failrate);
+ set zeny,zeny-400000;
+ delitem .@itemid,1;
+ if (.@enc_ran == 1) set .@addpart,4702;
+ else if (.@enc_ran == 2) set .@addpart,4712;
+ else if (.@enc_ran == 3) set .@addpart,4722;
+ else if (.@enc_ran == 4) set .@addpart,4732;
+ else if (.@enc_ran == 5) set .@addpart,4742;
+ else if (.@enc_ran == 6) set .@addpart,4752;
+ else if ((.@enc_ran > 6) && (.@enc_ran < 9)) set .@addpart,4701;
+ else if ((.@enc_ran > 8) && (.@enc_ran < 11)) set .@addpart,4711;
+ else if ((.@enc_ran > 10) && (.@enc_ran < 13)) set .@addpart,4721;
+ else if ((.@enc_ran > 12) && (.@enc_ran < 15)) set .@addpart,4731;
+ else if ((.@enc_ran > 14) && (.@enc_ran < 17)) set .@addpart,4741;
+ else if ((.@enc_ran > 16) && (.@enc_ran < 19)) set .@addpart,4751;
+ else if ((.@enc_ran > 18) && (.@enc_ran < 22)) set .@addpart,4700;
+ else if ((.@enc_ran > 21) && (.@enc_ran < 25)) set .@addpart,4710;
+ else if ((.@enc_ran > 24) && (.@enc_ran < 28)) set .@addpart,4720;
+ else if ((.@enc_ran > 27) && (.@enc_ran < 31)) set .@addpart,4730;
+ else if ((.@enc_ran > 30) && (.@enc_ran < 34)) set .@addpart,4740;
+ else if ((.@enc_ran > 33) && (.@enc_ran < 37)) set .@addpart,4750;
+ else {
+ specialeffect2 EF_PHARMACY_FAIL;
+ mes "[Apprentice Craftsman]";
+ mes "Well that's too bad.";
+ mes "The requested equipment has failed to enchant.";
+ close;
+ }
+ getitem2 .@itemid, 1, 1, 0, 0, 0, 0, 0, .@addpart;
+ }
+ else {
+ mes "Hmm? There's nothing to be enchanted!";
+ mes "Please come back with just ONE equipment to be enchanted.";
+ close;
+ }
+} \ No newline at end of file
diff --git a/npc/pre-re/merchants/falcon_flute.txt b/npc/pre-re/merchants/falcon_flute.txt
new file mode 100644
index 000000000..738275d73
--- /dev/null
+++ b/npc/pre-re/merchants/falcon_flute.txt
@@ -0,0 +1,123 @@
+//===== rAthena Script =======================================
+//= Falcon Flute Trader
+//===== By: ==================================================
+//= Masao
+//= Credits to Muad_Dib for the translation & Ziu for the
+//= Item ID of the Falcon Flute.
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena
+//===== Description: =========================================
+//= An NPC which sells you a Falcon Flute so you're able to
+//= summon a Falcon wherever you are.
+//===== Additional Comments: =================================
+//= 1.0 First Version. [Masao]
+//= 1.1 Added Baby Hunter and Baby Ranger check. bugreport:5728 [Masao]
+//============================================================
+
+- script Falcon Flute Trader::fflute -1,{
+
+ if (Class == Job_Baby_Hunter || Class == Job_Hunter || Class == Job_Sniper || Class == Job_Baby_Ranger || Class == Job_Ranger || Class == Job_Ranger_T) {
+ mes "[Falcon Flute Trader]";
+ mes "Do you need a Falcon?";
+ mes "With a magical Flute, you can call your Falcon from anywhere!";
+ next;
+ mes "[Falcon Flute Trader]";
+ mes "It's marvelous, isn't it? Ha ha ha!";
+ next;
+ mes "[Falcon Flute Trader]";
+ mes "Why I'm selling these Falcon Flutes?";
+ mes "It's because I have no clue how they work.";
+ mes "Ha ha ha!";
+ next;
+ mes "[Falcon Flute Trader]";
+ mes "Of course, you'll need the Skill ^ff0000Falcon Mastery^000000.";
+ mes "I don't have the Skill, so I don't know how to handle Falcons.";
+ mes "As it's for now, I may never have a Falcon.";
+ next;
+ mes "[Falcon Flute Trader]";
+ mes "But I can't give you one for free!";
+ mes "I have to make money since i also need to eat!";
+ next;
+ mes "[Falcon Flute Trader]";
+ mes "If you need a Falcon Flute I will sell them for 12,500 zeny. Or is that too expensive?";
+ next;
+ if (Class == Job_Baby_Hunter || Class == Job_Hunter || Class == Job_Sniper) {
+ switch (select("Don't buy one:Buy a Falcon Flute")) {
+ case 1:
+ mes "[Falcon Flute Trader]";
+ mes "That's too bad. If you need one, come back!";
+ close;
+ case 2:
+ if (Zeny >= 12500) {
+ if (countitem(12848) >= 1) {
+ mes "[Falcon Flute Trader]";
+ mes "As i can see you already have an Falcon Flute!";
+ mes "Don't worry my young friend, once you've purchased the Falcon Flute you won't need to do so again";
+ mes "since the Falcon Flute won't disappear upon usage, isn't that great?";
+ close;
+ }
+ mes "[Falcon Flute Trader]";
+ mes "Here, take this Flute.";
+ mes "With it you can whistle for your Falcon from anywhere.";
+ set Zeny, Zeny - 12500;
+ getitem 12848,1; // Falcon Flute
+ next;
+ mes "[Falcon Flute Trader]";
+ mes "Just a reminder.";
+ mes "You need the Skill ^ff0000Falcon Mastery^000000 in order to use it!";
+ close;
+ }
+ mes "[Falcon Flute Trader]";
+ mes "I'm sorry but you don't have enough money to buy a Falcon Flute, please come back when you have more money!";
+ close;
+ }
+ }
+ mes "[Falcon Flute Trader]";
+ mes "For Rangers however, I have a special Price of 10,000 zeny!";
+ next;
+ switch (select("Don't buy one:Buy a Falcon flute")) {
+ case 1:
+ mes "[Falcon Flute Trader]";
+ mes "That's too bad. If you need one, come back!";
+ close;
+ case 2:
+ if (Zeny >= 10000) {
+ if (countitem(12848) >= 1) {
+ mes "[Falcon Flute Trader]";
+ mes "As i can see you already have an Falcon Flute!";
+ mes "Don't worry my young friend, once you've purchased the Falcon Flute you won't need to do so again";
+ mes "since the Falcon Flute won't disappear upon usage, isn't that great?";
+ close;
+ }
+ mes "[Falcon Flute Trader]";
+ mes "Here take this Flute.";
+ mes "With it you can whistle for your Falcon from anywhere.";
+ set Zeny, Zeny - 10000;
+ getitem 12848,1; // Falcon Flute
+ next;
+ mes "[Falcon Flute Trader]";
+ mes "Just a reminder.";
+ mes "You need the Skill ^ff0000Falcon Mastery^000000 in order to use it!";
+ close;
+ }
+ mes "[Falcon Flute Trader]";
+ mes "I'm sorry but you don't have enough money to buy a Falcon Flute, please come back when you have more money!";
+ close;
+ }
+ }
+ if (Class == Job_Baby_Archer || Class == Job_Archer) {
+ mes "[Falcon Flute Trader]";
+ mes "Hello young one!";
+ mes "Currently i can't help you,";
+ mes "but why don't you return to me when you've become an great Hunter and learned how to handle Falcons properly?";
+ close;
+ }
+ mes "[Falcon Flute Trader]";
+ mes "Isn't it a beautiful Day today?";
+ close;
+}
+
+hu_in01,386,306,3 duplicate(fflute) Falcon Flute Trader#fft 51
+pay_arche,91,134,3 duplicate(fflute) Falcon Flute Trader#fft2 51
diff --git a/npc/pre-re/merchants/gemstone.txt b/npc/pre-re/merchants/gemstone.txt
new file mode 100644
index 000000000..a6181f61a
--- /dev/null
+++ b/npc/pre-re/merchants/gemstone.txt
@@ -0,0 +1,117 @@
+//===== rAthena Script =======================================
+//= Gemstone trader
+//===== By: ==================================================
+//= L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.2
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Trade various colors of gemstones for other color gemstones.
+//===== Additional Comments: =================================
+//= 1.0 Rescripted to Aegis 10.3 standards. [L0ne_W0lf]
+//= Any notes pertaining to the prior trader may be found
+//= in the cities/payon.txt
+//= 1.1 Corrected NPC names to fall within proper restrictions. [L0ne_W0lf]
+//= 1.2 Updated input with min/max values. [L0ne_W0lf]
+//= Added a checkweight.
+//============================================================
+
+payon,173,238,5 script Jade#pay 754,{
+ if (checkweight(1201,1) == 0) {
+ mes "^3355FFWait a second! Right now, you're carrying too many items with you. Please come back after putting some of your things into Kafra Storage.^000000";
+ close;
+ }
+ mes "[Jade]";
+ mes "Bring me two";
+ mes "Gemstones of the";
+ mes "same color, and I will";
+ mes "change them to Gemstones";
+ mes "of a different color.";
+ next;
+ switch(select("Blue Gemstones into Red ones!:Red Gemstones into Yellow ones!:Yellow Gemstones into Blue ones!")) {
+ case 1: callsub S_TradeGems,717,716;
+ case 2: callsub S_TradeGems,716,715;
+ case 3: callsub S_TradeGems,715,717;
+ }
+
+S_TradeGems:
+ if (countitem(getarg(0)) < 2) {
+ mes "[Jade]";
+ mes "Hah...!";
+ mes "You're kidding me, right?";
+ mes "I can't provide you with this";
+ mes "service if you don't";
+ mes "give me at least";
+ mes "2 "+getitemname(getarg(0))+"s!";
+ close;
+ }
+ else {
+ set .@gems,countitem(getarg(0))/2;
+ mes "[Jade]";
+ mes "I believe I can create";
+ mes "a total of " + .@gems + " " + getitemname(getarg(1)) + "s";
+ mes "using the "+getitemname(getarg(0))+"s";
+ mes "that you currently have.";
+ mes "What do you want to do?";
+ next;
+ switch(select("Give me as many as you can.:I want to set the amount.:I quit.")) {
+ case 1:
+ delitem getarg(0),.@gems * 2;
+ getitem getarg(1),.@gems;
+ mes "[Jade]";
+ mes "There you go.";
+ mes "Feel free to come";
+ mes "back any time.";
+ mes "Hm, what's that look for?";
+ mes "Is there something on my face?";
+ close;
+ case 2:
+ mes "[Jade]";
+ mes "So how many";
+ mes "do you want?";
+ mes "The maximum number";
+ mes "that you can enter is 100.";
+ next;
+ while(1) {
+ input .@input,0,101;
+ if (.@input == 0) {
+ mes "[Jade]";
+ mes "None at all?";
+ mes "I guess you";
+ mes "changed your mind...";
+ close;
+ }
+ else if (.@input > 100) {
+ mes "[Jade]";
+ mes "Errm...";
+ mes "I asked you to enter";
+ mes "an amount no greater";
+ mes "than 100, remember...?";
+ next;
+ }
+ else {
+ break;
+ }
+ }
+
+ if (.@gems > .@input) {
+ delitem getarg(0),.@input * 2;
+ getitem getarg(1),.@input;
+ mes "[Jade]";
+ mes "There you go.";
+ mes "Feel free to come";
+ mes "back any time.";
+ mes "Hm, what's that look for?";
+ mes "Is there something on my face?";
+ }
+ close;
+ case 3:
+ mes "[Jade]";
+ mes "Sure, no problem.";
+ mes "Come back any time.";
+ close;
+ }
+ }
+}
diff --git a/npc/pre-re/merchants/hair_dyer.txt b/npc/pre-re/merchants/hair_dyer.txt
new file mode 100644
index 000000000..ed69197ed
--- /dev/null
+++ b/npc/pre-re/merchants/hair_dyer.txt
@@ -0,0 +1,409 @@
+//===== rAthena Script =======================================
+//= Hair Dyer
+//===== By: ==================================================
+//= kobra_k88; L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.5
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Hair Dyer with standard palletes
+//===== Additional Comments: =================================
+//= Fully working
+//= 1.1 Bugfix: fixed missing menu label LEnd->M_End [Lupus]
+//= 1.2 Rescripted to Aegis 10.3 standards. [L0ne_W0lf]
+//= 1.3 Fixed problem what "freezes" the NPC. (bugreport:509) [Samuray22]
+//= 1.4 Fixed getlook checking the wrong color. (bugreport:2392) [L0ne_W0lf]
+//= 1.5 Added Lighthalzen Hair Dying NPC. [L0ne_W0lf]
+//============================================================
+
+prt_in,243,168,4 script Jovovich 91,{
+ mes "[Hairdresser Jovovich]";
+ mes "Welcome~!";
+ mes "How may I help you?";
+ next;
+ mes "[Hairdresser Jovovich]";
+ if (sex) mes "Oh, no! Your hair is damaged. It seems as if you may need professional treatment. Come sit over here, please. Come.";
+ else {
+ if (rand(20) > 11) {
+ mes "Eh!? Oh my! Oh no no no no! Your hair is sooo damaged! It's not good if you leave your hair like this.";
+ next;
+ mes "[Hairdresser Jovovich]";
+ mes "Would you let me treat your hair? Please?";
+ }
+ else mes "Wow! Your hair would be perfect once it's dyed~ How about dying your hair for a change?";
+ }
+ next;
+ while(1) {
+ switch(select("Dye Hair:Tips and Information:Cancel")) {
+ case 1:
+ mes "[Hairdresser Jovovich]";
+ mes "Yes yes, good choice~";
+ mes "Well then, this is your chance for a make-over, your chance to blossom in beauty! Choose the color you would like.";
+ next;
+ while(1) {
+ if (.@choose_success == 1) {
+ mes "[Hairdresser Jovovich]";
+ mes "What do you think? Did you want a different color?";
+ next;
+ if (select("Yes:No") == 1) {
+ mes "[Hairdresser Jovovich]";
+ mes "Okay! Choose the color that you would like.";
+ next;
+ }
+ else {
+ mes "[Hairdresser Jovovich]";
+ mes "Hmm, I'm sort of disappointed. I wanted to do a better job. But I promise I'll do it better next time. Please come again~";
+ close;
+ }
+ }
+
+ while(1) {
+ switch(select("Red, please.:Yellow, please.:Violet, please.:Orange, please.:Green, please.:Blue, please.:White, please.:Black, please.:Actually, I like my hair as it is.")) {
+ case 1: set .@headpalette,8; break;
+ case 2: set .@headpalette,1; break;
+ case 3: set .@headpalette,2; break;
+ case 4: set .@headpalette,3; break;
+ case 5: set .@headpalette,4; break;
+ case 6: set .@headpalette,5; break;
+ case 7: set .@headpalette,6; break;
+ case 8: set .@headpalette,7; break;
+ case 9:
+ if (.@choose_success != 0) {
+ mes "[Hairdresser Jovovich]";
+ mes "You must like your hair color~";
+ close;
+ }
+ mes "[Hairdresser Jovovich]";
+ mes "Eehh~? You're not going to dye your hair? I'm a little sad...";
+ close;
+ }
+
+ if (.@headpalette == getlook(VAR_HEADPALETTE)) {
+ mes "[Hairdresser Jovovich]";
+ mes "Eh? But that's the hair color you already have. Please choose a different color.";
+ next;
+ }
+ else {
+ switch(.@headpalette) {
+ case 1: callsub S_NoDye,976,"yellow"; break;
+ case 2: callsub S_NoDye,978,"violet"; break;
+ case 3: callsub S_NoDye,979,"orange"; break;
+ case 4: callsub S_NoDye,980,"green"; break;
+ case 5: callsub S_NoDye,981,"blue"; break;
+ case 6: callsub S_NoDye,982,"white"; break;
+ case 7: callsub S_NoDye,983,"black"; break;
+ Case 8: callsub S_NoDye,975,"red"; break;
+ }
+ if (zeny < 1000) {
+ mes "[Hairdresser Jovovich]";
+ mes "The fee is 1000 zeny. Do you not have enough...?";
+ close;
+ }
+
+ switch(.@headpalette) {
+ case 1: delitem 976,1; break; //Lemon_Dyestuffs
+ case 2: delitem 978,1; break; //Violet_Dyestuffs
+ case 3: delitem 979,1; break; //Orange_Dyestuffs
+ case 4: delitem 980,1; break; //Darkgreen_Dyestuffs
+ case 5: delitem 981,1; break; //Cobaltblue_Dyestuffs
+ case 6: delitem 982,1; break; //White_Dyestuffs
+ case 7: delitem 983,1; break; //Black_Dyestuffs
+ case 8: delitem 975,1; break; //Scarlet_Dyestuffs
+ }
+ set Zeny,Zeny-1000;
+ setlook VAR_HEADPALETTE,.@headpalette;
+ set .@choose_success,1;
+ break;
+ }
+
+ }
+
+ }
+
+ case 2:
+ mes "[Hairdresser Jovovich]";
+ mes "When you're feeling down , when you get dumped, when you want to impress someone, or even when you just want to stand out...";
+ next;
+ mes "[Hairdresser Jovovich]";
+ mes "For that special place and time, wouldn't you want a hairstyle of your very own? As long as you have the appropriate dyestuffs, I will make your hair look wonderful.";
+ next;
+ mes "[Hairdresser Jovovich]";
+ mes "And try not to worry too much about the fee. Acquiring beauty is the same as acquiring everything. Hehe~";
+ next;
+ mes "[Hairdresser Jovovich]";
+ mes "* Fees and Information *";
+ mes "- 1 Dyestuffs item of the color of hair you want.";
+ mes "- 1000 zeny fee.";
+ break;
+
+ case 3:
+ mes "[Hairdresser Jovovich]";
+ mes "Men or Women...";
+ mes "Everyone has the right and obligation to be beautiful.";
+ close;
+ }
+
+ }
+
+S_NoDye:
+ if (countitem(getarg(0)) == 0) {
+ mes "[Hairdresser Jovovich]";
+ mes "Eh?! But you need the item '"+getitemname(getarg(0))+"' to dye your hair "+getarg(1)+"...";
+ close;
+ }
+ return;
+}
+
+// Lighthalzen
+lhz_in02,100,134,3 script Hair Dyer#lich 850,{
+ mes "[Rossa]";
+ if (Sex == 1) {
+ mes "Welcome, come in~";
+ mes "Oh, I see that you take";
+ mes "much better care of your";
+ mes "hair than those other boys.";
+ mes "Now would you like to dye";
+ mes "your hair another color?";
+ }
+ else {
+ mes "Oh, wow~ Where did";
+ mes "you get your hair styled?";
+ mes "I love it! But... It would";
+ mes "be even more beautiful if";
+ mes "you dyed your hair. What";
+ mes "do you think about that?";
+ }
+ while (.@choose_success != 2) {
+ next;
+ switch(select("Dye Hair:Coloring Information:Cancel")) {
+ case 1:
+ mes "[Rossa]";
+ mes "Ho ho ho ho~";
+ mes "So which color would";
+ mes "you like to try? Something";
+ mes "vivid or dark? Sexy or cute?";
+ next;
+ while (.@choose_success != 2) {
+ if (.@choose_success == 1) {
+ mes "[Rossa]";
+ mes "Ooh, I like this color!";
+ mes "But would you like to";
+ mes "try a different one?";
+ next;
+ switch(select("Yes:No")) {
+ case 1:
+ mes "[Rossa]";
+ mes "Please select";
+ mes "another color~";
+ next;
+ break;
+ case 2:
+ mes "[Rossa]";
+ mes "An excellent choice~";
+ mes "Alright then, thank you";
+ mes "for using my service and";
+ mes "I hope you come by again!";
+ close2;
+ set .@choose_success,2;
+ break;
+ }
+ }
+ while (.@choose_success != 2) {
+ switch(select("Red, please.:Yellow, please.:Purple, please.:Orange, please.:Green, please.:Blue, please.:White, please.:Dark Brown, please.:I like my hair color.")) {
+ case 1:
+ set .@headpalette,8;
+ break;
+ case 2:
+ set .@headpalette,1;
+ break;
+ case 3:
+ set .@headpalette,2;
+ break;
+ case 4:
+ set .@headpalette,3;
+ break;
+ case 5:
+ set .@headpalette,4;
+ break;
+ case 6:
+ set .@headpalette,5;
+ break;
+ case 7:
+ set .@headpalette,6;
+ break;
+ case 8:
+ set .@headpalette,7;
+ break;
+ case 9:
+ if (.@choose_success != 0) {
+ mes "[Rossa]";
+ mes "Are you sure?";
+ mes "Alright then, you";
+ mes "know what's best for";
+ mes "your beauty and to tell";
+ mes "the truth, I agree with you~";
+ close2;
+ set .@choose_success,2;
+ }
+ else {
+ mes "[Rossa]";
+ mes "Oh, I see. Still, I can't";
+ mes "help but feel so disappointed.";
+ mes "You'd look so good if you dyed";
+ mes "your hair a different color~";
+ close2;
+ set .@choose_success,2;
+ }
+ break;
+ }
+ if (getlook(VAR_HEADPALETTE) == .@headpalette) {
+ mes "[Rossa]";
+ mes "Hmm, your hair color";
+ mes "is still fine, so there's";
+ mes "no need to dye it the same";
+ mes "color again, if that's what";
+ mes "you're worried about.";
+ next;
+ }
+ else {
+ if ((.@headpalette == 8) && (countitem(975) == 0)) {
+ mes "[Rossa]";
+ mes "Oh, I'm sorry dear,";
+ mes "but I can't dye your";
+ mes "hair if you didn't bring";
+ mes "Scarlet Dyestuffs with you...";
+ close2;
+ set .@choose_success,2;
+ break;
+ }
+ else if ((.@headpalette == 1) && (countitem(976) == 0)) {
+ mes "[Rossa]";
+ mes "Oh, I'm sorry dear,";
+ mes "but I can't dye your";
+ mes "hair if you didn't bring";
+ mes "Lemon Dyestuffs with you...";
+ close2;
+ set .@choose_success,2;
+ break;
+ }
+ else if ((.@headpalette == 2) && (countitem(981) == 0)) {
+ mes "[Rossa]";
+ mes "Oh, I'm sorry dear,";
+ mes "but I can't dye your";
+ mes "hair if you didn't bring";
+ mes "Violet Dyestuffs with you...";
+ close2;
+ set .@choose_success,2;
+ break;
+ }
+ else if ((.@headpalette == 3) && (countitem(980) == 0)) {
+ mes "[Rossa]";
+ mes "Oh, I'm sorry dear,";
+ mes "but I can't dye your";
+ mes "hair if you didn't bring";
+ mes "Orange Dyestuffs with you...";
+ close2;
+ set .@choose_success,2;
+ break;
+ }
+ else if ((.@headpalette == 4) && (countitem(979) == 0)) {
+ mes "[Rossa]";
+ mes "Oh, I'm sorry dear,";
+ mes "but I can't dye your";
+ mes "hair if you didn't bring";
+ mes "Darkgreen Dyestuffs";
+ mes "with you. Would you come";
+ mes "back after you get some?";
+ close2;
+ set .@choose_success,2;
+ break;
+ }
+ else if ((.@headpalette == 5) && (countitem(978) == 0)) {
+ mes "[Rossa]";
+ mes "Oh, I'm sorry dear,";
+ mes "but I can't dye your";
+ mes "hair if you didn't bring";
+ mes "Cobaltblue Dyestuffs";
+ mes "with you. Would you come";
+ mes "back after you get some?";
+ close2;
+ set .@choose_success,2;
+ break;
+ }
+ else if ((.@headpalette == 6) && (countitem(982) == 0)) {
+ mes "[Rossa]";
+ mes "Oh, I'm sorry dear,";
+ mes "but I can't dye your";
+ mes "hair if you didn't bring";
+ mes "White Dyestuffs with you...";
+ close2;
+ set .@choose_success,2;
+ break;
+ }
+ else if ((.@headpalette == 7) && (countitem(983) == 0)) {
+ mes "[Rossa]";
+ mes "Oh, I'm sorry dear,";
+ mes "but I can't dye your";
+ mes "hair if you didn't bring";
+ mes "Black Dyestuffs with you...";
+ close2;
+ set .@choose_success,2;
+ break;
+ }
+ if (Zeny < 1000) {
+ mes "[Rossa]";
+ mes "Oh, I'm so sorry dear,";
+ mes "but my service fee is";
+ mes "1,000 zeny. Did you forget";
+ mes "to bring your money with you?";
+ close2;
+ set .@choose_success,2;
+ break;
+ }
+ if (.@headpalette == 8) delitem 975,1; //Scarlet_Dyestuffs
+ else if (.@headpalette == 1) delitem 976,1; //Lemon_Dyestuffs
+ else if (.@headpalette == 2) delitem 981,1; //Violet_Dyestuffs
+ else if (.@headpalette == 3) delitem 980,1; //Orange_Dyestuffs
+ else if (.@headpalette == 4) delitem 979,1; //Darkgreen_Dyestuffs
+ else if (.@headpalette == 5) delitem 978,1; //Cobaltblue_Dyestuffs
+ else if (.@headpalette == 6) delitem 982,1; //White_Dyestuffs
+ else if (.@headpalette == 7) delitem 983,1; //Black_Dyestuffs
+ set zeny,zeny-1000;
+ setlook VAR_HEADPALETTE,.@headpalette;
+ set .@choose_success,1;
+ break;
+ }
+ }
+ }
+ break;
+ case 2:
+ mes "[Rossa]";
+ mes "When you're feeling";
+ mes "down, when you just want";
+ mes "to look nice for the one you";
+ mes "love, or when you just want";
+ mes "a different look, why don't";
+ mes "you dye your hair?";
+ next;
+ mes "[Rossa]";
+ mes "All you need is one";
+ mes "Dyestuffs item of the";
+ mes "color that you want to";
+ mes "dye your hair, as well as";
+ mes "a 1,000 zeny service fee.";
+ mes "I'm here for your beauty needs~";
+ break;
+ case 3:
+ mes "[Rossa]";
+ mes "You know, when you";
+ mes "put some effort into";
+ mes "your appearance, you'll";
+ mes "not only look better, but";
+ mes "you'll feel better about";
+ mes "yourself. Makes sense, right?";
+ close;
+ }
+ }
+ close;
+}
diff --git a/npc/pre-re/merchants/hair_style.txt b/npc/pre-re/merchants/hair_style.txt
new file mode 100644
index 000000000..19f5b9dca
--- /dev/null
+++ b/npc/pre-re/merchants/hair_style.txt
@@ -0,0 +1,1303 @@
+//===== rAthena Script =======================================
+//= Hair Dresser
+//===== By: ==================================================
+//= Muad_Dib, Samuray22, Kisuka
+//===== Current Version: =====================================
+//= 1.4
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Allows you to change your hairstyle.
+//===== Additional Comments: =================================
+//= 1.2 Rescripted to the Aegis 10.3 Standards. [Samuray22]
+//= 1.3 Updated to match AEGIS script. [Kisuka]
+//= 1.4 Added Lighthalzen Hair Dresser. [L0ne_W0lf]
+//============================================================
+
+// Hair Dresser Veronica
+// ============================================================
+alberta_in,55,142,7 script Hair Dresser 91,{
+ mes "[Veronica]";
+ mes "Welcome to Veronica's hair salon.";
+ mes "How can I help you?";
+ next;
+ switch(select("See available hair styles.:Change hair style.:End conversation.")) {
+ case 1:
+ mes "[Veronica]";
+ mes "We have a total of 19 styles, available from no.1 to no.19.";
+ mes "Which one do you want to see?";
+ mes "If you wish to cancel,";
+ mes "please enter 0.";
+ next;
+ input .@style;
+ if(.@style > 19) {
+ mes "[Veronica]";
+ mes "Oops, I'm sorry, but that";
+ mes "style is not available.";
+ mes "Remember to enter a number";
+ mes "from 1 to 19.";
+ next;
+ } else if(.@style == 0) {
+ mes "[Veronica]";
+ mes "So, how do you like the style?";
+ mes "Feel free to ask me about any";
+ mes "available hairstyle. It will";
+ mes "be my pleasure to style your";
+ mes "hair.";
+ close;
+ }
+ else {
+ callsub L_cutin,.@style;
+ mes "[Veronica]";
+ switch(.@style) {
+ case 1:
+ if(Sex == 1) {
+ mes "Oh, that's 'Play Dead' style!";
+ mes "It's a nice, basic haircut.";
+ mes "I notice that usually the";
+ mes "cute, conversative types seem";
+ mes "to prefer this style.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'First Aid' style!";
+ mes "The shoulder length tresses";
+ mes "are straightened for those";
+ mes "no nonsense adventurers. It";
+ mes "seems to be the style of";
+ mes "choice for Novices.";
+ close2; cutin "",255; end;
+ case 2:
+ if(Sex == 1) {
+ mes "Oh, that's the 'Two Handed Sword";
+ mes "Mastery' style! It's perfect for";
+ mes "for Swordmen who might muss their";
+ mes "hair while swinging their swords";
+ mes "all day long.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Bash' style!";
+ mes "For the powerful woman that's";
+ mes "not afraid to get a little";
+ mes "blood on her hands, but knows";
+ mes "how great her hair will look";
+ mes "while wildly flailing a sword.";
+ close2; cutin "",255; end;
+ case 3:
+ if(Sex == 1) {
+ mes "Oh, that's 'Napalm Beat' style!";
+ mes "It's a unique look with a hint";
+ mes "of eccentricity that's offset";
+ mes "with a helping of elegance.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Frost Diver' style!";
+ mes "The pigtails lend an innocent,";
+ mes "demure look for those Mages";
+ mes "and Wizards that usually scare";
+ mes "off the boys with their spells.";
+ close2; cutin "",255; end;
+ case 4:
+ if(Sex == 1) {
+ mes "Oh, that's the 'Double Strafe'";
+ mes "style! The arrangement of the";
+ mes "hair conducts ambient static";
+ mes "electricity, naturally clearing";
+ mes "the mind. At least, that's what";
+ mes "I was taught in fashion school.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Arrow Shower' style!";
+ mes "For the Bowswoman who doesn't";
+ mes "want fashion to interfere with";
+ mes "her depth perception. Much more";
+ mes "attractive than those horrid";
+ mes "granny-style hairbuns.";
+ close2; cutin "",255; end;
+ case 5:
+ if(Sex == 1) {
+ mes "Oh, that's 'Angelus' style!";
+ mes "It's for calm and devout people,";
+ mes "as well as those bashful,";
+ mes "mild-mannered types.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Heal' style!";
+ mes "This is in trend among";
+ mes "Priests and Acolytes since";
+ mes "this style is appropriate";
+ mes "for formal situations, but";
+ mes "is also practical in battle.";
+ close2; cutin "",255; end;
+ case 6:
+ if(Sex == 1) {
+ mes "Oh, that's 'Push Cart' style!";
+ mes "It was based on the design of a";
+ mes "cart...at least, that's what";
+ mes "I learned in beautician school.";
+ close2; cutin "",255; end;
+ }
+ mes "Ooh, that's 'Vending' style!";
+ mes "It's the hairdo of money";
+ mes "makers...and if I may say so,";
+ mes "it's also economical.";
+ close2; cutin "",255; end;
+ case 7:
+ if(Sex == 1) {
+ mes "Ooh, that's 'Envenom' style!";
+ mes "It looks great on Thieves and";
+ mes "and Assassins when they're";
+ mes "out poisoning people and animals.";
+ mes "It's fashion for the aggressive";
+ mes "and eclectic~!";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Double Attack' style!";
+ mes "The adorable pigtail, paired with";
+ mes "those provacative bangs are sure";
+ mes "to help you steal the heart of";
+ mes "some cute guy.";
+ close2; cutin "",255; end;
+ case 8:
+ if(Sex == 1) {
+ mes "Oh, that's 'Bowling Bash' style!";
+ mes "A popular style for Knights, its";
+ mes "manly, rugged look tends to";
+ mes "attract all of the ladies,";
+ mes "and looks great on men with";
+ mes "strong chins.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Gloria' style!";
+ mes "It's very elegant and looks";
+ mes "great on holy Priests. This";
+ mes "style is most attractive to";
+ mes "ladies who aren't that used";
+ mes "to fighting with their hands.";
+ close2; cutin "",255; end;
+ case 9:
+ if(Sex == 1) {
+ mes "Oh, that's 'Venom Dust' style!";
+ mes "Definitely a look for rebels,";
+ mes "the sweeping, yet decidedly";
+ mes "luxorious locks seems to enchant";
+ mes "girls with a fatal attraction.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'SP Recovery' style!";
+ mes "To add more body to the special";
+ mes "style of these bangs, I use a";
+ mes "special conditioner that makes";
+ mes "you feel like you're regaining SP";
+ mes "...Although, it acutally doesn't.";
+ close2; cutin "",255; end;
+ case 10:
+ if(Sex == 1) {
+ mes "Oh, that's 'Turn Undead' style!";
+ mes "This is popular among Priests";
+ mes "that want a serious, yet a bit";
+ mes "of a wild, agressive look.";
+ mes "Definitely more attractive";
+ mes "than the 'Holy Light' mullet.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Prepare Potion' style!";
+ mes "The flared out tresses are chosen";
+ mes "by beginning Alchemists, since";
+ mes "early, explosive experiments would";
+ mes "make their hair to stick out anyway.";
+ close2; cutin "",255; end;
+ case 11:
+ if(Sex == 1) {
+ mes "Oh, that's 'Dragonology' style!";
+ mes "It's neat and clean cut, perfect";
+ mes "for studious people and looks";
+ mes "great with eyeglasses. This";
+ mes "is a fashion well suited to";
+ mes "intellectual types.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Grand Cross' style!";
+ mes "It's in style among those pious";
+ mes "Crusaders that need hair that";
+ mes "won't muss during fighting, yet";
+ mes "is respectable enough to attend";
+ mes "religious services.";
+ close2; cutin "",255; end;
+ case 12:
+ if(Sex == 1) {
+ mes "Oh, that's 'Mace Mastery' style!";
+ mes "A lot of care goes into making";
+ mes "that tussled hair say, 'I don't";
+ mes "care how I look at all.'";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Intimidate' style!";
+ mes "The Rogue women seem to like";
+ mes "this style...although I imagine";
+ mes "that more of them would prefer";
+ mes "something wilder to match those";
+ mes "stockings...";
+ close2; cutin "",255; end;
+ case 13:
+ if(Sex == 1) {
+ mes "Oh, that's 'Thunder Storm' style!";
+ mes "This hot, flamboyant hairstyle";
+ mes "flares out wildly like thunder.";
+ mes "...And you will too with this new look.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Spiritual Sphere";
+ mes "Absorption' style! There's a";
+ mes "charismatic quality to this";
+ mes "fashion: it's tough, slightly";
+ mes "tomboyish, but not so much";
+ mes "that it can't be cute.";
+ close2; cutin "",255; end;
+ case 14:
+ if(Sex == 1) {
+ mes "Oh, that's 'Encore' style!";
+ mes "The elegant, flowing locks";
+ mes "fit well with Bards, or men who";
+ mes "appreciate the value of male";
+ mes "beauty.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Gypsy's Kiss' style!";
+ mes "Dancers seem to like this style,";
+ mes "although personally, I think";
+ mes "this fashion fits very well";
+ mes "with glasses.";
+ close2; cutin "",255; end;
+ case 15:
+ if(Sex == 1) {
+ mes "Oh, that's 'Grimtooth' style!";
+ mes "Spiky and unkempt, this style";
+ mes "is a popular counterculture";
+ mes "street fashion. You might";
+ mes "not want to wear your hair";
+ mes "this way at a wedding, though.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Counter Attack' style!";
+ mes "This is an intimidating look for";
+ mes "girls that want to say 'You hit";
+ mes "me, I'll hit you back!' It really";
+ mes "emphasizes strong looking";
+ mes "foreheads and cheekbones.";
+ close2; cutin "",255; end;
+ case 16:
+ if(Sex == 1) {
+ mes "Oh, that's 'Blitz Beat' style!";
+ mes "A funky and lively fashion,";
+ mes "this style was developed for a";
+ mes "Hunter who liked really long";
+ mes "bangs and wanted to see";
+ mes "through them at the same time.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Anke Snare' style!";
+ mes "The style style is specially";
+ mes "made for Hunters that don't like";
+ mes "to get their hair tangled...";
+ mes "After all, what kind of Hunter";
+ mes "lets their hair get trapped?";
+ close2; cutin "",255; end;
+ case 17:
+ if(Sex == 1) {
+ mes "Oh, that's 'Find Ore' style!";
+ mes "It's a practical, economical look";
+ mes "that is popular among Blacksmiths.";
+ mes "Some swear that this fashion helps";
+ mes "them in finding ores, but where's";
+ mes "the science in that??";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Hammer Fall' style!";
+ mes "For the woman that doesn't want";
+ mes "her hair to get in the way when";
+ mes "she's savagely swinging heavy";
+ mes "objects. Of course, this is a";
+ mes "Blacksmith favorite.";
+ close2; cutin "",255; end;
+ case 18:
+ if(Sex == 1) {
+ mes "Oh, that's 'Fire Pillar' style!";
+ mes "It's a trendy look, in which";
+ mes "you cover one eye for that";
+ mes "intrigue effect. The element";
+ mes "of mystery is always in";
+ mes "fashion, don't you think?";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Jupitel Thunder'";
+ mes "style! A look that strikes";
+ mes "like lightening, without";
+ mes "any of that annoying static";
+ mes "cling or muss. This fashion";
+ mes "looks great with Mage Hats.";
+ close2; cutin "",255; end;
+ case 19:
+ if(Sex == 1) {
+ mes "Oh, that's 'Guillotine Fist'";
+ mes "style! The smooth, slicked back";
+ mes "pompadour shows that you're";
+ mes "serious about your passion";
+ mes "for brawling... or just your passion.";
+ close2; cutin "",255; end;
+ }
+ mes "Oh, that's 'Whirlwind' style!";
+ mes "A favorite among the studious";
+ mes "Sages, the hair is tied back";
+ mes "in a stylish braid so that";
+ mes "it doesn't fly around after";
+ mes "casting those windy spells.";
+ close2; cutin "",255; end;
+ }
+ }
+ case 2:
+ if(BaseLevel < 60) {
+ mes "[Veronica]";
+ mes "Oh, dear, you're looking fabulous with";
+ mes "your current hairstyle. Why don't you";
+ mes "try a new hair accessory rather than changing your look?";
+ close;
+ } else if((countitem(973) < 3) || (countitem(974) < 3) || (countitem(901) <100) || (countitem(1094) <100) || (countitem(1020) <100) || (countitem(1060) <100) || (countitem(7152) <100) || (Zeny < 99800)) {
+ mes "[Veronica]";
+ mes "If you wish to change your";
+ mes "hairstyle, you should meet some";
+ mes "requirements. I suggest that you";
+ mes "write down all the items that";
+ mes "you will need.";
+ next;
+ mes "[Veronica]";
+ mes "3 Counteragent,";
+ mes "3 Mixture,";
+ mes "100 Danggie,";
+ mes "100 Short Danggie,";
+ mes "100 Black Hair,";
+ mes "100 Golden Hair,";
+ mes "100 Glossy Hair, and lastly...";
+ next;
+ mes "[Veronica]";
+ mes "You will need 99,800 zeny.";
+ mes "Please come back when you're";
+ mes "ready. I will make you look";
+ mes "fabulous. Hohohohoho~";
+ close;
+ }
+ mes "[Veronica]";
+ mes "Okay now, please choose the style";
+ mes "you desire from styles no.1 to";
+ mes "no.19. I will do my best to";
+ mes "make you look your very best.";
+ next;
+ input .@style;
+ if(.@style > 19) {
+ mes "[Veronica]";
+ mes "I am sorry, you chose an unavailable style.";
+ mes "Make sure you enter the correct number.";
+ close;
+ } else if(.@style == 0) {
+ mes "[Veronica]";
+ mes "You have canceled your request.";
+ close;
+ } else if(getlook(1) == .@style) {
+ mes "[Veronica]";
+ mes "I am sorry, but you are already";
+ mes "wearing the style you have";
+ mes "requested. Would you please";
+ mes "choose a different style?";
+ close;
+ }
+ callsub L_cutin,.@style;
+ mes "[Veronica]";
+ mes "You have chosen style no. (" + .@style + ").";
+ mes "I shall proceed with your request.";
+ mes "Would you mind?";
+ next;
+ if(select("No, I don't mind.:Yes, let me choose another one.") == 1) {
+ if(getlook(6) == 0) {
+ mes "[Veronica]";
+ mes "Oh, my, you haven't dyed your hair";
+ mes "at all. You would look even more";
+ mes "fabulous if you dyed your hair...";
+ mes "Oh well, I will do it for free.";
+ mes "So what kind of color would you like?";
+ next;
+ switch(select("Red.:Yellow.:Purple.:Orange.:Green.:Blue.:White.:Dark Brown.:Cancel.")) {
+ case 1:
+ set .@pallete,8;
+ break;
+ case 2:
+ set .@pallete,1;
+ break;
+ case 3:
+ set .@pallete,2;
+ break;
+ case 4:
+ set .@pallete,3;
+ break;
+ case 5:
+ set .@pallete,4;
+ break;
+ case 6:
+ set .@pallete,5;
+ break;
+ case 7:
+ set .@pallete,6;
+ break;
+ case 8:
+ set .@pallete,7;
+ break;
+ case 9:
+ mes "[Veronica]";
+ mes "Oh, I was gonna do it for free.";
+ mes "Well, if you change your mind, please come again.";
+ mes "The color of your hair enhances your look.";
+ close;
+ }
+ }
+ nude;
+ mes "[Veronica]";
+ mes "Now, let's get started. Try to";
+ mes "stay still, dear. If you move,";
+ mes "it might ruin the perfect look";
+ mes "I intend to give you. Trust me,";
+ mes "I will make you look fabulous~";
+ next;
+ mes "[Veronica]";
+ mes "- *snip snip snip snip* -";
+ mes "- *bzzzzzzz bzzzzzzz bzzzzzzz bzzzzzzz* -";
+ mes "- *snip snip snip snip* -";
+ mes "- *bzzzzzzz bzzzzzzz bzzzzzzz bzzzzzzz* -";
+ next;
+ set Zeny,Zeny-99800;
+ delitem 973,3; // Counteragent
+ delitem 974,3; // Mixture
+ delitem 901,100; // Danggie
+ delitem 1094,100; // Short_Daenggie
+ delitem 1020,100; // Long_Hair
+ delitem 1060,100; // Golden_Hair
+ delitem 7152,100; // Glossy_Hair
+ setlook 1,.@style;
+ setlook 6,.@pallete;
+ cutin "",255;
+ mes "[Veronica]";
+ mes "Alright, it's done~";
+ mes "I hope you like";
+ mes "this style no.(" + .@style + ").";
+ mes "Feel free to come back anytime";
+ mes "when you want a new hairstyle. Hohohohohoho~";
+ setlook 1,.@style;
+ setlook 6,.@pallete;
+ close;
+ }
+ mes "[Veronica]";
+ mes "Okay then, please choose one";
+ mes "a hairstyle again. I believe";
+ mes "you will find the look that's best for you.";
+ close;
+ case 3:
+ mes "[Veronica]";
+ mes "Everybody deserves the right to";
+ mes "pursue beauty. I hope that you";
+ mes "will find the right hairstyle";
+ mes "one of these days.";
+ close;
+ }
+
+L_cutin:
+ if(Sex == 1) {
+ if(getarg(0) < 10)
+ cutin "hair_m_0"+getarg(0),4;
+ else
+ cutin "hair_m_"+getarg(0),4;
+ } else {
+ if(getarg(0) < 10)
+ cutin "hair_f_0"+getarg(0),4;
+ else
+ cutin "hair_f_"+getarg(0),4;
+ }
+ return;
+}
+
+// Roving Hair Dresser
+// ============================================================
+alberta,33,141,7 script Roving Hair Dresser 87,{
+ mes "[Rui Vishop]";
+ mes "That Veronica...";
+ mes "Hah! Best hair dresser my ass.";
+ mes "She's not the best hair dresser...";
+ mes "...";
+ mes "I am!";
+ next;
+ mes "[Rui Vishop]";
+ mes "I, Rui Vishop, the man to whom";
+ mes "all scalps are canvases";
+ mes "waiting to be transformed into";
+ mes "works of magnificent art~!";
+ next;
+ switch(select("What are you?:Do my hair, please!:.....")) {
+ case 1:
+ mes "[Rui Vishop]";
+ mes "Do you not know that I, Rui";
+ mes "Vishop, maestro of the shears";
+ mes "and sculptor of hair, am an";
+ mes "artist far ahead of his time?!";
+ mes "Well, I suppose an adventurer";
+ mes "like yourself wouldn't know...";
+ next;
+ mes "[Rui Vishop]";
+ mes "As a hair sculptor, I find joy";
+ mes "in bestowing upon others the";
+ mes "supreme favour of doing their";
+ mes "hairstyle at a reasonable price.";
+ next;
+ mes "[Rui Vishop]";
+ mes "Recently, however, I happened to";
+ mes "overhear that some tyro has had";
+ mes "the audacity to call herself a";
+ mes "hair dresser.";
+ next;
+ mes "[Rui Vishop]";
+ mes "So one day I went there,";
+ mes "pretending to be a customer.";
+ mes "I was apalled to see the boring,";
+ mes "lifeless hairstyles that she was";
+ mes "giving all of her clients...";
+ next;
+ mes "[Rui Vishop]";
+ mes "It wasn't hard to notice that her";
+ mes "skills, or lack thereof, are a";
+ mes "joke. She brings shame to the";
+ mes "great and honorable";
+ mes "profession of hair dressing.";
+ mes "A complete and utter disgrace!";
+ next;
+ mes "[Rui Vishop]";
+ mes "But the worst part was...";
+ mes "she forced her customers to";
+ mes "choose a hairstyle before she";
+ mes "styled their hair!";
+ next;
+ mes "[Rui Vishop]";
+ mes "That's not how talented hair";
+ mes "dressers do their job! She";
+ mes "should know what hair style will";
+ mes "fit a customer without ever";
+ mes "asking them!";
+ next;
+ mes "[Rui Vishop]";
+ mes "If by any chance you decide to";
+ mes "do your hair, don't even think";
+ mes "about giving her patronage.";
+ mes "Instead, you may ask for my";
+ mes "services. I assure you, I am";
+ mes "faaaar better than her.";
+ next;
+ mes "[Rui Vishop]";
+ mes "Do you understand? I mean, don't";
+ mes "let her ruin your hair needlessly!";
+ mes "You could get a Swordman to hack";
+ mes "away at your hair if you want a";
+ mes "hairstyle that horrible~!";
+ close;
+ case 2:
+ if(BaseLevel < 60) {
+ mes "[Rui Vishop]";
+ mes "Hmm, I must say, your current";
+ mes "style fits you best. Trust me, I know what I am saying.";
+ close;
+ } else if(Zeny < 199800) {
+ mes "[Rui Vishop]";
+ mes "Ah, I see that that you can";
+ mes "recognize genius when it is";
+ mes "right before you. In light";
+ mes "of your good taste, I will";
+ mes "only require money for my";
+ mes "services.";
+ next;
+ mes "[Rui Vishop]";
+ mes "Simply pay me the small";
+ mes "fee of 199,800 zeny. You must";
+ mes "know that I am doing you a";
+ mes "huge favor by charging you";
+ mes "such a small amount. My";
+ mes "art is priceless, after all.";
+ close;
+ }
+ mes "[Rui Vishop]";
+ mes "Alright, I will be taking my";
+ mes "199,800 zeny service charge now.";
+ next;
+ mes "[Rui Vishop]";
+ mes "If you don't wish to do";
+ mes "this right now, though I can't";
+ mes "imagine why, you may ask that";
+ mes "stupid hair dresser to";
+ mes "do her clumsy work on you...";
+ next;
+ if(select("No, please do my hair.:Umm, I changed my mind.") ==1 ) {
+ mes "[Rui Vishop]";
+ mes "O~k~a~y!";
+ mes "Now, let us begin~!";
+ next;
+ mes "[Rui Vishop]";
+ mes "Wooooo~oooohhhh!! Toohhhhh~oooohhhh!!";
+ next;
+ mes "[Rui Vishop]";
+ mes "Woooooo~aaaaaaahhhhh!!";
+ next;
+ mes "[Rui Vishop]";
+ mes "Voila!";
+ next;
+ mes "[Rui Vishop]";
+ mes "Oh, great~ it's awesome!";
+ mes "Another Vishop masterpiece~";
+ mes "Once more I've outdone myself.";
+ mes "It's such a unique and talented";
+ mes "style! Yes, I am the best! Wooohahahahahaha!";
+ set Zeny,Zeny-199800;
+ setlook 1,rand(1,19);
+ setlook 6,rand(1,8);
+ close;
+ }
+ mes "[Rui Vishop]";
+ mes "Bah! Alright! It's your decision.";
+ mes "But don't blame me later!";
+ mes "One day you'll wake up, realize";
+ mes "you're ugly and regret not";
+ mes "having my genius shape every lock";
+ mes "of hair on your head.";
+ close;
+ case 3:
+ mes "[Rui Vishop]";
+ mes "What? What a shame!";
+ mes "Will you let that...that";
+ mes "charlatan of a hair dresser ruin";
+ mes "your hairstyle!? I'm sure the";
+ mes "heavens are crying tears of";
+ mes "pity at mankind's ignorance...";
+ close;
+ }
+}
+
+
+// Lighthalzen
+lhz_in02,100,143,3 script Hair Dresser#li 122,{
+ mes "[Prince Shammi]";
+ mes "Welcome to Prince Shammi's";
+ mes "Beauty Shop, the place to go";
+ mes "for faaabulous hair. Don't be";
+ mes "shy, tell me exactly how you";
+ mes "want me to make you glamorous~";
+ next;
+ switch(select("Check all hairstyles:Change hairstyle:Cancel")) {
+ case 1:
+ mes "[Prince Shammi]";
+ mes "Oh, would you like to";
+ mes "see all of the trendy new";
+ mes "hairstyles I offer?";
+ next;
+ mes "[Prince Shammi]";
+ mes "Please, oh please, choose from the following styles and I will show you a preview.";
+ next;
+ switch(select("Old Hairstyles:New Hairstyles")) {
+ case 1:
+ if (Sex == 1) {
+ switch(select("Petite Style:Executioner Style:Prince Style:Deviace Style:Cancel")) {
+ case 1:
+ cutin "hair_m_20",4;
+ mes "[Prince Shammi]";
+ mes "This is the ^3131FFPetite Style^000000,";
+ mes "which softens the gentleman's";
+ mes "appearance with long braids";
+ mes "for a fluffier appearance.";
+ break;
+ case 2:
+ cutin "hair_m_21",4;
+ mes "[Prince Shammi]";
+ mes "Oh, the ^3131FFExecutioner Style^000000!";
+ mes "It's a rugged, shaggy style";
+ mes "for that tough guy look that's";
+ mes "becoming popular these days.";
+ mes "And every girl loves a tough";
+ mes "guy, right? ^333333*Tee hee~*^000000";
+ break;
+ case 3:
+ cutin "hair_m_22",4;
+ mes "[Prince Shammi]";
+ mes "You certainly have an";
+ mes "eye for fashion! Yes, this";
+ mes "is the ^3131FFPrince Style^000000, the";
+ mes "pinnacle of sexiness and";
+ mes "sophistication. Magnifique, no?";
+ mes "Yes, choose this one, this one!";
+ break;
+ case 4:
+ cutin "hair_m_23",4;
+ mes "[Prince Shammi]";
+ mes "A-ha~! The ^3131FFDeviace Style^000000!";
+ mes "This is much like the Prince";
+ mes "Style, but with shorter hair";
+ mes "in the back. Yes, this look";
+ mes "is very neat and dandy.";
+ break;
+ case 5:
+ cutin "hair_f_01",255;
+ mes "[Prince Shammi]";
+ mes "No? You didn't want";
+ mes "to take a look? Please,";
+ mes "you're an adventurer, I know";
+ mes "you can be more daring than";
+ mes "that! Be fashionably adventurous, you fashionable adventurer~";
+ emotion e_lv,"Hair Dresser#i";
+ close;
+ }
+ }
+ else {
+ switch(select("Spring Rabbit Style:Harpy Style:Medusa Style:Isis Style:Cancel")) {
+ case 1:
+ cutin "hair_f_20",4;
+ mes "[Prince Shammi]";
+ mes "Oh yes, this is the ";
+ mes "^3131FFSpring Rabbit Style^000000.";
+ mes "The bobbing forelock";
+ mes "adds an aura of chic,";
+ mes "cutsiness and playfulness.";
+ mes "Yes? No? Yes? No? Oh yes!";
+ break;
+ case 2:
+ cutin "hair_f_21",4;
+ mes "[Prince Shammi]";
+ mes "Ooh, are you interested";
+ mes "in the ^3131FFHarpy Style^000000? The";
+ mes "natural curl coupled with";
+ mes "the pony tail results in";
+ mes "a sophisticated, yet very";
+ mes "natural and relaxed look~";
+ break;
+ case 3:
+ cutin "hair_f_22",4;
+ mes "[Prince Shammi]";
+ mes "Ahh, the ^3131FFMedusa Style^000000~";
+ mes "These boldy flowing locks";
+ mes "scream power and dominance";
+ mes "and is ideal for the big career";
+ mes "woman who wishes to be...";
+ mes "irresistable to men~";
+ break;
+ case 4:
+ cutin "hair_f_23",4;
+ mes "[Prince Shammi]";
+ mes "Ooh, the ^3131FFIsis Style^000000~";
+ mes "Yes, you'll look very cute";
+ mes "with your hair in buns on";
+ mes "on both sides of your head.";
+ mes "It'll be very darling on you!";
+ break;
+ case 5:
+ mes "[Prince Shammi]";
+ mes "No? You didn't want";
+ mes "to take a look? Please,";
+ mes "you're an adventurer, I know";
+ mes "you can be more daring than";
+ mes "that! Be fashionably adventurous, you fashionable adventurer~";
+ emotion e_lv,"Hair Dresser#li";
+ close;
+ }
+ }
+ break;
+ case 2:
+ if (Sex == 1) {
+ switch(select("Emergency Heal Perm:Aura Blade Cut:Power Swing:Renovatio Cut:Cancel")) {
+ case 1:
+ cutin "hair_m_24",4;
+ mes "[Prince Shammi]";
+ mes "This is the ^3131FFEmergency Heal Perm^000000";
+ mes "It is quite popular among the healing class.";
+ break;
+ case 2:
+ cutin "hair_m_25",4;
+ mes "[Prince Shammi]";
+ mes "You must be after a lady yes?";
+ mes "The ^3131FFAura Blade Cut^000000";
+ mes "is known to make the ladies swoon, you tiger you!";
+ break;
+ case 3:
+ cutin "hair_m_26",4;
+ mes "[Prince Shammi]";
+ mes "Oh you brute!";
+ mes "^3131FFPower Swing Cut^000000";
+ mes "Flex your style muscles with this hairstyle. This is definitely your look.";
+ break;
+ case 4:
+ cutin "hair_m_27",4;
+ mes "[Prince Shammi]";
+ mes "Ah! I see you're only interested in the latest trends.";
+ mes "Straight from the runway is the ^3131FFRenovatio Cut^000000.";
+ break;
+ case 5:
+ mes "[Prince Shammi]";
+ mes "No? You didn't want";
+ mes "to take a look? Please,";
+ mes "you're an adventurer, I know";
+ mes "you can be more daring than";
+ mes "that! Be fashionably adventurous, you fashionable adventurer~";
+ emotion e_lv,"Hair Dresser#li";
+ close;
+ }
+ }
+ else {
+ switch(select("Assumptio Perm:Soul Changer Cut:X Tornado Cut:Oratio Cut:Cancel")) {
+ case 1:
+ cutin "hair_f_24",4;
+ mes "[Prince Shammi]";
+ mes "This is the ^3131FFAssumptio Perm^000000";
+ mes "It's a shorter style perm that allows for maximum spellcasting.";
+ break;
+ case 2:
+ cutin "hair_f_25",4;
+ mes "[Prince Shammi]";
+ mes "You must be a man killer no?";
+ mes "The ^3131FFSoul Changer Cut^000000";
+ mes "will make any man open his wall... er heart to you!";
+ break;
+ case 3:
+ cutin "hair_f_26",4;
+ mes "[Prince Shammi]";
+ mes "This is a bit of a trendy style";
+ mes "^3131FFX Tornado Cut^000000";
+ mes "It's for adventurous people who like change.";
+ break;
+ case 4:
+ cutin "hair_f_27",4;
+ mes "[Prince Shammi]";
+ mes "Ah! I see you're only interested in the latest trends.";
+ mes "Straight from the runway is the ^3131FFOratio Cut^000000.";
+ mes "You'll be the envy of all of your friends with this hairstyle.";
+ break;
+ case 5:
+ mes "[Prince Shammi]";
+ mes "No? You didn't want";
+ mes "to take a look? Please,";
+ mes "you're an adventurer, I know";
+ mes "you can be more daring than";
+ mes "that! Be fashionably adventurous, you fashionable adventurer~";
+ emotion e_lv,"Hair Dresser#li";
+ close;
+ }
+ }
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 2:
+ if (BaseLevel < 60) {
+ mes "[Prince Shammi]";
+ mes "Oh, I'm so sorry, but";
+ mes "I can only perform my";
+ mes "services for clients that have";
+ mes "matured enough to find their";
+ mes "true inner beauty. But please";
+ mes "come back once you do, okay?";
+ close;
+ }
+ else if ((countitem(973) < 3) || (countitem(974) < 3) || (countitem(901) < 100) || (countitem(1094) < 100) || (countitem(1020) < 100) || (countitem(1060) < 100) || (countitem(7152) < 100) || (Zeny < 99800)) {
+ mes "[Prince Shammi]";
+ mes "If you've already decided";
+ mes "what hairstyle you'd like,";
+ mes "please have my service charge";
+ mes "ready, as well as the materials";
+ mes "I will need in performing this";
+ mes "service, okay? Please bring...";
+ next;
+ mes "[Prince Shammi]";
+ mes "^3355FF3 Counteragent^000000,";
+ mes "^3355FF3 Mixture^000000,";
+ mes "^3355FF100 Daenggie^000000,";
+ mes "^3355FF100 Short Daenggie^000000...";
+ next;
+ mes "[Prince Shammi]";
+ mes "^3355FF100 Black Hair^000000,";
+ mes "^3355FF100 Golden Hair^000000,";
+ mes "^3355FF100 Glossy Hair^000000";
+ mes "and ^3355FF99,800 zeny^000000.";
+ mes "Once you do that, I'll make";
+ mes "a miracle out of your hair!";
+ close;
+ }
+ mes "[Prince Shammi]";
+ mes "Alright, please choose";
+ mes "which hairstyle you wish";
+ mes "to have from numbers 20 to 25.";
+ mes "Here's a list of the style names just in case you need them~";
+ next;
+ mes "[Prince Shammi]";
+ if (Sex == 1) {
+ mes "No. 20: Petite Style";
+ mes "No. 21: Executioner Style";
+ mes "No. 22: Prince Style";
+ mes "No. 23: Deviace Style";
+ mes "No. 24: Emergency Heal Perm";
+ mes "No. 25: Aura Blade Cut";
+ mes "No. 26: Power Swing and";
+ mes "No. 27: Renovatio Cut.";
+ }
+ else {
+ mes "No. 20: Spring Rabbit Style";
+ mes "No. 21: Harpy Style";
+ mes "No. 22: Medusa Style";
+ mes "No. 23: Isis Style";
+ mes "No. 24: Assumptio Perm";
+ mes "No. 25: Soul Changer Cut";
+ mes "No. 26: X Tornado Cut and";
+ mes "No. 27: Oratio Cut.";
+ }
+ next;
+ input .@input;
+ if (.@input == 0) {
+ mes "[Prince Shammi]";
+ mes "Oh...?";
+ mes "You decided to cancel?";
+ mes "Well, you know what's";
+ mes "best for you, I suppose.";
+ mes "Still, I'm so disappointed~";
+ close;
+ }
+ else if ((.@input < 20) || (.@input > 27)) {
+ mes "[Prince Shammi]";
+ mes "Dearie, please enter";
+ mes "a number from ''20'' to";
+ mes "''25,'' alright? Then I can";
+ mes "get right to work at making";
+ mes "you soooooooo beautiful!";
+ close;
+ }
+ else if (getlook(VAR_HEAD) == .@input) {
+ mes "[Prince Shammi]";
+ mes "Oh dear me, you're not";
+ mes "going to waste money for";
+ mes "the same hairstyle that you";
+ mes "have now, are you? You can";
+ mes "have someone else change";
+ mes "your hair color, you know.";
+ close;
+ }
+ else {
+ if (Sex == 1)
+ cutin "hair_m_"+.@input+".BMP",4;
+ else
+ cutin "hair_f_"+.@input+".BMP",4;
+ mes "[Prince Shammi]";
+ mes "Oooh! Now, is this the";
+ mes "hairstyle that you wanted?";
+ mes "This is No. "+.@input+", by the way.";
+ next;
+ switch(select("Yes.:No.")) {
+ case 1:
+ if (getlook(VAR_HEADPALETTE) == 0) {
+ mes "[Prince Shammi]";
+ mes "Oh, Sweet Christmas,";
+ mes "I almost forgot! Would";
+ mes "you like me to dye your";
+ mes "hair, free of charge? It's";
+ mes "a part of my service, so";
+ mes "please choose a color~";
+ next;
+ switch(select("Red:Yellow:Purple:Orange:Green:Blue:White:Dark Brown")) {
+ case 1:
+ set .@headpalette,8;
+ break;
+ case 2:
+ set .@headpalette,1;
+ break;
+ case 3:
+ set .@headpalette,2;
+ break;
+ case 4:
+ set .@headpalette,3;
+ break;
+ case 5:
+ set .@headpalette,4;
+ break;
+ case 6:
+ set .@headpalette,5;
+ break;
+ case 7:
+ set .@headpalette,6;
+ break;
+ case 8:
+ set .@headpalette,7;
+ break;
+ }
+ }
+ mes "[Prince Shammi]";
+ mes "Okay, let's get";
+ mes "started, shall we?";
+ mes "Keep your head still,";
+ mes "now. Yes, that's good...";
+ next;
+ mes "^3355FF*Snip snip*";
+ mes "*Rustle rustle*";
+ mes "*Clip clip clip clip*";
+ mes "*Bzzzzzzzzzzzzzzzzzzzz*^000000";
+ next;
+ set zeny,zeny-99800;
+ delitem 973,3; //Counteragent
+ delitem 974,3; //Mixture
+ delitem 901,100; //Danggie
+ delitem 1094,100; //Short_Daenggie
+ delitem 1020,100; //Long_Hair
+ delitem 1060,100; //Golden_Hair
+ delitem 7152,100; //Glossy_Hair
+ setlook VAR_HEAD,.@input;
+ setlook VAR_HEADPALETTE,.@headpalette;
+ mes "[Prince Shammi]";
+ mes "Well, we're all finished!";
+ mes "And my, oh my, you look even";
+ mes "more fabulous that I thought";
+ mes "you would! Oh, I can't believe";
+ if (Sex == 1) {
+ mes "how tough and elegant you are~";
+ mes "So ruggedly manly and handsome!";
+ }
+ else {
+ mes "how graceful and elegant you";
+ mes "look! Absolutely gorgeous!";
+ }
+ emotion e_kis,"Hair Dresser#li";
+ next;
+ mes "[Prince Shammi]";
+ mes "You love your new";
+ mes "hair, don't you? Feel";
+ mes "free to come back anytime.";
+ mes "I'll make you the best looking";
+ mes "person in the entire world!";
+ emotion e_no1,"Hair Dresser#li";
+ close;
+ case 2:
+ mes "[Prince Shammi]";
+ mes "Oh, did you forget which";
+ mes "hairstyle goes with which";
+ mes "number? By all means, please";
+ mes "check again! Find the one that";
+ mes "is perfect just for you, okay?";
+ close;
+ }
+ }
+ break;
+ case 3:
+ mes "[Prince Shammi]";
+ mes "Humm ? ";
+ mes "Maybe you don't understand";
+ mes "my futuristic styles.";
+ mes "Goodbye! ";
+ close;
+ }
+}
+
+lhz_in02,91,155,5 script Assistant Beautician#li 862,{
+ mes "[Assistant Beautician]";
+ mes "Wah?! Sweet Jiminy,";
+ mes "you freaked me out!";
+ mes "What are you doing?!";
+ emotion e_omg,"Assistant Beautician#li";
+ next;
+ mes "[Assistant Beautician]";
+ mes "Oh! Um, a customer!";
+ mes "H-h-h-h-h-hello! Can";
+ mes "I help you with anything?";
+ next;
+ switch(select("What do you do?:Please change my hairstyle.:Who is Prince Shammi?")) {
+ case 1:
+ mes "[Assistant Beautician]";
+ mes "Oh! Me...? I'm";
+ mes "just an assistant";
+ mes "beautician, but I'm";
+ mes "training hard everyday";
+ mes "so that I can become";
+ mes "a real professional!";
+ next;
+ mes "[Assistant Beautician]";
+ mes "Yeah, I do all sorts of";
+ mes "grunt work for the boss while";
+ mes "I'm in training. Sometimes, he";
+ mes "makes me work pretty hard.";
+ mes "In fact, I better get back to work before he gets angry at me!";
+ close;
+ case 2:
+ if (BaseLevel < 60) {
+ mes "[Assistant Beautician]";
+ mes "Me...? Oh no,";
+ mes "no I can't! I mean,";
+ mes "I'd love to but, I'm";
+ mes "still in training and";
+ mes "I can't take responsibility";
+ mes "if I mess up on a little kid!";
+ close;
+ }
+ else if ((Zeny < 250000)) {
+ mes "[Assistant Beautician]";
+ mes "Well... I'm just an";
+ mes "assistant, but I have been";
+ mes "studying hairstyling after";
+ mes "work. If you want, just bring";
+ mes "me 250,000 zeny and I'll try";
+ mes "my best to change your hair~";
+ next;
+ mes "[Assistant Beautician]";
+ mes "I'd appreciate it if you'd";
+ mes "give me this chance! The";
+ mes "boss doesn't think I'm ready";
+ mes "for styling real people yet, so";
+ mes "I haven't had much practice!";
+ next;
+ mes "[Assistant Beautician]";
+ mes "I just know I could";
+ mes "do a good job on your";
+ mes "hair! Just... Just please";
+ mes "understand if I mess up.";
+ mes "It won't be too bad, I promise~";
+ close;
+ }
+ else {
+ mes "[Assistant Beautician]";
+ mes "You're really going to";
+ mes "give me a chance to practice?";
+ mes "Oh, I love you so much! Okay,";
+ mes "I'll need 250,000 zeny to make";
+ mes "up for the material expenses.";
+ mes "Is that okay with you?";
+ next;
+ switch(select("Of course~:On second thought...")) {
+ case 1:
+ mes "[Assistant Beautician]";
+ mes "Great! Now, please";
+ mes "choose a hairstyle";
+ mes "from ''1'' to ''23.''";
+ mes "Um, if you need to";
+ mes "cancel, just enter ''0.''";
+ next;
+ input .@input;
+ if (.@input == 0) {
+ mes "[Assistant Beautician]";
+ mes "Awwww...";
+ mes "I guess you don't";
+ mes "trust me after all...";
+ close;
+ }
+ else if ((.@input < 1) || (.@input > 23)) {
+ mes "[Assistant Beautician]";
+ mes "Huh? I thought I asked";
+ mes "you to enter a number from";
+ mes "''1'' to ''23?'' What did I do";
+ mes "wrong this time? Hmmm...";
+ close;
+ }
+ else {
+ mes "[Assistant Beautician]";
+ mes "So this is the";
+ mes "style you want me";
+ mes "to try to do for you?";
+ if (Sex == 1) {
+ if (.@input < 10)
+ cutin "hair_m_0"+.@input+".BMP",4;
+ else
+ cutin "hair_m_"+.@input+".BMP",4;
+ }
+ else {
+ if (.@input < 10)
+ cutin "hair_f_0"+.@input+".BMP",4;
+ else
+ cutin "hair_f_"+.@input+".BMP",4;
+ }
+ next;
+ switch(select("Yes, let's try it~:Cancel.")) {
+ case 1:
+ break;
+ case 2:
+ mes "[Assistant Beautician]";
+ mes "Oooh, there must";
+ mes "be some style that";
+ mes "you like, right? Hmmm...";
+ close;
+ }
+ }
+ mes "[Assistant Beautician]";
+ mes "Great, you finally";
+ mes "picked one! What, which";
+ mes "one did you pick again?";
+ mes "Ah, I found it, I found it!";
+ mes "Haha! No problem here!";
+ mes "Now it's time to style!";
+ next;
+ nude;
+ mes "[Assistant Beautician]";
+ mes "Bwwwwaaaahhhh!";
+ next;
+ mes "[Assistant Beautician]";
+ mes "Yap! Pwwwaaattt!";
+ next;
+ mes "[Assistant Beautician]";
+ mes "Waaaah!";
+ mes "Oh crap!";
+ mes "Wait, I can...";
+ mes "I can fix this!";
+ next;
+ set .@style_r,rand(1,23);
+ set .@color_r,rand(1,8);
+ mes "[Assistant Beautician]";
+ mes "^333333*Pant Pant Pant*^000000";
+ next;
+ set zeny,zeny-250000;
+ setlook VAR_HEAD,.@style_r;
+ setlook VAR_HEADPALETTE,.@color_r;
+ mes "[Assistant Beautician]";
+ mes "Bwahahaha! Success!";
+ if (.@input == .@style_r) {
+ mes "So... How do you like";
+ mes "your new style? I love it!";
+ }
+ else {
+ mes "Wha...? This isn't what";
+ mes "you wanted? Uh oh... Um...";
+ mes "Well, next time I know I can";
+ mes "do a much better job! Right!";
+ }
+ next;
+ mes "[Assistant Beautician]";
+ mes "Oh, you're such a";
+ mes "sweetheart for helping";
+ mes "me! Thank you for using";
+ mes "my service and come again~";
+ emotion e_kis,"Assistant Beautician#li";
+ close;
+ case 2:
+ mes "[Assistant Beautician]";
+ mes "Huh? Oh no, you're";
+ mes "quitting? Well, I guess";
+ mes "I couldn't trust me to";
+ mes "style my hair either...";
+ mes "You're... You're right.";
+ close;
+ }
+ }
+ case 3:
+ mes "[Assistant Beautician]";
+ mes "Prince Shammi?";
+ mes "He's only a genius when";
+ mes "it comes to hairstyling!";
+ mes "I'm just his apprentice, but";
+ mes "maybe someday, I can be a";
+ mes "force in the fashion world too!";
+ close;
+ }
+}
+
+//===== Old Changelog: =================================
+//= 07/06/05 : Added 1st Version. [Muad_Dib]
+//= Converted to rAthena format by Dr.Evil Fixed typos [Nexon]
+//= 1.1 Removed Duplicates [Silent]
+//============================================================
diff --git a/npc/pre-re/merchants/icecream.txt b/npc/pre-re/merchants/icecream.txt
new file mode 100644
index 000000000..d04dbe08e
--- /dev/null
+++ b/npc/pre-re/merchants/icecream.txt
@@ -0,0 +1,86 @@
+//===== rAthena Script =======================================
+//= Ice Cream Maker
+//===== By: ==================================================
+//= KOOK SWU, Kisuka
+//===== Current Version: =====================================
+//= 1.5
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= A man makes you ice-cream
+//===== Additional Comments: =================================
+//= 1.1 Optimized, changed overlapping coords in Alberta [Lupus]
+//= 1.2 According to the patch, IceCream seller has been removed from Morocc [Lupus]
+//= 1.3 No more label menu and updated to match AEGIS script. [Kisuka]
+//= 1.4 Duplicates now spawn from floating NPCs. [L0ne_W0lf]
+//= 1.5 Fixed small checkweight issue. [Kisuka]
+//============================================================
+
+- script Ice Cream Maker::IceCreamer -1,{
+ mes "[Ice Cream Maker]";
+ mes "Fresh Ice Cream made with snow from Lutie!";
+ mes "Enjoy it now, it won't be on sale for long!";
+ mes "^3355FF100 Zeny^000000 Ice Cream,";
+ mes "Ice Cream!";
+ next;
+ if(select("Gimme Ice Cream!:Cancel Trade") == 2) {
+ mes "Are you sure you don't want any?";
+ mes "I won't be selling it for long,";
+ mes "and once I run out,";
+ mes "there won't be any more!!!";
+ close;
+ }
+ mes "[Ice Cream Maker]";
+ mes "Fresh Ice Cream made with snow from Lutie!";
+ mes "Everyone wants our delicious ice cream, ";
+ mes "but we have a limited amount,";
+ mes "so you can only purchase 5 at a time!!";
+ next;
+ while(1) {
+ input .@input;
+ if(.@input < 1) {
+ mes "[Ice Cream Maker]";
+ mes "If you don't want to buy any,";
+ mes "could you please let the next customer";
+ mes "make a purchase?";
+ mes "Thank you.";
+ close;
+ }
+ if(.@input > 5) {
+ mes "[Ice Cream Maker]";
+ mes "Ouch";
+ mes "You expect too much.";
+ mes "Dear customer,";
+ mes "If you eat more than 5 Ice creams,";
+ mes "If you might haveto make a lot of trips";
+ mes "to the bathroom tonight.";
+ next;
+ }
+ }
+ if(Zeny<.@input*100) {
+ mes "[Ice Cream Maker]";
+ mes "Dear customer, your wallet seems to be light.";
+ mes "Price is ^3355FF100 Zeny^000000 per ice cream.";
+ close;
+ }
+ if(checkweight(536,.@input) == 0) {
+ mes "[Ice Cream Maker]";
+ mes "Dear customer,you look like you're carrying a lot.";
+ mes "Ice Cream is fine,";
+ mes "but you must consider your weight";
+ mes "before making a purchase.";
+ close;
+ }
+ set Zeny,Zeny-100*.@input;
+ getitem 536,.@input; // Ice_Cream
+ close;
+}
+
+// Alberta
+alberta,120,45,2 duplicate(IceCreamer) Ice Cream Maker#1 85
+
+// Morroc Field
+moc_fild16,88,304,4 duplicate(IceCreamer) Ice Cream Maker#2 85
+
+// Morroc
+//morocc,160,144,4 duplicate(IceCreamer) Ice Cream Maker#3 85
diff --git a/npc/pre-re/merchants/inn.txt b/npc/pre-re/merchants/inn.txt
new file mode 100644
index 000000000..8c366d783
--- /dev/null
+++ b/npc/pre-re/merchants/inn.txt
@@ -0,0 +1,279 @@
+//===== rAthena Script =======================================
+//= Inn Npcs
+//===== By: ==================================================
+//= Darkchild (1.1)
+//= Playtester (1.2)
+//===== Current Version: =====================================
+//= 3.0a
+//===== Compatible With: =====================================
+//= rAthena 1.0+
+//===== Description: =========================================
+//= Inn Npcs, Save and Heal
+//============================================================
+//= variables:
+//= arg0 - name of npc
+//= arg1 - name of the inn
+//= arg2 - map to save at
+//= arg3, arg4 - x and y cord. to save at
+//= @cost - cost of renting a room
+//===== Additional Comments: =================================
+//= 1.1 Blind Effect By Kobra_k88 (Taken from his old script)
+//= I added it to all of them though [Darkchild]
+//= 1.1a Minor bug fixes and optimizations. Switched from @variables
+//= to arguments.[kobra_k88]
+//= 1.2 Rewrote inn script [Playtester]
+//= 1.3 Added (finally) Rachel Inn Maid. Official warp
+//= and save points[erKURITA]
+//= 1.4 Added Hugel inn [erKurita]
+//= 1.5 Added "end;" after warping the player. [L0ne_W0lf]
+//= - Small corrections to the prontera Inns.
+//= - Removed the Cancel dialog.
+//= 1.6 More fixes, changed progression of "Rest"ing.
+//= - Corrected Morroc NPCs. [L0ne_W0lf]
+//= 1.7 Corrected Payon NPC. [L0ne_W0lf]
+//= 1.8 Corrected Geffen NPC. [L0ne_W0lf]
+//= 1.9 Added the Inn for Al De baran. [L0ne_W0lf]
+//= 2.0 Added Inn for the Town of Veins. [L0ne_W0lf]
+//= 2.1 Corrected NPC names to fall within proper restrictions. [L0ne_W0lf]
+//= 2.1a Corrected a little Typo error. (bugreport:536 & 537) [Samuray22]
+//= 2.2 Small update to Vein's Inn Master. [L0ne_W0lf]
+//= 2.3 Added Lighthalzen Inn from Lighthalzen town file. [L0ne_W0lf]
+//= 2.4 Fixed Inn Employee#Ahlma warping to same destination as save point, bugreport: 191.
+//= 2.5 Added Moskovia Gostinitsa (Inn) from jA
+//= 2.6 Updated Alberta inn to official. [L0ne_W0lf]
+//= 2.7 Removed Morroc Inns as per episode 12.1. [L0ne_W0lf]
+//= 2.8 Removed Moscovia Inn; Its in quests/quest_moscovia.txt [Kisuka]
+//= 2.9 Added switch menus, updated to match AEGIS scripts. [Kisuka]
+//= 3.0 Added Brasilis inn receptionist. [L0ne_W0lf]
+//= 3.0a Updated dialog for Brasilis inn. [L0ne_W0lf]
+//============================================================
+
+
+//======================== Prontera ===================================
+// West Side Inn -------------------
+prt_in,244,135,2 script Inn Employee#Sammy 53,{
+
+ callfunc "F_InnMaid","[Employee Sammy]","Nenkaras","prt_in",238,130;
+ warp "prt_in",247,104; end;
+}
+// East Side Inn ------------------
+prt_in,61,141,2 script Inn Employee#Ahlma 53,{
+
+ callfunc "F_InnMaid","[Employee Ahlma]","Nenkaras","prt_in",64,136;
+ warp "prt_in",60,166; end;
+}
+
+//======================== Alberta ====================================
+alberta_in,32,142,3 script Inn Employee#Jennie 53,{
+
+ callfunc "F_InnMaid","[Employee Jennie]","'Fisherman Inn'!","alberta_in",26,142;
+ warp "alberta_in",18,188; end;
+}
+
+//====================== Geffen ======================================
+geffen_in,70,64,5 script Inn Employee#Cena 53,{
+
+ callfunc "F_InnMaid","[Employee Cena]","'Ifrit,' the only Inn in the city of Geffen.","geffen_in",70,59;
+ warp "geffen_in",31,31; end;
+}
+
+//======================= Payon ======================================
+payon_in01,132,62,5 script Inn Employee#Ahee 53,{
+
+ callfunc "F_InnMaid","[Employee Ahee]","Payon Inn","payon_in01",136,61;
+ warp "payon_in01",132,11; end;
+}
+
+//======================== Morocc ====================================
+// North East --------------------------
+/*
+morocc_in,147,141,3 script Inn Employee#Hasna 53,{
+
+ callfunc "F_InnMaid","[Employee Hasna]","Morroc Inn","morocc_in",142,140;
+ warp "morocc_in",173,135; end;
+}
+// South --------------------------------
+morocc_in,80,100,5 script Inn Employee#Manar 53,{
+
+ callfunc "F_InnMaid","[Employee Manar]","Morroc Inn","morocc_in",78,95;
+ warp "morocc_in",79,123; end;
+}
+*/
+
+//====================== Aldebaran ===================================
+aldeba_in,92,58,5 script Inn Maid#Rilim 53,{
+
+ callfunc "F_InnMaid","[Rilim]","Al De Baran Inn","aldeba_in",92,50;
+ warp "aldeba_in",92,112; end;
+}
+
+//======================== Rachel ====================================
+ra_in01,376,69,4 script Inn Keeper#Annie 931,{
+
+ callfunc "F_InnMaid","[Annie]","Rachel Inn","ra_in01",375,58;
+ warp "ra_in01",384,128; end;
+}
+
+//====================== Lighthalzen =================================
+lhz_in02,230,284,4 script Hotel Employee#01 86,{
+ mes "[Hotel Employee]";
+ mes "Welcome to";
+ mes "the Royal Dragon,";
+ mes "where you can find the";
+ mes "finest accomodations";
+ mes "and the best service.";
+ next;
+ switch(select("Save Point:Rest - 5,000 zeny:Cancel")) {
+ case 1:
+ savepoint "lhz_in02",209,275;
+ mes "[Hotel Employee]";
+ mes "Thank you, your";
+ mes "Respawn Point has";
+ mes "been saved here in";
+ mes "the Royal Dragon.";
+ close;
+ case 2:
+ if(Zeny < 5000) {
+ mes "[Hotel Employee]";
+ mes "I'm sorry, but";
+ mes "you need 5,000 zeny";
+ mes "in order to check in.";
+ close;
+ }
+ set Zeny,Zeny - 5000;
+ mes "[Hotel Employee]";
+ mes "Thank you~";
+ mes "I hope you enjoy";
+ mes "your stay in the";
+ mes "Royal Dragon.";
+ close2;
+ warp "lhz_in02",219,150;
+ percentheal 100,100;
+ sc_start SC_BLESSING,240000,10;
+ skilleffect AL_BLESSING,0;
+ end;
+ case 3:
+ mes "[Hotel Employee]";
+ mes "Thank you and";
+ mes "have a nice day.";
+ close;
+ }
+}
+
+//======================== Hugel ====================================
+hu_in01,246,107,3 script Inn Maid#Receptionist 53,{
+
+ callfunc "F_InnMaid","[Receptionist]","Hugel Inn","hu_in01",263,95;
+ warp "hu_in01",267,5; end;
+}
+
+//======================== Veins ====================================
+ve_in,157,219,5 script Inn Master#Receptionist 709,{
+ mes "[Inn Master]";
+ mes "Good day~";
+ mes "Welcome to the";
+ mes "most comfortable";
+ mes "inn here in Veins~";
+ next;
+ switch(select("Save:Take a Rest -> 5000 zeny:Quit")) {
+ case 1:
+ mes "[Inn Master]";
+ mes "Your Respawn Point";
+ mes "has been saved in Veins.";
+ mes "Enjoy your stay in town~";
+ savepoint "ve_in",157,209;
+ close;
+ case 2:
+ mes "[Inn Master]";
+ if(Zeny < 5000){
+ mes "I'm sorry, but I don't";
+ mes "think you have enough";
+ mes "money to check in. The";
+ mes "service charge is 5,000 zeny.";
+ close;
+ }
+ mes "Enjoy your stay~";
+ close2;
+ set Zeny,Zeny - 5000;
+ percentheal 100,100;
+ warp "ve_in",184,228;
+ end;
+ case 3:
+ mes "[Inn Master]";
+ mes "Please come again.";
+ close;
+ }
+}
+
+//======================== Brasilis =================================
+bra_in01,27,24,3 script Hotel Keeper#bra1 478,{
+ mes "[Hotel Keeper]";
+ mes "Welcome to the beautiful Brasilis Hotel.";
+ next;
+ switch(select("Save:Rest -5000 zeny")) {
+ case 1:
+ mes "[Hotel Keeper]";
+ mes "Do you want to save here at the Brasilis Hotel?";
+ next;
+ switch(select("No thank you.:Absolutely.")) {
+ case 1:
+ mes "[Hotel Keeper]";
+ mes "Ok then, enjoy your stay.";
+ close;
+ case 2:
+ mes "[Hotel Keeper]";
+ mes "Your respawn has been saved here at the hotel. I hope that you enjoy your stay here in Brasilis.";
+ savepoint "bra_in01",144,69;
+ close;
+ }
+ case 2:
+ if (Zeny > 4999) {
+ mes "[Hotel Keeper]";
+ mes "I will show you a great room.";
+ close2;
+ set zeny,zeny-5000;
+ percentheal 100,100;
+ warp "bra_in01",144,69;
+ end;
+ }
+ else {
+ mes "[Hotel Keeper]";
+ mes "I'm sorry, but the service charge is 5,000 zeny per night.";
+ close;
+ }
+ }
+}
+
+//======================= Inn Function ==============================
+function script F_InnMaid {
+ mes getarg(0);
+ mes "Welcome to";
+ mes getarg(1) + ".";
+ mes "How may I help you?";
+ next;
+ switch(select("Save:Take a Rest -> 5000 zeny:Cancel")) {
+ case 1:
+ mes getarg(0);
+ mes "Your respawn point";
+ mes "has been saved.";
+ mes "Thank you,";
+ mes "please come again.";
+ savepoint getarg(2),getarg(3),getarg(4);
+ close;
+ case 2:
+ mes getarg(0);
+ if(Zeny < 5000){
+ mes "I'm sorry, but the service charge is 5,000 zeny. Please make sure that you have enough money to check in next time, okay?";
+ close;
+ }
+ mes "Thank you.";
+ mes "I hope you";
+ mes "enjoy your rest~";
+ close2;
+ set Zeny,Zeny - 5000;
+ percentheal 100,100;
+ return;
+ case 3:
+ close;
+ }
+}
diff --git a/npc/pre-re/merchants/kunai_maker.txt b/npc/pre-re/merchants/kunai_maker.txt
new file mode 100644
index 000000000..ab630f72c
--- /dev/null
+++ b/npc/pre-re/merchants/kunai_maker.txt
@@ -0,0 +1,103 @@
+//===== rAthena Script =======================================
+//= Kunai Merchant Kashin
+//===== By: ==================================================
+//= rAthena dev team
+//===== Current Version: =====================================
+//= 1.3
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Trades a few shurikens + ninja stones for elemental kunai.
+//===== Additional Comments: =================================
+//= 1.0 Added the npc. It uses a function that sends the item
+//= id of the 2 required items plus the amount. Can trade
+//= up to 500 units (5,000 kunais) at once. [erKURITA]
+//= 1.1 Officialized script [Playtester]
+//= 1.2a Optimized/cleaned up a bit [ultramage]
+//= 1.3 Updated to match AEGIS script. [Kisuka]
+//============================================================
+
+que_ng,72,29,3 script Kunai Merchant Kashin 83,{
+ if(BaseJob == Job_Ninja) {
+ mes "[Kashin]";
+ mes "I am Kashin, distributor";
+ mes "of Kunai for Ninjas. Take";
+ mes "a look around and let me";
+ mes "know if you're interested";
+ mes "in any of my wares.";
+ next;
+ switch(select("10 Fell Poison Kunai:10 Icicle Kunai:10 High Wind Kunai:10 Black Earth Kunai:10 Heat Wave Kunai:Cancel")) {
+ case 1: callfunc "Kunai_Trade",13250,20,7524,1,13259; break;
+ case 2: callfunc "Kunai_Trade",13251,8,7522,2,13255; break;
+ case 3: callfunc "Kunai_Trade",13252,4,7523,2,13257; break;
+ case 4: callfunc "Kunai_Trade",13253,2,7524,1,13256; break;
+ case 5: callfunc "Kunai_Trade",13254,1,7521,2,13258; break;
+ case 6:
+ mes "[Kashin]";
+ mes "Well then, thank you";
+ mes "for visiting my shop.";
+ mes "Please come to me when";
+ mes "you need to buy some";
+ mes "Kunais. Goodbye for now~";
+ close;
+ }
+ }
+ mes "[Kashin]";
+ mes "I am Kashin, distributor";
+ mes "of Kunai for Ninjas. If you";
+ mes "have any friends that are";
+ mes "Ninjas, then you might";
+ mes "want to tell them about me.";
+ close;
+}
+
+function script Kunai_Trade {
+ mes "[Kashin]";
+ mes "You can exchange";
+ mes ""+getarg(1)+" "+getitemname(getarg(0))+" and";
+ mes ""+getarg(3)+" "+getitemname(getarg(2))+" for every";
+ mes "set of 10 "+getitemname(getarg(4))+".";
+ next;
+ mes "[Kashin]";
+ mes "I can only give you a maximum of 500 sets of Kunais at a time.";
+ mes "If you want to cancel the trade, then please enter ''0.'' How many";
+ mes "Kunai sets would you like?";
+ next;
+ input .@amount;
+ if(.@amount < 1 || .@amount > 500) {
+ mes "[Kashin]";
+ mes "Eh? I'm sorry, but";
+ mes "I can't give you that";
+ mes "many Kunai sets. Please";
+ mes "enter a value less than 500.";
+ close;
+ }
+ if(countitem(getarg(0)) < .@amount*getarg(1) || countitem(getarg(2)) < .@amount*getarg(3)) {
+ mes "[Kashin]";
+ mes "Hmm, you don't have";
+ mes "enough items for this";
+ mes "Kunai exchange. Please";
+ mes "check your items again.";
+ close;
+ }
+ if(checkweight(getarg(4), .@amount*10) == 0) {
+ mes "[Kashin]";
+ mes "Hmm, it seems like your";
+ mes "Inventory doesn't have";
+ mes "enough space to store";
+ mes "more items. You better";
+ mes "free up some space first.";
+ close;
+ }
+ mes "[Kashin]";
+ mes "Great, everything is in";
+ mes "order, so let's go ahead";
+ mes "and complete this trade.";
+ mes "I'm sure that you'll be";
+ mes "quite satisfied with";
+ mes "these Kunais.";
+ delitem getarg(0),getarg(1)*.@amount;
+ delitem getarg(2),getarg(3)*.@amount;
+ getitem getarg(4),10*.@amount;
+ close;
+}
diff --git a/npc/pre-re/merchants/manuk.txt b/npc/pre-re/merchants/manuk.txt
new file mode 100644
index 000000000..9500a7eb2
--- /dev/null
+++ b/npc/pre-re/merchants/manuk.txt
@@ -0,0 +1,68 @@
+//===== rAthena Script =======================================
+//= Manuk Merchant
+//===== By: ==================================================
+//= rAthena Dev Team
+//===== Current Version: =====================================
+//= 1.2
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Manuk coin redemption NPC.
+//===== Additional Comments: =================================
+//= 1.0 First version
+//= 1.1 Fixed checkweight. [Gepard]
+//= 1.2 Optimized. [Euphy]
+//============================================================
+
+man_in01,286,16,1 script Merchant of Manuk 454,{
+ mes "[Merchant of Manuk]";
+ if ((isequipped(2782) == 1) && (ep13_2_rhea == 100)) {
+ if (!checkweight(1201,1)) {
+ mes "It looks like you're carrying too many things.";
+ mes "Why not put some of your items in storage and come back?";
+ close;
+ }
+ mes "Hello.";
+ mes "What are you looking for?";
+ next;
+ setarray .@Items[2],12342,12343,12348;
+ set .@i, select("View item description:Manuk's Opportunity:Manuk's Courage:Manuk's Faith:Cancel");
+ mes "[Merchant of Manuk]";
+ if (.@i == 1) {
+ mes "Here are the item descriptions.";
+ close2;
+ ReadBook 11019,1;
+ end;
+ }
+ else if (.@i < 5) {
+ mes "I can sell you 3 "+getitemname(.@Items[.@i])+" for^3131FF 1 coin^000000.";
+ next;
+ switch(select("Purchase:Do not purchase")) {
+ case 1:
+ if (countitem(6080)) {
+ mes "[Merchant of Manuk]";
+ mes "Thank you for coming.";
+ delitem 6080,1;
+ getitem .@Items[.@i],3;
+ close;
+ }
+ else {
+ mes "[Merchant of Manuk]";
+ mes "You don't have enough coins.";
+ close;
+ }
+ case 2:
+ mes "[Merchant of Manuk]";
+ break;
+ }
+ }
+ mes "Come again if you change your mind.";
+ close;
+ }
+ else {
+ mes "Rtt od d";
+ mes "Qwo hd is d irr";
+ close;
+ }
+} \ No newline at end of file
diff --git a/npc/pre-re/merchants/milk_trader.txt b/npc/pre-re/merchants/milk_trader.txt
new file mode 100644
index 000000000..7e7da5c3f
--- /dev/null
+++ b/npc/pre-re/merchants/milk_trader.txt
@@ -0,0 +1,80 @@
+//===== rAthena Script =======================================
+//= Milk Trader
+//===== By: ==================================================
+//= kobra_k88; L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.5
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Trades bottles for milk
+//===== Additional Comments: =================================
+//= Fully working
+//= 1.1 Negative input bug fixed [Lupus]
+//= 1.2 Raised the price to close zeny exploit [Lupus]
+//= 1.2a Switched to Lupus's "loopless" technique.[kobra_k88]
+//= 1.3 Rescripted to Aegis 10.3 standards. [L0ne_W0lf]
+//= 1.4 Implemented checkweight. [L0ne_W0lf]
+//= 1.5 Fixed missed variable. (bugreport:1523) [L0ne_W0lf]
+//============================================================
+
+prontera,73,140,0 script Milk Vendor 86,{
+ if (checkweight(1201,1) == 0) {
+ mes "^3355FFJust a minute!";
+ mes "I can't offer any of my";
+ mes "services to you because";
+ mes "you're carrying too much";
+ mes "stuff. Put your extra items in";
+ mes "Kafra Storage and come again~";
+ close;
+ }
+ mes "[Milk Vendor]";
+ mes "Hey, hey...";
+ mes "If you bring me";
+ mes "1 Empty Bottle and";
+ mes "15 Zeny, I'll exchange";
+ mes "them for 1 Milk. How";
+ mes "does that sound?";
+ next;
+ if (select("Exchange all empty bottles.:Cancel") == 1) {
+ if (countitem(713) <= 0) {
+ mes "[Milk Vendor]";
+ mes "Hey...";
+ mes "You don't have";
+ mes "any Empty Bottles.";
+ mes "I can't really give you";
+ mes "this milk any other";
+ mes "way, you know...";
+ close;
+ }
+ set .@bottles,countitem(713);
+ set .@total_weight,.@bottles * 50;
+ set .@total_cost,.@bottles * 15;
+ if (zeny < .@Total_cost) {
+ mes "[Milk Vendor]";
+ mes "Oh, whoa~!";
+ mes "You don't have enough";
+ mes "zeny to exchange all";
+ mes "these Empty Bottles for";
+ mes "Milk. You need to have";
+ mes "at least " + .@total_cost + " zeny.";
+ close;
+ }
+ if ((maxweight-weight) < .@total_weight) {
+ mes "[Milk Vendor]";
+ mes "Hmm...";
+ mes "Would you make";
+ mes "a little more room";
+ mes "in your inventory";
+ mes "before I give you";
+ mes "all of this milk?";
+ close;
+ }
+ set zeny,zeny-.@total_cost;
+ delitem 713,.@bottles; //Empty Bottles
+ getitem 519,.@bottles; //Milk
+ close;
+ }
+ close;
+}
diff --git a/npc/pre-re/merchants/novice_exchange.txt b/npc/pre-re/merchants/novice_exchange.txt
new file mode 100644
index 000000000..61049f805
--- /dev/null
+++ b/npc/pre-re/merchants/novice_exchange.txt
@@ -0,0 +1,394 @@
+//===== rAthena Script =======================================
+//= Novice Goods Exchanger
+//===== By: ==================================================
+//= ???, rAthena Team
+//===== Current Version: =====================================
+//= 1.4
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis COnversion]
+//= Exchanges your Basic Monster drops for Red Potions.
+//===== Additional Comments: =================================
+//= 1.2 Rescripted to Aegis 10.standards. [L0ne_W0lf[
+//= Made it easier to add new items to exhange list
+//= meaning only the exchange is done in a function now.
+//= 1.3 Fixed dialog mix-up in function. [L0ne_W0lf]
+//= 1.4 Added checkweight, and input min/max values. [L0ne_W0lf]
+//============================================================
+
+prontera,123,102,5 script Merchant#pron 85,{
+ set .@now_weight,MaxWeight-Weight;
+ if (.@now_weight < 6301 || checkweight(1201,1) == 0) {
+ mes "[Merchant]";
+ mes "Haha!";
+ mes "What are you, superhuman?";
+ mes "You're carrying so much stuff!";
+ mes "You better put some of that";
+ mes "into Kafra Storage~";
+ close;
+ }
+ mes "[Merchant]";
+ mes "Good day!";
+ mes "Have you collected any";
+ mes "items like Shells or Fluff?";
+ mes "What about Jellopies? Oh yeah,";
+ mes "I need those for something.";
+ next;
+ mes "[Merchant]";
+ mes "Of course, I won't ask you";
+ mes "to give me that stuff for free. What about if I trade a Red Potion for 5 Shells, 10 Fluff,";
+ mes "or 10 Jellopies?";
+ next;
+ switch(select("Sure!:I think it's a rip-off!:No, thanks.")) {
+ case 1:
+ mes "[Merchant]";
+ mes "So which item do";
+ mes "you want to bring me?";
+ mes "Shells, Fluffs, or Jellopies?";
+ next;
+ switch(select("Shells:Jellopies:Fluff:Cancel")) {
+ case 1: callfunc "F_PotExchange",935,5;
+ case 2: callfunc "F_PotExchange",909,10;
+ case 3: callfunc "F_PotExchange",914,10;
+ case 4:
+ mes "[Merchant]";
+ mes "Sure~";
+ mes "No problem.";
+ close;
+ }
+ case 2:
+ mes "[Merchant]";
+ mes "A rip-off...?";
+ mes "If you check the market value";
+ mes "of the items being traded, I'm actually the one getting";
+ mes "ripped off here.";
+ close;
+ case 3:
+ mes "[Merchant]";
+ mes "Alright,";
+ mes "no problem.";
+ mes "But come back to me";
+ mes "if you change your mind.";
+ close;
+ }
+}
+
+morocc,180,259,3 script Merchant#morroc 85,{
+ set .@now_weight,MaxWeight-Weight;
+ if (.@now_weight < 6301 || checkweight(1201,1) == 0) {
+ mes "[Merchant]";
+ mes "Haha!";
+ mes "What are you, superhuman?";
+ mes "You're carrying so much stuff!";
+ mes "You better put some of that";
+ mes "into Kafra Storage~";
+ close;
+ }
+ mes "[Merchant]";
+ mes "Good day!";
+ mes "Have you collected any";
+ mes "Shells or Feathers of Bird?";
+ mes "What about Jellopies? Oh yeah,";
+ mes "I need those for something.";
+ next;
+ mes "[Merchant]";
+ mes "Of course, I won't ask you";
+ mes "to give me that stuff for free. What about if I trade a Red Potion for 5 Shells, 7 Feathers of Bird";
+ mes "or 10 Jellopies?";
+ next;
+ switch(select("Sure!:I think it's a rip-off!:No, thanks.")) {
+ case 1:
+ mes "[Merchant]";
+ mes "So which item do";
+ mes "you want to bring me?";
+ mes "Shells, Feathers of Birds,";
+ mes "or Jellopies?";
+ next;
+ switch(select("Shells:Feathers of Birds:Jellopies:Cancel")) {
+ case 1: callfunc "F_PotExchange",935,5;
+ case 2: callfunc "F_PotExchange",916,7;
+ case 3: callfunc "F_PotExchange",909,10;
+ case 4:
+ mes "[Merchant]";
+ mes "Sure~";
+ mes "No problem.";
+ close;
+ }
+ case 2:
+ mes "[Merchant]";
+ mes "A rip-off...?";
+ mes "If you check the market value";
+ mes "of the items being traded, I'm actually the one getting";
+ mes "ripped off here.";
+ close;
+ case 3:
+ mes "[Merchant]";
+ mes "Alright,";
+ mes "no problem.";
+ mes "But come back to me";
+ mes "if you change your mind.";
+ close;
+ }
+}
+
+payon,200,134,5 script Merchant#pay 85,{
+ set .@now_weight,MaxWeight-Weight;
+ if (.@now_weight < 6301 || checkweight(1201,1) == 0) {
+ mes "[Merchant]";
+ mes "Haha!";
+ mes "What are you, superhuman?";
+ mes "You're carrying so much stuff!";
+ mes "You better put some of that";
+ mes "into Kafra Storage~";
+ close;
+ }
+ mes "[Merchant]";
+ mes "Good day!";
+ mes "Have you collected";
+ mes "items like Tree Roots?";
+ mes "What about Jellopies? Oh yeah,";
+ mes "I need those for something.";
+ next;
+ mes "[Merchant]";
+ mes "Of course, I won't ask you";
+ mes "to give me that stuff for free. What about if I trade a Red Potion for 6 Tree Roots or 10 Jellopies?";
+ next;
+ switch(select("Sure!:I think it's a rip-off!:No, thanks.")) {
+ case 1:
+ mes "[Merchant]";
+ mes "So which item do";
+ mes "you want to bring me?";
+ mes "Tree Roots, or Jellopies?";
+ next;
+ switch(select("Tree Roots:Jellopies:Cancel")) {
+ case 1: callfunc "F_PotExchange",902,6;
+ case 2: callfunc "F_PotExchange",909,10;
+ case 3:
+ mes "[Merchant]";
+ mes "Sure~";
+ mes "No problem.";
+ close;
+ }
+ case 2:
+ mes "[Merchant]";
+ mes "A rip-off...?";
+ mes "If you check the market value";
+ mes "of the items being traded, I'm actually the one getting";
+ mes "ripped off here.";
+ close;
+ case 3:
+ mes "[Merchant]";
+ mes "Alright,";
+ mes "no problem.";
+ mes "But come back to me";
+ mes "if you change your mind.";
+ close;
+ }
+}
+
+aldebaran,152,63,5 script Merchant#alde 85,{
+ set .@now_weight,MaxWeight-Weight;
+ if (.@now_weight < 6301 || checkweight(1201,1) == 0) {
+ mes "[Merchant]";
+ mes "Haha!";
+ mes "What are you, superhuman?";
+ mes "You're carrying so much stuff!";
+ mes "You better put some of that";
+ mes "into Kafra Storage~";
+ close;
+ }
+ mes "[Merchant]";
+ mes "Good day!";
+ mes "Have you collected any";
+ mes "Worm Peelings or Feather of Birds?";
+ mes "How about Jellopies? Oh yeah,";
+ mes "I need those for something.";
+ next;
+ mes "[Merchant]";
+ mes "Of course, I won't ask you";
+ mes "to give me that stuff for free. What about if I trade a Red Potion for 1 Worm Peeling, 7 Feather of Birds, or 10 Jellopies?";
+ next;
+ switch(select("Sure!:I think it's a rip-off!:No, thanks.")) {
+ case 1:
+ mes "[Merchant]";
+ mes "So which item do";
+ mes "you want to bring me?";
+ mes "Feathers of Birds?";
+ mes "Worm Peelings?";
+ mes "Or Jellopies?";
+ next;
+ switch(select("Worm Peelings:Feathers of Birds:Jellopies:Cancel")) {
+ case 1: callfunc "F_PotExchange",955,1;
+ case 2: callfunc "F_PotExchange",916,7;
+ case 3: callfunc "F_PotExchange",909,10;
+ case 4:
+ mes "[Merchant]";
+ mes "Sure~";
+ mes "No problem.";
+ close;
+ }
+ case 2:
+ mes "[Merchant]";
+ mes "A rip-off...?";
+ mes "If you check the market value";
+ mes "of the items being traded, I'm actually the one getting";
+ mes "ripped off here.";
+ close;
+ case 3:
+ mes "[Merchant]";
+ mes "Alright,";
+ mes "no problem.";
+ mes "But come back to me";
+ mes "if you change your mind.";
+ close;
+ }
+}
+
+geffen,173,88,5 script Merchant#geff 85,{
+ set .@now_weight,MaxWeight-Weight;
+ if (.@now_weight < 6301 || checkweight(1201,1) == 0) {
+ mes "[Merchant]";
+ mes "Haha!";
+ mes "What are you, superhuman?";
+ mes "You're carrying so much stuff!";
+ mes "You better put some of that";
+ mes "into Kafra Storage~";
+ close;
+ }
+ mes "[Merchant]";
+ mes "Good day!";
+ mes "Have you collected any";
+ mes "items like Shells or Chrysalises?";
+ mes "What about Jellopies? Oh yeah,";
+ mes "I need those for something.";
+ next;
+ mes "[Merchant]";
+ mes "Of course, I won't ask you";
+ mes "to give me that stuff for free. What about if I trade a Red Potion for 5 Shells or 6 Chrysalises, or 10 Jellopies?";
+ next;
+ switch(select("Sure!:I think it's a rip-off!:No, thanks.")) {
+ case 1:
+ mes "[Merchant]";
+ mes "So which item do";
+ mes "you want to bring me?";
+ mes "Shells, Chrysalises, or Jellopies?";
+ next;
+ switch(select("Shells:Chrysalises:Jellopies:Cancel")) {
+ case 1: callfunc "F_PotExchange",935,5;
+ case 2: callfunc "F_PotExchange",915,6;
+ case 3: callfunc "F_PotExchange",909,10;
+ case 4:
+ mes "[Merchant]";
+ mes "Sure~";
+ mes "No problem.";
+ close;
+ }
+ case 2:
+ mes "[Merchant]";
+ mes "A rip-off...?";
+ mes "If you check the market value";
+ mes "of the items being traded, I'm actually the one getting";
+ mes "ripped off here.";
+ close;
+ case 3:
+ mes "[Merchant]";
+ mes "Alright,";
+ mes "no problem.";
+ mes "But come back to me";
+ mes "if you change your mind.";
+ close;
+ }
+}
+
+function script F_PotExchange {
+ if (countitem(getarg(0)) < getarg(1)) {
+ mes "[Merchant]";
+ mes "Hey, where are";
+ mes "all those "+getitemname(getarg(0))+"";
+ mes "that you promised?";
+ mes "Give me "+getitemname(getarg(0))+"!";
+ close;
+ }
+ else {
+ mes "[Merchant]";
+ mes "Okay, let me check";
+ mes "how many "+getitemname(getarg(0))+" you";
+ mes "have on you. Hmm...";
+ next;
+ mes "[Merchant]";
+ mes "You have";
+ mes "a total of " + countitem(getarg(0)) + " "+getitemname(getarg(0))+".";
+ mes "I can give you a total";
+ mes "of " + (countitem(getarg(0))/getarg(1)) + " Red Potions for those.";
+ next;
+ mes "[Merchant]";
+ mes "What do you say?";
+ mes "Do we have a deal?";
+ next;
+ if (select("Deal.:No deal.") == 1) {
+ mes "[Merchant]";
+ mes "You know the exact";
+ mes "number of Red Potions";
+ mes "you want to receive for";
+ mes "those "+getitemname(getarg(0))+", don't you?";
+ next;
+ mes "[Merchant]";
+ mes "Now, I can trade you";
+ mes "a minimum of 1 Red Potion";
+ mes "and a maximum of 100 Red Potions";
+ mes "at one time. If you change your";
+ mes "mind, just enter '0' to cancel.";
+ next;
+ while(1) {
+ input .@input,0,101;
+ if (.@input == 0) {
+ mes "[Merchant]";
+ mes "What...?";
+ mes "Why the hell do you";
+ mes "even bother to talk to me?";
+ mes "Pretty indecisive, aren't you?";
+ close;
+ }
+ else if (.@input > 100) {
+ mes "[Merchant]";
+ mes "I can't give you more";
+ mes "than 100 Red Potions";
+ mes "at once. Let's try";
+ mes "this again.";
+ next;
+ }
+ else {
+ break;
+ }
+ }
+ set .@put_out_item,.@input * getarg(1);
+ if (countitem(getarg(0)) < .@put_out_item) {
+ mes "[Merchant]";
+ mes "Uh oh, the number you entered doesn't seem right. You better check the number of Red Potions that you can trade for again.";
+ close;
+ }
+ mes "[Merchant]";
+ mes "There you go!";
+ mes "Check how many Red Potions";
+ mes "I've given you, it should be good. Thanks, that was a good deal~";
+ delitem getarg(0),.@put_out_item; //Shell
+ getitem 501,.@input; //Red_Potion
+ close;
+ }
+ mes "[Merchant]";
+ mes "Huh~";
+ mes "Alright.";
+ mes "Though aren't";
+ mes "Red Potions more useful";
+ mes "to an adventurer like you?";
+ close;
+ }
+}
+
+//============================================================
+// Old changelog
+//============================================================
+//= 1.1 Made it as a function. U can add your own Merchs [Lupus]
+//= 1.1a Fixed item select [KarLaeda]
+//============================================================
diff --git a/npc/pre-re/merchants/old_pharmacist.txt b/npc/pre-re/merchants/old_pharmacist.txt
new file mode 100644
index 000000000..ba00b8f4d
--- /dev/null
+++ b/npc/pre-re/merchants/old_pharmacist.txt
@@ -0,0 +1,262 @@
+//===== rAthena Script =======================================
+//= Old Pharmacist
+//===== By: ==================================================
+//= DZeroX
+//===== Current Version: =====================================
+//= 1.4
+//===== Compatible With: =====================================
+//= rAthena SVN Trunk
+//===== Description: =========================================
+//= Trade in items for potions
+//===============================
+//= Breakdown of arguments used
+//= arg(0): Herb required.
+//= arg(1): Zeny cost.
+//= arg(2): Potion given.
+//===== Additional Comments: =================================
+//= 1.0 - Fully working. [DZeroX]
+//= 1.0a - Minor fixes [Lupus]
+//= 1.1 - Added changed the dialogs and name to fit the
+//= the official information. [DZeroX]
+//= 1.1a Removed .GATs [Lupus]
+//= 1.1b Fixed a bug in Orange Potion creating. Copy&Pasting = bad. [L0ne_W0lf]
+//= 1.2 Added checkweight, and input min/max values. [L0ne_W0lf]
+//= 1.3 Fixed minor condition check bug. (bugreport:597) [L0ne_W0lf]
+//= 1.4 Updated to match AEGIS script. [Kisuka]
+//============================================================
+
+alberta_in,16,28,4 script Pharmacist 61,{
+ if (checkweight(1201,1) == 0) {
+ mes "- Wait a moment! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please come back later -";
+ mes "- after you put some items into kafra storage. -";
+ close;
+ }
+ mes "[Old Pharmacist]";
+ mes "Ummmm...";
+ mes "What brings you here...?";
+ switch(select("Make Potion","Talk.","Mixing Information","Cancel")) {
+ case 1:
+ next;
+ set .@weight,MaxWeight-Weight;
+ if ((.@weight) < 5000) {
+ mes "[Old Pharmacist]";
+ mes "Why are you carrying these so many!";
+ mes "Don't be greedy, carry only as much you need!";
+ next;
+ mes "[Old Pharmacist]";
+ mes "You are too heavy to receive potions from me...";
+ mes "Go store some items in your storage first!";
+ close;
+ } else {
+ mes "[Old Pharmacist]";
+ mes "You have all the stuff ready, right? Which one would you like?";
+ switch(select("Red Potion.","Orange Potion.","Yellow Potion.","White Potion.","Blue Potion.","Green Potion.","Actually, I don't want anything.")) {
+ case 1:
+ callsub L_making,507,3,501;
+ case 2:
+ next;
+ mes "[Old Pharmacist]";
+ if (countitem(507) < countitem(713)) {
+ set .@max,countitem(507);
+ }
+ else if (countitem(508) < countitem(713)) {
+ set .@max,countitem(508);
+ }
+ else {
+ set .@max,countitem(713);
+ }
+ if ((countitem(507) < 1) || (countitem(508) < 1) || (countitem(713) == 0)) {
+ mes "You rascal! What did you expect?! Coming here with nothing. Tsk!";
+ mes "Get lost!";
+ close;
+ }
+ if (Zeny < 3) {
+ mes "You rascal! What did you expect?! Coming here with nothing. Tsk!";
+ mes "Get lost!";
+ close;
+ }
+ mes "How many?";
+ switch(select("Make as many as I can.","I want to choose an amount.","Actually, I don't want anything.")) {
+ case 1:
+ next;
+ if ((countitem(507) < .@max) || (countitem(508) < .@max) || (countitem(713) < .@max) || (Zeny < .@max*3)) {
+ mes "[Old Pharmacist]";
+ mes "You rascal! You don't even have all the materials and you want me to make you potions?!";
+ close;
+ }
+ set Zeny,Zeny-(.@max*5);
+ delitem 507,.@max; // Red_Herb
+ delitem 508,.@max; // Yellow_Herb
+ delitem 713,.@max; // Empty_Bottle
+ getitem 502,.@max; // Orange_Potion
+ break;
+ case 2:
+ next;
+ mes "[Old Pharmacist]";
+ mes "Then pick a number below 100. If you don't want any, just enter '0'. With the materials you have, you can make about "+.@max+" potions.";
+ input .@amount,0,101;
+ if (.@amount == 0) {
+ next;
+ mes "[Old Pharmacist]";
+ mes "Make up your mind, will you?!";
+ close;
+ }
+ if (.@amount > 100) {
+ next;
+ mes "[Old Pharmacist]";
+ mes "Are you deaf? I said less than 100!";
+ close;
+ }
+ if ((countitem(507) < .@amount) || (countitem(508) < .@amount) || (countitem(713) < .@amount) || (Zeny < .@amount*3)) {
+ next;
+ mes "[Old Pharmacist]";
+ mes "You rascal! You don't even have all the materials and you want me to make you potions?!";
+ close;
+ }
+ next;
+ set Zeny,Zeny-(.@amount*5);
+ delitem 507,.@amount; // Red_Herb
+ delitem 508,.@amount; // Yellow_Herb
+ delitem 713,.@amount; // Empty_Bottle
+ getitem 502,.@amount; // Orange_Potion
+ break;
+ case 3:
+ next;
+ mes "[Old Pharmacist]";
+ mes "What?!";
+ mes "Grrr...";
+ mes "Bleh!";
+ mes "Get lost!";
+ close;
+ }
+ mes "[Old Pharmacist]";
+ mes "Here you go. It's all done so you can take it. But remember! Abusing medicine is not good.";
+ close;
+ case 3:
+ callsub L_making,508,10,503;
+ case 4:
+ callsub L_making,509,20,504;
+ case 5:
+ callsub L_making,510,30,505;
+ case 6:
+ callsub L_making,511,3,506;
+ case 7:
+ mes "[Old Pharmacist]";
+ mes "What?!";
+ mes "Grrr...";
+ mes "Bleh!";
+ mes "Get lost!";
+ close;
+ }
+ }
+ case 2:
+ mes "[Old Pharmacist]";
+ mes "With medicine, you can increase a person's ability to regenerate. But, they're only good up to a point. *Sigh* I'm starting to think of the days when I was young. I must be getting old.";
+ next;
+ mes "[Old Pharmacist]";
+ mes "Anyways, a potion is merely a potion. Nothing more and nothing less.";
+ close;
+ case 3:
+ mes "[Old Pharmacist]";
+ mes "Hrrrmm...";
+ mes "You young ones can be quite annoying. But, since you asked, I'll explain.";
+ next;
+ mes "[Old Pharmacist]";
+ mes "Herbs work well by themselves, but if you use my special techniques and skills to make potions out of them, the effect is much much greater.";
+ next;
+ mes "[Old Pharmacist]";
+ mes "If you ask eagerly and politely, I will make them for you. But, not for free... Don't worry though, I only charge a small fee, so it's not that expensive.";
+ next;
+ mes "[Old Pharmacist]";
+ mes "Red Potion - ^0098E52 Red Herbs, 1 Empty Bottle, 2 zeny fee.^000000";
+ mes "Orange Potion - ^0098E51 Red Herb, 1 Yellow Herb, 1 Empty Bottle, 5 zeny fee.^000000";
+ mes "Yellow Potion - ^0098E52 Yellow Herbs, 1 Empty Bottle, 10 zeny.^000000";
+ next;
+ mes "[Old Pharmacist]";
+ mes "White Potion - ^0098E52 White Herbs, 1 Empty Bottle, 20 zeny fee.^000000";
+ mes "Blue Potion - ^0098E52 Blue Herbs, 1 Empty Bottle, 30 zeny fee.^000000";
+ mes "Green Potion - ^0098E52 Green Herbs, 1 Empty Bottle, 3 zeny fee.^000000";
+ close;
+ case 4:
+ mes "[Old Pharmacist]";
+ mes "What a boring person. If you have something to say, why don't you say it?!";
+ close;
+ }
+
+L_making:
+ next;
+ mes "[Old Pharmacist]";
+ if ((countitem(getarg(0))/2) < countitem(713)) {
+ set .@max,countitem(getarg(0))/2;
+ } else {
+ set .@max,countitem(713);
+ }
+ if ((countitem(getarg(0)) < 2) || (countitem(713) == 0)) {
+ mes "You rascal! What did you expect?! Coming here with nothing. Tsk!";
+ mes "Get lost!";
+ close;
+ }
+ if (Zeny < 3) {
+ mes "You rascal! What did you expect?! Coming here with nothing. Tsk!";
+ mes "Get lost!";
+ close;
+ }
+ mes "How many?";
+ switch(select("Make as many as I can.","I want to choose an amount.","Actually, I don't want anything.")) {
+ case 1:
+ next;
+ if ((countitem(getarg(0)) < .@max*2) || (countitem(713) < .@max) || (Zeny < .@max*getarg(1))) {
+ mes "[Old Pharmacist]";
+ mes "You rascal! You don't even have all the materials and you want me to make you potions?!";
+ close;
+ }
+ set Zeny,Zeny-(.@max*getarg(1));
+ delitem getarg(0),.@max*2;
+ delitem 713,.@max; // Empty_Bottle
+ getitem getarg(2),.@max;
+ break;
+ case 2:
+ next;
+ mes "[Old Pharmacist]";
+ mes "Then pick a number below 100. If you don't want any, just enter '0'. With the materials you have, you can make about "+.@max+" potions.";
+ input .@amount;
+ if (.@amount == 0) {
+ next;
+ mes "[Old Pharmacist]";
+ mes "Make up your mind, will you?!";
+ close;
+ }
+ if (.@amount > 100) {
+ next;
+ mes "[Old Pharmacist]";
+ mes "Are you deaf? I said less than 100!";
+ close;
+ }
+ if ((countitem(getarg(0)) < .@amount*2) || (countitem(713) < .@amount) || (Zeny < .@amount*getarg(1))) {
+ next;
+ mes "[Old Pharmacist]";
+ mes "You rascal! You don't even have all the materials and you want me to make you potions?!";
+ close;
+ }
+ next;
+ set Zeny,Zeny-(.@amount*getarg(1));
+ delitem getarg(0),.@amount*2;
+ delitem 713,.@amount; // Empty_Bottle
+ getitem getarg(2),.@amount;
+ break;
+ case 3:
+ next;
+ mes "[Old Pharmacist]";
+ mes "What?!";
+ mes "Grrr...";
+ mes "Bleh!";
+ mes "Get lost!";
+ close;
+ }
+ mes "[Old Pharmacist]";
+ mes "Here you go. It's all done so you can take it. But remember! Abusing medicine is not good.";
+ close;
+}
diff --git a/npc/pre-re/merchants/quivers.txt b/npc/pre-re/merchants/quivers.txt
new file mode 100644
index 000000000..b193bac4c
--- /dev/null
+++ b/npc/pre-re/merchants/quivers.txt
@@ -0,0 +1,178 @@
+//===== rAthena Script =======================================
+//= Arrow Quiver Event
+//===== By: ==================================================
+//= Muad_Dib (Prometheus Project); L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.2
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis COnversion]
+//= Turns arrows into Arrow Quivers.
+// Breakdown of Subroutine "S_BuyQuiver"
+// arg(0): Type of Arrow to be packaged (item ID)
+// arg(1): How many of each 'getarg(0)' arrow per quiver
+// arg(2): The cost of making a 'getarg(0)' quiver.
+// arg(3): The quiver given by the NPC. (item ID)
+//===== Additional Comments: =================================
+//= 07/06/05 : Added 1st Version. [Muad_Dib]
+//= Converted to rAthena format by Dr.Evil
+//= added prize to quest - 500 Zeny
+//= Fixed a few spelling errors. [Nexon]
+//= 1.1 Added Holy Arrow Quivers [Playtester]
+//= 1.2 Rescripted to Aegis 10.3 standards. [L0ne_W0lf]
+//= Removed "Holy Arrows" from the list.
+//============================================================
+
+payon_in01,5,134,5 script Inventor Jaax 89,{
+ if (checkweight(1201,1) == 0) {
+ mes "[Inventor Jaax]";
+ mes "Hey, you're carrying";
+ mes "way too much stuff. Why don't you stash it away in Kafra Storage? We can talk after you do that, right?";
+ close;
+ }
+ set .@now_weight,MaxWeight-Weight;
+ if (.@now_weight < 2000) {
+ mes "[Inventor Jaax]";
+ mes "Hey, you're carrying";
+ mes "way too much stuff. Why don't you stash it away in Kafra Storage? We can talk after you do that, right?";
+ close;
+ }
+ mes "[Inventor Jaax]";
+ mes "My name is Jaxx.";
+ mes "Without ego, I can";
+ mes "say that I am perhaps the";
+ mes "^663300greatest inventor of our time^000000.";
+ next;
+ mes "[Inventor Jaxx]";
+ mes "This time, I've";
+ mes "created something";
+ mes "truly extraordinary. I call them... ^663300Magic Quivers^000000 !! This will be remembered in history as an";
+ mes "arrow revolution!";
+ Emotion e_no1;
+ next;
+ mes "[Inventor Jaax]";
+ mes "I've studied magic and quivers for years, working night and day until I finally figured how to condense arrows with magic! With magic quivers, you'll be carrying more arrows, but with less weight!";
+ next;
+ mes "[Inventor Jaax]";
+ mes "Would you like to try using one of my arrow quivers? I have no doubt that someone like you can appreciate my genius!";
+ next;
+ switch(select("Quiver:Iron Arrow Quiver:Steel Arrow Quiver:Oridecon Arrow Quiver:Fire Arrow Quiver:Silver Arrow Quiver:Wind Arrow Quiver:Stone Arrow Quiver:Crystal Arrow Quiver:Shadow Arrow Quiver:Immaterial Arrow Quiver:Rusty Arrow Quiver")) {
+ case 1: callsub S_BuyQuiver,1750,500,500,12004;
+ case 2: callsub S_BuyQuiver,1770,500,500,12005;
+ case 3: callsub S_BuyQuiver,1753,500,500,12006;
+ case 4: callsub S_BuyQuiver,1765,500,500,12007;
+ case 5: callsub S_BuyQuiver,1752,500,500,12008;
+ case 6: callsub S_BuyQuiver,1751,500,500,12009;
+ case 7: callsub S_BuyQuiver,1755,500,500,12010;
+ case 8: callsub S_BuyQuiver,1756,500,500,12011;
+ case 9: callsub S_BuyQuiver,1754,500,500,12012;
+ case 10: callsub S_BuyQuiver,1767,500,500,12013;
+ case 11: callsub S_BuyQuiver,1757,500,500,12014;
+ case 12: callsub S_BuyQuiver,1762,500,500,12015;
+ }
+ //This doesn't seem to be accessable...
+ //mes "[Inventor Jaax]";
+ //mes "Is there";
+ //mes "anything you want?";
+ //close;
+
+S_BuyQuiver:
+ if (countitem(getarg(0)) > 499) {
+ mes "[Inventor Jaax]";
+ mes "Excellent!";
+ mes "Are you carrying any Arrows with you? I'll provide you with a quiver that can carry "+getarg(1)+" of your "+getitemname(getarg(0))+"s for only ^FF3131"+getarg(2)+" Zeny^000000.";
+ next;
+ switch(select("Store as many Arrows in quivers as possible:Purchase 1 quiver:Cancel")) {
+ case 1:
+ set .@arrows,countitem(getarg(0));
+ set .@quiver,.@arrows / getarg(1);
+ set .@arrows_used,.@quiver * getarg(1);
+ set .@arrow_zeny01,.@quiver * getarg(2);
+ mes "Number of";
+ mes "Arrows: ^3131FF"+.@arrows+" ^000000";
+ mes "Maximum Number";
+ mes "of Purchasable";
+ mes "Quivers: ^3131FF"+.@quiver+" ^000000";
+ mes "Zeny required: ^3131FF"+.@arrow_zeny01+" Zeny^000000";
+ next;
+ mes "[Inventor Jaax]";
+ mes "Would you like to";
+ mes "buy as many Quivers";
+ mes "as you can for the Arrows";
+ mes "you are currently carrying?";
+ next;
+ if (select("Yes:Cancel") == 1) {
+ if (.@arrow_zeny01 < Zeny) {
+ mes "[Inventor Jaax]";
+ mes "There you go!";
+ mes "Just remember, ^FF0000you won't be able to use the Quiver when your carried weight is 90% of your maximum weight limit^000000.";
+ set zeny,zeny-.@arrow_zeny01;
+ delitem getarg(0),.@arrows_used; //Arrow
+ getitem getarg(3),.@quiver; //Quiver
+ next;
+ mes "[Inventor Jaax]";
+ mes "So...";
+ mes "Just keep track";
+ mes "of how much you're";
+ mes "carrying from time";
+ mes "to time and you should";
+ mes "be alright.";
+ close;
+ }
+ else {
+ mes "[Inventor Jaax]";
+ mes "I'm sorry, but you don't have enough Zeny. I can't just give these away after working years";
+ mes "to develop this revolutionary technology!";
+ close;
+ }
+ }
+ mes "[Inventor Jaax]";
+ mes "You changed your mind?";
+ mes "When the glory of owning";
+ mes "a quiver is so close?";
+ close;
+ case 2:
+ if (zeny > getarg(2)) {
+ mes "[Inventor Jaax]";
+ mes "There you go!";
+ mes "Just remember, ^FF0000you won't be able to use the Quiver when your carried weight is 90% of your maximum weight limit^000000.";
+ set zeny,zeny-getarg(2);
+ delitem getarg(0),getarg(1); //Arrow
+ getitem getarg(3),1; //Quiver
+ next;
+ mes "[Inventor Jaax]";
+ mes "So...";
+ mes "Just keep track";
+ mes "of how much you're";
+ mes "carrying from time";
+ mes "to time and you should";
+ mes "be alright.";
+ close;
+ }
+ else {
+ mes "[Inventor Jaax]";
+ mes "You don't even";
+ mes "have "+getarg(2)+" Zeny?";
+ mes "I'm so sorry. I had no";
+ mes "idea that you were so...";
+ mes "^333333Destitute^000000.";
+ close;
+ }
+ case 3:
+ mes "[Inventor Jaax]";
+ mes "What...?";
+ mes "Do you not see that this invention can forever change the way Arrows are carried?! The future is now!";
+ close;
+ }
+ }
+ else {
+ mes "[Inventor Jaax]";
+ mes "You can carry a maximum of 500 Arrows within this quiver. It was made using my secret method,";
+ mes "so the total weight of the Arrows and Quiver is less than carrying the Arrows alone.";
+ next;
+ mes "[Inventor Jaax]";
+ mes "It's a miracle of science! One that you can experience for yourself if you bring me at least 500 Arrows and 500 Zeny for each Quiver.";
+ close;
+ }
+}
diff --git a/npc/pre-re/merchants/refine.txt b/npc/pre-re/merchants/refine.txt
new file mode 100644
index 000000000..320a61569
--- /dev/null
+++ b/npc/pre-re/merchants/refine.txt
@@ -0,0 +1,1867 @@
+//===== rAthena Script =======================================
+//= Refining NPCs
+//===== By: ==================================================
+//= Syrus22 (1.1) dafide18 (1.4) Skotlex (1.5)
+//===== Current Version: =====================================
+//= 3.1
+//===== Compatible With: =====================================
+//= Any Athena Version
+//===== Description: =========================================
+//= Refining NPCs and Metal Salesmen.
+//===== Additional Comments: =================================
+//= 1.0 - by A bunch of people!
+//= Syrus22 - Completely redid the script using functions... also
+//= added the option for auto safe refining and multiple refining.
+//= 1.1 - Negative input bug fixed [Lupus]
+//= 1.2 - Added additional reparimen in morroc and payon. Added
+//= Christopher the blacksmith in Geffen. Edited some dialogue [kobra_k88]
+//= 1.3 - New Payon Locations [Darkchild]
+//= Corrected zeny subtraction thx to jpnmania77.[kobra_k88]
+//= 1.3a - Temporary corrected an exploit. Need to check sources
+//= to fully fix bug [Shinigami]
+//= Fixed repairman prices [shadowlady]
+//= Fixed bug that skips requirements thanks to sir_loon [massdriller]
+//= Fixed itemid error thanks to -Vitamin- [massdriller]
+//= 1.4 - check again item in refining procedure to avoid
+//= hacker that can change item [dafide18]
+//= 1.5 - Fixed crashing due to badly used callfunc's [Skotlex]
+// Lupus, don't rollback this important fix again! >.<
+//= 1.5a - Corrected an unneeded callfunc, fixed the anti-bot
+//= exploit ruining the safe refine loop. [Skotlex]
+//= 1.5b - Fixed Spelling mistakes. [Nexon]
+//= 1.6 - Replaced all breaks for ends as per the new script engine [Skotlex]
+//= 1.7 - Added Einbroch Refiners (Custom names ^^;) and a duplicated BS Shop. [Poki#3]
+//= 1.8 - Added Lighthalzen Refiners (Custom names again ^^;) [Poki#3]
+//= 1.8a - Fixed wrong indication thanks to NeoSaro [Lupus]
+//= 1.9 - Rewrote repairman, removed the Steel from repair cost [DracoRPG]
+//= 2.0 - Fixed missed equppment presence check. Thx2 Coltaro [Lupus]
+//= 2.0a - Added weight checks thanks to Neouni [Playtester]
+//= 2.0b - Fixed the names of Lighthalzen and Einbroch refiners thanks to Maud_Dib [Kargha]
+//= 2.1 - Removed Duplicates [Silent]
+//= 2.2 - Changed name from "Emvertacon" to "Emveretarcon". [Samuray22]
+// - Thanks to Barron-Monster.
+//= 2.2b - Changed name from "Pharacon" to "Phracon". [Samuray22]
+// - Thanks to Barron-Monster.
+//= 2.3 Corrected NPC names to fall within proper restrictions. [L0ne_W0lf]
+//= 2.4 Updated Refiner function. cleaner, and less dated. [L0ne_w0lf]
+//= 2.5 Rather large update to the refiner and merchants. :D [L0ne_W0lf]
+//= 2.6 Fixed a few bugs with creating pure stones. [L0ne_W0lf]
+//= 2.7 Refiner function accepts additional paramater. [L0ne_W0lf]
+//= 0 = No special features; 1 = new refining features
+//= Updated Repairmen and function. No longer shows menu.
+//= 2.7a A couple touch-ups to the repairman function. [L0ne_w0lf]
+//= 2.8 Changed the nonexistent variable .@matname$ for getitemname(.@material). (bugreport:2340) [Samuray22]
+//= 2.8 Added proper Blacksmith Supplier to Einroch. [L0ne_W0lf]
+//= Updated dated features comment to reflect new usage.
+//= 2.8a Small bugfix. (bugreport:2418) [Paradox924X]
+//= 2.9 Moved Morroc repairman to Morroc Ruins. [L0ne_W0lf]
+//= 3.0 Updated several NPC names and locations. [Xantara]
+// Added WoE map Refiners.
+//= 3.1 Added the new refinement & Ore creation NPC's for +11 and above Refinement. [Masao]
+//============================================================
+
+
+//=========================================================
+// Christopher: Geffen Blacksmith
+//=========================================================
+geffen_in,110,172,0 script Christopher#1 63,{
+ mes "[Christopher Guillenrow]";
+ mes "Welcome to Christopher's Workshop. Ye can get all yer stuff for forging here. What business";
+ mes "brings ye to me?";
+ next;
+ switch(select("Purchase Anvil:Purchase Forging Item:Purchase Metal:Purify Rough Ores:Cancel")) {
+ case 1:
+ mes "[Christopher Guillenrow]";
+ mes "A better Anvil gives ye a greeeater chance to make better weapons, ye know? But they'll cost ye more zeny. Just get it off yer chest and buy what fits your purposes best, laddy.";
+ next;
+ switch(select("Anvil - 30,000 zeny:Oridecon Anvil - 120,000 zeny:Golden Anvil - 300,000 zeny:Better Anvil than the others.:Cancel.")) {
+ case 1:
+ if (Zeny < 30000) {
+ mes "[Christopher Guillenrow]";
+ mes "I don't think I can let ye have this with the zeny ye have. I can't lose me money because of ye.";
+ close;
+ }
+ getitem 986,1; // Anvil
+ set Zeny,Zeny-30000;
+ mes "[Christopher Guillenrow]";
+ mes "This is the cheapest one, but efficient enough to forge most items. Thank ye fer shopping at me workshop. Feel free to come anytime, whenever ye need.";
+ close;
+ case 2:
+ if (Zeny < 120000) {
+ mes "[Christopher Guillenrow]";
+ mes "I don't think I can let ye have this with the zeny ye have. I can't lose me money because of ye.";
+ close;
+ }
+ getitem 987,1; // Oridecon_Anvil
+ set Zeny,Zeny-120000;
+ mes "[Christopher Guillenrow]";
+ mes "Aye, friend ye have an eye for the anvil. This must be the proper anvil for a Blacksmith, eh? Thank ye fer shopping at me workshop. Feel free to come anytime, whenever ye need.";
+ close;
+ case 3:
+ if (Zeny < 300000) {
+ mes "[Christopher Guillenrow]";
+ mes "I don't think I can let ye have this with the zeny ye have. I can't lose me money because of ye.";
+ close;
+ }
+ getitem 988,1; // Golden_Anvil
+ set Zeny,Zeny-300000;
+ mes "[Christopher Guillenrow]";
+ mes "This one is the best among all me stuffs in me workshop! With this, ye can rule the Blacksmith world! Thank ye fer shopping at me workshop. Feel free to come anytime, whenever ye need.";
+ close;
+ case 4:
+ mes "[Christopher Guillenrow]";
+ mes "Well, sorry. But I don't have anythin' harder' than the Golden Anvil.";
+ next;
+ mes "[Christopher Guillenrow]";
+ mes "Me thinks 'Ringgel,' the Legendary Anvil Maker would have one. But, I don't think ye can find him, though he be somewhere in this world.";
+ close;
+ case 5:
+ mes "[Christopher Guillenrow]";
+ mes "Okay, feel free to come anytime, whenever ye need. Fare ye well.";
+ close;
+ }
+ case 2:
+ mes "[Christopher Guillenrow]";
+ mes "A respectable blacksmith uses fine tools. Ye can become one o'those with me Stuff. Choose anything ye want.";
+ next;
+ switch(select("Mini-Furnace - 150 zeny:Iron Hammer - 1000 zeny:Golden Hammer - 3000 zeny:Oridecon Hammer - 5000 zeny:Cancel.")) {
+ case 1:
+ mes "[Christopher Guillenrow]";
+ mes "It's a much needed tool fer refining metal! So, How many do ye wish to buy? If ye want to quit, just type the number '0.'";
+ next;
+ while(1) {
+ input .@input;
+ if (.@input == 0) {
+ mes "[Christopher Guillenrow]";
+ mes "Aye, the deal is canceled. Fare ye well.";
+ close;
+ }
+ else if ((.@input < 0) || (.@input > 500)) {
+ mes "[Christopher Guillenrow]";
+ mes "Ye can buy 500, er less.";
+ next;
+ }
+ else {
+ break;
+ }
+ }
+ set .@sell,.@input * 150;
+ if (Zeny < .@sell) {
+ mes "[Christopher Guillenrow]";
+ mes "I don't think I can let ye have this with the zeny ye have. I can't lose me money because of ye.";
+ close;
+ }
+ if (checkweight(612,.@input) == 0) {
+ mes "[Christopher Guillenrow]";
+ mes "Ye look like you don't got enough room in yer inventory. Put some stuff into your Kafra Storage, why don't ye?";
+ close;
+ }
+ getitem 612,.@input; // Portable_Furnace
+ set Zeny,Zeny-.@sell;
+ mes "[Christopher Guillenrow]";
+ mes "Thank ye fer shopping at me workshop. Feel free to come anytime, whenever ye need.";
+ close;
+ case 2:
+ if (Zeny < 1000) {
+ mes "[Christopher Guillenrow]";
+ mes "I don't think I can let ye have this with the zeny ye have. I can't lose me money because of ye.";
+ close;
+ }
+ getitem 613,1; // Iron_Hammer
+ set Zeny,Zeny-1000;
+ mes "[Christopher Guillenrow]";
+ mes "Thank ye fer shopping at me workshop. Feel free to come anytime, whenever ye need.";
+ close;
+ case 3:
+ if (Zeny < 3000) {
+ mes "[Christopher Guillenrow]";
+ mes "I don't think I can let ye have this with the zeny ye have. I can't lose me money because of ye.";
+ close;
+ }
+ getitem 614,1; // Golden_Hammer
+ set Zeny,Zeny-3000;
+ mes "[Christopher Guillenrow]";
+ mes "Thank ye fer shopping at me workshop. Feel free to come anytime, whenever ye need.";
+ close;
+ case 4:
+ if (Zeny < 5000) {
+ mes "[Christopher Guillenrow]";
+ mes "I don't think I can let ye have this with the zeny ye have. I can't lose me money because of ye.";
+ close;
+ }
+ getitem 615,1; // Oridecon_Hammer
+ set Zeny,Zeny-5000;
+ mes "[Christopher Guillenrow]";
+ mes "Thank ye fer shopping at me workshop. Feel free to come anytime, whenever ye need.";
+ close;
+ case 5:
+ mes "[Christopher Guillenrow]";
+ mes "Feel free to come anytime, whenever ye need. Fare ye well.";
+ close;
+ }
+ case 3:
+ mes "[Christopher Guillenrow]";
+ mes "I prepare every Metal, and only the high quality ones o'course. Now then, which one do ye need?";
+ next;
+ switch(select("Phracon - 200z.:Emveretarcon - 1000z.:Cancel.")) {
+ case 1:
+ mes "[Christopher Guillenrow]";
+ mes "So, How many do ye wish to buy? If ye dont want anything, just type the number as '0.'";
+ next;
+ while(1) {
+ input .@input;
+ if (.@input == 0) {
+ mes "[Christopher Guillenrow]";
+ mes "Deal has";
+ mes "been canceled.";
+ mes "Fare ye well.";
+ close;
+ }
+ else if ((.@input < 0) || (.@input > 500)) {
+ mes "[Christopher Guillenrow]";
+ mes "Ye can buy 500, er less.";
+ next;
+ }
+ else {
+ break;
+ }
+ }
+ set .@sell,.@input * 200;
+ if (Zeny < .@sell) {
+ mes "[Christopher Guillenrow]";
+ mes "Ye don't have enough money. Ye know I can't sell this at a lower price... You know how the wifey nags about Zeny.";
+ close;
+ }
+ if (checkweight(1010,.@input) == 0) {
+ mes "[Christopher Guillenrow]";
+ mes "Ye look like you don't have the room to carry anythin' new. Why don't ye put some things into Kafra Storage n' come back.";
+ close;
+ }
+ getitem 1010,.@input; // Phracon
+ set Zeny,Zeny-.@sell;
+ mes "[Christopher Guillenrow]";
+ mes "Thank ye fer shopping at me workshop. Feel free to come anytime, whenever ye need.";
+ close;
+ case 2:
+ mes "[Christopher Guillenrow]";
+ mes "So, how many do ye wish to buy? If ye dont want anything at all, just type the number as '0.'";
+ next;
+ while(1) {
+ input .@input;
+ if (.@input == 0) {
+ mes "[Christopher Guillenrow]";
+ mes "Deal has";
+ mes "been canceled.";
+ mes "Fare ye well.";
+ close;
+ }
+ else if ((.@input < 0) || (.@input > 500)) {
+ mes "[Christopher Guillenrow]";
+ mes "Ye can buy 500, er less.";
+ next;
+ }
+ else {
+ break;
+ }
+ }
+ set .@sell,.@input * 1000;
+ if (Zeny < .@sell) {
+ mes "[Christopher Guillenrow]";
+ mes "I don't think I can let ye have this with the zeny ye have. I can't lose me money because of ye.";
+ close;
+ }
+ if (checkweight(1011,.@input) == 0) {
+ mes "[Christopher Guillenrow]";
+ mes "Me friend... Seems to me ye don't have Inventory space. Why doncha put some things into Kafra Storage first?";
+ close;
+ }
+ getitem 1011,.@input; // Emveretarcon
+ set Zeny,Zeny-.@sell;
+ mes "[Christopher Guillenrow]";
+ mes "Thank ye fer shopping at me workshop. Feel free to come anytime, whenever ye need, whenever ye want.";
+ close;
+ case 3:
+ mes "[Christopher Guillenrow]";
+ mes "Feel free to come anytime, whenever ye need. Fare ye well.";
+ close;
+ }
+ case 4:
+ mes "[Christopher Guillenrow]";
+ mes "I can purify yer Oridecon and Elunium. I make a refined Ore out of 5 o'each rough ones. Well... Which one do ye want to make?";
+ next;
+ switch(select("Make Oridecon:Make Elunium:Cancel.")) {
+ case 1:
+ if (countitem(756) < 5) {
+ mes "[Christopher Guillenrow]";
+ mes "I told ye, I need 5 o'the rough Oridecons fer one Oridecon.";
+ close;
+ }
+ else {
+ delitem 756,5; //Oridecon_Stone
+ getitem 984,1; // Oridecon
+ mes "[Christopher Guillenrow]";
+ mes "Here's an Oridecon fer ye. Ye will be always welcome here, I'll be waitin' for ye.";
+ close;
+ }
+ case 2:
+ if (countitem(757) < 5) {
+ mes "[Christopher Guillenrow]";
+ mes "I told ye, I need 5 rough Eluniums fer one Elunium.";
+ close;
+ }
+ else {
+ delitem 757,5; //Elunium_Stone
+ getitem 985,1; // Elunium
+ mes "[Christopher Guillenrow]";
+ mes "Arrr, here's yer Elunium. Yer business is always welcome here, so feel free to come again.";
+ close;
+ }
+ case 3:
+ mes "[Christopher Guillenrow]";
+ mes "Feel free to come anytime, whenever ye need. Fare ye well.";
+ close;
+ }
+ case 5:
+ mes "[Christopher Guillenrow]";
+ mes "Feel free to come anytime, whenever ye need and whenever ye want. Fare ye well.";
+ close;
+ }
+}
+
+//=========================================================
+// Paul Spanner: Einbroch Blacksmith Supplier
+//=========================================================
+ein_in01,38,29,0 script Paul Spanner 63,{
+ if (checkweight(1201,1) == 0) {
+ mes "- Wait a minute !! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please try again -";
+ mes "- after you loose some weight. -";
+ close;
+ }
+ mes "[Paul Spanner]";
+ mes "Welcome, my friend.";
+ mes "In my shop, you will find everything that you need in forging.";
+ mes "Tell me what you need.";
+ next;
+ switch(select("Purchase Anvil.:Purchase Forging Items.:Purchase Metal.:Process Ores.:Quit.")) {
+ case 1:
+ mes "[Paul Spanner]";
+ mes "Anvil is the most necessary item for Blacksmiths.";
+ mes "Since you will use an Anvil more than once, you'd better buy a nice one.";
+ next;
+ switch(select("Anvil - 30,000z.:Oridecon Anvil - 120,000z.:Golden Anvil - 300,000z.:I need a better anvil.:Cancel.")) {
+ case 1:
+ if (zeny < 30000) {
+ mes "[Paul Spanner]";
+ mes "With that much of money, you cannot even buy a toy anvil!";
+ close;
+ }
+ getitem 986,1; //Anvil
+ set zeny,zeny-30000;
+ mes "[Paul Spanner]";
+ mes "It is the cheapest anvil which has the most basic ability.";
+ mes "Thank you for using my shop. If you need anything, just let me know.";
+ close;
+ case 2:
+ if (zeny < 120000) {
+ mes "[Paul Spanner]";
+ mes "With that much of money, you cannot even buy a toy anvil!";
+ close;
+ }
+ getitem 987,1; //Oridecon_Anvil
+ set zeny,zeny-120000;
+ mes "[Paul Spanner]";
+ mes "Ah, you have an eye for anvil. A Blacksmith needs an anvil at least as good as this.";
+ mes "Thank you for using my shop. If you need anything, just let me know.";
+ close;
+ case 3:
+ if (zeny < 300000) {
+ mes "[Paul Spanner]";
+ mes "With that much of money, you cannot even buy a toy anvil!";
+ close;
+ }
+ getitem 988,1; //Golden_Anvil
+ set zeny,zeny-300000;
+ mes "[Paul Spanner]";
+ mes "I can tell your ambition to become a good Blacksmith just by looking at you to choose this Golden Anvil!";
+ mes "This anvil will surely aid you in creating the best weapons.";
+ close;
+ case 4:
+ mes "[Paul Spanner]";
+ mes "I am sorry, but I do not sell better anvils than Golden Anvil.";
+ mes "Unless you find the legendary anvil of 'Linggell', I don't think that you could find better one than Golden Anvil in any other places.";
+ close;
+ case 5:
+ mes "[Paul Spanner]";
+ mes "If you need anything, just let me know.";
+ close;
+ }
+ case 2:
+ mes "[Paul Spanner]";
+ mes "You need various materials to process ores and to forge weapons.";
+ mes "I have everything that you need. Take a look.";
+ next;
+ switch(select("Mini Furnace - 150z.:Iron Hammer - 1,000z.:Golden Hammer - 3,000z.:Oridecon Hammer - 5,000z.:Cancel.")) {
+ case 1:
+ set .@item,612;
+ set .@item_cost,150;
+ set .@item_weight,200;
+ mes "[Paul Spanner]";
+ mes "You definately need this furnce to process ores!";
+ next;
+ break;
+ case 2:
+ set .@item,613;
+ set .@item_cost,1000;
+ set .@item_weight,200;
+ break;
+ case 3:
+ set .@item,614;
+ set .@item_cost,3000;
+ set .@item_weight,300;
+ break;
+ case 4:
+ set .@item,615;
+ set .@item_cost,5000;
+ set .@item_weight,400;
+ break;
+ case 5:
+ mes "[Paul Spanner]";
+ mes "If you need anything, just let me know.";
+ close;
+ }
+ mes "[Paul Spanner]";
+ mes "So, how many do you need? If you want to cancel the trade, enter '0'.";
+ next;
+ while(1) {
+ input .@input;
+ if (.@input == 0) {
+ mes "[Paul Spanner]";
+ mes "You have canceled the trade. If you need anything, just let me know.";
+ close;
+ }
+ else if ((.@input < 0) || (.@input > 500)) {
+ mes "[Paul Spanner]";
+ mes "You can only buy 500 or less at a time.";
+ next;
+ }
+ else {
+ break;
+ }
+ }
+ set .@sell,.@input * .@item_cost;
+ if (zeny < .@sell) {
+ mes "[Paul Spanner]";
+ mes "You don't have enough money. Sorry, I cannot sell them at a loss.";
+ close;
+ }
+ if (checkweight(.@item,.@input) == 0) {
+ mes "[Paul Spanner]";
+ mes "Hey, you look pale. Why don't you go lighten your weight first.";
+ close;
+ }
+ set zeny,zeny-.@sell;
+ getitem .@item,.@input;
+ mes "[Paul Spanner]";
+ mes "Thank you for using my shop. If you need anything, just let me know.";
+ close;
+ case 3:
+ mes "[Paul Spanner]";
+ mes "I have high quality metal.";
+ mes "So, which metal would you like to buy?";
+ next;
+ switch(select("Phracon - 200z.:Emveretarcon - 1,000z.:Quit.")) {
+ case 1:
+ set .@item,1010;
+ set .@item_price,200;
+ break;
+ case 2:
+ set .@item,1011;
+ set .@item_price,1000;
+ break;
+ case 3:
+ mes "[Paul Spanner]";
+ mes "If you need anything, just let me know.";
+ close;
+ }
+ mes "[Paul Spanner]";
+ mes "So, how many of them do you need? If you want to cancel the trade, enter '0'.";
+ next;
+ while(1) {
+ input .@input;
+ if (.@input == 0) {
+ mes "[Paul Spanner]";
+ mes "The trade has been canceled. If you need anything, just let me know.";
+ close;
+ }
+ else if ((.@input < 0) || (.@input > 500)) {
+ mes "[Paul Spanner]";
+ mes "You can buy 500 or less at a time.";
+ next;
+ }
+ else {
+ break;
+ }
+ }
+ set .@sell,.@input * .@item_price;
+ if (zeny < .@sell) {
+ mes "[Paul Spanner]";
+ mes "You don't have enough money. Sorry, I cannot sell them at a loss.";
+ close;
+ }
+ if (checkweight(.@item,.@input) == 0) {
+ mes "[Paul Spanner]";
+ mes "Hey, you look pale. Why don't you go lighten your weight first?";
+ close;
+ }
+ getitem .@item,.@input;
+ set zeny,zeny-.@sell;
+ mes "[Paul Spanner]";
+ mes "Thank you for using my shop. If you need anything, just let me know.";
+ close;
+ case 4:
+ mes "[Paul Spanner]";
+ mes "I can process Oridecon and Elunium for you.";
+ mes "You need 5 ores to process them into one Oridecon or Elunium.";
+ mes "So, which one do you want to process?";
+ switch(select("Oridecon:Elunium:Quit.")) {
+ case 1:
+ if (countitem(756) < 5) {
+ mes "[Paul Spanner]";
+ mes "You need 5 ores to process them into one pure Oridecon.";
+ close;
+ }
+ else {
+ delitem 756,5; //Oridecon_Stone
+ getitem 984,1; //Oridecon
+ mes "[Paul Spanner]";
+ mes "There you go. Thank you for using my service.";
+ close;
+ }
+ case 2:
+ if (countitem(757) < 5) {
+ mes "[Paul Spanner]";
+ mes "You need 5 ores to process them into one pure Elunium.";
+ close;
+ }
+ else {
+ delitem 757,5; //Elunium_Stone
+ getitem 985,1; //Elunium
+ mes "[Paul Spanner]";
+ mes "There you go. Thank you for using my service.";
+ close;
+ }
+ case 3:
+ mes "[Paul Spanner]";
+ mes "If you need anything, just let me know.";
+ close;
+ }
+ case 5:
+ mes "[Paul Spanner]";
+ mes "If you need anything, just let me know.";
+ close;
+ }
+}
+
+//=====================================================================================
+// Weapon/Armor Refiners
+//=====================================================================================
+prt_in,63,60,0 script Hollgrehenn 85,{
+ callfunc "refinemain","Hollgrehenn",0;
+ end;
+}
+morocc_in,73,38,6 script Aragham 99,{
+ callfunc "refinemain","Aragham",0;
+ end;
+}
+payon,144,173,5 script Antonio 88,{
+ callfunc "refinemain","Antonio",0;
+ end;
+}
+alberta_in,28,58,0 script Fredrik 85,{
+ callfunc "refinemain","Fredrik",0;
+ end;
+}
+yuno_in01,171,21,4 script Lambert 88,{
+ callfunc "refinemain","Lambert",0;
+ end;
+}
+ein_in01,24,87,5 script Manthasman 826,{
+ callfunc "refinemain","Manthasman Pruhag",0;
+ end;
+}
+lhz_in02,282,20,7 script Fulerr 869,{
+ callfunc "refinemain","Fulerr",0;
+ end;
+}
+
+//============================================================
+//= Main Refiner Function
+//============================================================
+//= To allow auto safe refining/multiple refining set the
+//= second argument to '1' in the function call.
+//= If you enable this function make sure you set the appropiate +x Level in your refine_db.txt
+//= to 100 and adjust the .@safe Value in the Script to your desired max. Safe Level.
+//= Otherwise it won't work .
+//============================================================
+function script refinemain {
+ set .@features,getarg(1);
+ mes "[" + getarg(0) + "]";
+ mes "I'm the Armsmith.";
+ mes "I can refine all kinds of weapons, armor and equipment, so let me";
+ mes "know what 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";
+ set .@menu$,"";
+ for( set .@i,1; .@i <= 10; set .@i,.@i+1 )
+ {
+ if( getequipisequiped(.@i) )
+ set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]";
+
+ set .@menu$, .@menu$ + ":";
+ }
+ set .@part,select(.@menu$);
+ if(!getequipisequiped(.@part)) {
+ mes "[" + getarg(0) + "]";
+ mes "You're not wearing";
+ mes "anything there that";
+ mes "I can refine.";
+ emotion 6;
+ close;
+ }
+ //Check if the item is refinable...
+ if(!getequipisenableref(.@part)) {
+ mes "[" + getarg(0) + "]";
+ mes "I don't think I can";
+ mes "refine this item at all...";
+ close;
+ }
+ //Check if the item is identified... (Don't know why this is in here... but kept it anyway)
+ if(!getequipisidentify(.@part)) {
+ mes "[" + getarg(0) + "]";
+ mes "You can't refine this";
+ mes "if you haven't appraised";
+ mes "it first. Make sure your";
+ mes "stuff is identified before";
+ mes "I can refine it.";
+ close;
+ }
+ //Check to see if the items is already +10
+ if(getequiprefinerycnt(.@part) >= 10) {
+ mes "[" + getarg(0) + "]";
+ mes "I can't refine this";
+ mes "any more. This is as";
+ mes "refined as it gets!";
+ close;
+ }
+ set .@refineitemid, getequipid(.@part); // save id of the item
+ set .@refinerycnt, getequiprefinerycnt(.@part); //save refinery count
+ switch(getequipweaponlv(.@part)){
+ case 0: //Refine Armor
+ set .@price,2000;
+ set .@material,985;
+ set .@safe,4;
+ break;
+ case 1: //Refine Level 1 Weapon
+ set .@price,50;
+ set .@material,1010;
+ set .@safe,7;
+ break;
+ case 2: //Refine Level 2 Weapon
+ set .@price,200;
+ set .@material,1011;
+ set .@safe,6;
+ break;
+ case 3: //Refine Level 3 Weapon
+ set .@price,5000;
+ set .@material,984;
+ set .@safe,5;
+ break;
+ case 4: //Refine Level 4 Weapon
+ set .@price,20000;
+ set .@material,984;
+ set .@safe,4;
+ break;
+ case 5: //Refine other stuff?
+ set .@price,2000;
+ set .@material,985;
+ set .@safe,4;
+ break;
+ }
+ if(.@features != 1) {
+ mes "[" + getarg(0) + "]";
+ mes "To refine this I need";
+ mes "one ^003366"+getitemname(.@material)+"^000000 and";
+ mes "a service fee of " + .@price + " Zeny.";
+ mes "Do you really wish to continue?";
+ next;
+ if(select("Yes:No") == 2){
+ mes "[" + getarg(0) + "]";
+ mes "Yeah...";
+ mes "There's no need to";
+ mes "rush. Take your time.";
+ close;
+ }
+ if(getequippercentrefinery(.@part) < 100) {
+ mes "[" + getarg(0) + "]";
+ mes "Oh no! If I continue to";
+ mes "refine this, there's a risk it could";
+ switch(.@material) {
+ case 985:
+ mes "be destroyed! That means that ^FF0000this equipment^000000, and ^FF0000any cards^000000 or special properties added to this armor, ^FF0000will be gone^000000.";
+ break;
+ default:
+ mes "be destroyed, and you'd ^FF0000lose the weapon^000000, any ^FF0000cards in the weapon^000000,";
+ mes "or any added special properties.";
+ break;
+ }
+ next;
+ mes "["+getarg(0)+"]";
+ mes "I can't make it any clearer.";
+ mes "Once a weapon is destroyed,";
+ mes "there's no getting it back.";
+ mes "You really have a chance to";
+ mes "^FF0000lose this weapon^000000 forever.";
+ mes "Do you still want to refine?";
+ next;
+ if(select("Yes:No") == 2){
+ mes "[" + getarg(0) + "]";
+ mes "I completely agree...";
+ mes "I might be a great refiner, but sometimes even I make mistakes.";
+ close;
+ }
+ }
+ if((countitem(.@material) < 1) || (Zeny < .@price)) {
+ mes "[" + getarg(0) + "]";
+ mes "You don't seem to have";
+ mes "enough Zeny or "+getitemname(.@material)+"...";
+ mes "Go get some more. I'll be";
+ mes "here all day if you need me.";
+ close;
+ }
+ set Zeny,Zeny-.@price;
+ delitem .@material,1;
+ 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)) {
+ failedrefitem .@part;
+ mes "[" + getarg(0) + "]";
+ set .@emo,rand(1,5);
+ if (.@emo == 1) {
+ Emotion e_cash;
+ } else {
+ Emotion e_swt;
+ }
+ set .@lose,rand(1,3);
+ if (.@lose == 1) {
+ mes "OH! MY GOD!";
+ mes "Damn it! Not again!";
+ mes "I'm terribly sorry, but you know practice does make perfect.";
+ mes "Um, right? Heh heh...";
+ } else if(.@lose == 2) {
+ mes "Nooooooo!";
+ mes "It broke!";
+ mes "I-I'm sorry!";
+ } else {
+ mes "Crap!";
+ mes "It couldn't take";
+ mes "much more tempering!";
+ mes "Sorry about this...";
+ }
+ close;
+ }
+ mes "["+getarg(0)+"]";
+ successrefitem .@part;
+ Emotion e_heh;
+ set .@win,rand(1,3);
+ if (.@win == 1) {
+ mes "Perfect!";
+ mes "Heh heh!";
+ mes "Once again,";
+ mes "flawless work";
+ mes "from the master~";
+ } else if(.@win == 2) {
+ mes "Success...!";
+ mes "Yet again, my amazing";
+ mes "talent truly dazzles";
+ mes "and shines today.";
+ } else {
+ mes "Heh heh!";
+ mes "I'm all done.";
+ mes "No doubt, my work is";
+ mes "to your satisfaction.";
+ mes "Sheer, utter perfection~";
+ }
+ close;
+ }
+
+// New 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;
+ set .@menu2,select("To the safe limit please.","I'll decide how many times.","I've changed my mind...");
+ } else set .@menu2,2;
+ switch(.@menu2){
+ case 1:
+ set .@refinecnt,.@safe - getequiprefinerycnt(.@part);
+ break;
+ case 2:
+ next;
+ mes "[" + getarg(0) + "]";
+ mes "So how many times would you like me to refine your item?";
+ next;
+ input .@refinecnt;
+ set .@refinecheck,.@refinecnt + getequiprefinerycnt(.@part);
+ if (.@refinecnt < 1 || .@refinecheck > 10) {
+ mes "[" + getarg(0) + "]";
+ mes "I can't refine this item that many times.";
+ close;
+ }
+ if(.@refinecheck > .@safe) {
+ set .@refinecheck,.@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..Hmm so be it...";
+ close;
+ }
+ }
+ break;
+ case 3:
+ next;
+ mes "[" + getarg(0) + "]";
+ mes "You said so..Hmm so be it...";
+ close;
+ }
+ set .@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..Hmm so be it...";
+ close;
+ }
+ if(countitem(.@material) < .@refinecnt || Zeny < .@fullprice) {
+ mes "[" + getarg(0) + "]";
+ mes "Is that all you got? Unfortunately I can't work for you at a lower price. Try putting yourself in my shoes.";
+ close;
+ }
+ set Zeny,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 "Clan... No, but Did you imagine I could be so stupid !?!";
+ mes "You have changed it...";
+ mes "Go out before I stun you with my Hammer!!!";
+ close;
+ }
+ mes "Clang, clang!!!";
+ if(.@menu2 == 2 && getequippercentrefinery(.@part) <= rand(100)) {
+ failedrefitem .@part;
+ emotion 23;
+ mes "[" + getarg(0) + "]";
+ mes "WAHHHH!!! I'm so sorry... I warned you this could happen...";
+ set .@refinecnt,.@refinecnt - 1;
+ if(.@refinecnt == 0) close;
+ mes "Here's the unused Zeny and Material back...";
+ getitem .@material,.@refinecnt;
+ set .@fullprice,.@refinecnt * .@price;
+ set Zeny,Zeny + .@fullprice;
+ close;
+ }
+ successrefitem .@part;
+ emotion 21;
+ set .@refinecnt,.@refinecnt - 1;
+ next;
+ }
+ mes "[" + getarg(0) + "]";
+ mes "All finished... Come again soon.";
+ close;
+}
+
+
+
+//==============================================================================
+// Material Salesmen
+//==============================================================================
+prt_in,56,68,5 script Vurewell 86,{
+ callfunc "phramain","Vurewell";
+ end;
+}
+payon,145,178,3 script Begnahd 88,{
+ callfunc "phramain","Begnahd";
+ end;
+}
+morocc_in,63,32,6 script Sade 99,{
+ callfunc "phramain","Sade";
+ end;
+}
+alberta_in,13,71,3 script Kahlamanlith 86,{
+ callfunc "phramain","Kahlamanlith";
+ end;
+}
+yuno_in01,171,27,4 script Dilemma 88,{
+ callfunc "phramain","Dilemma";
+ end;
+}
+ein_in01,15,87,3 script Tirehaus 86,{
+ callfunc "phramain","Tirehaus";
+ end;
+}
+lhz_in02,278,24,3 script Krugg 86,{
+ callfunc "phramain","Krugg";
+ end;
+}
+
+//============================================================
+//= Material Salesmen Functions
+//============================================================
+function script phramain {
+ if (checkweight(1201,1) == 0) {
+ mes "- Wait a minute !! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please try again -";
+ mes "- after you loose some weight. -";
+ close;
+ }
+ mes "[" + getarg(0) + "]";
+ mes "I sell 2 kinds of Metal";
+ mes "for tempering weaponry.";
+ mes "I have ^007777Phracon^000000 for Level 1";
+ mes "Weapons, and ^007777Emveretarcon^000000";
+ mes "for Level 2 Weapons.";
+ next;
+ switch(select("Phracon - 200 Zeny:Emveretarcon - 1000 Zeny:Ask about other Metals")) {
+ case 1:
+ set .@material,1010;
+ set .@price,200;
+ break;
+ case 2:
+ set .@material,1011;
+ set .@price,1000;
+ break;
+ case 3:
+ mes "[" + getarg(0) + "]";
+ mes "Other metals?";
+ mes "Well, you'll need special metals to upgrade higher level weapons, or any kind of armor. But you know, Oridecon and Elunium is really";
+ mes "hard to just find...";
+ close;
+ }
+ mes "[" + getarg(0) + "]";
+ mes "So how many do you wish to buy?";
+ mes "If you don't want any, please enter the number, '0.'";
+ next;
+ while(1) {
+ input .@input;
+ if (.@input == 0) {
+ mes "[" + getarg(0) + "]";
+ mes "The deal has";
+ mes "been cancelled.";
+ close;
+ }
+ else if (.@input < 0 || .@input > 500) {
+ mes "[" + getarg(0) + "]";
+ mes "Alright, you can";
+ mes "puchase up to 500.";
+ mes "No more than that,";
+ mes "got it? Good.";
+ next;
+ }
+ else {
+ break;
+ }
+ }
+ set .@sell,.@input * .@price;
+ if (Zeny < .@sell) {
+ mes "[" + getarg(0) + "]";
+ mes "Err...";
+ mes "You don't have";
+ mes "enough Zeny to buy";
+ mes ""+ .@input +" of them.";
+ close;
+ }
+ if (checkweight(.@material,.@input) == 0) {
+ mes "[" + getarg(0) + "]";
+ mes "Hmm...";
+ mes "I can't give you anything if you don't have enough room in your inventory. Why don't you put your extra things in Kafra Storage and try again?";
+ close;
+ }
+ getitem .@material,.@input;
+ set Zeny,Zeny-.@sell;
+ mes "[" + getarg(0) + "]";
+ mes "Here you are!";
+ mes "Thank you for";
+ mes "your patronage.";
+ close;
+}
+
+
+
+//==============================================================================
+// Ori/Elu Refiners
+//==============================================================================
+prt_in,63,69,3 script Dietrich 84,{
+ callfunc "orimain","Dietrich";
+ end;
+}
+payon,137,178,5 script Hakhim 88,{
+ callfunc "orimain","Hakhim";
+ end;
+}
+morocc_in,72,32,6 script Abdula 99,{
+ callfunc "orimain","Abdula";
+ end;
+}
+alberta_in,21,63,5 script Xenophon 84,{
+ callfunc "orimain","Xenophon Zolotas";
+ end;
+}
+yuno_in01,164,27,4 script Delight 88,{
+ callfunc "orimain","Delight";
+ end;
+}
+ein_in01,18,82,6 script Matestein 84,{
+ callfunc "orimain","Matestein";
+ end;
+}
+lhz_in02,281,24,5 script Fruel 84,{
+ callfunc "orimain","Fruel";
+ end;
+}
+
+//============================================================
+//= Ori/Elu Functions
+//============================================================
+function script orimain {
+ if (checkweight(1201,1) == 0) {
+ mes "- Wait a minute !! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please try again -";
+ mes "- after you loose some weight. -";
+ close;
+ }
+ mes "[" + getarg(0) + "]";
+ mes "I can purify your";
+ mes "Rough Oridecons or";
+ mes "Rough Eluniums. I'll need";
+ mes "5 Rough Stones to make";
+ mes "1 pure one for you.";
+ next;
+ switch(select("Make Oridecon:Make Elunium:Ask about Enchanted Stones")) {
+ case 1:
+ if (countitem(756) > 4) {
+ delitem 756,5; //Oridecon_Stone
+ getitem 984,1; // Oridecon
+ mes "[" + getarg(0) + "]";
+ mes "Here's your Oridecon.";
+ mes "You're welcome to come";
+ mes "back whenever you want.";
+ close;
+ }
+ else {
+ mes "[" + getarg(0) + "]";
+ mes "You're kidding me, right?";
+ mes "I just told you that I need 5 Rough Oridecons to make a pure Oridecon.";
+ close;
+ }
+ case 2:
+ if (countitem(757) > 4) {
+ delitem 757,5; //Elunium_Stone
+ getitem 985,1; // Elunium
+ mes "[" + getarg(0) + "]";
+ mes "Here's your Elunium.";
+ mes "You're welcome to come";
+ mes "back whenever you want.";
+ close;
+ }
+ else {
+ mes "[" + getarg(0) + "]";
+ mes "You're kidding me, right?";
+ mes "I just told you that I need 5 Rough Eluniums to make a pure Elunium.";
+ close;
+ }
+ case 3:
+ mes "[" + getarg(0) + "]";
+ mes "Enchanted Stones...?";
+ mes "I've been a stonesmith for 20 years, so I've heard a lot about them. Supposedly, there are";
+ mes "four different kinds.";
+ next;
+ mes "[" + getarg(0) + "]";
+ mes "Each Enchanted Stone possesses one of the following elemental properties: Earth, Wind, Water and Fire.";
+ next;
+ mes "[" + getarg(0) + "]";
+ mes "If someone combines a Enchanted Stone with a weapon while smithing, that weapon will possess the same property as the Stone.";
+ next;
+ mes "[" + getarg(0) + "]";
+ mes "Needless to say, you need to have some smithing skill to produce this kind of elemental weapon.";
+ close;
+ }
+}
+
+
+
+//=====================================================================================
+// Equipment Repairmen
+//=====================================================================================
+alberta_in,31,65,4 script Repairman#alb 86,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+moc_ruins,107,94,4 script Repairman#moc 99,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+payon,143,165,4 script Repairman#pay 88,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+prt_in,63,54,2 script Repairman#prt 86,{
+ callfunc "repairmain","Grendal";
+ end;
+}
+
+yuno_in01,175,28,3 script Repairman#juno 86,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+geffen_in,34,166,3 script Repairman#gef 99,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+aldeba_in,38,60,3 script Repairman#alde 86,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+lhz_in02,284,14,3 script Repairman#lhz 86,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+prt_gld,139,117,4 script Repairman#prt_gld 86,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+gef_fild13,263,117,4 script Repairman#gef_fild 86,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+pay_gld,295,183,4 script Repairman#pay_gld 86,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+alde_gld,220,152,4 script Repairman#alde_gld 86,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+aru_gld,189,336,4 script Repairman#aru_gld 86,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+sch_gld,340,80,7 script Repairman#sch_gld 86,{
+ callfunc "repairmain","Repairman";
+ end;
+}
+
+//============================================================
+//= Equipment Repair Function
+//============================================================
+function script repairmain {
+ set .@repairprice,5000;
+ mes "["+getarg(0)+"]";
+ mes "Hey there!";
+ mes "Do you want me";
+ mes "to repair any items?";
+ mes "You can count on me";
+ mes "for item repairs!";
+ next;
+ switch(select("Actually, I do have some items...:None at the moment.")) {
+ case 1:
+ set .@checkitem,1;
+ while (1) {
+ if (getbrokenid(.@checkitem) == 0) {
+ break;
+ }
+ set .@checkitem,.@checkitem+1;
+ }
+ set .@checkitem,.@checkitem-1;
+ if (!.@checkitem) {
+ mes "["+getarg(0)+"]";
+ mes "Oh wow, this is incredible!";
+ mes "You must take very good care of your things. None of your items are damaged!";
+ next;
+ mes "["+getarg(0)+"]";
+ mes "If everyone is like you, I'm going to be unemployed!! Haha~!";
+ close;
+ }
+ mes "["+getarg(0)+"]";
+ mes "Hmm...";
+ mes "Let's see...";
+ mes "Out of all your items,";
+ mes "" + .@checkitem + " are damaged.";
+ mes "Would you like to repair?";
+ next;
+ set .@totalcost,.@repairprice*.@checkitem;
+ mes "["+getarg(0)+"]";
+ mes "Each repair costs " + .@repairprice + " Zeny. So to repair all your damaged items would cost " + .@totalcost + " Zeny! Would you like to repair the items?";
+ next;
+ switch(select("Yes:No")) {
+ case 1:
+ if (Zeny < .@totalcost) {
+ mes "["+getarg(0)+"]";
+ mes "Whoa whoa...";
+ mes "Check your wallet before you receive the repair bill! I can't repair anything because you don't have enough Zeny.";
+ close;
+ }
+ set .@checkitem2,1;
+ while (1) {
+ if (getbrokenid(.@checkitem2) == 0) {
+ break;
+ }
+ set .@checkitem2,.@checkitem2+1;
+ }
+ set .@checkitem2,.@checkitem2-1;
+ if (.@checkitem == .@checkitem2) {
+ set zeny,zeny-.@totalcost;
+ while (.@checkitem) {
+ repair(.@checkitem);
+ set .@checkitem,.@checkitem-1;
+ }
+ mes "["+getarg(0)+"]";
+ mes "Okay! All done. Now, try to be a little more careful. Items have lives too you know.";
+ close;
+ }
+ else {
+ mes "["+getarg(0)+"]";
+ mes "Mmm? Something's wrong. Wait... Equip the items you need to repair and then come back to me.";
+ close;
+ }
+ case 2:
+ mes "["+getarg(0)+"]";
+ mes "Well, it's no skin off my nose, but it's not good to leave items damaged. You should get them repaired as soon as possible!";
+ close;
+ }
+ case 2:
+ mes "["+getarg(0)+"]";
+ mes "Hohoho...";
+ mes "You don't have";
+ mes "any business with me";
+ mes "if you don't have any";
+ mes "items to repair.";
+ close;
+ }
+}
+
+//=====================================================================================
+// +11 and above Weapon/Armor Refiners
+//=====================================================================================
+prt_in,90,72,5 script Bestry#prt 826,{
+ callfunc "refinenew","Bestry",0,0;
+ end;
+}
+morocc_in,64,41,5 script Bestry#moc 826,{
+ callfunc "refinenew","Bestry",0,0;
+ end;
+}
+payon_in01,18,132,3 script Bestry#pay 826,{
+ callfunc "refinenew","Bestry",0,0;
+ end;
+}
+
+//=====================================================================================
+// +11 and above Weapon/Armor Function
+//=====================================================================================
+//= To allow auto safe refining/multiple refining set the
+//= second argument to '1' in the function call.
+//= If you enable this function make sure you set the appropiate +x Level in your refine_db.txt
+//= to 100 and adjust the .@safe Value in the Script to your desired max. Safe Level.
+//= Otherwise it won't work .
+//=
+//= In the official script the NPC uses an new Command which is called 'GetExdEquipIsSuccessRefinery',
+//= this command seems to generate a random number between 1 and 3 to decide either of
+//= the following:
+//= 1: Success
+//= 2: Downgrade
+//= 3: Failure
+//=
+//= If you want to enable that feature just set the third argument to '1' in the function call.
+//= Otherwise it will use the % chance in your refine_db.txt .
+//= Side Note: Current values for +11 and above upgrading in the refine_db.txt are custom.
+//=====================================================================================
+
+function script refinenew {
+
+ mes "["+ getarg(0) +"]";
+ mes "I am the best Blacksmith ever!";
+ mes "I don't work with normal, boring items.";
+ mes "But only with items that are level 10 or higher!";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "Anyway, you may use my services if your item is lv 10 or higher.";
+ mes "What do you want to have refined?";
+ next;
+ setarray .@position$[1],"Head","Body","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3";
+ set .@menu$,"";
+ for( set .@i,1; .@i <= 10; set .@i,.@i+1 )
+ {
+ if( getequipisequiped(.@i) )
+ set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]";
+
+ set .@menu$, .@menu$ + ":";
+ }
+ set .@part,select(.@menu$);
+ if(!getequipisequiped(.@part)) {
+ mes "[" + getarg(0) + "]";
+ mes "You're not wearing";
+ mes "anything there that";
+ mes "I can refine.";
+ emotion e_an;
+ close;
+ }
+ //Check if the item is refinable...
+ if(!getequipisenableref(.@part)) {
+ mes "[" + getarg(0) + "]";
+ mes "I don't think I can";
+ mes "refine this item at all...";
+ close;
+ }
+ //Check if the item is identified... (Don't know why this is in here... but kept it anyway)
+ if(!getequipisidentify(.@part)) {
+ mes "[" + getarg(0) + "]";
+ mes "You can't refine this";
+ mes "if you haven't appraised";
+ mes "it first. Make sure your";
+ mes "stuff is identified before";
+ mes "I can refine it.";
+ close;
+ }
+ //Check to see if the items is at least +10
+ if(getequiprefinerycnt(.@part) < 10) {
+ mes "["+ getarg(0) +"]";
+ mes "I said I don't work with Equipment under lv. 10.";
+ close;
+ }
+ if(getequiprefinerycnt(.@part) >= 20) {
+ mes "["+ getarg(0) +"]";
+ mes "I can't refine this";
+ mes "any more. This is as";
+ mes "refined as it gets!";
+ close;
+ }
+ set .@refineitemid, getequipid(.@part); // save id of the item
+ set .@refinerycnt, getequiprefinerycnt(.@part); //save refinery count
+ if ((getequipweaponlv(.@part) >= 1) && (getequipweaponlv(.@part) <= 4)) {
+ set .@material,6224;
+ set .@price,100000;
+ set .@safe,10;
+ 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.";
+ mes "Are you sure you want to continue?";
+ } else {
+ set .@material,6223;
+ set .@price,100000;
+ set .@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 "Well, no challenge is one way..";
+ mes "No risk.. that could be wise.";
+ close;
+ }
+ if(getarg(1) != 1) {
+ if ((getequipweaponlv(.@part) >= 1) && (getequipweaponlv(.@part) <= 4)) {
+ mes "["+ getarg(0) +"]";
+ mes "This weapon already has been refined serveral times.";
+ mes "It could be destroyed if you try more.";
+ mes "It won't break 100%, but is has a small chance.";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "You could have the upgrade level of the weapon decreased,";
+ mes "or if it breaks, you will lose ^FF0000any cards^000000 or special properties added to it.";
+ } else {
+ mes "["+ getarg(0) +"]";
+ mes "This armor already has been refined serveral times.";
+ mes "It could be destroyed if you try more.";
+ mes "It won't break 100%, but is has a small chance.";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "You could have the upgrade level of the armor decreased,";
+ mes "or if it breaks, you will lose ^FF0000any cards^000000 or special properties added to it.";
+ }
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "Do you want me to refine it?";
+ mes "I think I gave you enough warnings.";
+ next;
+ switch (select("Yes.:No.")) {
+ case 1:
+ break;
+ case 2:
+ mes "["+ getarg(0) +"]";
+ mes "Well, no challenge is one way..";
+ mes "No risk.. that could be wise.";
+ close;
+ }
+ if(countitem(.@material) < 1 || Zeny < .@price) {
+ mes "["+ getarg(0) +"]";
+ mes "Hm, it seems you don't have enough materials or money.";
+ mes "Please check it out.";
+ close;
+ }
+ set Zeny,Zeny - .@price;
+ delitem .@material,1;
+ 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(getarg(2) == 1){
+ set .@rand,rand(1,3);
+ if (.@rand == 1) {
+ mes "Clang! Clang! Clang! Clang!";
+ successrefitem .@part;
+ next;
+ emotion e_no1;
+ mes "["+ getarg(0) +"]";
+ mes "Good! Succes!!!";
+ mes "I am the best Blacksmith.";
+ close;
+ }
+ if (.@rand == 2) {
+ mes "["+ getarg(0) +"]";
+ mes "Clang! Clang! Clang! Clang!";
+ downrefitem .@part;
+ next;
+ set .@emo, rand(1,5);
+ if (.@emo == 1) {
+ emotion e_cash;
+ }
+ else {
+ emotion e_omg;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "Ahhh!!!";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "Oh my!";
+ mes "The upgrade level has dropped...";
+ mes "There could've been made an mistake even though I am the best ever.";
+ mes "It was out of my hands.";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "I will do a better job next time! Don't worry!";
+ close;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "Clang! Clang! Clang!";
+ failedrefitem .@part;
+ next;
+ set .@emo, rand(1,5);
+ if (.@emo == 1) {
+ emotion e_cash;
+ } else {
+ emotion 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 "There could've been made an mistake even though I am the best ever.";
+ mes "It was out of my hands.";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "I will do a better job next time! Don't worry!";
+ close;
+ }
+ set .@rand,rand(100);
+ if (getequippercentrefinery(.@part) > .@rand) {
+ mes "Clang! Clang! Clang! Clang!";
+ successrefitem .@part;
+ next;
+ emotion e_no1;
+ mes "["+ getarg(0) +"]";
+ mes "Good! Succes!!!";
+ mes "I am the best Blacksmith.";
+ close;
+ }
+ if (getequippercentrefinery(.@part) < .@rand) {
+ mes "["+ getarg(0) +"]";
+ mes "Clang! Clang! Clang! Clang!";
+ downrefitem .@part;
+ next;
+ set .@emo, rand(1,5);
+ if (.@emo == 1) {
+ emotion e_cash;
+ } else {
+ emotion e_omg;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "Ahhh!!!";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "Oh my!";
+ mes "The upgrade level has dropped...";
+ mes "There could've been made an mistake even though I am the best ever.";
+ mes "It was out of my hands.";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "I will do a better job next time! Don't worry!";
+ close;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "Clang! Clang! Clang!";
+ failedrefitem .@part;
+ next;
+ set .@emo, rand(1,5);
+ if (.@emo == 1) {
+ emotion e_cash;
+ } else {
+ emotion 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 "There could've been made an mistake even though I am the best ever.";
+ mes "It was out of my hands.";
+ 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;
+ set .@menu2,select("To the safe limit please.","I'll decide how many times.","I've changed my mind...");
+ } else {
+ set .@menu2,2;
+ }
+ switch(.@menu2){
+ case 1:
+ set .@refinecnt,.@safe - getequiprefinerycnt(.@part);
+ break;
+ case 2:
+ next;
+ mes "[" + getarg(0) + "]";
+ mes "So how many times would you like me to refine your item?";
+ next;
+ input .@refinecnt;
+ set .@refinecheck,.@refinecnt + getequiprefinerycnt(.@part);
+ if (.@refinecnt < 1 || .@refinecheck > 10) {
+ mes "[" + getarg(0) + "]";
+ mes "I can't refine this item that many times.";
+ close;
+ }
+ if(.@refinecheck > .@safe) {
+ set .@refinecheck,.@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..Hmm so be it...";
+ close;
+ }
+ }
+ break;
+ case 3:
+ next;
+ mes "[" + getarg(0) + "]";
+ mes "You said so..Hmm so be it...";
+ close;
+ }
+ set .@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..Hmm so be it...";
+ close;
+ }
+ if(countitem(.@material) < .@refinecnt || Zeny < .@fullprice) {
+ mes "[" + getarg(0) + "]";
+ mes "Is that all you got? Unfortunately I can't work for you at a lower price. Try putting yourself in my shoes.";
+ close;
+ }
+ set Zeny,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 "Clan... No, but Did you imagine I could be so stupid !?!";
+ mes "You have changed it...";
+ mes "Go out before I stun you with my Hammer!!!";
+ close;
+ }
+ if(getarg(2) == 1){
+ set .@rand,rand(1,3);
+ if (.@rand == 1) {
+ mes "Clang! Clang! Clang! Clang!";
+ successrefitem .@part;
+ next;
+ emotion e_no1;
+ mes "["+ getarg(0) +"]";
+ mes "Good! Succes!!!";
+ mes "I am the best Blacksmith.";
+ close;
+ }
+ if (.@rand == 2) {
+ mes "["+ getarg(0) +"]";
+ mes "Clang! Clang! Clang! Clang!";
+ downrefitem .@part;
+ next;
+ set .@emo, rand(1,5);
+ if (.@emo == 1) {
+ emotion e_cash;
+ }
+ else {
+ emotion e_omg;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "Ahhh!!!";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "Oh my!";
+ mes "The upgrade level has dropped...";
+ mes "There could've been made an mistake even though I am the best ever.";
+ mes "It was out of my hands.";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "I will do a better job next time! Don't worry!";
+ close;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "Clang! Clang! Clang!";
+ failedrefitem .@part;
+ next;
+ set .@emo, rand(1,5);
+ if (.@emo == 1) {
+ emotion e_cash;
+ } else {
+ emotion 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 "There could've been made an mistake even though I am the best ever.";
+ mes "It was out of my hands.";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "I will do a better job next time! Don't worry!";
+ close;
+ }
+ set .@rand,rand(100);
+ if (getequippercentrefinery(.@part) > .@rand) {
+ mes "Clang! Clang! Clang! Clang!";
+ successrefitem .@part;
+ next;
+ emotion e_no1;
+ mes "["+ getarg(0) +"]";
+ mes "Good! Succes!!!";
+ mes "I am the best Blacksmith.";
+ close;
+ }
+ if (getequippercentrefinery(.@part) < .@rand) {
+ mes "["+ getarg(0) +"]";
+ mes "Clang! Clang! Clang! Clang!";
+ downrefitem .@part;
+ next;
+ set .@emo, rand(1,5);
+ if (.@emo == 1) {
+ emotion e_cash;
+ } else {
+ emotion e_omg;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "Ahhh!!!";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "Oh my!";
+ mes "The upgrade level has dropped...";
+ mes "There could've been made an mistake even though I am the best ever.";
+ mes "It was out of my hands.";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "I will do a better job next time! Don't worry!";
+ close;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "Clang! Clang! Clang!";
+ failedrefitem .@part;
+ next;
+ set .@emo, rand(1,5);
+ if (.@emo == 1) {
+ emotion e_cash;
+ } else {
+ emotion 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 "There could've been made an mistake even though I am the best ever.";
+ mes "It was out of my hands.";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "I will do a better job next time! Don't worry!";
+ close;
+ }
+ mes "[" + getarg(0) + "]";
+ mes "All finished... Come again soon.";
+ close;
+}
+
+//==============================================================================
+// Ori/Elu to Carnium/Bradium Refiners
+//==============================================================================
+prt_in,85,71,5 script Austry#prt 826,{
+ callfunc "oreref","Austry";
+ end;
+}
+payon_in01,14,125,5 script Austry#pay 826,{
+ callfunc "oreref","Austry";
+ end;
+}
+morocc_in,60,38,5 script Austry#moc 826,{
+ callfunc "oreref","Austry";
+ end;
+}
+
+//============================================================
+//= Ori/Elu to Carnium/Bradium Function
+//============================================================
+
+function script oreref {
+ mes "["+ getarg(0) +"]";
+ 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:
+ if ((countitem(984) > 2) && (Zeny > 49999)) {
+ delitem 984,3; //Oridecon
+ set Zeny, Zeny - 50000;
+ getitem 6224,1; //Bradium
+ mes "["+ getarg(0) +"]";
+ mes "Ok! Here is your Bradium.";
+ mes "Take it and use it well.";
+ close;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "You better not be trying";
+ mes "to cheat me because you";
+ mes "don't have enough zeny";
+ mes "or Oridecon.";
+ close;
+ case 2:
+ if ((countitem(985) > 2) && (Zeny > 49999)) {
+ delitem 985,3; //Elunium
+ set Zeny, Zeny - 50000;
+ getitem 6223,1; //Carnium
+ mes "["+ getarg(0) +"]";
+ mes "Ok! Here is your Carnium.";
+ mes "Take it and use it well.";
+ close;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "You better not be trying";
+ mes "to cheat me because you";
+ mes "don't have enough zeny";
+ mes "or Elunium.";
+ close;
+ case 3:
+ if ((countitem(6090) > 0) && (Zeny > 49999)) {
+ delitem 6090,1; //Purified_Bradium
+ set Zeny, Zeny - 50000;
+ getitem 6223,1; //Carnium
+ mes "["+ getarg(0) +"]";
+ mes "Refining with Purified Bradium";
+ mes "is a little expensive. I can";
+ mes "trade it for some Carnium.";
+ mes "Take it and use it well.";
+ close;
+ }
+ mes "["+ getarg(0) +"]";
+ mes "You better not be trying";
+ mes "to cheat me because you";
+ mes "don't have enough zeny";
+ mes "or Purified Bradium.";
+ close;
+ case 4:
+ mes "["+ getarg(0) +"]";
+ mes "Hmm...";
+ close;
+ }
+} \ No newline at end of file
diff --git a/npc/pre-re/merchants/renters.txt b/npc/pre-re/merchants/renters.txt
new file mode 100644
index 000000000..a0a866ca5
--- /dev/null
+++ b/npc/pre-re/merchants/renters.txt
@@ -0,0 +1,381 @@
+//===== rAthena Script =======================================
+//= Renters
+//===== By: ==================================================
+//= kobra_k88, mod by Lupus
+//===== Current Version: =====================================
+//= 2.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Knight and Crusader Peco Peco Breeders, Falcon Breeder scripts
+//===== Additional Comments: =================================
+//= Fully working
+//= Added another Falcon Master into the Hunters Guild [Lupus]
+//= 1.2: replaced checkoption(x) with checkriding,checkfalcon [Lupus]
+//= 1.3: Added support Adv Classes + Baby Class [Lupus]
+//= 1.4: Added different prices for normal, advanced and baby classes
+//= but you could set them to the same [Lupus]
+//= 1.5: Fixed spelling mistakes [Nexon]
+//= 1.5a: Small fix (Falcon Taming -> Falcon Mastery) [Komurka]
+//= 1.6: Moved the Falcon Master to Hugel [Poki#3]
+//= 1.7 Updated to Aegis 10.3 standards. [L0ne_W0lf]
+//= 1.8 Added 3rd Job creature NPCs (Dragon/Gryphon) [L0ne_W0lf]
+//= 1.9 Enabled Gryphon Renter NPC and added Mado Gear NPC. [Masao]
+//= 2.0 Fixed problems with third classes and new mounts. [Euphy]
+//============================================================
+
+// PecoPeco Breeder (for Knights)-------------------------------------------
+prontera,55,350,5 script Peco Peco Breeder#knt 105,{
+ if(Upper==0) set .@price,2500; //Normal Peco - default price
+ if(Upper==1) set .@price,2500; //Armored Peco
+ if(Upper==2) set .@price,2500; //Baby Peco
+
+ mes "[Peco Peco Breeder]";
+ if (BaseJob == Job_Knight && Class < Job_Rune_Knight) {
+ mes "Welcome.";
+ mes "Honorable Knight,";
+ mes "would you like to rent";
+ mes "a Peco Peco? The rental";
+ mes "fee is "+.@price+" zeny.";
+ next;
+ switch(select("Rent Peco Peco:Cancel")) {
+ case 1:
+ if (zeny < .@price) {
+ mes "[Peco Peco Breeder]";
+ mes "You do not";
+ mes "have enough zeny.";
+ mes "Are you...";
+ mes "bankrupt?";
+ close;
+ }
+ else if(getskilllv("KN_RIDING") == 0) {
+ mes "[Peco Peco Breeder]";
+ mes "I'm sorry, but you're";
+ mes "not eligible for this";
+ mes "service. Please go learn";
+ mes "the Peco Peco Ride skill first.";
+ close;
+ }
+ else if(checkriding()) {
+ mes "[Peco Peco Breeder]";
+ mes "You're already";
+ mes "mounted on a";
+ mes "Peco Peco.";
+ close;
+ }
+ else if(ismounting()) {
+ mes "[Peco Peco Breeder]";
+ mes "Please remove your cash mount.";
+ close;
+ }
+ set zeny,zeny-.@price;
+ setriding;
+ close;
+ case 2:
+ mes "[Peco Peco Breeder]";
+ mes "I see.";
+ mes "Well then,";
+ mes "have a good day.";
+ close;
+ }
+ } else {
+ mes "I'm sorry, but these";
+ mes "Peco Pecos are only";
+ mes "available for Knights";
+ mes "and Lord Knights.";
+ close;
+ }
+}
+
+// Grand PecoPeco Breeder (for Crusaders)-------------------------------------------
+prontera,232,318,3 script Peco Peco Breeder#cru 105,{
+ if(Upper==0) set .@price,3500; //Normal Peco - default price
+ if(Upper==1) set .@price,3500; //Armored Peco
+ if(Upper==2) set .@price,3500; //Baby Peco
+
+ mes "[PecoPeco Breeder]";
+ if (BaseJob == Job_Crusader && Class < Job_Rune_Knight) {
+ if(Upper != 1 ) mes "Welcome, Crusader.";
+ else mes "Welcome, Paladin.";
+ mes "We have a special";
+ mes "Peco Peco prepared";
+ mes "for you. To rent one";
+ mes "will cost "+.@price+" zeny.";
+ next;
+ switch(select("Rent a PecoPeco:Quit")) {
+ case 1:
+ if (zeny < .@price) {
+ mes "[Peco Peco Breeder]";
+ mes "You do not";
+ mes "have enough zeny.";
+ mes "If you would like";
+ mes "a Peco Peco please";
+ mes "bring "+.@price+" zeny...";
+ close;
+ }
+ else if(getskilllv("KN_RIDING") == 0) {
+ mes "[Peco Peco Breeder]";
+ mes "You must first learn";
+ mes "to ride a PecoPeco before";
+ mes "I can rent one to you.";
+ close;
+ }
+ else if(checkriding()) {
+ mes "[Peco Peco Breeder]";
+ mes "You are already";
+ mes "mounted on a Peco Peco.";
+ close;
+ }
+ else if(ismounting()) {
+ mes "[Peco Peco Breeder]";
+ mes "Please remove your cash mount.";
+ close;
+ }
+ set zeny,zeny-.@price;
+ setriding;
+ close;
+ case 2:
+ mes "[PecoPeco Breeder]";
+ mes "See you around.";
+ close;
+ }
+ } else {
+ mes "What can I do for you?";
+ mes "Please be aware that";
+ mes "this Peco Peco rental";
+ mes "service is strictly for";
+ mes "Crusaders and Paladins.";
+ close;
+ }
+}
+
+// Falcon Master--------------------------------------------------------------
+hu_in01,381,304,5 script Falcon Breeder#hnt 105,{
+ if(Upper==0) set .@price,2500; //Normal Falcon - default price
+ if(Upper==1) set .@price,2500; //Scarf Falcon
+ if(Upper==2) set .@price,2500; //Baby Falcon
+
+ mes "[Falcon Breeder]";
+ if (BaseJob == Job_Hunter) {
+ mes "Do you need a Falcon?";
+ mes "You can rent your own";
+ mes "trusty bird of prey for a";
+ mes "fee of just "+.@price+" zeny~";
+ next;
+ switch(select("Rent Falcon:Cancel")) {
+ case 1:
+ if (zeny < .@price) {
+ mes "[Falcon Breeder]";
+ mes "What is this?";
+ mes "You don't have";
+ mes "enough zeny?!";
+ mes "You better start";
+ mes "hunting money";
+ mes "instead of monsters~";
+ close;
+ }
+ else if(getskilllv("HT_FALCON") == 0) {
+ mes "[Falcon Breeder]";
+ mes "Gosh~";
+ mes "Go learn how to";
+ mes "manage a Falcon";
+ mes "first! I can't rent one";
+ mes "to you if you can't";
+ mes "handle it, you know.";
+ close;
+ }
+ else if(checkfalcon()) {
+ mes "[Falcon Breeder]";
+ mes "Um...";
+ mes "You already have";
+ mes "a Falcon. It's right";
+ mes "there, can't you see it?";
+ close;
+ }
+ set zeny,zeny-.@price;
+ setfalcon;
+ close;
+ case 2:
+ mes "[Falcon Breeder]";
+ mes "W-wait, where're";
+ mes "you goin'? These";
+ mes "Falcons are top notch,";
+ mes "I guarantee it! C'mon, yo~";
+ close;
+ }
+ } else {
+ mes "Young fool!";
+ mes "Falcons can only";
+ mes "be used by Hunters";
+ mes "and Snipers, capish?";
+ mes "...Heh heh, jealous?";
+ close;
+ }
+}
+
+// Dragon Breeder on the Rune Knight job change map, couldn't find NPC on iRO.
+job3_rune01,88,62,5 script Dragon Breeder 105,{
+ mes "[Dragon Breeder]";
+ if (Class == Job_Rune_Knight || Class == Job_Rune_Knight_T || Class == Job_Baby_Rune) {
+ mes "Welcome. Would you like to rent a Dragon?";
+ next;
+ switch(select("Yes:No")) {
+ case 1:
+ //if (!getskilllv("RK_DRAGONTRAINING")) {
+ if (!getskilllv("KN_RIDING")) {
+ mes "[Dragon Breeder]";
+ mes "Please learn how to ride a Dragon first.";
+ close;
+ }
+ else if (checkriding()) {
+ mes "[Dragon Breeder]";
+ mes "You already have a Dragon.";
+ close;
+ }
+ else if(ismounting()) {
+ mes "[Dragon Breeder]";
+ mes "Please remove your cash mount.";
+ close;
+ }
+ setdragon;
+ close;
+ case 2:
+ mes "[Dragon Breeder]";
+ mes "I see. Then have a great day.";
+ close;
+ }
+ }
+ mes "What are you doing here?";
+ mes "Only Rune Knights can rent a Dragon.";
+ close;
+}
+
+// Dragon/Gryphon Master
+prontera,130,213,5 script Riding Creature Master 105,{
+ mes "[Riding Creature Master]";
+ if (Class == Job_Rune_Knight || Class == Job_Rune_Knight_T || Class == Job_Baby_Rune) {
+ mes "Welcome. Would you like to rent a Dragon?";
+ next;
+ switch(select("Yes:No")) {
+ case 1:
+ //if (!getskilllv("RK_DRAGONTRAINING")) {
+ if (!getskilllv("KN_RIDING")) {
+ mes "[Riding Creature Master]";
+ mes "Please learn how to ride a Dragon first.";
+ close;
+ }
+ else if (checkriding()) {
+ mes "[Riding Creature Master]";
+ mes "You already have a Dragon.";
+ close;
+ }
+ else if(ismounting()) {
+ mes "[Riding Creature Master]";
+ mes "Please remove your cash mount.";
+ close;
+ }
+ setdragon;
+ close;
+ case 2:
+ mes "[Riding Creature Master]";
+ mes "I see. Then have a great day.";
+ close;
+ }
+ }
+ if (Class == Job_Royal_Guard || Class == Job_Royal_Guard_T || Class == Job_Baby_Guard) {
+ mes "Welcome. Would you like to rent a Gryphon?";
+ next;
+ switch(select("Yes:No")) {
+ case 1:
+ if(!getskilllv("KN_RIDING")) {
+ mes "[Riding Creature Master]";
+ mes "Please learn how to ride a Gryphon first.";
+ close;
+ }
+ else if (checkriding()) {
+ mes "[Riding Creature Master]";
+ mes "You already have a Gryphon.";
+ close;
+ }
+ else if(ismounting()) {
+ mes "[Riding Creature Master]";
+ mes "Please remove your cash mount.";
+ close;
+ }
+ setriding;
+ close;
+ case 2:
+ mes "[Riding Creature Master]";
+ mes "I see. Then have a great day.";
+ close;
+ }
+ }
+ mes "I'm here to provide Rune Knights and Royal Guards with riding creatures.";
+ close;
+}
+
+// Peco removing NPC
+prontera,125,208,5 script Peco Peco Remover 105,{
+ mes "[Soldier]";
+ mes "If you're unable to dismount from a Peco Peco";
+ mes "for some unknown reason,";
+ mes "please feel free to use my services.";
+ if (checkriding()) {
+ next;
+ mes "[Soldier]";
+ mes "You're riding a Peco Peco.";
+ mes "Would you like to dismount?";
+ next;
+ switch(select("Yes:No")) {
+ case 1:
+ setriding 0;
+ mes "[Soldier]";
+ mes "Say, how does it feel to";
+ mes "step on the ground on your own";
+ mes "feet again?";
+ close;
+ case 2:
+ mes "[Soldier]";
+ mes "I see. Please feel free to ask me";
+ mes "if you change your mind.";
+ close;
+ }
+ }
+ close;
+}
+
+// Magic Gear Renter
+prontera,163,178,4 script Magic Gear Master 105,{
+ mes "[Magic Gear Master]";
+ if (Class == Job_Mechanic || Class == Job_Mechanic_T || Class == Job_Baby_Mechanic) {
+ mes "Welcome. Would you like to rent a Magic Gear?";
+ next;
+ switch(select("Yes:No")) {
+ case 1:
+ if (!getskilllv("NC_MADOLICENCE")) {
+ mes "[Magic Gear Master]";
+ mes "Please learn how to use a Magic Gear first.";
+ close;
+ }
+ else if (checkmadogear()) {
+ mes "[Magic Gear Master]";
+ mes "You already have a Magic Gear.";
+ close;
+ }
+ else if(ismounting()) {
+ mes "[Magic Gear Master]";
+ mes "Please remove your cash mount.";
+ close;
+ }
+ setmadogear;
+ close;
+ case 2:
+ mes "[Magic Gear Master]";
+ mes "I see. Then have a great day.";
+ close;
+ }
+ }
+ mes "How may I help you?";
+ mes "Magic Gears are only available for Mechanics.";
+ close;
+} \ No newline at end of file
diff --git a/npc/pre-re/merchants/shops.txt b/npc/pre-re/merchants/shops.txt
new file mode 100644
index 000000000..00adf71b4
--- /dev/null
+++ b/npc/pre-re/merchants/shops.txt
@@ -0,0 +1,380 @@
+//===== rAthena Script =======================================
+//= Shops
+//===== By: ==================================================
+//= rAthena Dev Team
+//===== Current Version: =====================================
+//= 3.1
+//===== Compatible With: =====================================
+//= rAthena 1.0+
+//===== Description: =========================================
+//= Town shop NPCs.
+//===== Additional Comments: =================================
+//= For earlier update notes see the bottom.
+//= 2.0 updated several shop npcs. [L0ne_W0lf]
+//= Added proper Venom Knife dealer, and consiquently removed wenom Knives from weapon dealers.
+//= Moved all Cooking related NPCs to their own section.
+//= Re-alphabetized sections. Some of them were out of place.
+//= Removed commented out shops.
+//= 2.0b Einbech tool dealer got lost somewhere along the way, re-added. [L0ne_W0lf]
+//= 2.1 Fixed missing item from "Fresh Fish" from cooking addition shops. [L0ne_W0lf]
+//= 2.1a Fixed the second "Line" selling in Comodo Weapon shop. (Should have been Whip) [L0ne_W0lf]
+//= 2.2 Added Veins shops. [L0ne_W0lf]
+//= 2.3 Corrected NPC names to fall within proper restrictions. [L0ne_W0lf]
+//= 2.4 Fixed Jawaii Ice cream salesman. [L0ne_W0lf]
+//= 2.5 Updated Morroc shops to episode 12.1. [L0ne_W0lf]
+//= 2.6 Added Brasilis shops. [L0ne_W0lf]
+//= Updated Pet Groomers with four new pet feeds.
+//= 2.7 Added Trading merchants, (ninja& gunslinger) to Izlude and Alberta. [L0ne_W0lf]
+//= Made Brasilis shop names unique, and uncommented.
+//= Changed the whip sold in comodo weapon shop. (1956 ->1960)
+//= Added Fire and Silver arrow to Einbroch tool dealer.
+//= Re-added Bill of Birds to Morroc Item Collectors.
+//= 2.7a Actually applied the right update to the comodo weapon shop. [L0ne_W0lf]
+//= 2.7b Corrected Brasilis Fruit Merchant. (bugreport:4278) [L0ne_W0lf]
+//= 2.8 Updates to Brasilis Merchants. [L0ne_W0lf]
+//= 2.9 Added missing Cooking Items for Material Seller. [tr0n]
+//= 3.0 Added all new Shops which were available in the latest available official files. [Masao]
+//= 3.1 Moved some merchants to a separate renewal file. [Kenpachi]
+//============================================================
+
+//=======================================================
+// Alberta
+//=======================================================
+alb2trea,87,65,5 shop Tool Dealer#alb 83,1750:-1,1751:-1,1752:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1
+alberta_in,165,96,0 shop Item Collector#alb 74,911:-1,528:-1
+alberta_in,182,97,0 shop Tool Dealer#alb2 73,1750:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,2243:-1
+alberta_in,180,15,0 shop Armor Dealer#alb 101,2101:-1,2103:-1,2401:-1,2403:-1,2405:-1,2501:-1,2503:-1,2505:-1,2203:-1,2201:-1,2205:-1,2226:-1,2301:-1,2303:-1,2305:-1,2321:-1,2328:-1,2332:-1,2307:-1,2309:-1,2312:-1,2314:-1,2628:-1
+alberta_in,188,21,0 shop Weapon Dealer#alb 49,1750:-1,1751:-1,1101:-1,1104:-1,1107:-1,1201:-1,1204:-1,1207:-1,1601:-1,1701:-1,1301:-1,1351:-1,1354:-1,1357:-1,1360:-1
+alberta_in,175,97,4 shop Weapon Dealer#alb2 82,1146:-1,1245:-1
+alberta_in,176,81,3 shop Trading Merchant#alb 900,13200:-1,13201:-1,13202:-1,13150:-1,13102:-1,13151:-1,13154:-1,13155:-1,13163:-1,13165:-1,13168:-1
+
+//=======================================================
+// Al De Baran
+//=======================================================
+aldeba_in,20,60,0 shop Armor Dealer#alde 101,2228:-1,2103:-1,2105:-1,2307:-1,2309:-1,2312:-1,2314:-1,2316:-1,2505:-1,2405:-1,2628:-1,2627:-1
+aldeba_in,28,54,0 shop Weapon Dealer#alde 49,1201:-1,1204:-1,1207:-1,1210:-1,1213:-1,1216:-1,1219:-1,1222:-1
+aldeba_in,22,47,4 shop Weapon Dealer#alde2 713,1146:-1,1245:-1
+aldeba_in,94,56,5 shop Tool Dealer#alde 83,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,611:-1,610:-1
+alde_alche,38,184,3 shop Material Seller#alche 755,7143:-1,7141:-1,7140:-1,6248:-1,6250:-1,6251:-1,6255:-1,6261:-1,6262:-1,6297:-1
+
+//=======================================================
+// Amatsu
+//=======================================================
+ama_in01,89,28,5 shop Armor Dealer#ama 757,2211:-1,2401:-1,2403:-1,2501:-1,2503:-1,2101:-1,2103:-1,2305:-1,2321:-1,2332:-1,2328:-1,2627:-1
+ama_in01,102,28,3 shop Weapon Dealer#ama 766,1207:-1,1216:-1,1107:-1,1122:-1,1116:-1,1154:-1,1407:-1,1457:-1,1354:-1,1519:-1
+ama_in01,24,30,5 shop Tool Dealer#ama 763,1750:-1,1770:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1
+// Ninja Shops
+que_ng,72,31,2 shop Boonji#nin 83,13250:-1,13251:-1,13252:-1,13253:-1,13254:-1
+que_ng,73,26,5 shop Boonray#nin 83,2117:-1,7521:-1,7522:-1,7523:-1,7524:-1
+
+//=======================================================
+// Ayothaya
+//=======================================================
+ayo_in01,18,182,1 shop Tool Dealer#ayo 840,1750:-1,1770:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1
+ayo_in01,90,192,3 shop Weapon Dealer#ayo 843,1207:-1,1216:-1,1107:-1,1122:-1,1116:-1,1154:-1,1407:-1,1457:-1,1354:-1,1519:-1
+ayo_in01,90,160,1 shop Armor Dealer#ayo 842,2211:-1,2401:-1,2403:-1,2501:-1,2503:-1,2101:-1,2103:-1,2305:-1,2321:-1,2332:-1,2328:-1,2627:-1
+
+//=======================================================
+// Brasilis
+//=======================================================
+brasilis,252,257,3 shop Tool Dealer#bra 478,645:-1,656:-1,601:-1,602:-1,611:-1,1065:-1,610:-1
+brasilis,244,243,3 shop Weapon Dealer#bra 477,1407:-1,1457:-1,1354:-1,1519:-1,13003:-1
+brasilis,201,309,3 shop Pet Groomer#bra 476,537:-1,643:-1
+brasilis,221,128,3 shop Fruit Gardener#bra 477,11515:-1,513:-1,11516:-1
+
+//=======================================================
+// Comodo
+//=======================================================
+cmd_in01,117,165,4 shop Armor Dealer#cmd 101,2226:-1,2228:-1,2103:-1,2105:-1,2405:-1,2503:-1,2505:-1,2305:-1,2321:-1,2307:-1,2309:-1,2335:-1,2312:-1,2314:-1,2316:-1
+cmd_in01,128,165,2 shop Weapon Dealer#cmd 49,1901:-1,1903:-1,1905:-1,1909:-1,1911:-1,1907:-1,1950:-1,1952:-1,1954:-1,1958:-1,1960:-1,1956:-1
+cmd_in01,79,182,5 shop Tool Dealer#cmd 83,1770:-1,501:-1,502:-1,503:-1,504:-1,645:-1,656:-1,657:-1,601:-1,602:-1,611:-1,1065:-1
+comodo,296,125,4 shop Souvenir Vendor#cmd 101,965:-1,964:-1
+cmd_fild07,257,126,5 shop Tool Dealer#cmd2 83,1770:-1,501:-1,502:-1,503:-1,504:-1,645:-1,656:-1,601:-1,602:-1,611:-1,1065:-1
+cmd_fild07,250,98,2 shop Weapon Dealer#cmd2 49,1401:-1,1404:-1,1407:-1,1451:-1,1454:-1,1457:-1,1460:-1,1463:-1,1410:-1
+cmd_fild07,277,85,4 shop Armor Dealer#cmd2 101,2226:-1,2228:-1,2103:-1,2105:-1,2405:-1,2503:-1,2505:-1,2305:-1,2321:-1,2307:-1,2309:-1,2335:-1,2312:-1,2314:-1,2316:-1
+comodo,106,213,5 shop Tropic Fruit Dealer 724,6258:-1
+comodo,196,162,3 shop Harive#candy 479,11513:-1,6144:-1
+
+//=======================================================
+// Einbroch
+//=======================================================
+ein_in01,106,27,4 shop One Hand Weapon Dealer 850,1101:-1,1104:-1,1107:-1,1110:-1,1113:-1,1119:-1,1122:-1,1123:-1,1126:-1,1129:-1,1201:-1,1204:-1,1207:-1,1210:-1,1213:-1,1216:-1,1219:-1,1222:-1,1301:-1,1401:-1,1404:-1,1407:-1,1501:-1,1504:-1,1507:-1,1510:-1,1513:-1,1516:-1,1519:-1,1522:-1,1801:-1,1803:-1,1805:-1,1807:-1,1809:-1,1811:-1
+ein_in01,109,27,4 shop Two Hand Weapon Dealer 850,1116:-1,1151:-1,1154:-1,1157:-1,1160:-1,1351:-1,1354:-1,1357:-1,1360:-1,1410:-1,1451:-1,1454:-1,1457:-1,1460:-1,1463:-1,1250:-1,1252:-1,1254:-1
+ein_in01,119,26,4 shop Weapon Dealer#ein 855,1247:-1,1248:-1,1249:-1,13000:-1
+ein_in01,189,15,1 shop Tool Dealer#ein 850,1750:-1,1752:-1,1751:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1
+einbroch,138,66,4 shop Flu Mask Dealer#ein 850,5114:-1,2218:-1
+einbroch,82,199,4 shop Paddler#ein 855,512:-1,645:-1,1750:-1,501:-1
+//Official Gunslingers shops.
+que_ng,179,91,3 shop Chivas Lugal 900,13150:-1,13102:-1,13151:-1,13154:-1,13155:-1,13163:-1,13165:-1,13168:-1
+que_ng,180,79,3 shop Johnny Waiker 900,13200:-1,13201:-1,13202:-1
+
+//=======================================================
+// Geffen
+//=======================================================
+geffen_in,26,178,4 shop Armor Dealer#gef 66,2628:-1,2101:-1,2107:-1,2401:-1,2501:-1,2230:-1,2301:-1,2303:-1,2305:-1,2321:-1,2332:-1
+geffen_in,30,178,4 shop Weapon Dealer#gef2 47,1750:-1,1751:-1,1101:-1,1701:-1,1201:-1,1204:-1,1207:-1,1210:-1,1213:-1,1216:-1,1601:-1,1604:-1,1607:-1,1610:-1
+geffen_in,22,171,7 shop Weapon Dealer#gef 84,1146:-1,1245:-1
+geffen_in,74,144,0 shop Trader#gef 66,911:-1,910:-1,912:-1
+geffen_in,77,167,0 shop Tool Dealer#gef 68,1750:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,2241:-1
+geffen_in,77,173,0 shop Magical Item Seller#gef 64,717:-1,1601:-1,1604:-1,1607:-1,1610:-1,2232:-1,2321:-1,2332:-1
+geffen_in,171,123,4 shop Tool Dealer#gef2 64,1092:-1,1093:-1
+geffen,193,152,4 shop Pet Groomer#gef 124,537:-1,643:-1,10013:-1,10014:-1,554:-1,6113:-1,6114:-1,6115:-1
+
+//=======================================================
+// Gonryun
+//=======================================================
+gonryun,147,84,5 shop Tool Dealer#gon 777,1750:-1,1770:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1
+gonryun,174,101,3 shop Weapon Dealer#gon 774,1207:-1,1216:-1,1107:-1,1122:-1,1116:-1,1154:-1,1407:-1,1457:-1,1354:-1,1519:-1
+gonryun,173,84,3 shop Armor Dealer#gon 770,2211:-1,2401:-1,2403:-1,2501:-1,2503:-1,2101:-1,2103:-1,2305:-1,2321:-1,2332:-1,2328:-1,2627:-1
+
+//=======================================================
+// Hugel
+//=======================================================
+hugel,105,169,5 shop Vendor from Milk Ranch#h 90,519:-1
+hugel,77,167,3 shop Vegetable Gardener#hu 892,522:-1,512:-1,513:-1,515:-1,516:-1,535:-1
+hu_in01,241,368,2 shop Tool Dealer#hu 53,1750:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1
+hu_in01,252,368,3 shop Tool Dealer#hu2 90,717:-1,2201:-1,910:-1,528:-1
+hu_in01,100,390,3 shop Bow Dealer#hu 86,1701:-1,1707:-1,1718:-1,1714:-1
+hu_in01,94,390,3 shop Weapon Dealer#hu 898,1116:-1,1154:-1,1354:-1,1201:-1
+hu_in01,94,313,3 shop Armor Dealer#hu 86,2224:-1,2232:-1,2226:-1,2101:-1,2103:-1,2401:-1,2501:-1,2307:-1,2105:-1
+
+//=======================================================
+// Izlude
+//=======================================================
+izlude_in,60,127,4 shop Weapon Dealer#iz 72,1750:-1,1751:-1,1701:-1,1601:-1,1201:-1,1204:-1,1207:-1,1101:-1,1104:-1,1107:-1,1116:-1,1151:-1,1154:-1,1157:-1,1160:-1,1301:-1
+izlude_in,70,127,4 shop Armor Dealer#iz 62,2103:-1,2105:-1,2403:-1,2405:-1,2503:-1,2505:-1,2226:-1,2228:-1,2303:-1,2305:-1,2328:-1,2307:-1,2309:-1,2312:-1,2314:-1,2316:-1,2628:-1
+izlude_in,115,61,0 shop Tool Dealer#iz 47,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1,1750:-1
+izlude,105,99,0 shop Butcher#iz 54,517:-1
+izlude,94,98,4 shop Fruit Gardener#iz 53,512:-1,513:-1,515:-1,516:-1
+izlude,105,92,7 shop Vendor from Milk Ranch#i 90,519:-1
+izlude,164,138,4 shop Pet Groomer#iz 124,537:-1,643:-1,10013:-1,10014:-1,554:-1,6113:-1,6114:-1,6115:-1
+izlude_in,121,64,3 shop Trading Merchant#iz 900,13200:-1,13201:-1,13202:-1,13150:-1,13102:-1,13151:-1,13154:-1,13155:-1,13163:-1,13165:-1,13168:-1
+
+//=======================================================
+// Jawaii
+//=======================================================
+jawaii,186,174,3 shop Ice Cream Guy#ja 85,536:-1,536:-1,536:-1,536:-1,536:-1,536:-1,536:-1
+
+//=======================================================
+// Juno
+//=======================================================
+yuno,218,97,5 shop Tool Dealer#yuno 84,1750:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1
+yuno,226,107,5 shop Tool Dealer#yuno1 83,911:-1,910:-1,912:-1
+yuno,197,114,4 shop Pet Groomer#yuno 124,537:-1,643:-1,10013:-1,10014:-1,554:-1,6113:-1,6114:-1,6115:-1
+yuno,205,103,4 shop Mr. King's Shop#yuno 125,2340:-1,2341:-1,2411:-1,2222:-1,2230:-1,1721:-1
+yuno,163,187,5 shop Magical Item Seller#yuno 90,717:-1,1601:-1,1604:-1,1607:-1,1610:-1,2232:-1,2321:-1,2332:-1
+yuno_in01,25,34,5 shop Tool Dealer#yuno2 83,1750:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1
+yuno_in01,103,35,2 shop Weapon Dealer#yuno 49,1750:-1,1751:-1,1101:-1,1701:-1,1201:-1,1204:-1,1207:-1,1210:-1,1213:-1,1216:-1,1601:-1,1604:-1,1607:-1,1610:-1
+yuno_in01,112,26,4 shop Armor Dealer#yuno 101,2628:-1,2101:-1,2107:-1,2401:-1,2501:-1,2230:-1,2301:-1,2303:-1,2305:-1,2321:-1,2332:-1
+yuno_in03,176,22,3 shop Scroll Merchant#yuno03 89,7433:-1 //Temp shop in Yuno that sells Blank Scrolls
+s_atelier,114,117,1 shop Part-Timer#sc_yuno 92,6123:-1,6120:-1
+
+//=======================================================
+// Lighthalzen
+//=======================================================
+lighthalzen,69,75,5 shop Fruit Gardener#lhz 102,512:-1,513:-1
+lighthalzen,112,44,0 shop Flower Girl#lhz 90,712:-1,744:-1,748:-1
+lighthalzen,124,129,0 shop Vegetable Gardener#lhz 91,515:-1,516:-1,535:-1
+lighthalzen,220,122,3 shop Vendor from Milk Ranch#l 90,519:-1
+lighthalzen,222,191,4 shop Pet Groomer#lhz 125,537:-1,643:-1,10013:-1,10014:-1,554:-1,6113:-1,6114:-1,6115:-1
+lighthalzen,337,240,4 shop Trap Specialist#lhz 66,7940:-1,12341:-1
+lhz_in02,286,95,4 shop Beginner's Merchant#lhz 62,5112:-1,2416:-1,2113:-1,2512:-1
+lhz_in02,271,99,5 shop Armor Dealer#lhz 851,2101:-1,2103:-1,2403:-1,2405:-1,2503:-1,2321:-1,2314:-1,2309:-1,2335:-1,2628:-1
+lhz_in02,276,99,4 shop Weapon Dealer#lhz 851,1201:-1,1207:-1,1216:-1,1107:-1,1122:-1,1116:-1,1154:-1,1407:-1,1457:-1,1354:-1,1519:-1,13003:-1
+lhz_in02,273,35,4 shop Wand Dealer#lhz 854,1601:-1,1604:-1,1607:-1,1617:-1,1619:-1
+lhz_in02,105,21,3 shop Jeweler#lhz 91,721:-1,723:-1,726:-1,728:-1,729:-1,730:-1,2613:-1
+lhz_in02,17,220,5 shop Vegetable Gardener#lhz2 91,515:-1,516:-1,535:-1
+lhz_in02,21,220,5 shop Fruit Gardener#lhz2 102,512:-1,513:-1
+lhz_in02,32,219,5 shop Butcher#lhz 54,517:-1
+lhz_in02,38,145,5 shop Gift Merchant#lhz 91,734:-1,735:-1,736:-1,737:-1,746:-1
+lhz_in02,47,148,3 shop Wedding Shop Dealer#lhz 71,744:-1,745:-1,2338:-1,2206:-1,7170:-1
+lhz_in02,31,145,4 shop Tool Dealer#lhz 90,611:-1,503:-1,504:-1,506:-1,657:-1,656:-1,601:-1,602:-1,1065:-1,610:-1,1770:-1
+lhz_in02,85,216,5 shop Doll Supplier#lhz 862,740:-1,741:-1,742:-1
+lhz_in02,87,208,3 shop Toy Supplier#lhz 715,2243:-1,2212:-1,2242:-1,2241:-1
+lhz_in03,239,106,5 shop Tool Dealer#lhz2 850,501:-1,502:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1,611:-1
+lhz_in03,258,101,3 shop Arrow Merchant#lhz 855,1750:-1,1770:-1,1752:-1,1751:-1
+lhz_in03,249,24,4 shop Merchant#lhz 855,911:-1,910:-1,912:-1,528:-1
+
+//=======================================================
+// Louyang
+//=======================================================
+lou_in02,121,182,5 shop Armor Dealer#lou 818,2211:-1,2401:-1,2403:-1,2501:-1,2503:-1,2101:-1,2103:-1,2305:-1,2321:-1,2332:-1,2328:-1,2627:-1
+lou_in02,130,182,5 shop Weapon Dealer#lou 822,1207:-1,1216:-1,1107:-1,1122:-1,1116:-1,1154:-1,1407:-1,1457:-1,1354:-1,1519:-1
+lou_in02,239,176,5 shop Tool Dealer#lou 818,1750:-1,1770:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1
+
+//=======================================================
+// Lutie
+//=======================================================
+xmas_in,40,38,5 shop Tool Dealer#xmas 83,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,611:-1,610:-1
+xmas_in,168,104,4 shop Armor Dealer#xmas 101,2228:-1,2103:-1,2105:-1,2307:-1,2309:-1,2312:-1,2314:-1,2316:-1,2505:-1,2405:-1
+xmas_in,169,34,2 shop Gift Seller#xmas 702,2612:-1,744:-1,748:-1,736:-1,746:-1,740:-1,2613:-1
+xmas_in,174,98,2 shop Weapon Dealer#xmas 49,1201:-1,1204:-1,1207:-1,1210:-1,1213:-1,1216:-1,1219:-1,1222:-1
+
+//=======================================================
+// Morroc - Post Ep. 12.1
+//=======================================================
+in_moc_16,22,20,7 shop Sepulchral Merchant#moc 880,1771:-1
+moc_ruins,91,128,4 shop Tool Dealer#moc1 93,1750:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1
+moc_ruins,114,63,6 shop Tool Dealer#moc2 99,1750:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1,2242:-1
+moc_ruins,93,53,2 shop Item Collector#moc1 85,911:-1,528:-1,919:-1,925:-1
+moc_ruins,81,113,0 shop Item Collector#moc2 85,911:-1,528:-1,919:-1,925:-1
+moc_ruins,110,105,2 shop Jeweler#moc1 102,721:-1,723:-1,726:-1,728:-1,729:-1
+moc_ruins,52,85,6 shop Jeweler#moc2 99,730:-1,2613:-1
+moc_ruins,113,126,4 shop Trader#moc1 99,747:-1
+moc_ruins,131,138,0 shop Trader#moc2 93,748:-1
+moc_ruins,71,139,5 shop Trader#moc3 93,2612:-1
+moc_ruins,125,135,6 shop Trader#moc4 89,2609:-1,1516:-1,1522:-1
+moc_ruins,87,109,0 shop Butcher#moc 58,517:-1
+moc_ruins,90,149,6 shop Trader#moc5 99,513:-1,513:-1,513:-1,513:-1,513:-1,513:-1
+moc_ruins,118,170,4 shop Pet Groomer#moc 125,537:-1,643:-1,10013:-1,10014:-1,554:-1,6113:-1,6114:-1,6115:-1
+morocc_in,141,67,0 shop Weapon Dealer#moc1 58,1750:-1,1751:-1,1701:-1,1601:-1,1201:-1,1204:-1,1207:-1,1210:-1,1213:-1,1216:-1,1219:-1,1222:-1,1250:-1,1252:-1,1254:-1
+morocc_in,141,60,0 shop Armor Dealer#moc 58,2101:-1,2103:-1,2401:-1,2403:-1,2405:-1,2501:-1,2503:-1,2218:-1,2301:-1,2303:-1,2305:-1,2321:-1,2328:-1,2332:-1,2307:-1,2309:-1,2335:-1,2628:-1
+morocc_in,132,57,0 shop Weapon Dealer#moc2 99,1146:-1,1245:-1
+
+//=======================================================
+// Moscovia
+//=======================================================
+mosk_in,21,254,5 shop Tool Dealer#mosk 968,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1,1750:-1
+mosk_in,31,180,3 shop Weapon Dealer#mosk 968,1207:-1,1216:-1,1107:-1,1122:-1,1116:-1,1154:-1,1407:-1,1457:-1,1354:-1,1519:-1
+mosk_in,79,178,1 shop Armor Dealer#mosk 961,2211:-1,2401:-1,2403:-1,2501:-1,2503:-1,2101:-1,2103:-1,2305:-1,2321:-1,2332:-1,2328:-1,2627:-1
+moscovia,152,71,4 shop Fruit Gardener#mosk 968,512:-1,513:-1,515:-1,516:-1
+moscovia,199,110,3 shop Vendor from Milk Ranch#m 959,519:-1
+
+//=======================================================
+// Niflheim
+//=======================================================
+nif_in,37,93,1 shop Axe Dealer#nif 801,1301:-1,1351:-1,1354:-1,1357:-1,1360:-1
+nif_in,37,84,1 shop Armor Dealer#nif 801,2501:-1,2501:-1,2503:-1,2503:-1,2505:-1,2505:-1
+nif_in,145,23,1 shop Tool Dealer#nif 801,535:-1,1062:-1,902:-1,7106:-1,537:-1,7154:-1,1052:-1,934:-1
+
+//=======================================================
+// Payon
+//=======================================================
+payon_in01,15,119,0 shop Weapon Dealer#pay 77,1750:-1,1751:-1,1101:-1,1104:-1,1107:-1,1201:-1,1204:-1,1207:-1,1601:-1,1701:-1,1704:-1,1707:-1,1710:-1,1713:-1,1714:-1,1718:-1
+payon_in01,5,129,7 shop Weapon Dealer#pay2 703,1146:-1,1245:-1
+payon_in01,7,119,2 shop Armor Dealer#pay 76,2401:-1,2403:-1,2405:-1,2501:-1,2503:-1,2505:-1,2208:-1,2211:-1,2212:-1,2301:-1,2303:-1,2305:-1,2321:-1,2328:-1,2332:-1,2307:-1,2309:-1,2330:-1,2628:-1
+payon_in01,5,49,7 shop Tool Dealer#pay 88,1750:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1
+payon_in02,87,34,0 shop Tool Dealer#pay2 75,1750:-1,1751:-1,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1
+payon,159,96,4 shop Tool Dealer#pay3 88,1750:-1,501:-1,645:-1,601:-1,602:-1
+payon,177,131,4 shop Pet Groomer#pay 124,537:-1,643:-1,10013:-1,10014:-1,554:-1,6113:-1,6114:-1,6115:-1
+payon,123,109,4 shop Trap Specialist#pay 66,7940:-1,12341:-1
+
+//=======================================================
+// Prontera
+//=======================================================
+prontera,73,134,0 shop Vendor from Milk Ranch#p 90,519:-1
+prontera,104,49,0 shop Fruit Gardener#prt 102,512:-1,513:-1
+prontera,64,125,0 shop Butcher#prt 87,517:-1,528:-1
+prontera,58,182,0 shop Flower Girl#prt 96,712:-1,744:-1
+prontera,113,42,0 shop Flower Lady#prt 90,712:-1,744:-1
+prontera,105,87,0 shop Gift Merchant#prt 91,734:-1,735:-1,736:-1,737:-1,746:-1
+prontera,218,211,4 shop Pet Groomer#prt 125,537:-1,643:-1,10013:-1,10014:-1,554:-1,6113:-1,6114:-1,6115:-1
+prontera,248,153,0 shop Doll Supplier#prt 85,740:-1,741:-1,742:-1
+prontera,48,58,0 shop Vegetable Gardener#prt 91,515:-1,516:-1,535:-1
+//prontera,104,88,5 shop Stuff Gimme 880,616:-1
+prt_church,108,124,4 shop Nun#prt 79,2608:-1,2216:-1,5092:-1,2323:-1,2325:-1,1501:-1,1504:-1,1507:-1,1510:-1,1513:-1,1519:-1
+prt_fild05,290,221,2 shop Tool Dealer#prt 83,1750:-1,611:-1,501:-1,502:-1,506:-1,645:-1,601:-1,602:-1
+prt_in,211,169,0 shop Wedding Shop Dealer#prt 71,744:-1,745:-1,2338:-1,2206:-1,7170:-1
+prt_in,126,76,0 shop Tool Dealer#prt1 53,611:-1,1750:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1,2239:-1
+prt_in,172,130,0 shop Weapon Dealer#prt 54,1750:-1,1751:-1,1701:-1,1201:-1,1204:-1,1207:-1,1601:-1,1101:-1,1104:-1,1107:-1,1110:-1,1113:-1,1122:-1,1119:-1,1123:-1,1126:-1,1129:-1,1116:-1,1301:-1
+prt_in,172,132,0 shop Armor Dealer#prt 48,2101:-1,2103:-1,2401:-1,2403:-1,2501:-1,2503:-1,2220:-1,2226:-1,2301:-1,2303:-1,2305:-1,2328:-1,2307:-1,2309:-1,2312:-1,2314:-1,2628:-1,2627:-1
+prt_in,171,140,0 shop Weapon Dealer#prt2 47,1401:-1,1404:-1,1407:-1,1451:-1,1454:-1,1457:-1,1460:-1,1463:-1,1410:-1
+prt_in,165,140,4 shop Weapon Dealer#prt3 66,1146:-1,1245:-1
+prt_in,109,68,4 shop Trap Specialist#prt 66,7940:-1,12341:-1
+prt_monk,135,263,5 shop Weapon Dealer#prt4 726,1801:-1,1803:-1,1805:-1
+
+//=======================================================
+// Rachel
+//=======================================================
+ra_in01,175,364,3 shop Armor Dealer#ra 919,2101:-1,2103:-1,2403:-1,2405:-1,2503:-1,2321:-1,2314:-1,2309:-1,2335:-1,2628:-1
+ra_in01,257,269,3 shop Tool Dealer#ra 919,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,611:-1,1065:-1,610:-1
+ra_in01,176,389,3 shop Weapon Dealer#ra 931,1201:-1,1207:-1,1216:-1,1107:-1,1122:-1,1116:-1,1154:-1,1407:-1,1457:-1,1354:-1,1519:-1,13003:-1,1601:-1,1604:-1,1607:-1
+ra_in01,254,300,3 shop Fruit Gardener#ra 931,512:-1,513:-1
+ra_in01,263,281,4 shop Trap Specialist#ra 66,7940:-1,12341:-1
+rachel,65,80,1 shop Vegetable Gardener#ra 919,515:-1,535:-1,516:-1
+
+//=======================================================
+// Turtle Island
+//=======================================================
+tur_dun01,158,54,6 shop Tool Dealer#tu 99,1750:-1,501:-1,502:-1,503:-1,504:-1,506:-1,601:-1,602:-1,645:-1,656:-1,2242:-1
+
+//=======================================================
+// Umbala
+//=======================================================
+um_in,104,124,3 shop Tool Dealer#um 788,512:-1,515:-1,535:-1,516:-1,513:-1,517:-1,528:-1,537:-1,601:-1,602:-1,645:-1,656:-1,610:-1
+um_in,160,125,3 shop Weapon Dealer#um 789,1501:-1,1504:-1,1507:-1,1510:-1,1513:-1,1519:-1,1807:-1,1811:-1,1809:-1
+
+//=======================================================
+// Veins
+//=======================================================
+ve_in,386,245,3 shop Weapon Dealer#ve 931,1201:-1,1207:-1,1216:-1,1107:-1,1122:-1,1116:-1,1154:-1
+ve_in,336,243,3 shop Weapon Dealer#ve2 931,1407:-1,1457:-1,1354:-1,1519:-1,13003:-1
+ve_in,374,230,3 shop Armor Dealer#ve 919,2101:-1,2103:-1,2403:-1,2405:-1,2503:-1,2321:-1,2314:-1,2309:-1,2335:-1,2628:-1
+ve_in,243,303,5 shop Tool Dealer#ve 943,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,611:-1,1065:-1,610:-1
+ve_in,253,304,5 shop Fruit Gardener#ve 941,512:-1,513:-1
+ve_in,252,313,0 shop Magical Item Seller#ve 942,717:-1,1601:-1,1604:-1,1607:-1,1610:-1,2232:-1,2321:-1,2332:-1
+
+//=======================================================
+// Cooking Addition
+//=======================================================
+prontera,156,212,1 shop Chef Assistant#prt 700,7454:-1,7456:-1,7482:-1,580:-1
+payon,206,119,5 shop Chef Assistant#pay 89,7455:-1
+moc_ruins,115,123,5 shop Chef Assistant#moc 86,7455:-1,7453:-1,7454:-1,7456:-1,7452:-1
+geffen,196,111,3 shop Chef Assistant#gef 85,7482:-1
+alberta,167,135,5 shop Chef Assistant#alb 712,579:-1
+aldebaran,165,107,2 shop Chef Assistant#alde 97,7456:-1,7452:-1,580:-1
+comodo,225,164,3 shop Chef Assistant#cmd 83,7455:-1,7453:-1,7454:-1,579:-1
+umbala,102,154,3 shop Chef Assistant#um 83,7456:-1,577:-1
+yuno,130,173,3 shop Chef Assistant#yuno 83,7457:-1,7482:-1
+einbroch,224,207,5 shop Chef Assistant#ein 83,7457:-1
+lighthalzen,126,126,3 shop Chef Assistant#lhz 83,7456:-1,7452:-1
+amatsu,206,150,3 shop Chef Assistant#ama 83,7453:-1,579:-1
+louyang,256,123,5 shop Chef Assistant#lou 820,7454:-1,577:-1
+gonryun,147,101,5 shop Chef Assistant#gon 83,7452:-1,580:-1
+ayothaya,203,178,3 shop Chef Assistant#ayo 83,7455:-1,577:-1
+xmas,152,137,5 shop Chef Assistant#xmas 83,7457:-1,577:-1
+niflheim,209,180,5 shop Chef Assistant#nif 83,581:-1
+
+//===== Additional Comments(old): =================================
+//= swapped shop titles in GONRYUN, thanks to Kashy
+//= 1.3a Fixed Louyang map name. Added additional shops in Yuno. [kobra_k88]
+//= 1.4 Added Niflheim Shops
+//= 1.5 New Payon Locations [Darkchild]
+//= Moved shops in Umbala.txt here. Commented out the duplicate ones.[kobra_k88]
+//= 1.6 Removed GRAPE ID 514 from shops (caused exploits)
+//= 1.7 Removed juices from custom amatsu shops (it's a quest item + levelup exploit)
+//= 1.8 Corrected Niflheim Shops and Morroc Jewel Merchant [celest]
+//= 1.9 Updated Louyang shops thanks to MasterOfMuppets
+//= 1.10 Lutie Tools coords [Yor]
+//= 1.11 Added Belts to Prontera/Aldebaran shops, thanks to reddozen [Lupus]
+//= 1.12 official Ayothaya Shops, thanks to MasterOfMuppets [Lupus]
+//= 1.13 Added 5092 Coif into Prontera Church shop [Lupus]
+//= 1.14 Added Lighthalzen,Einbroch,Einbech shops. Updated Prontera,Morroc,Payon shops [Lupus]
+//= 1.15 Added Venom Knives into every Weapon Shop (that sells Knife[3]) [Lupus]
+//= 1.15a Fixed a small typo in alberta's weapon shop, thanks to reddozen for the fix [MasterOfMuppets]
+//= 1.16 Added a temp shop in Yuno to sell Blank scrolls, thanks to reddozen [MasterOfMuppets]
+//= 1.17 Added wand of hypnotist to the Lighthalzen weapon shop [MasterOfMuppets]
+//= 1.18 Fixed some shops based on kRO shots [Poki#3]
+//= 1.19 Added Hugel and fixed Payon shops based on kRO shots [Poki#3]
+//= 1.19a Added Food Seller selling Mastela Fruit in Hugel (Update item_db for the correct price!) [Poki#3]
+//= 1.20 Added 3 weapons shops, thx2 Muad_Dib [Lupus]
+//= 1.21 Added another weapon dealer to Einbroch, thanks to Muad_Dib [MasterOfMuppets]
+//= - Fixed up the missing sprites for you Lupus :)
+//= - Guys, I suggest we crop these comments and put them at the bottom soon
+//= 1.22 Thx8) Removed Berserk Potions from all shops but Comodo [Lupus]
+//= 1.3 Added Gunslinger shops. Credits goes to RockmanEXE for the info [erKURITA]
+//= Added Bucket Hat to Flu Mask dealer and modified it's name to a more logical one :P [erKURITA]
+//= 1.4 Added an ingredient seller to Morroc, thanks to Muad_Dib [MasterOfMuppets]
+//= a Removed doubled Morocc Ing.Seller, arranged the rest Ing.Sellers according to the city names [Lupus]
+//= 1.4b Commented out temp Gunslinger shops. [Lupus]
+//= 1.5 Removed Temp gunslinger shops and moved up the official ones. [erKURITA]
+//= Added Official Ninja shops in their correct location and commented a few
+//= shops. Thanks to RockmanEXE and Muad_Dib [erKURITA]
+//= 1.6 Implemented a missing Tool Shop in Lighthalzen [MasterOfMuppets]
+//= 1.7 Added some missing iRO - Lighthalzen NPCs [Musashiden]
+//= 1.8 Added Rachel Official shops. Special Thanks to RockmanEXE. [erKURITA]
+//= 1.9 Uncommented Homunculus shop, since Homunculus is working on trunk now. [Evera]
+//= 1.9a Pet Merchant -> Lighthalzen [erKURITA]
+//= 1.9b Added items to Chivas Regal
+//= 1.9c Slight update for Rachel shop: Tool Dealer -> Fruit Gardener [L0ne_W0lf]
+//============================================================
diff --git a/npc/pre-re/merchants/shops_re.txt b/npc/pre-re/merchants/shops_re.txt
new file mode 100644
index 000000000..4f0ad37e3
--- /dev/null
+++ b/npc/pre-re/merchants/shops_re.txt
@@ -0,0 +1,42 @@
+//===== rAthena Script =======================================
+//= Shops
+//===== By: ==================================================
+//= rAthena Dev Team
+//===== Current Version: =====================================
+//= 3.1
+//===== Compatible With: =====================================
+//= rAthena 1.0+
+//===== Description: =========================================
+//= Renewal-specific town shop NPCs.
+//===== Additional Comments: =================================
+//= 3.1 Moved some merchants to a separate renewal file. [Kenpachi]
+//============================================================
+
+//=======================================================
+// Einbroch
+//=======================================================
+einbroch,122,250,4 shop Black Marketeer#ein 49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2806:-1,2807:-1,18000:-1,18001:-1,18002:-1,18003:-1,18004:-1,12392:-1,12393:-1,12394:-1,6145:-1,6146:-1,6147:-1,6186:-1,2808:-1
+
+//=======================================================
+// Lighthalzen
+//=======================================================
+lhz_in03,181,17,4 shop Black Marketeer#lhz 49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2806:-1,2807:-1,18000:-1,18001:-1,18002:-1,18003:-1,18004:-1,12392:-1,12393:-1,12394:-1,6145:-1,6146:-1,6147:-1,6186:-1,2808:-1
+s_atelier,15,65,5 shop Part-Timer#sc_lgt 89,6123:-1,6120:-1
+
+//=======================================================
+// Mid Camp
+//=======================================================
+mid_camp,129,284,4 shop Trap Specialist#mid 66,7940:-1,12341:-1
+mid_camp,184,263,4 shop Black Marketeer#mid 49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2806:-1,2807:-1,18000:-1,18001:-1,18002:-1,18003:-1,18004:-1,12392:-1,12393:-1,12394:-1,6145:-1,6146:-1,6147:-1,6186:-1,2808:-1
+
+//=======================================================
+// Prontera
+//=======================================================
+prt_in,175,137,4 shop Black Marketeer#prt 49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2806:-1,2807:-1,18000:-1,18001:-1,18002:-1,18003:-1,18004:-1,12392:-1,12393:-1,12394:-1,6145:-1,6146:-1,6147:-1,6186:-1,2808:-1
+s_atelier,17,110,1 shop Part-Timer#sc_prt 67,6123:-1,6120:-1
+
+//=======================================================
+// Rachel
+//=======================================================
+ra_in01,257,266,4 shop Black Marketeer#ra 49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2806:-1,2807:-1,18000:-1,18001:-1,18002:-1,18003:-1,18004:-1,12392:-1,12393:-1,12394:-1,6145:-1,6146:-1,6147:-1,6186:-1,2808:-1
+s_atelier,137,60,3 shop Part-Timer#sc_ra 70,6123:-1,6120:-1
diff --git a/npc/pre-re/merchants/socket_enchant.txt b/npc/pre-re/merchants/socket_enchant.txt
new file mode 100644
index 000000000..63499c429
--- /dev/null
+++ b/npc/pre-re/merchants/socket_enchant.txt
@@ -0,0 +1,362 @@
+//===== rAthena Script =======================================
+//= Episode 11.1 Socket Enchant NPC
+//===== By: ==================================================
+//= rAthena dev team
+//===== Current Version: =====================================
+//= 2.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Adds slots to selected weapons and armor.
+//===== Additional Comments: =================================
+//= 0.1a added missing L_No: to 2 funcs [Lupus]
+//= 0.1b Removed duplicates [Toms]
+//= 0.2 Added missing next;'s [Evera]
+//= 0.3 Fixed Zweihander[+] id [Lupus]
+//= 1.0 Fixed ingredients check [Lupus]
+//= 1.1 Updated to official. [SinSloth]
+//= 1.1b Optimized/cleaned [ultramage]
+//= 1.2 Fixed some typos and a nasty bug. [SinSloth]
+//= 1.3 Fixed a wrong item ID with Sphinx Hat. [SinSloth]
+//= 1.4 Corrected NPC names to fall within proper restrictions. [L0ne_W0lf]
+//= 1.5 Removed Ontouch trigger area from NPCs. [L0ne_W0lf]
+//= 1.6 Replaced effect numerics with constants. [Samuray22]
+//= 1.7 Adjusted prices on some armor and weapons. [L0ne_W0lf]
+//= 1.8 Added missing Gae Bolg and Dragon Slayer. [Kisuka]
+//= 1.9 Moved Episode 12 items to separate NPC.
+//= Some cleanup & optimization. [Gepard]
+//= 2.0 Duplicates now spawn from floating NPCs. [L0ne_W0lf]
+//============================================================
+
+- script Seiyablem#dummy::SocketEnchant -1,{
+ if (checkweight(1201,1) == 0)
+ {
+ mes "- Wait a minute !! -";
+ mes "- Currently you're carrying -";
+ mes "- too many items with you. -";
+ mes "- Please try again -";
+ mes "- after you loose some weight. -";
+ close;
+ }
+ mes "[Seiyablem]";
+ mes "I'm an engineer that specializes in adding Slots to normal Weapons and Armor.";
+ mes "My service fee, the required materials and the chance of success all depend on the specific item I'm working on.";
+ next;
+ mes "[Seiyablem]";
+ mes "Adding Slots may seem simple, but it's far more complicated than it looks.";
+ mes "If you're interested in my service, let me know.";
+ next;
+ switch(select("Add Slot to Weapon:Add Slot to Armor:Slot Attempt Info:Cancel"))
+ {
+ case 1:
+ mes "[Seiyablem]";
+ mes "You want to add a Slot to a weapon?";
+ mes "I categorize weapons by their difficulty in adding a Slot, C Class being easiest and S Class the most difficult.";
+ mes "Which class would you like to try?";
+ next;
+ switch(select("C Class:B Class:A Class:S Class"))
+ {
+ case 1:
+ mes "[Seiyablem]";
+ mes "C Class, eh?";
+ 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.";
+ next;
+ switch(select("Trident:Rope:Violin"))
+ {
+ case 1: callfunc "Func_Socket",1460,1461,40,66,200,1010,10;
+ case 2: callfunc "Func_Socket",1950,1951,40,66,200,1010,10;
+ case 3: callfunc "Func_Socket",1901,1902,40,66,200,1010,10;
+ }
+ case 2:
+ mes "[Seiyablem]";
+ mes "B Class?";
+ mes "Alright, this is the average equipment category.";
+ mes "Please choose the weapon to which you'd like me to try to add a Slot.";
+ next;
+ switch(select("Chain:Gladius:Gakkung Bow:Pike:Haedonggum:Lute:Wire:Waghnakh:Arbalest Bow"))
+ {
+ case 1: callfunc "Func_Socket",1519,1520,40,61,300,1010,10;
+ case 2: callfunc "Func_Socket",1219,1220,40,61,300, 984, 1,999,5;
+ case 3: callfunc "Func_Socket",1714,1716,40,61,300, 984, 2,999,5;
+ case 4: callfunc "Func_Socket",1407,1408,40,61,200,1010,10;
+ case 5: callfunc "Func_Socket",1123,1128,40,61,300, 984, 2,999,5;
+ case 6: callfunc "Func_Socket",1905,1906,40,61,300,1011,10;
+ case 7: callfunc "Func_Socket",1954,1955,40,61,300,1011,10;
+ case 8: callfunc "Func_Socket",1801,1802,40,61,300,1010,10;
+ case 9: callfunc "Func_Socket",1713,1715,40,61,300, 984, 2,999,5;
+ }
+ case 3:
+ mes "[Seiyablem]";
+ mes "Ooh, A Class.";
+ mes "This is some high risk territory!";
+ mes "Alright, which weapon would you like me to try adding a Slot?";
+ next;
+ switch(select("Hunter Bow:Survivor's Rod(INT):Zweihander:Flamberge:Infiltrator:Ballista:Stunner:Berserk:Claymore"))
+ {
+ case 1: callfunc "Func_Socket",1718,1726,40,61,500,984,2,999,10;
+ case 2: callfunc "Func_Socket",1619,1620,40,61,500,984,5,999,10;
+ case 3: callfunc "Func_Socket",1168,1171,40,61,800,984,5,999,10;
+ case 4: callfunc "Func_Socket",1129,1149,40,61,500,984,2,999,10;
+ case 5: callfunc "Func_Socket",1261,1266,40,61,700,984,5,999,10;
+ case 6: callfunc "Func_Socket",1722,1727,40,61,500,984,5,999,10;
+ case 7: callfunc "Func_Socket",1522,1532,40,61,500,984,2,999,10;
+ case 8: callfunc "Func_Socket",1814,1816,40,61,500,984,5,999,10;
+ case 9: callfunc "Func_Socket",1163,1172,40,61,500,984,2,999,10; // NPC says "5 Oridecon" (Aegis) but takes only 2
+ }
+ case 4:
+ mes "[Seiyablem]";
+ mes "Whoa, whoa, whoa...";
+ mes "S class? Alright...";
+ mes "It'd be a near miracle if I can actually pull this off.";
+ mes "Okay... Which weapon shall we try adding a Slot to?";
+ next;
+ switch(select("Gungnir:Poison Knife:Ice Pick:Sucsamad:Ginnungagap:Cutlas:Crescent Scythe:Survivor's Rod(DEX)"))
+ {
+ case 1: callfunc "Func_Socket", 1413, 1418,40,51,1000,984,5,999,10;
+ case 2: callfunc "Func_Socket", 1239,13016,40,51,1000,984,5,999,10;
+ case 3: callfunc "Func_Socket", 1230,13017,40,51,2000,984,5,999,10;
+ case 4: callfunc "Func_Socket", 1236,13018,40,51,1000,984,5,999,10;
+ case 5: callfunc "Func_Socket",13002,13019,40,51,1000,984,5,999,10;
+ case 6: callfunc "Func_Socket", 1135,13400,40,51,1000,984,5,999,10;
+ case 7: callfunc "Func_Socket", 1466, 1476,40,51,1000,984,5,999,10;
+ case 8: callfunc "Func_Socket", 1617, 1618,40,51,2000,984,5,999,10;
+ }
+ }
+ case 2:
+ mes "[Seiyablem]";
+ mes "Armor, you said?";
+ mes "Sure, no problem.";
+ mes "Armor is divided into 4 different classes, depending on the work difficulty.";
+ mes "C Class is the easiest one, and S Class he hardest one.";
+ mes "Which class would you like to try?";
+ next;
+ switch(select("C Class:B Class:A Class:S Class"))
+ {
+ case 1:
+ mes "[Seiyablem]";
+ mes "C Class Armor, eh?";
+ mes "Sounds reasonable.";
+ mes "Which armor would you like to try adding a Slot?";
+ next;
+ switch(select("Mantle:Coat:Circlet:Biretta"))
+ {
+ case 1: callfunc "Func_Socket",2307,2308,40,66,200,999,3;
+ case 2: callfunc "Func_Socket",2309,2310,40,66,200,999,3;
+ case 3: callfunc "Func_Socket",2232,2233,40,66,200,999,3;
+ case 4: callfunc "Func_Socket",2216,2217,40,66,200,999,3;
+ }
+ case 2:
+ mes "[Seiyablem]";
+ mes "You have chosen average B Class.";
+ mes "So, what kind of armor do you have?";
+ next;
+ switch(select("Mirror Shield:Chain Mail:Saint Robe:Silk Robe:Boots:Shoes:Muffler:Guard:Buckler:Shield:Bongun Hat"))
+ {
+ case 1: callfunc "Func_Socket",2107,2108,40,61,250,999,5;
+ case 2: callfunc "Func_Socket",2314,2315,40,61,250,999,5;
+ case 3: callfunc "Func_Socket",2325,2326,40,61,300,999,5;
+ case 4: callfunc "Func_Socket",2321,2322,40,61,300,999,5;
+ case 5: callfunc "Func_Socket",2405,2406,40,61,300,999,5;
+ case 6: callfunc "Func_Socket",2403,2404,40,61,300,999,5;
+ case 7: callfunc "Func_Socket",2503,2504,40,61,300,999,5;
+ case 8: callfunc "Func_Socket",2101,2102,40,61,300,999,5;
+ case 9: callfunc "Func_Socket",2103,2104,40,61,300,999,5;
+ case 10: callfunc "Func_Socket",2105,2106,40,61,250,999,5;
+ case 11: callfunc "Func_Socket",5046,5168,40,61,250,999,5;
+ }
+ case 3:
+ mes "[Seiyablem]";
+ mes "Ooh, A Class.";
+ mes "This is some high risk territory!";
+ mes "Alright, which armor would you like me to try adding a Slot?";
+ next;
+ 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"))
+ {
+ case 1: callfunc "Func_Socket",2230,2231,40,61,400,985,1;
+ case 2: callfunc "Func_Socket",5114,5120,40,61,400,985,1;
+ case 3: callfunc "Func_Socket",2109,2121,40,61,400,985,1;
+ case 4: callfunc "Func_Socket",2330,2331,40,61,400,985,1;
+ case 5: callfunc "Func_Socket",2341,2342,40,61,400,985,1;
+ case 6: callfunc "Func_Socket",2316,2317,40,61,400,985,1;
+ case 7: callfunc "Func_Socket",2335,2336,40,61,400,985,1;
+ case 8: callfunc "Func_Socket",2411,2412,40,61,400,985,1;
+ case 9: callfunc "Func_Socket",5092,5093,40,61,400,985,1;
+ case 10: callfunc "Func_Socket",2505,2506,40,61,400,985,1;
+ case 11: callfunc "Func_Socket",2228,2229,40,61,400,985,1;
+ case 12: callfunc "Func_Socket",2337,2359,40,61,400,985,1;
+ case 13: callfunc "Func_Socket",2299,5157,40,61,400,985,1;
+ case 14: callfunc "Func_Socket",2507,2525,40,61,400,985,1;
+ case 15: callfunc "Func_Socket",2251,5158,40,61,400,985,1;
+ case 16: callfunc "Func_Socket",2246,5159,40,61,400,985,1;
+ case 17: callfunc "Func_Socket",2605,2625,40,61,400,985,1;
+ case 18: callfunc "Func_Socket",2264,5167,40,61,300,985,1;
+ }
+ case 4:
+ mes "[Seiyablem]";
+ mes "Um... S Class?";
+ mes "You sure about this?";
+ 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.";
+ next;
+ switch(select("Majestic Goat:Spiky Band:Bone Helm:Corsair:Crown:Tiara:Sphinx Hat:Robe of Cast:Earring:Ring:Bow Thimble"))
+ {
+ case 1: callfunc "Func_Socket",2256,5160,40,51,2000,985,2;
+ case 2: callfunc "Func_Socket",2258,5161,40,51,2000,985,2;
+ case 3: callfunc "Func_Socket",5017,5162,40,51,2000,985,2;
+ case 4: callfunc "Func_Socket",5019,5163,40,51,2000,985,2;
+ case 5: callfunc "Func_Socket",2235,5165,40,51,2000,985,2;
+ case 6: callfunc "Func_Socket",2234,5164,40,51,2000,985,2;
+ case 7: callfunc "Func_Socket",5053,5166,40,51,1000,985,2;
+ case 8: callfunc "Func_Socket",2343,2360,40,51,1000,985,2;
+ case 9: callfunc "Func_Socket",2602,2622,40,51,1000,985,2;
+ case 10: callfunc "Func_Socket",2601,2621,40,51,1000,985,2;
+ case 11: callfunc "Func_Socket",2619,2671,40,51,1000,985,2;
+ }
+ }
+ case 3:
+ mes "[Seiyablem]";
+ mes "Well, I haven't really refined the art of Slot Addition.";
+ mes "It's so complicated that I'd be lying if I told you that I knew every factor that affected the process.";
+ mes "Still, I do notice a few trends...";
+ next;
+ mes "[Seiyablem]";
+ mes "In some towns, Slot addition attempts are more successful for equipment with fewer upgrades.";
+ mes "In other towns, the opposite is true.";
+ mes "isn't that really peculiar?";
+ next;
+ mes "[Seiyablem]";
+ mes "Oh, there's also something really important that you should know.";
+ mes "If you ask me to add a Slot to something, make sure that you don't have multiples of it in your inventory.";
+ next;
+ mes "[Seiyablem]";
+ 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.";
+ mes "Just remember to be careful.";
+ next;
+ mes "[Seiyablem]";
+ mes "Again, ^FF0000only carry one of the equipment to which you want me to add a Slot^000000.";
+ mes "All other equipment with the same name should be placed in your Kafra Storage, got it?";
+ close;
+ case 4:
+ mes "[Seiyablem]";
+ mes "Take it easy, adventurer.";
+ mes "If you ever want to try adding a Slot to some of your equipment, come back and let me know.";
+ mes "Seeya~";
+ close;
+ }
+}
+
+function script Func_Socket {
+
+ mes "[Seiyablem]";
+ mes "You want to add a Slot to a " + getitemname(getarg(0)) + "?";
+ mes "Alright, please bring me ^FF0000" + getarg(6) + " " + getitemname(getarg(5)) + (getarg(6) > 1 && getarg(5) != 999 ? "s":"") + "^000000, " + (getarg(7,0) != 0 && getarg(8,0) != 0 ? ("^FF0000" + getarg(8,0) + " " + getitemname(getarg(7,0)) + (getarg(8,0) > 1 && getarg(7,0) != 999 ? "s":"") + "^000000 ") : "") + "and my ^FF0000" + (getarg(4) >= 1000 ? (getarg(4)/1000 + ",000") : getarg(4)) + ",000 zeny^000000 service fee.";
+ mes "Ah, and don't forget to bring that " + getitemname(getarg(0)) + "!";
+ next;
+ mes "[Seiyablem]";
+ if (getiteminfo(getarg(0),5)&2) // EQP_HAND_R = 2, it's a weapon
+ {
+ mes "I can try to add a slot now if you have the required items and zeny.";
+ mes "However, you should know that there's a chance that I might fail.";
+ mes "Therefore, I need to give you a fair warning...";
+ next;
+ mes "[Seiyablem]";
+ 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.";
+ }
+ else // armor
+ {
+ 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.";
+ mes "But before that, I must warn you of the risk.";
+ next;
+ mes "[Seiyablem]";
+ 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.";
+ }
+ mes "Do you still want to try to add a Slot?";
+ next;
+ switch(select("Attempt Slot Addition:Cancel"))
+ {
+ case 1:
+ if ((Zeny >= getarg(4)*1000) && (countitem(getarg(5)) >= getarg(6)) && (countitem(getarg(7,512)) >= getarg(8,0)) && (countitem(getarg(0)) > 0)) // if there's no getarg(7) and getarg(8) provided, check itemcount against 0 (we still need a valid item ID though)
+ {
+ mes "[Seiyablem]";
+ mes "Alright then, let the work begin!";
+ mes "You'd better pray for a successful result.";
+ next;
+ set .@a, rand(1,100);
+ if ((.@a > getarg(2)) && (.@a < getarg(3)))
+ {
+ specialeffect getarg(3) == 51 ? EF_LORD : EF_SANCTUARY; // only S Class items have Lord of Vermillion effect
+ mes "[Seiyablem]";
+ mes "Great, it seems to be successful.";
+ mes "It looks pretty well done. Congratulations!";
+ delitem getarg(0),1;
+ delitem getarg(5),getarg(6);
+ if (getarg(7,0) != 0 && getarg(8,0) != 0)
+ delitem getarg(7),getarg(8);
+ set Zeny, Zeny - getarg(4)*1000;
+ getitem getarg(1),1;
+ next;
+ mes "[Seiyablem]";
+ mes "See you again, buddy!";
+ close;
+ }
+ else
+ {
+ specialeffect EF_SUI_EXPLOSION;
+ mes "[Seiyablem]";
+ mes "Wah! ...I am so sorry, it failed.";
+ mes "However, I am completely innocent.";
+ mes "This is your luck, and it is destined by god, okay?";
+ mes "Don't be so disappointed, and try next time.";
+ delitem getarg(0),1;
+ delitem getarg(5),getarg(6);
+ if (getarg(7,0) != 0 && getarg(8,0) != 0)
+ delitem getarg(7),getarg(8);
+ set Zeny, Zeny - getarg(4)*1000;
+ next;
+ mes "[Seiyablem]";
+ mes "I wish you good luck next time!";
+ close;
+ }
+ }
+ else
+ {
+ mes "[Seiyablem]";
+ mes "I'd like to go ahead with this Slot Addition attempt, but you're missing a few things.";
+ mes "You sure that you have the equipment, required materials and the zeny?";
+ close;
+ }
+ case 2:
+ mes "[Seiyablem]";
+ mes "Need some time to think about it, huh?";
+ mes "Alright, I can understand.";
+ mes "Just remember that life's no fun if you're always playing it safe~";
+ close;
+ }
+}
+
+payon,140,151,5 duplicate(SocketEnchant) Seiyablem#pay 84
+lhz_in02,281,35,5 duplicate(SocketEnchant) Seiyablem#lhz 84
+prt_in,33,70,5 duplicate(SocketEnchant) Seiyablem#prt 84
+morocc,51,41,4 duplicate(SocketEnchant) Seiyablem#moc 84
+
+- script Young Man#dummy::SocketMan -1,{
+ mes "[Young Man]";
+ mes "I'm considering becoming a Slotting Engineer.";
+ 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.";
+ next;
+ mes "[Young Man]";
+ mes "There's a huge element of luck involved in successfully adding Slots from what I can understand.";
+ mes "You fail sometimes, but if you're super lucky, you can add two Slots.";
+ mes "Crazy. Huh?";
+ next;
+ mes "[Young Man]";
+ mes "But don't get too excited.";
+ mes "Only certain equipment can handle the addition of two extra Slots.";
+ mes "There's so much more I have to learn before I can even be an apprentice...";
+ close;
+}
+
+prt_in,31,57,1 duplicate(SocketMan) Young Man#prt 97
+payon,143,143,7 duplicate(SocketMan) Young Man#pay 97
+morocc,60,42,3 duplicate(SocketMan) Young Man#moc 97
+lhz_in02,269,33,5 duplicate(SocketMan) Young Man#lhz 97
diff --git a/npc/pre-re/merchants/socket_enchant2.txt b/npc/pre-re/merchants/socket_enchant2.txt
new file mode 100644
index 000000000..aa92f4d22
--- /dev/null
+++ b/npc/pre-re/merchants/socket_enchant2.txt
@@ -0,0 +1,470 @@
+//===== rAthena Script =======================================
+//= Episode 12 Socket Enchant NPC
+//===== By: ==================================================
+//= Gepard
+//===== Current Version: =====================================
+//= 1.1
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Adds slots to selected weapons and armor.
+//===== Additional Comments: =================================
+//= 1.0 First version.
+//= 1.1 Duplicates now spawn from floating NPCs. [L0ne_W0lf]
+//============================================================
+
+- script Leablem#dummy::SocketEnchant2 -1,{
+ if (checkweight(1201,1) == 0)
+ {
+ mes "- Wait a seconds !! -";
+ mes "- You have carried too many items -";
+ mes "- so, you can't get more items. -";
+ mes "- Make your weight as low -";
+ mes "- after then try it again. -";
+ close;
+ }
+ mes "[Leablem]";
+ mes "Good day. My name is Leablem,";
+ mes "and I'm a technician that specializes in";
+ mes "adding slots to weapons and armors.";
+ mes "It can be very hard sometimes, but I like";
+ mes "what I do, and take pride in it.";
+ next;
+ mes "[Leablem]";
+ mes "I've learned most of the things from my brother, Seyablem,";
+ mes "but I think I still have a lot to learn.";
+ mes "So please understand my slotting services are limited,";
+ mes "unlike my brother Seyablem.";
+ next;
+ mes "[Leablem]";
+ mes "My brother wasn't so happy to teach me";
+ mes "his skills because he was worried that his skills";
+ mes "wouldn't be unique anymore. He did, however, his best";
+ mes "to teach me.";
+ next;
+ mes "[Leablem]";
+ mes "Thanks to him, I've learned lots of things.";
+ mes "I'm not very confident";
+ mes "in trying many different things,";
+ mes "but I'll do what";
+ mes "I can do for now.";
+ next;
+ mes "[Leablem]";
+ mes "In fact, there's one thing";
+ mes "that my brother doesn't want me to do.";
+ mes "I don't want to upset him, so...let's just skip that part.";
+ mes "I'll say no more about it!";
+ next;
+ mes "[Leablem]";
+ mes "Anyways, do you have any equipment";
+ mes "which you'd like to add to the slots?";
+ mes "My service charge, the materials,";
+ mes "and the success chance all depend on";
+ mes "the specific item I'm working on.";
+ next;
+ switch(select("Weapon:Armor:About that thing you skipped:More information:Quit"))
+ {
+ case 1:
+ mes "[Leablem]";
+ mes "Weapon, you said? Sure, no problem.";
+ mes "Weapons are divided into 4 different class";
+ mes "depending on the work difficulty.";
+ mes "C class is the easiest one, and S class is the hardest one.";
+ mes "Which class would you like to try?";
+ next;
+ switch(select("C:B:A:S"))
+ {
+ case 1:
+ mes "[Leablem]";
+ mes "C class, I see.";
+ mes "So, what kind of weapon do you have?";
+ next;
+ switch(select("Book of Mother Earth:Book of Billows:Book of Gust of Wind:Book of the Blazing Sun"))
+ {
+ case 1: callfunc "Func_Socket2",1554,1569,40,66,200,1010,10;
+ case 2: callfunc "Func_Socket2",1553,1568,40,66,200,1010,10;
+ case 3: callfunc "Func_Socket2",1556,1571,40,66,200,1010,10;
+ case 4: callfunc "Func_Socket2",1555,1570,40,66,200,1010,10;
+ }
+ case 2:
+ mes "[Leablem]";
+ mes "You have chosen average B class.";
+ mes "So, what kind of weapon do you have?";
+ next;
+ switch(select("Orcish Axe:Scimiter:Spike"))
+ {
+ case 1: callfunc "Func_Socket2",1304,1309,40,66,200,984,1;
+ case 2: callfunc "Func_Socket2",1113,1114,40,66,200,984,1;
+ case 3: callfunc "Func_Socket2",1523,1538,40,61,300,984,1;
+ }
+ case 3:
+ mes "[Leablem]";
+ mes "A class? You seem to want little too much. But, no problem.";
+ mes "So, what kind of weapon do you have?";
+ next;
+ switch(select("Dragon Killer:Katar of Quaking:Katar of Raging Blaze:Katar of Frozen Icicle:Katar of Piercing Wind:Golden Mace:Oriental Lute:Queen's Whip:Spectral Spear:Gae Bolg:Schweizersabel"))
+ {
+ case 1: callfunc "Func_Socket2",13001,13030,40,61,500,984,2;
+ case 2: callfunc "Func_Socket2", 1257, 1276,40,66,500,984,2;
+ case 3: callfunc "Func_Socket2", 1258, 1277,40,66,500,984,2;
+ case 4: callfunc "Func_Socket2", 1256, 1275,40,66,500,984,2;
+ case 5: callfunc "Func_Socket2", 1259, 1278,40,66,500,984,2;
+ case 6: callfunc "Func_Socket2", 1524, 1539,40,61,500,984,2;
+ case 7: callfunc "Func_Socket2", 1918, 1922,40,61,500,984,2;
+ case 8: callfunc "Func_Socket2", 1970, 1976,40,61,500,984,2;
+ case 9: callfunc "Func_Socket2", 1477, 1479,40,56,500,984,2;
+ case 10: callfunc "Func_Socket2", 1474, 1480,40,56,500,984,2;
+ case 11: callfunc "Func_Socket2", 1167, 1178,40,61,500,984,2;
+ }
+ case 4:
+ mes "[Leablem]";
+ mes "Huh, S Class?! Oh my god, are you serious?*Tremble*";
+ mes "So...which S class weapon would you like to make a slot?!";
+ next;
+ switch(select("Zephyrus:Mailbreaker:Dragon Slayer:Swordbreaker:Assasin Dagger:Grand Cross:Executioner"))
+ {
+ case 1: callfunc "Func_Socket2",1468, 1481,40,51,1000,984,5,999,10;
+ case 2: callfunc "Func_Socket2",1225,13032,40,51,1000,984,5,999,10;
+ case 3: callfunc "Func_Socket2",1166, 1180,40,51,1000,984,5,999,10;
+ case 4: callfunc "Func_Socket2",1224,13031,40,51,1000,984,5,999,10;
+ case 5: callfunc "Func_Socket2",1232,13033,40,51,1000,984,5,999,10;
+ case 6: callfunc "Func_Socket2",1528, 1540,40,51,1000,984,5,999,10;
+ case 7: callfunc "Func_Socket2",1169, 1179,40,51,1000,984,5,999,10;
+ }
+ }
+ case 2:
+ mes "[Leablem]";
+ mes "Armor, you said? Sure, no problem.";
+ mes "Weapons are divided into 4 different class";
+ mes "depending on the work difficulty.";
+ mes "C class is the easiest one, and S class is the hardest one.";
+ mes "Which class would you like to try?";
+ next;
+ switch(select("C:B:A:S"))
+ {
+ case 1:
+ mes "[Leablem]";
+ mes "C class, I see.";
+ mes "So, what kind of armor do you have?";
+ next;
+ switch(select("Sunflower:Ph.D Hat:Big Ribbon:Boys Cap"))
+ {
+ case 1: callfunc "Func_Socket2",2253,5351,40,66,100,999,3;
+ case 2: callfunc "Func_Socket2",5012,5347,40,66,100,999,3;
+ case 3: callfunc "Func_Socket2",2244,5348,40,66,100,999,5;
+ case 4: callfunc "Func_Socket2",5016,5349,40,66,100,999,5;
+ }
+ case 2:
+ mes "[Leablem]";
+ mes "You have chosen average B class.";
+ mes "So, what kind of armor do you have?";
+ next;
+ switch(select("Skull Ring:High Heels"))
+ {
+ case 1: callfunc "Func_Socket2",2609,2715,40,61,300,999,5;
+ case 2: callfunc "Func_Socket2",2409,2432,40,61,300,999,5;
+ }
+ case 3:
+ mes "[Leablem]";
+ mes "A class? You seem to want little too much. But, no problem.";
+ mes "So, what kind of armor do you have?";
+ next;
+ switch(select("Pirate Bandana:Black Leather Boots"))
+ {
+ case 1: callfunc "Func_Socket2",2287,5350,50,61,500,985,1; // 50,61 - it's not a typo
+ case 2: callfunc "Func_Socket2",2425,2434,40,51,500,985,1;
+ }
+ case 4:
+ mes "[Leablem]";
+ mes "Huh, S Class?! Oh my god, are you serious?*Tremble*";
+ mes "So...which S class armor would you like to make a slot?!";
+ next;
+ switch(select("Mage Coat:Holy Robe:Sacred Mission:Undershirt:Pantie"))
+ {
+ case 1: callfunc "Func_Socket2",2334,2372,40,51,1000,985,1; // Mage Coat has 10% success chance
+ case 2: callfunc "Func_Socket2",2327,2373,45,51,1000,985,1; // the rest has 5%
+ case 3: callfunc "Func_Socket2",2111,2128,45,51,1000,985,1;
+ case 4: callfunc "Func_Socket2",2522,2523,45,51,1000,985,1;
+ case 5: callfunc "Func_Socket2",2339,2371,45,51,1000,985,1;
+ }
+ }
+ case 3:
+ mes "[Leablem]";
+ mes "Oh, it's nothing special, but he thinks";
+ mes "it's not something for humans to mess with. ";
+ mes "I don't want to upset my brother,";
+ mes "so I'd better forget about it.";
+ next;
+ mes "[Leablem]";
+ mes "...That service itself has a very high success chance,";
+ mes "but requires a lot of materials and a high-rate service charge. ";
+ mes "I highly doubt that anyone would actually want to use";
+ mes "the service, even if I did open it.";
+ next;
+ mes "[Leablem]";
+ mes "...Ummm...";
+ next;
+ mes "[Leablem]";
+ mes ".............";
+ next;
+ mes "[Leablem]";
+ mes ".............";
+ next;
+ mes "[Leablem]";
+ mes "You seem interested in using that service.";
+ mes "If you want, I can at least tell you about it. ";
+ mes "But you must promise to keep this a secret.";
+ mes "If my brother finds out what I'm about to tell you,";
+ mes "he's gonna give me a beating!";
+ next;
+ mes "[Leablem]";
+ mes "This special service has a 90% success chance,";
+ mes "but requires 2 Gold and 2 hundred million zeny:";
+ mes "I can add slots to the Hat of the Sun God.";
+ next;
+ mes "[Leablem]";
+ mes "My brother said that, even since ancient times, it's forbidden to modify that hat. ";
+ mes "But I believe humans are too curious not to";
+ mes "experiment, especially when it's forbidden.";
+ mes "I just don't want my brother to yell at me. That's all.";
+ next;
+ switch(select("Use the Service","Quit"))
+ {
+ case 1:
+ mes "[Leablem]";
+ mes ".................";
+ next;
+ mes "[Leablem]";
+ mes ".................";
+ next;
+ mes "[Leablem]";
+ mes "...Wh... What? No!";
+ mes "Giving me that dirty look";
+ mes "won't make me do it!";
+ mes "No, I said no! No is no! No!";
+ next;
+ mes "[Leablem]";
+ mes "No, I won't! No!";
+ next;
+ mes "[Leablem]";
+ mes "I can't do it...";
+ next;
+ mes "[Leablem]";
+ mes "I can't do... It...";
+ next;
+ mes "[Leablem]";
+ mes ".................";
+ next;
+ mes "[Leablem]";
+ mes "Umm...";
+ next;
+ mes "[Leablem]";
+ mes "You're so persistent. Okay, I'll make you an exception.";
+ mes "Just don't tell anyone,";
+ mes "especially my brother. Do you promise?";
+ next;
+ mes "[Leablem]";
+ mes "Okay then, please bring me";
+ mes "^FF00002 Gold, 2 hundred million zeny -- the service charge --,";
+ mes "^FF0000and a Hat of the Sun God.";
+ mes "^FF0000You know your chance of success is 90% with this, don't you?^000000";
+ mes "We don't have time to waste,";
+ mes "so let's get down to business right away.";
+ next;
+ if ((Zeny > 199999999) && (countitem(969) > 1) && (countitem(5022) > 0))
+ {
+ mes "[Leablem]";
+ mes "Shall we start now?";
+ mes "Pray to your gods for good luck.";
+ next;
+ set .@a, rand(1,100);
+ if ((.@a > 4) && (.@a < 95))
+ {
+ specialeffect EF_LORD;
+ mes "[Leablem]";
+ mes "Excellent! Wow, I guess the 90% success chance is true!";
+ mes "Look, the slot was added in the perfect place.";
+ mes "Congratulations.";
+ delitem 5022,1; //Helm_Of_Sun
+ delitem 969,2; //Gold
+ set Zeny, Zeny - 200000000;
+ getitem 5353,1; //Helm_Of_Sun_
+ next;
+ mes "[Leablem]";
+ mes "This is the first and last time I will do this for you.";
+ mes "Don't ever tell anyone";
+ mes "about this. Okay?";
+ close;
+ }
+ else
+ {
+ specialeffect EF_SUI_EXPLOSION;
+ mes "[Leablem]";
+ mes "Wah! Oh my god, we failed!";
+ mes "My god, I guess we had the worst kind of luck...";
+ mes "What should we do? ...This is why";
+ mes "I didn't want to do in the first place!";
+ delitem 5022,1; //Helm_Of_Sun
+ delitem 969,2; //Gold
+ set Zeny, Zeny - 200000000;
+ next;
+ mes "[Leablem]";
+ mes "No, don't ever ask me to do such a risky thing again!";
+ mes "Bah~";
+ close;
+ }
+ }
+ else
+ {
+ mes "[Leablem]";
+ mes "Umm...";
+ next;
+ mes "[Leablem]";
+ mes "You don't have enough materials.";
+ mes "Man, why did you even ask me to try?";
+ mes "I'm not going to do this again for you,";
+ mes "even if you bring enough materials. Bah~";
+ close;
+ }
+ case 2:
+ mes "[Leablem]";
+ mes "Don't ever tell anyone";
+ mes "about what I told you. Okay?";
+ close;
+ }
+ case 4:
+ mes "[Leablem]";
+ mes "Do you want to know more information?";
+ mes "Well, I don't think there's something";
+ mes "that you specifically need to know.";
+ mes "But I can at least give you a tip.";
+ next;
+ mes "[Leablem]";
+ mes "The slot technicians in each town";
+ mes "provide different slotting success chances";
+ mes "depending on your equipment's upgrade level.";
+ mes "I don't know if that's true,";
+ mes "but I can see the difference in each town.";
+ next;
+ mes "[Leablem]";
+ mes "For instance, a slot technician in one town";
+ mes "provides a higher success chance to";
+ mes "equipment items at higher upgrade levels,";
+ mes "while a technician in another town has higher";
+ mes "success at lower upgrade levels.";
+ next;
+ mes "[Leablem]";
+ mes "When you fail to add a slot, the equipment";
+ mes "will become broken and disappear.";
+ mes "I try my best to succeed, but";
+ mes "slotting is complicated work.";
+ next;
+ mes "[Leablem]";
+ mes "Oh, there's an important thing that you need to be careful about.";
+ mes "^FF0000Try not to carry two identical equipment items";
+ mes "^FF0000with you when you add slots.";
+ mes "^FF0000Otherwise, slots may be added to one of the randomly chosen items,";
+ mes "^FF0000and in the worst case, you may lose an item that is more valuable to you.^000000";
+ next;
+ mes "[Leablem]";
+ mes "I hope this information will be helpful to you.";
+ mes "Thanks.";
+ close;
+ case 5:
+ mes "[Leablem]";
+ mes "Alright, then.";
+ close;
+ }
+}
+
+payon,236,199,3 duplicate(SocketEnchant2) Leablem#pay 86
+lighthalzen,96,137,3 duplicate(SocketEnchant2) Leablem#lhz 86
+prontera,244,169,5 duplicate(SocketEnchant2) Leablem#prt 86
+moc_ruins,154,86,3 duplicate(SocketEnchant2) Leablem#moc 86
+
+function script Func_Socket2 {
+
+ mes "[Leablem]";
+ if(getarg(7,0) != 0 && getarg(8,0) != 0)
+ {
+ mes getitemname(getarg(0)) + "... Okay, then you need to bring me";
+ mes "^FF0000" + (getarg(4) >= 1000 ? (getarg(4)/1000 + ",000") : getarg(4)) + ",000 zeny as service charge,";
+ mes "^FF0000" + getarg(6) + "ea " + getitemname(getarg(5)) + " and " + getarg(8) + "ea " + getitemname(getarg(7)) + ".";
+ mes "^FF0000Of course, you need a " + getitemname(getarg(0)) + ".^000000";
+ }
+ else
+ {
+ mes getitemname(getarg(0)) + "? Okay, then you need to bring me";
+ mes "^FF0000" + (getarg(4) >= 1000 ? (getarg(4)/1000 + ",000") : getarg(4)) + ",000 zeny as service charge and " + getarg(6) + " " + getitemname(getarg(5)) + (getarg(6) > 1 && getarg(5) != 999 ? "s":"") + " as the requirement.";
+ mes "^FF0000Of course, don't forget to bring me a " + getitemname(getarg(0)) + ".";
+ mes "^FF0000You should have all items.^000000";
+ }
+ next;
+ mes "[Leablem]";
+ mes "Did you already bring all of them?";
+ mes "For your information, if you fail to create a slot,";
+ mes "you will lose all the item requirement as well as the target " + (getiteminfo(getarg(0),5)&2 ? "weapon" : "armor") + "."; // EQP_HAND_R = 2, it's a weapon, otherwise armor
+ mes "Also remember, if the " + (getiteminfo(getarg(0),5)&2 ? "weapon" : "armor") + " has been upgraded, and has been inserted with a card,";
+ mes "you will lose them even if you succeed in creating a slot.";
+ next;
+ switch(select("Ask for slot creation.:Try next time."))
+ {
+ case 1:
+ if ((Zeny >= getarg(4)*1000) && (countitem(getarg(5)) >= getarg(6)) && (countitem(getarg(7,512)) >= getarg(8,0)) && (countitem(getarg(0)) > 0)) // if there's no getarg(7) and getarg(8) provided, check itemcount against 0 (we still need a valid item ID though)
+ {
+ mes "[Leablem]";
+ mes "Alright then, let the work begin!";
+ mes "You'd better pray for a successful result.";
+ next;
+ set .@a, rand(1,100);
+ if ((.@a > getarg(2)) && (.@a < getarg(3)))
+ {
+ specialeffect EF_LORD;
+ mes "[Leablem]";
+ mes "Great, it seems to be successful.";
+ mes "It looks pretty well done. Congratulations!";
+ delitem getarg(0),1;
+ delitem getarg(5),getarg(6);
+ if (getarg(7,0) != 0 && getarg(8,0) != 0)
+ delitem getarg(7),getarg(8);
+ set Zeny, Zeny - getarg(4)*1000;
+ getitem getarg(1),1;
+ next;
+ mes "[Leablem]";
+ mes "See you again, buddy!";
+ close;
+ }
+ else
+ {
+ specialeffect EF_SUI_EXPLOSION;
+ mes "[Leablem]";
+ mes "Wah! ...I am so sorry, it failed.";
+ mes "However, I am completely innocent.";
+ mes "This is your luck, and it is destined by god, okay?";
+ mes "Don't be so disappointed,";
+ mes "and try next time.";
+ delitem getarg(0),1;
+ delitem getarg(5),getarg(6);
+ if (getarg(7,0) != 0 && getarg(8,0) != 0)
+ delitem getarg(7),getarg(8);
+ set Zeny, Zeny - getarg(4)*1000;
+ next;
+ mes "[Leablem]";
+ mes "See you again, buddy!";
+ close;
+ }
+ }
+ else
+ {
+ mes "[Leablem]";
+ mes "Are you stupid or what? You didn't bring all of the required items!";
+ mes "Go bring them quick!";
+ close;
+ }
+ case 2:
+ mes "[Leablem]";
+ mes "See you next time.";
+ close;
+ }
+}
diff --git a/npc/pre-re/merchants/splendide.txt b/npc/pre-re/merchants/splendide.txt
new file mode 100644
index 000000000..b8d4f8f71
--- /dev/null
+++ b/npc/pre-re/merchants/splendide.txt
@@ -0,0 +1,117 @@
+//===== rAthena Script =======================================
+//= Splendide Merchant
+//===== By: ==================================================
+//= rAthena dev team
+//===== Current Version: =====================================
+//= 1.1
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Splendide coin redemption NPC.
+//===== Additional Comments: =================================
+//= 1.0 First version
+//= 1.1 Fixed checkweight. [Gepard]
+//============================================================
+
+spl_in01,110,326,5 script Merchant of Splendide 439,{
+ if ((isequipped(2782) == 1) && (ep13_2_rhea == 100)) {
+ if (checkweight(1201,1) == 0) {
+ mes "[Merchant of Splendide]";
+ mes "It looks like you're carrying too many things.";
+ mes "Why not put some of your items in storage and come back?";
+ close;
+ }
+ mes "[Merchant of Splendide]";
+ mes "Hello.";
+ mes "What are you looking for?";
+ next;
+ switch(select("View item description:Buy Pinguicula's fruit Jam:Buy Luciola's Honey Jam:Buy Cornus' Tears:Do nothing")) {
+ case 1:
+ mes "[Merchant of Splendide]";
+ mes "Would you like to see the item description?";
+ close2;
+ ReadBook 11018,1;
+ end;
+ case 2:
+ mes "[Merchant of Splendide]";
+ mes "I can sell you 3 Pinguicula's fruit Jam for^3131FF 1 coin^000000";
+ next;
+ switch(select("Purchase:Do not purchase.")) {
+ case 1:
+ if (countitem(6081) > 0) {
+ mes "[Merchant of Splendide]";
+ mes "Thank you for coming.";
+ delitem 6081,1; //Splendide_Coin
+ getitem 12344,3; //Pinguicula's_fruit_Jam
+ close;
+ }
+ else {
+ mes "[Merchant of Splendide]";
+ mes "You don't have enough coins.";
+ close;
+ }
+ case 2:
+ mes "[Merchant of Splendide]";
+ mes "Come again if you change your mind.";
+ close;
+ }
+ case 3:
+ mes "[Merchant of Splendide]";
+ mes "I can sell you 3 Luciola's Honey Jam for^3131FF 1 coin^000000";
+ next;
+ switch(select("Purchase:Do not purchase.")) {
+ case 1:
+ if (countitem(6081) > 0) {
+ mes "[Merchant of Splendide]";
+ mes "Thank you for coming.";
+ delitem 6081,1; //Splendide_Coin
+ getitem 12345,3; //Luciola's_Honey_Jam
+ close;
+ }
+ else {
+ mes "[Merchant of Splendide]";
+ mes "You don't have enough coins.";
+ close;
+ }
+ case 2:
+ mes "[Merchant of Splendide]";
+ mes "Come again if you change your mind.";
+ close;
+ }
+ case 4:
+ mes "[Merchant of Splendide]";
+ mes "I can sell you 3 Cornus' Tears for^3131FF 1 coin^000000";
+ next;
+ switch(select("Purchase:Do not purchase.")) {
+ case 1:
+ if (countitem(6081) > 0) {
+ mes "[Merchant of Splendide]";
+ mes "Thank you for coming.";
+ delitem 6081,1; //Splendide_Coin
+ getitem 12349,3; //Cornus'_Tears
+ close;
+ }
+ else {
+ mes "[Merchant of Splendide]";
+ mes "You don't have enough coins.";
+ close;
+ }
+ case 2:
+ mes "[Merchant of Splendide]";
+ mes "Come again if you change your mind.";
+ close;
+ }
+ case 5:
+ mes "[Merchant of Splendide]";
+ mes "Come again if you change your mind.";
+ close;
+ }
+ }
+ else {
+ mes "[Merchant of Splendide]";
+ mes "BurWehAla";
+ mes "tasnarAndu Ie Ru";
+ close;
+ }
+}
diff --git a/npc/pre-re/merchants/wander_pet_food.txt b/npc/pre-re/merchants/wander_pet_food.txt
new file mode 100644
index 000000000..5bd9140e7
--- /dev/null
+++ b/npc/pre-re/merchants/wander_pet_food.txt
@@ -0,0 +1,75 @@
+//===== rAthena Script =======================================
+//= Spirit Liquor trader.
+//===== By: ==================================================
+//= rAthena dev team
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Trade Broken Liquor Jars and alcohol for wanderer
+//= pet food, 'Spirit Liquor'
+//===== Additional Comments: =================================
+//= 1.0 First version
+//============================================================
+
+prontera,218,218,3 script Pet Enthusiast 96,{
+ mes "[Pet Enthusiast Jenny]";
+ mes "Oh, Hi there!";
+ mes "Are you a lover of animals like I am?";
+ next;
+ mes "[Pet Enthusiast Jenny]";
+ mes "I know that it's really hard to keep your cute pets happy.";
+ mes "All it takes is the right kind of food.";
+ next;
+ mes "[Pet Enthusiast Jenny]";
+ mes "I know that sometimes it is really hard to get the right food for your pet.";
+ next;
+ mes "[Pet Enthusiast Jenny]";
+ mes "Do you have any food that you are looking for?";
+ next;
+ switch(select("Yes:No")) {
+ case 1:
+ if ((countitem(7158) > 19) && (countitem(970) > 0)) {
+ mes "[Pet Enthusiast Jenny]";
+ mes "Oh, you have ^ff000020 Broken Liquor Jar^000000s and ^ff00001 Alcohol^000000!";
+ mes "Do you want to exchange them for";
+ mes "^ff000020 Spirit Liquor^000000 for your Wanderer pet?";
+ next;
+ switch(select("Yes, please!:No thank you.")) {
+ case 1:
+ mes "[Pet Enthusiast Jenny]";
+ mes "Ok here you go then.";
+ mes "I hope it keeps your";
+ mes "cute pet happy.";
+ delitem 7158,20; //Broken_Wine_Vessel
+ delitem 970,1; //Alchol
+ getitem 7824,20; //Spirit_Liquor
+ close;
+ case 2:
+ mes "[Pet Enthusiast Jenny]";
+ mes "Hehe, well just let me know if you change your mind.";
+ close;
+ }
+ }
+ else {
+ mes "[Pet Enthusiast Jenny]";
+ mes "Actually, right now I can help you get Spirit Liquor for Wanderer pets.";
+ next;
+ mes "[Pet Enthusiast Jenny]";
+ mes "All you have to do is bring me ^FF0000 20 Broken Liquor Jars^000000 and ^FF0000 1 Alcohol^000000.";
+ mes "I can give you ^FF0000 20 Spirit Liquor^000000 for that.";
+ next;
+ mes "You can get the Broken Liquor Jars from Tengu monsters in Amatsu dungeon.";
+ close;
+ }
+ case 2:
+ close;
+ }
+}
+
+prontera,220,218,3 script Berry Toe 955,{
+ specialeffect EF_CHANGEDARK;
+ end;
+}