summaryrefslogtreecommitdiff
path: root/npc/re/merchants
diff options
context:
space:
mode:
authoreuphyy <euphyy@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-12-24 17:30:14 +0000
committereuphyy <euphyy@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-12-24 17:30:14 +0000
commitea1a321438e75b66b3fc8148b6eaa41d049761dd (patch)
tree80dfac0c03ba915146e52cf10fe91c4b5558da9f /npc/re/merchants
parent90e5648a7865e72846c9a41754c4f71e89a1739d (diff)
downloadhercules-ea1a321438e75b66b3fc8148b6eaa41d049761dd.tar.gz
hercules-ea1a321438e75b66b3fc8148b6eaa41d049761dd.tar.bz2
hercules-ea1a321438e75b66b3fc8148b6eaa41d049761dd.tar.xz
hercules-ea1a321438e75b66b3fc8148b6eaa41d049761dd.zip
> Pre-Renewal fixes, major credits to Deep Forest for his detailed reports:
* Separated Renewal Alberta features with checkre() and new files, follow-up r16125 (bugreport:7041). * Moved remaining Renewal shops out of pre-Renewal file, follow-up r16138 / r16104 (bugreport:7042). * Moved Renewal refining features to a separate file, and made some changes, follow-up r16126 (bugreport:7043). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17042 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'npc/re/merchants')
-rw-r--r--npc/re/merchants/refine.txt499
-rw-r--r--npc/re/merchants/shops.txt35
2 files changed, 527 insertions, 7 deletions
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/shops.txt b/npc/re/merchants/shops.txt
index c07a7df7f..f9bde7a99 100644
--- a/npc/re/merchants/shops.txt
+++ b/npc/re/merchants/shops.txt
@@ -3,7 +3,7 @@
//===== By: ==================================================
//= rAthena Dev Team
//===== Current Version: =====================================
-//= 1.1
+//= 1.2
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
@@ -11,14 +11,27 @@
//===== 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]
//============================================================
//=======================================================
+// 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
@@ -27,8 +40,14 @@ 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
@@ -39,19 +58,21 @@ 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
-
-//=======================================================
-// 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