summaryrefslogtreecommitdiff
path: root/npc/re/merchants
diff options
context:
space:
mode:
Diffstat (limited to 'npc/re/merchants')
-rw-r--r--npc/re/merchants/3rd_trader.txt230
-rw-r--r--npc/re/merchants/diamond.txt244
-rw-r--r--npc/re/merchants/flute.txt141
-rw-r--r--npc/re/merchants/inn.txt54
-rw-r--r--npc/re/merchants/refine.txt499
-rw-r--r--npc/re/merchants/renters.txt184
-rw-r--r--npc/re/merchants/shops.txt84
7 files changed, 1436 insertions, 0 deletions
diff --git a/npc/re/merchants/3rd_trader.txt b/npc/re/merchants/3rd_trader.txt
new file mode 100644
index 000000000..1fac05c49
--- /dev/null
+++ b/npc/re/merchants/3rd_trader.txt
@@ -0,0 +1,230 @@
+//===== rAthena Script =======================================
+//= 3rd Item Seller
+//===== By: ==================================================
+//= Masao, Mercurial
+//===== Current Version: =====================================
+//= 1.2
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Sells some 3rd Job related items.
+//===== Additional Comments: =================================
+//= 1.0 First Version.
+//= 1.1 Optimized Poison Herb Salesman NPC
+//= 1.2 Optimized and standardized. [Euphy]
+//============================================================
+
+job3_guil01,79,96,3 script Poison Herb Salesman::PHS 877,{
+ 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 lose some weight. -";
+ close;
+ }
+ mes "[Poison Herb Salesman]";
+ mes "I am the professional";
+ mes "poison herb seller.";
+ mes "Which one do you want?";
+ mes "They cost 4,000 zeny each!";
+ set .@i, select("Nerium:Rantana:Makulata:Seratum:Scopolia:Amoena:Poison Kit")-1;
+ next;
+ if (.@i < 6) {
+ mes "[Poison Herb Salesman]";
+ mes "How many do you want? You can";
+ mes "only buy a maximum of 2000 ea";
+ mes "and if you want to cancel, enter '0'.";
+ next;
+ input .@amount;
+ mes "[Poison Herb Salesman]";
+ if (.@amount == 0) {
+ mes "You've cancelled the trade.";
+ close;
+ }
+ if (.@amount > 2000) {
+ mes "Please check the maximum";
+ mes "amount and then try again.";
+ close;
+ }
+ if (Zeny < .@amount*4000) {
+ mes "Please check the money you have.";
+ mes "It doesn't seem like you have enough money.";
+ close;
+ }
+ set Zeny, Zeny-(.@amount*4000);
+ getitem 7932+.@i,.@amount;
+ mes "Thank you. See you~!";
+ close;
+ } else {
+ mes "[Poison Herb Salesman]";
+ mes "You can only buy";
+ mes "1 Poison Kit and it costs 5,000 zeny.";
+ mes "Will you buy it?";
+ next;
+ if(select("Yes, I will.:No, I won't.") == 2) {
+ mes "[Poison Herb Salesman]";
+ mes "Well, I see. See you~!";
+ close;
+ }
+ mes "[Poison Herb Salesman]";
+ if (Zeny < 5000) {
+ mes "Please check the money you have.";
+ mes "It doesn't seem like you have enough money.";
+ close;
+ }
+ set Zeny, Zeny-5000;
+ getitem 7931,1;
+ mes "[Poison Herb Salesman]";
+ mes "Thank you. See you~!";
+ close;
+ }
+}
+morocc,190,96,4 duplicate(PHS) Poison Herb Salesman#moc 877
+lhz_in02,16,205,4 duplicate(PHS) Poison Herb Salesman#lhz 877
+
+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 lose 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;
+ set .@i, select("Buy high-quality Rune Stones.:Buy ordinary Rune Stones.");
+ mes "[Rune Salesman]";
+ if (.@i == 1) {
+ mes "High-quality Runes!";
+ mes "They cost 2,500 zeny each!";
+ setarray .@rune[0],12734,2500;
+ } else {
+ mes "Ordinary Rune Stones?";
+ mes "They cost 1,000 zeny each!";
+ setarray .@rune[0],12737,1000;
+ }
+ 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;
+ mes "[Rune Salesman]";
+ if (.@amount == 0) {
+ mes "You're not buying? Go away!";
+ close;
+ }
+ if (.@amount > 2000) {
+ mes "Please check the maximum";
+ mes "amount and then come back to me again!";
+ close;
+ }
+ if (Zeny < .@amount*.@rune[1]) {
+ mes "Money! Money!";
+ mes "You are short of money!";
+ mes "Check the amount of money you have!!";
+ close;
+ }
+ if (!checkweight(.@rune[0],.@amount)) {
+ mes "You're not able to carry it, so why are you trying to buy it?!";
+ close;
+ }
+ set Zeny, Zeny-(.@amount*.@rune[1]);
+ getitem .@rune[0],.@amount;
+ mes "You can buy more again.";
+ mes "So, see you later.";
+ close;
+}
+prontera,168,228,3 duplicate(runesale) Rune Salesman#1 853
+
+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 lose some weight. -";
+ close;
+ }
+ if (Class == Job_Guillotine_Cross || Class == Job_Guillotine_Cross_T || Class == Job_Baby_Cross) {
+ 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;
+ set .@i, 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")-1;
+ if (.@i == 0) {
+ 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;
+ } else {
+ setarray .@exchange[1],702,621,631,749,605,703;
+ mes "[Rare Poison Herb Collector]";
+ if (!countitem(.@exchange[.@i]) || Zeny < 10000) {
+ mes "Hey, try again after you've prepared all the requirements for the exchange.";
+ close;
+ }
+ mes "Thank you. I've received your payment.";
+ delitem .@exchange[.@i],1;
+ set Zeny, Zeny-10000;
+ getitem 709,1;
+ 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::pss 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 lose some weight. -";
+ close;
+ }
+ mes "[Point Salesman]";
+ mes "Hello. I'm selling a catalyst called ^FF0000Points^000000 for Sorcerers. What would you like?";
+ next;
+ set .@i, select("Scarlet Points - 200z:Lime Green Points - 200z:Indigo Points - 200z:Yellow Wish Points - 200z:Cancel")-1;
+ mes "[Point Salesman]";
+ if (.@i == 4) {
+ mes "You can't find the stuff you need?";
+ close;
+ }
+ setarray .@itemid[0],6360,6363,6361,6362;
+ setarray .@color$[0],"Scarlet","Lime Green","Indigo","Yellow Wish";
+ mes "You have chosen "+.@color$[.@i]+" Points.";
+ mes "How many do you want?";
+ mes "If you want to cancel, enter 0.";
+ next;
+ input .@amount;
+ mes "[Point Salesman]";
+ if (.@amount == 0) {
+ mes "You've cancelled the trade.";
+ close;
+ }
+ if (Zeny < .@amount*200) {
+ mes "You don't seem to have enough money.";
+ close;
+ }
+ if (!checkweight(.@itemid[.@i],.@amount)) {
+ mes "You don't have enough space in your inventory to buy this amount.";
+ close;
+ }
+ set Zeny, Zeny-(.@amount*200);
+ getitem .@itemid[.@i],.@amount;
+ mes "Thank you very much. See you~!";
+ close;
+}
+comodo,241,103,6 duplicate(pss) Point Salesman#1 700
+alberta,105,52,7 duplicate(pss) Point Salesman#2 700
+veins,202,128,6 duplicate(pss) Point Salesman#3 700 \ No newline at end of file
diff --git a/npc/re/merchants/diamond.txt b/npc/re/merchants/diamond.txt
new file mode 100644
index 000000000..118a3d111
--- /dev/null
+++ b/npc/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/re/merchants/flute.txt b/npc/re/merchants/flute.txt
new file mode 100644
index 000000000..a9b9c2367
--- /dev/null
+++ b/npc/re/merchants/flute.txt
@@ -0,0 +1,141 @@
+//===== rAthena Script =======================================
+//= Falcon & Wolf Flute Trader
+//===== By: ==================================================
+//= Masao, Muad_Dib, Ziu
+//===== Current Version: =====================================
+//= 1.2
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Sells Falcon Flute and Wolf Flute.
+//===== Additional Comments: =================================
+//= 1.0 First Version. [Masao]
+//= 1.1 Added Baby Hunter and Baby Ranger check. bugreport:5728 [Masao]
+//= 1.2 Added Wolf Flute trader, optimized. [Euphy]
+//============================================================
+
+- script Falcon Flute Trader::fflute -1,{
+ mes "[Falcon Flute Trader]";
+ if (BaseJob == Job_Hunter || Class == Job_Ranger || Class == Job_Ranger_T || Class == Job_Baby_Ranger) {
+ 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 (BaseJob == Job_Hunter)
+ set .@price,12500;
+ else {
+ mes "[Falcon Flute Trader]";
+ mes "For Rangers, however, I have a special price of 10,000 zeny!";
+ set .@price,10000;
+ next;
+ }
+ if(select("Don't buy one:Buy a Falcon Flute") == 1) {
+ mes "[Falcon Flute Trader]";
+ mes "That's too bad. If you need one, come back!";
+ close;
+ }
+ if (Zeny >= .@price) {
+ if (countitem(12848) >= 1) {
+ mes "[Falcon Flute Trader]";
+ mes "As I can see you already have a 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 - .@price;
+ 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 "Hello, young one!";
+ mes "Currently I can't help you,";
+ mes "but why don't you return to me when you've become a great Hunter and learned how to handle Falcons properly?";
+ close;
+ }
+ 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
+
+tur_dun01,89,170,5 script Expert Flute Crafter 59,{
+ if (Class == Job_Ranger || Class == Job_Ranger_T || Class == Job_Baby_Ranger) {
+ if (countitem(6124)) {
+ mes "[Expert Flute Crafter]";
+ mes "The Wolf Flute you have is crafted by myself, with wood.";
+ mes "You can come back here and find me if you lose your Wolf flute!";
+ next;
+ mes "[Expert Flute Crafter]";
+ mes "The flute can only be crafted by me.";
+ mes "It is just a little matter for me to craft another flute!!";
+ close;
+ }
+ mes "[Expert Flute Crafter]";
+ mes "Do you need anything?";
+ mes "A new Wolf Flute?";
+ next;
+ switch(select("Please give me a new Wolf Flute.:No.")) {
+ case 1:
+ if (countitem(7150) && Zeny >= 100000) {
+ mes "[Expert Flute Crafter]";
+ mes "Have you brought all the materials?";
+ mes "Wow! All your materials are not bad!";
+ mes "That's good enough.";
+ next;
+ mes "[Expert Flute Crafter]";
+ mes "Here's the new Wolf Flute.";
+ mes "Hope you are ready to use it.";
+ delitem 7150,1; //Bamboo_Cut
+ set Zeny, Zeny-100000;
+ getitem 6124,1; //Wolf's_Flute
+ close;
+ }
+ mes "[Expert Flute Crafter]";
+ mes "If you want to craft a new Wolf Flute, I need you to bring me ^4d4dff1 Bamboo Cut and 100,000 zeny.^000000";
+ next;
+ mes "[Expert Flute Crafter]";
+ mes "^4d4dffBamboo Cut can be obtained from Kapha or Karakasa.^000000";
+ close;
+ case 2:
+ mes "[Expert Flute Crafter]";
+ mes "If you do not summon a wolf, then you don't need the Wolf Flute.";
+ mes "You can come back here and find me if you change your mind.";
+ mes "Isn't that right?";
+ close;
+ }
+ }
+ mes "[Expert Flute Crafter]";
+ mes "Eeehh? You are not a Ranger?";
+ mes "Then this flute is totally useless for you!";
+ close;
+} \ No newline at end of file
diff --git a/npc/re/merchants/inn.txt b/npc/re/merchants/inn.txt
new file mode 100644
index 000000000..e8eb922a5
--- /dev/null
+++ b/npc/re/merchants/inn.txt
@@ -0,0 +1,54 @@
+//===== rAthena Script =======================================
+//= Inn Npcs
+//===== By: ==================================================
+//= c, L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.1
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Inn Npcs, Save and Heal
+//===== Additional Comments: =================================
+//= 1.0 Added Brasilis inn receptionist. [c]
+//= 1.1 Updated dialog for Brasilis inn. [L0ne_W0lf]
+//============================================================
+
+// 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;
+ }
+ }
+}
diff --git a/npc/re/merchants/refine.txt b/npc/re/merchants/refine.txt
new file mode 100644
index 000000000..70e666f82
--- /dev/null
+++ b/npc/re/merchants/refine.txt
@@ -0,0 +1,499 @@
+//===== rAthena Script =======================================
+//= Renewal Refining NPCs
+//===== By: ==================================================
+//= rAthena Dev Team
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Renewal-specific refining NPCs and material merchants.
+//===== Additional Comments: =================================
+//= 1.0 Moved some scripts to Renewal file, optimized "Austry" NPC. [Euphy]
+//============================================================
+
+// +11 and above 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 Refiner Function
+//============================================================
+//= To allow auto safe refining/multiple refining set the
+//= second argument to '1' in the function call.
+//= If you enable this function, be sure to edit the value of
+//= .@safe to the max safe refine in refine_db.txt as well.
+//=
+//= The official script uses a command which seems to generate a
+//= random result upon refining: success, downgrade, or failure.
+//= To enable that feature, set the third argument to '1' in the
+//= function call. Otherwise, the chance in refine_db.txt is used.
+//============================================================
+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;
+ if(select("Yes.:No.") == 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;
+ emotion (!rand(5))?e_cash: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;
+ emotion (!rand(5))?e_cash:e_omg;
+ mes "["+ getarg(0) +"]";
+ mes "Hmmm!";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "Oh my! I've failed to refine stuff...";
+ mes "I didn't mean it!";
+ mes "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;
+ emotion (!rand(5))?e_cash: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;
+ emotion (!rand(5))?e_cash:e_omg;
+ mes "["+ getarg(0) +"]";
+ mes "Hmmm!";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "Oh my! I've failed to refine stuff...";
+ mes "I didn't mean it!";
+ mes "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 "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... So be it.";
+ close;
+ }
+ }
+ break;
+ case 3:
+ next;
+ mes "[" + getarg(0) + "]";
+ mes "You said so... 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... 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 "Clang... No, but did you imagine I could be so stupid?!";
+ mes "You changed it...";
+ mes "Get out before I stun you with my Hammer!!";
+ close;
+ }
+ if(getarg(2) == 1){
+ set .@rand,rand(1,3);
+ if (.@rand == 1) {
+ mes "["+ getarg(0) +"]";
+ 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;
+ emotion (!rand(5))?e_cash: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;
+ emotion (!rand(5))?e_cash:e_omg;
+ mes "["+ getarg(0) +"]";
+ mes "Hmmm!";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "Oh my! I've failed to refine stuff...";
+ mes "I didn't mean it!";
+ mes "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;
+ emotion (!rand(5))?e_cash: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;
+ emotion (!rand(5))?e_cash:e_omg;
+ mes "["+ getarg(0) +"]";
+ mes "Hmmm!";
+ next;
+ mes "["+ getarg(0) +"]";
+ mes "Oh my! I've failed to refine stuff...";
+ mes "I didn't mean it!";
+ mes "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
+//============================================================
+- script Austry#ref -1,{
+ mes "[Austry]";
+ mes "If you bring me 3";
+ mes "Oridecon or Elunium";
+ mes "I can exchange them for";
+ mes "Bradium or Carnium.";
+ mes "Just give me 50,000z.";
+ next;
+ switch(select("Oridecon to Bradium.:Elunium to Carnium.:Purified Bradium to Carnium.:No thanks.")) {
+ case 1:
+ setarray .@i[0],984,3,6224; //Oridecon -> Bradium
+ break;
+ case 2:
+ setarray .@i[0],985,3,6223; //Elunium -> Carnium
+ break;
+ case 3:
+ setarray .@i[0],6090,1,6223; //Purified_Bradium -> Carnium
+ break;
+ case 4:
+ mes "[Austry]";
+ mes "Hmm...";
+ close;
+ }
+ if (countitem(.@i[0]) >= .@i[1] && Zeny >= 50000) {
+ delitem .@i[0],.@i[1];
+ set Zeny, Zeny - 50000;
+ getitem .@i[2],1;
+ mes "[Austry]";
+ if (.@i[0] == 6090) {
+ mes "Refining with Purified Bradium";
+ mes "is a little expensive. I can";
+ mes "trade it for some Carnium.";
+ } else
+ mes "Ok! Here is your "+getitemname(.@i[2])+".";
+ mes "Take it and use it well.";
+ close;
+ }
+ mes "[Austry]";
+ mes "You better not be trying";
+ mes "to cheat me because you";
+ mes "don't have enough zeny";
+ mes "or "+getitemname(.@i[0])+".";
+ close;
+}
+prt_in,85,71,5 duplicate(Austry#ref) Austry#prt 826
+payon_in01,14,125,5 duplicate(Austry#ref) Austry#pay 826
+morocc_in,60,38,5 duplicate(Austry#ref) Austry#moc 826
diff --git a/npc/re/merchants/renters.txt b/npc/re/merchants/renters.txt
new file mode 100644
index 000000000..0ac62a476
--- /dev/null
+++ b/npc/re/merchants/renters.txt
@@ -0,0 +1,184 @@
+//===== rAthena Script =======================================
+//= Renters
+//===== By: ==================================================
+//= rAthena Dev Team
+//===== Current Version: =====================================
+//= 2.1
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Renewal-specific breeder NPCs.
+//===== Additional Comments: =================================
+//= 2.1 Moved some renters to a separate renewal file. [Daegaladh]
+//============================================================
+
+// 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/re/merchants/shops.txt b/npc/re/merchants/shops.txt
new file mode 100644
index 000000000..a6f64174d
--- /dev/null
+++ b/npc/re/merchants/shops.txt
@@ -0,0 +1,84 @@
+//===== rAthena Script =======================================
+//= Shops
+//===== By: ==================================================
+//= rAthena Dev Team
+//===== Current Version: =====================================
+//= 1.3
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Renewal-specific town shop NPCs.
+//===== Additional Comments: =================================
+//= 1.0 Moved some merchants to a separate renewal file. [Kenpachi]
+//= 1.1 Added Dicastes merchants. [Joseph]
+//= 1.2 Moved more shops to Renewal file. [Euphy]
+//= 1.3 Added Malangdo tool dealer. [Euphy]
+//============================================================
+
+//=======================================================
+// Comodo
+//=======================================================
+comodo,106,213,5 shop Tropic Fruit Dealer 724,6258:-1
+comodo,196,162,3 shop Harive#candy 479,11513:-1,6144:-1
+
+//=======================================================
+// Einbroch
+//=======================================================
+einbroch,122,250,4 shop Black Marketeer#ein 49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2805:-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
+
+//=======================================================
+// El Dicastes
+//=======================================================
+dic_in01,238,107,5 shop Peddler#dic 900,601:-1,602:-1,611:-1,610:-1
+dicastes01,207,200,6 shop Points Merchant#dic 66,6360:-1,6361:-1,6362:-1,6363:-1
+
+//=======================================================
+// Izlude
+//=======================================================
+izlude,97,146,0 shop Butcher#iz 54,517:-1
+izlude,124,165,4 shop Fruit Gardener#iz 53,512:-1,513:-1,515:-1,516:-1
+izlude,95,145,6 shop Vendor from Milk Ranch#i 90,519:-1
+izlude,174,164,4 shop Pet Groomer#iz 124,537:-1,643:-1,10013:-1,10014:-1,554:-1,6113:-1,6114:-1,6115:-1
+
+//=======================================================
+// Juno
+//=======================================================
+s_atelier,114,117,1 shop Part-Timer#sc_yuno 92,6123:-1,6120:-1
+
+//=======================================================
+// Lighthalzen
+//=======================================================
+lighthalzen,337,240,4 shop Trap Specialist#lhz 66,7940:-1,12341:-1
+lhz_in03,181,17,4 shop Black Marketeer#lhz 49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2805:-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
+
+//=======================================================
+// Malangdo
+//=======================================================
+malangdo,232,163,5 shop Tool Dealer Myo 560,611:-1,1750:-1,645:-1,656:-1,601:-1,602:-1,1065:-1,713:-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,2805:-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
+
+//=======================================================
+// Payon
+//=======================================================
+payon,123,109,4 shop Trap Specialist#pay 66,7940:-1,12341:-1
+
+//=======================================================
+// Prontera
+//=======================================================
+//prontera,104,88,5 shop Stuff Gimme 880,616:-1
+prt_in,109,68,4 shop Trap Specialist#prt 66,7940:-1,12341:-1
+prt_in,175,137,4 shop Black Marketeer#prt 49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2805:-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,263,281,4 shop Trap Specialist#ra 66,7940:-1,12341:-1
+ra_in01,257,266,4 shop Black Marketeer#ra 49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2805:-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