diff options
Diffstat (limited to 'npc/re/merchants')
-rw-r--r-- | npc/re/merchants/3rd_trader.txt | 230 | ||||
-rw-r--r-- | npc/re/merchants/diamond.txt | 244 | ||||
-rw-r--r-- | npc/re/merchants/flute.txt | 141 | ||||
-rw-r--r-- | npc/re/merchants/inn.txt | 54 | ||||
-rw-r--r-- | npc/re/merchants/refine.txt | 499 | ||||
-rw-r--r-- | npc/re/merchants/renters.txt | 184 | ||||
-rw-r--r-- | npc/re/merchants/shops.txt | 84 |
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 |