瀏覽代碼

Merge branch 'master' of https://github.com/rathena/rathena

aleos89 10 年之前
父節點
當前提交
ee6e47b7c2

+ 41 - 15
db/quest_db.txt

@@ -77,6 +77,28 @@
 1192,0,0,0,0,0,0,0,"Get Rid of Bakonawa"
 1193,0,0,0,0,0,0,0,"Get Rid of Bakonawa"
 
+// 2011 X-Mas Event
+1194,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1195,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1196,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1197,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1198,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1199,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1200,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1201,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1202,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1203,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1204,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1205,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1206,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1207,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1208,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1209,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1210,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1211,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1212,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+1213,0,0,0,0,0,0,0,"Look out the window, Cheers for Raccoon Hurray team!"
+
 // Find Professor Worm's Memory
 1214,0,0,0,0,0,0,0,"Getting back Professor Worm's memory"
 1215,0,0,0,0,0,0,0,"Getting back Professor Worm's memory"
@@ -599,7 +621,7 @@
 4229,82800,0,0,0,0,0,0,"Devil in the Cave"
 
 4254,0,0,0,0,0,0,0,"Fairy with a stomache"
-4255,0,0,0,0,0,0,0,"Revenge!"
+4255,0,2363,20,0,0,0,0,"Revenge!"
 4256,0,0,0,0,0,0,0,"An accomplice?"
 4257,0,0,0,0,0,0,0,"Conspiracy"
 4258,0,0,0,0,0,0,0,"Eirinn"
@@ -610,6 +632,8 @@
 4263,0,0,0,0,0,0,0,"Counteroffensive (1)"
 4264,0,0,0,0,0,0,0,"Counteroffensive (2)"
 4265,0,0,0,0,0,0,0,"Bookshelf use"
+4266,0,0,0,0,0,0,0,"????? ??"
+4267,0,0,0,0,0,0,0,"????? ??"
 //4303,0,0,0,0,0,0,0,""
 //4304,0,0,0,0,0,0,0,""
 //4305,0,0,0,0,0,0,0,""
@@ -1225,15 +1249,15 @@
 7426,0,0,0,0,0,0,0,"A rumor about the King 4"
 7427,0,0,0,0,0,0,0,"At times like this, face it straight on!"
 7428,0,0,0,0,0,0,0,"Yai of the wild"
-7429,0,0,0,0,0,0,0,"Wild recent trend!"
+7429,82800,0,0,0,0,0,0,"Wild recent trend!"
 7430,0,0,0,0,0,0,0,"Deliveryman that runs through space"
-7431,0,0,0,0,0,0,0,"A mailman never rests!"
-7432,0,0,0,0,0,0,0,"The troublemakers in the land of blooming flowers"
-7433,0,0,0,0,0,0,0,"Need constant guidance"
+7431,82800,0,0,0,0,0,0,"A mailman never rests!"
+7432,0,2363,5,2364,5,0,0,"The troublemakers in the land of blooming flowers"
+7433,82800,0,0,0,0,0,0,"Need constant guidance"
 
 // Twins and Scholar of Magics
 7434,0,0,0,0,0,0,0,"Kardui's big brother"
-7435,0,0,0,0,0,0,0,"Time for reading the letter"
+7435,180,0,0,0,0,0,0,"Time for reading the letter"
 7436,0,0,0,0,0,0,0,"Avant the Scholar of Magics"
 7437,0,0,0,0,0,0,0,"Shenime's favor"
 7438,0,0,0,0,0,0,0,"Secret sponsorship"
@@ -1637,7 +1661,7 @@
 9256,0,0,0,0,0,0,0,"Examining a messed up table"
 9257,0,0,0,0,0,0,0,"Examining a foreign object"
 9258,0,0,0,0,0,0,0,"Field examination results"
-9259,0,0,0,0,0,0,0,"Confirming Cruyan's statements"
+9259,0,2363,5,2364,30,0,0,"Confirming Cruyan's statements"
 9260,0,0,0,0,0,0,0,"Survey investigation notes"
 9262,0,0,0,0,0,0,0,"Mystery Robbery Incident 16"
 
@@ -2040,7 +2064,7 @@
 11308,0,0,0,0,0,0,0,"Nurse at Port Malaya-25"
 11309,0,2327,1,0,0,0,0,"Nurse at Port Malaya-26"
 
-11310,0,0,0,0,0,0,0,"Eclage's Entrance"
+11310,30,0,0,0,0,0,0,"Eclage's Entrance"
 11311,0,0,0,0,0,0,0,"Eclage's Entrance"
 11312,0,0,0,0,0,0,0,"Goliath"
 11313,0,0,0,0,0,0,0,"Goliath"
@@ -2370,6 +2394,8 @@
 12318,0,2475,1,0,0,0,0,"Upper Cats: annoying guy"
 12319,0,2476,1,0,0,0,0,"Upper Cats: annoying guy"
 
+12363,0,0,0,0,0,0,0,"?????? ?? ??"
+
 13000,0,0,0,0,0,0,0,"RWC2011Card Gathering"
 13001,82800,0,0,0,0,0,0,"RWC2011Card Gathering - Hold"
 
@@ -2419,14 +2445,14 @@
 13056,0,0,0,0,0,0,0,"Reporter Rossi"
 13057,0,0,0,0,0,0,0,"Adventurer Euncheong"
 13058,0,0,0,0,0,0,0,"Troublemaker New Oz"
-13059,86400,0,0,0,0,0,0,"End of project"
-13060,86400,0,0,0,0,0,0,"Safety confirmation complete!"
+13059,79200,0,0,0,0,0,0,"End of project"
+13060,79200,0,0,0,0,0,0,"Safety confirmation complete!"
 13061,0,0,0,0,0,0,0,"Food support"
-13062,86400,0,0,0,0,0,0,"Food support - complete"
-13063,0,0,0,0,0,0,0,"Dusting off"
-13064,86400,0,0,0,0,0,0,"Dusting off - complete"
+13062,79200,0,0,0,0,0,0,"Food support - complete"
+13063,0,2365,20,0,0,0,0,"Dusting off"
+13064,79200,0,0,0,0,0,0,"Dusting off - complete"
 13065,0,0,0,0,0,0,0,"Collecting a souvenir"
-13066,86400,0,0,0,0,0,0,"This is enough for souvenirs"
+13066,79200,0,0,0,0,0,0,"This is enough for souvenirs"
 
 // eden 111-120
 13067,0,1163,30,0,0,0,0,0,"Raydric research"
@@ -2540,7 +2566,7 @@
 14126,0,0,0,0,0,0,0,"Searching for Ms. Goatie"
 14127,0,0,0,0,0,0,0,"Searching for Ms. Goatie's husband"
 14128,0,0,0,0,0,0,0,"Obtaining the research report"
-14131,0,0,0,0,0,0,0,"Analysis time"
+14131,300,0,0,0,0,0,0,"Analysis time"
 14133,0,0,0,0,0,0,0,"Another favor"
 14134,0,0,0,0,0,0,0,"Sharp Ms. Goatie"
 14135,0,0,0,0,0,0,0,"Searching for Mr. Pompe"

+ 1 - 0
db/re/instance_db.txt

@@ -15,3 +15,4 @@
 9,Bakonawa Lake,7200,1@ma_b,64,51,1@ma_b
 10,Wolfchev's Laboratory,14400,1@lhz,45,148,1@lhz
 11,Old Glast Heim,3600,1@gl_k,150,20,1@gl_k,2@gl_k
+12,Eclage Interior,1200,1@ecl,60,50,1@ecl

+ 3 - 0
npc/other/gm_npcs.txt

@@ -118,6 +118,9 @@ List of GM Management NPCs (incomplete)
 - Field Bush Switch
 - Bakonawa Intro Helper
 - Pintados Manager#pin
+- #pa0829Reactor11
+- New Oz Image#1
+- Professor Aide#worm
 --------------------------
 - Allied Manager#gm
 - #timer_alba01

+ 39 - 420
npc/re/cities/eclage.txt

@@ -1,469 +1,88 @@
 //===== rAthena Script ======================================= 
-//= Eclage Town
+//= General Eclage NPC.
 //===== By: ================================================== 
-//= Euphy
+//= Dastgir
 //===== Current Version: ===================================== 
-//= 1.0
+//= 2.0
 //===== Compatible With: ===================================== 
 //= rAthena Project
 //===== Description: ========================================= 
-//= Eclage Town Script
+//= Eclage Town NPC
 //===== Additional Comments: ================================= 
-//= 1.0 Nearly complete iRO town NPCs. [Euphy]
+//= 1.0 Generic NPC place holders. [Euphy]
+//= 2.0 Converted from the official Aegis script. [Dastgir]
 //============================================================ 
 
-// Generic Eclage NPCs - Set 1
-//============================================================
-ecl_fild01,92,316,4	script	Tourist#ep14_2f2	545,{
-	mes "[Tourist]";
-	mes "I can't believe I have to wait this long......";
-	mes "When is it going to be my turn?";
-	emotion e_sob;
-	close;
-}
-
-ecl_fild01,106,312,4	script	Tourist#ep14_2f3	525,{
-	mes "[Tourist]";
-	mes "I'm actually done with my documentation, but I'm just sticking around to appreciate all of these flowers.";
-	emotion e_lv2;
-	next;
-	mes "[Tourist]";
-	mes "I'm just getting through the night with my sleeping bag!";
-	mes "It's alright as long as you can withstand the security guard's annoyance with you.";
-	close;
-}
-
-ecl_fild01,108,320,6	script	Tourist#ep14_2f4	941,{
-	mes "[Tourist]";
-	mes "I wonder how beautiful of a city Eclage would be.";
-	mes "It just makes my heart beat thinking about it.";
-	emotion e_lv;
-	close;
-}
-
-ecl_fild01,105,320,2	script	Tourist#ep14_2f5	436,{
-	mes "[Tourist]";
-	mes "No, I'm not a visitor. I'm an Eclage citizen!";
-	emotion e_an;
-	next;
-	mes "[Tourist]";
-	mes "I can't believe I can't even enter because of all these tourists!";
-	emotion e_omg;
-	close;
-}
-
-ecl_fild01,103,319,4	script	Tourist#ep14_2f6	900,{
-	mes "[Tourist]";
-	mes "I hear their acorns are delicious without a hint of bitterness.";
-	next;
-	mes "[Tourist]";
-	mes "You could probably make the world's best acorn jello.";
-	emotion e_omg;
-	close;
-}
-
-ecl_fild01,110,316,2	script	Tourist#ep14_2f7	896,{
-	mes "[Tourist]";
-	mes "It's important to keep your belongings light when traveling.";
-	next;
-	mes "[Tourist]";
-	mes "It's going to increase as you go along anyways.";
-	next;
-	mes "[Tourist]";
-	mes "Perhaps you could consider it as the weight of life?";
-	emotion e_awsm,0;
-	close;
-}
-
-ecl_fild01,92,318,4	script	Tourist#ep14_2f8	517,{
-	mes "[Tourist]";
-	mes "Cool cool.";
-	close;
-}
-
-ecl_fild01,93,318,2	script	Tourist#ep14_2f9	107,{
-	mes "[Tourist]";
-	mes "Snorrrreee....Erhem....";
-	next;
-	mes "[Tourist]";
-	mes "Err.... No.....";
-	mes "Curry.... Curry rice.... Snorrreeeee";
-	emotion e_hlp;
-	close;
-}
-
-ecl_fild01,94,313,4	script	Tourist#ep14_2f10	715,{
-	mes "[Tourist]";
-	mes "Oh! Are you also from Midgard?";
-	next;
-	mes "[Tourist]";
-	mes "It's encouraging to see so many Midgard people nowadays.";
-	emotion e_com;
-	close;
-}
-
-ecl_fild01,101,320,4	script	Tourist#ep14_2f11	522,{
-	mes "[Tourist]";
-	mes "Ow.... My legs...";
-	mes "You're saying I have to wait after all this traveling through Bifrost?!";
-	emotion e_an;
-	close;
-}
-
-ecl_fild01,88,315,4	script	Tourist#ep14_2f12	957,{
-	mes "[Tourist]";
-	mes "Ahh...";
-	mes "Why are there so many people...?";
-	next;
-	mes "[Tourist]";
-	mes "I want to be alone......Sniff!";
-	emotion e_otl;
-	close;
-}
-
-// Generic Eclage NPCs - Set 2
-//============================================================
-ecl_fild01,183,190,4	script	Catering#eclbig	447,{
-	mes "[Catering]";
-	mes "Wahahaha! How do you do!";
-	mes "It's perfect weather for a picnic, no?";
-	next;
-	emotion e_wah;
-	mes "[Catering]";
-	mes "You say it's hard to pack for a picnic?";
-	next;
-	emotion e_no1;
-	mes "[Catering]";
-	mes "Don't you worry!";
-	next;
-	emotion e_gasp;
-	mes "[Catering]";
-	mes "This is a specialty combining acorns with 7 different kinds and 7 different levels of flavor collected by squirrels of Eclage!";
-	next;
-	emotion e_cash;
-	mes "[Catering]";
-	mes "This specialty to-go box is only 2,999 coins!!!";
-	next;
-	emotion e_omg;
-	mes "[Catering]";
-	mes "Such a remarkable price!";
-	next;
-	emotion e_lv;
-	mes "[Catering]";
-	mes "If you order now, we also give you a disposable fork that feels like new even with a hundred uses!";
-	close;
-}
-
-ecl_fild01,134,109,4	script	Warao#eclbig	446,{
-	mes "[Warao]";
-	mes "Ah~ I'm so hungry. What should I eat today?";
-	next;
-	mes "[Warao]";
-	mes "Come to think of it, I wonder how this foreigner will taste?";
-	next;
-	emotion e_gg;
-	mes "[Warao]";
-	mes "Hey hey, you know I'm kidding, right?";
-	close;
-}
-
-ecl_fild01,70,285,4	script	Giranni#eclbig	611,{
-	mes "[Giranni]";
-	mes "I wonder where he went. It should be around here...";
-	close;
-}
-
-eclage,106,61,4	script	Markoza#eclbig	444,{
-	mes "[Markoza]";
-	mes "I also want to visit foreign lands.";
-	next;
-	mes "[Markoza]";
-	mes "But would foreigners leave me be when I am this adorable?";
-	next;
-	emotion e_pif;
-	mes "[Markoza]";
-	mes "Man, wherever I go, my cuteness just complicates everything...";
-	close;
-}
-
-eclage,101,130,5	script	Wutapoa#eclbig	435,{
-	mes "[Wutapoa]";
-	mes "I recently moved out of my parent's place!";
-	mes "I am so glad I finally have my own Yai!";
-	next;
-	mes "[Wutapoa]";
-	mes "I'm going to make it the most decorative, beautiful Yai in Eclage!";
-	next;
-	emotion e_heh;
-	mes "[Wutapoa]";
-	mes "Yay, woohoo!!!";
-	close;
-}
-
-eclage,200,272,4	script	Masione#eclbig	437,{
-	mes "[Masione]";
-	mes "Whoa! Hey!";
-	mes "Would you please stop appearing out of nowhere?";
-	emotion e_omg;
-	next;
-	mes "[Masione]";
-	mes "I'm a fragile, sensitive being!";
-	close;
-}
-
-ecl_in01,55,25,3	script	Mijani#eclbig	520,{
-	mes "[Mijani]";
-	mes "You are not from around here?";
-	mes "Welcome.";
-	next;
-	mes "[Mijani]";
-	mes "Of course, as long as you don't disrupt Eclage.";
-	close;
-}
-
-ecl_in01,38,37,4	script	A kneeling boy#eclbig	441,{
-	mes "[A kneeling boy]";
-	mes "Why am I kneeling like this?";
-	next;
-	mes "[A kneeling boy]";
-	mes "At first, it was because it was comfortable. Now it's because I can't stretch my legs out anymore.";
-	next;
-	emotion e_sob;
-	mes "[A kneeling boy]";
-	mes "I try to stretch them out, and my legs are all asleep!!";
-	mes "Does that mean I have to fly around with my legs flexed like this?";
-	close;
-}
-
-ecl_in02,168,41,2	script	Pambo#eclbig	438,{
-	mes "[Pambo]";
-	mes "Do you like things that twinkle?";
-	next;
-	emotion e_lv2;
-	mes "[Pambo]";
-	mes "I love them so much!";
-	next;
-	mes "[Pambo]";
-	mes "Twinkle twinkle~ Twinkle twinkle~";
-	next;
-	mes "[Pambo]";
-	mes "Twinkle twinkle~ Twinkle twinkle~";
-	mes "Sparkle sparkle~ Sparkle sparkle~";
-	next;
-	mes "[Pambo]";
-	mes "Twinkle twinkle~ Twinkle twinkle~";
-	mes "Sparkle sparkle~ Sparkle sparkle~";
-	mes "Mmhahah~ Hahaha~ Hehehe~";
-	mes "Heh heh heh~ Huhuhe~ Hoho~";
-	mes "Kehehe~ Halala~ Fufu~";
-	next;
-	emotion e_sob;
-	mes "[Pambo]";
-	mes "But there's nothing twinkling here...";
-	close;
-}
-
-ecl_in01,41,103,1	script	A blushing girl#eclbig	439,{
-	mes "[A blushing girl]";
-	mes "Do you see this balcony up top?";
-	mes "Mayor Jun appears there everytime there is an important occasion!";
-	next;
-	emotion e_lv2;
-	mes "[A blushing girl]";
-	mes "He's so handome!! Ahhh~";
-	close;
-}
-
-ecl_in01,53,92,4	script	Lafiki#eclbig	444,{
-	mes "[Lafiki]";
-	mes "My fashion sense today is excellent as usual. Heh-";
-	next;
-	emotion e_lv2;
-	mes "[Lafiki]";
-	mes "Hello~ My beautiful body~";
-	mes "Every strand of hair is so beautiful!";
-	next;
-	mes "[Dandy]";
-	mes "Yes, it's definitely your garbage fashion sense that wreaks of trash as usual.";
-	emotion e_gg,0,"Dandy#eclbig";
-	close;
-}
-
-ecl_in01,54,91,2	script	Dandy#eclbig	443,{
-	mes "[Dandy]";
-	mes "Take a look at me! How's this? Am I not so fabulous?";
-	next;
-	mes "[Dandy]";
-	mes "A Laphine can freely change in between different clothes, but not any Laphine looks this great!";
-	next;
-	mes "[Lafiki]";
-	mes "What nonsensical nonsense are you saying? No matter who looks at it, this region's best looker is me!";
-	emotion e_pif,0,"Lafiki#eclbig";
-	close;
-}
-
-ecl_in01,52,102,4	script	Choir Conductor#eclbig	442,{
-	mes "[Choir conductor]";
-	mes "We are Eclage's Tree Wing Choir~";
-	mes "We bring you heavenly harmonies~";
-	next;
-	mes "[Choir conductor]";
-	mes "Hello foreigner, we'll give you a taste of our harmony~";
-	next;
-	emotion e_ho;
-	mes "[Choir]";
-	mes "Aaa~";
-	next;
-	emotion e_ho,0,"Choir member#eclbig01";
-	mes "[Choir]";
-	mes "Aaa~~";
-	mes "Aaa~";
-	next;
-	emotion e_ho,0,"Choir member#eclbig02";
-	mes "[Choir]";
-	mes "Aaa~~~";
-	mes "Aaa~~";
-	mes "Aaa~";
-	next;
-	emotion e_ho,0,"Choir member#eclbig03";
-	mes "[Choir]";
-	mes "Aaa~~~~";
-	mes "Aaa~~~";
-	mes "Aaa~~";
-	mes "Aaa~";
-	next;
-	emotion e_ho,0,"Choir member#eclbig04";
-	mes "[Choir]";
-	mes "Aaa~~~~~";
-	mes "Aaa~~~~";
-	mes "Aaa~~~";
-	mes "Aaa~~";
-	mes "Aaa~";
-	next;
-	emotion e_ho,0,"Choir member#eclbig05";
-	mes "[Choir]";
-	mes "Aaa~~~~~~";
-	mes "Aaa~~~~~";
-	mes "Aaa~~~~";
-	mes "Aaa~~~";
-	mes "Aaa~~";
-	mes "Aaa~";
-	next;
-	emotion e_ho;
-	emotion e_ho,0,"Choir member#eclbig01";
-	emotion e_ho,0,"Choir member#eclbig02";
-	emotion e_ho,0,"Choir member#eclbig03";
-	emotion e_ho,0,"Choir member#eclbig04";
-	emotion e_ho,0,"Choir member#eclbig05";
-	mes "[Choir]";
-	mes "Uhhurukukuruhuuhhurukukuruhuuh";
-	mes "Try to feel this~ The melody that flows~";
-	next;
-	mes "[Choir conductor]";
-	mes "How is it!! Our harmony!!";
-	close;
-}
-
-ecl_in01,51,103,4	script	Choir member#eclbig01	442,{
-	mes "[Choir member]";
-	mes "Aaa~";
-	emotion e_ho;
-	close;
-}
-ecl_in01,53,103,4	duplicate(Choir member#eclbig01)	Choir member#eclbig02	442
-ecl_in01,50,104,4	duplicate(Choir member#eclbig01)	Choir member#eclbig03	442
-ecl_in01,52,104,4	duplicate(Choir member#eclbig01)	Choir member#eclbig04	442
-ecl_in01,54,104,4	duplicate(Choir member#eclbig01)	Choir member#eclbig05	442
-
-// Generic Eclage NPCs - Set 3
-//============================================================
-ecl_fild01,190,93,4	script	Fili#1	617,{
-	mes "[Fili]";
-	mes "Looking at this beautiful field, the song sings itself~";
-	emotion e_ho;
-	close;
-}
-
-ecl_fild01,83,263,4	script	Watering Laphine#1	444,{
-	mes "[Watering Laphine]";
-	mes "I think the earth is running dry.";
-	close;
-}
-
-ecl_fild01,163,196,4	script	Dancing Laphine#1	438,{
-	mes "[Dancing Laphine]";
-	mes "It's important to warm up like this before you start dancing. One, two, three, four....";
+ecl_in02,96,22,3	script	sign#prison_inn	545,{
+	mes "[North] Prison";
+	mes "[West] Clinic";
 	close;
 }
 
-// Eclage Prison & Clinic
-//============================================================
-ecl_in01,8,71,4	script	Eclage Guard#pri_inn	447,{
+ecl_in01,8,71,5	script	Eclage Guard#pri_inn	447,{
 	mes "[Eclage Guard]";
 	mes "This path will take you to the lower parts of Eclage. You'll find a prison and a clinic there.";
 	close;
 }
 
-ecl_in02,96,22,2	script	Sign#prison_inn	835,{
-	mes "[North] Prison";
-	mes "[West] Clinic";
-	close;
-}
-
-ecl_in02,164,56,2	script	Receptionist#Laphine	437,{
+ecl_in02,164,56,3	script	Receptionist#Laphine	835,{
 	mes "[Receptionist]";
 	mes "Welcome to Eclage Clinic.";
 	next;
-	switch(select("Save Location:Rest:Finish the conversation")) {
+	switch (select("Save Location:Rest:Finish the conversation")) {
 	case 1:
-		mes "[Receptionist]";
+		mes "[Receptionist}";
 		mes "Clinic has been set as your save point. Be careful though~";
-		savepoint "ecl_in02",162,49;
+		savepoint "ecl_in02",162,50;
 		close;
 	case 2:
-		mes "[Receptionist]";
+		mes "[Receptionist}";
 		mes "Restore your mind and body at our clinic. It's filled with Eclage's clean energy.";
-		mes "We charge 1 Splendide Coin normally, but we offer a special discount for travelers. Your total is 5,000 zeny.";
+		mes "We charge 1 Splendide Coin normally, but we offer a special discount for travelers. Your total is 5,000 zeny. ";
 		next;
-		switch(select("Pay with Splendide Coin:Pay with Zeny:Forget it")) {
+		switch (select("Pay with Splendide Coin:Pay with Zeny:Forget it")) {
 		case 1:
-			if (countitem(6081) == 0) {
-				mes "[Receptionist]";
+			if (!countitem(6081)) {
+				mes "[Receptionist}";
 				mes "It seems like you don't have enough coins. Would you check your account again, please?";
 				close;
 			}
-			delitem 6081,1; //Splendide_Coin
-			break;
+			mes "[Receptionist}";
+			mes "Make yourself at home~";
+			close2;
+			delitem 6081,1; //6081
+			percentheal 100,100;
+			warp "ecl_in02",167,49;
+			end;
 		case 2:
 			if (Zeny < 5000) {
 				mes "[Receptionist]";
-				mes "It seems like you don't have enough zeny. Would you check your account again, please?";
+				mes "Looks like you don't have enough resources to proceed. Do you mind checking your account again?";
 				close;
 			}
-			set Zeny, Zeny-5000;
-			break;
+			mes "[Receptionist}";
+			mes "Make yourself at home~";
+			close2;
+			Zeny = Zeny - 5000;
+			percentheal 100,100;
+			warp "ecl_in02",167,49;
+			end;
 		case 3:
 			close;
 		}
-		mes "[Receptionist]";
-		mes "Make yourself at home~";
-		close2;
-		percentheal 100,100;
-		warp "ecl_in02",167,49;
-		end;
 	case 3:
 		close;
 	}
 }
 
-ecl_in02,137,44,2	script	Doctor Laphine#doctor	442,{
+ecl_in02,135,45,5	script	Injured Laphine	442,{
 	mes "[Injured Laphine]";
 	mes "Ooww...";
 	mes "Where...am...I?";
 	next;
 	mes "[Doctor]";
 	mes "You're at a clinic. Don't worry.";
-	mes "We stopped the bleeding and casted emergency spells.";
+	mes "We stopped the bleeding and cast emergency spells.";
 	mes "You were bleeding a lot. That was close, you know.";
 	next;
 	mes "[Injured Laphine]";
@@ -474,14 +93,14 @@ ecl_in02,137,44,2	script	Doctor Laphine#doctor	442,{
 	mes "Umm...the arrow damaged your wing pretty badly...";
 	next;
 	mes "[Injured Laphine]";
-	mes "...what do you mean??";
+	mes "...what do you mean?";
 	next;
 	mes "[Doctor]";
-	mes "Well...I was going to tell you after you recover, but you should know. You can't decorate the Yai anymore.";
+	mes "Well...I was going to tell you after you recover, but you should know. You can't decorate the Yai anymore. ";
 	mes "In other words, you injured your wing. The arrow went through the most critical part in the wing.";
 	next;
 	mes "[Injured Laphine]";
 	mes "What? No way...please...doctor!! No!!";
 	close;
 }
-ecl_in02,135,45,4	duplicate(Doctor Laphine#doctor)	Injured Laphine	441
+ecl_in02,137,44,3	duplicate(Injured Laphine)	Doctor Laphine#doctor	441

+ 1 - 1
npc/re/guides/guides_eclage.txt

@@ -12,7 +12,7 @@
 //= 1.0 First version. [Euphy]
 //============================================================ 
 
-ecl_in01,48,60,4	script	Eclage Guard#obb	447,{
+ecl_in01,48,60,5	script	Eclage Guard#obb	447,{
 	mes "[Eclage Guard]";
 	mes "Welcome, Adventurer. This is the plaza of Eclage, a great and sacred tree. How can I help you?";
 	next;

+ 473 - 0
npc/re/instances/EclageInterior.txt

@@ -0,0 +1,473 @@
+//===== rAthena Script ======================================= 
+//= Eclage Instance Script
+//===== By: ================================================== 
+//= Dastgir
+//===== Current Version: ===================================== 
+//= 1.1
+//===== Compatible With: ===================================== 
+//= rAthena Project
+//===== Description: ========================================= 
+//= [Official Conversion]
+//= Eclage Interior Instance
+//===== Additional Comments: ================================= 
+//= 1.0 Converted from the official Aegis script. [Dastgir]
+//= 1.1 Converted from Hercules script to rAthena script & Small bug fix. [Skorm]
+//============================================================ 
+
+ecl_hub01,132,12,3	script	Chief of Staff#tl02	435,{
+	.@party_id = getcharid(1);
+	.@md_name$ = "Eclage Interior";
+
+	if (.@party_id == 0 || getpartyleader(.@party_id,2) != getcharid(0)){
+		mes "-! Warning !-";
+		mes "This current quest will be held at Memorial dungeon.";
+		mes "Only the party leader will enter. Please create your party.";
+		close;
+	}
+	if (ep14_2_mylord == 29) {
+		mes "[Shenime]";
+		mes "This place is set up with lighting for Orb.";
+		mes "If you favor Mayor, you should be cautious here.";
+		next;
+		switch (select("Enter it.:Forget it.")) {
+		case 1:
+			if (instance_create(.@md_name$) < 0) {
+				mes "[Shenime]";
+				mes "There are some soldiers dispatched by Mayor not too long ago.";
+				mes "I should sure hope that you aren't the disturbance they're looking for, right?";
+				close;
+			}
+			ecl_interior_time = gettimetick(2) + 20 * 60;
+			mes "[Shenime]";
+			mes "Given the tight internal security, you should prepare yourself.";
+			mes "Wait here for a minute.";
+			close;
+		case 2:
+			mes "[Shenime]";
+			mes "It's not an easy task.";
+			close;
+		}
+	}
+	mes "[High-level Laphine's]";
+	mes "Hmm? This room?";
+	mes "Never mind. Don't worry about it.";
+	close;
+}
+
+ecl_hub01,130,15,0	script	It is closed shut.	844,{
+	if (ep14_2_mylord == 29) {
+		mes "This door connects to the plaza's ceiling.";
+		mes "It's also a place where the lighting is set up to make Orb seem more beautiful.";
+		next;
+		if (select("Enter it.:Forget it.") == 1) {
+			.@party_id = getcharid(1);
+			.@md_name$ = "Eclage Interior";
+			if (.@party_id == 0 || getpartyleader(.@party_id,2) != getcharid(0)) {
+				mes "-! Warning !-";
+				mes "This current quest will be held at Memorial dungeon.";
+				mes "Only the party leader will enter. Please create your party.";
+				close;
+			}
+			if (gettimetick(2) >= ecl_interior_time){
+				mes "[Shenime]";
+				mes "Looks like the soldiers inside are really tense.";
+				mes "It is pretty difficult to guide an outsider like you.";
+				close;
+			}
+			switch (instance_enter(.@md_name$)) {
+			case 3:
+				mes "An unknown error has occurred.";
+				close;
+			case 2:
+				mes "It is closed shut.";
+				close;
+			case 0:
+				mapannounce "ecl_hub01",getpartyname(.@party_id) + " Party leader " + strcharinfo(0) + " is entering " + .@md_name$,bc_map,"0x00ff99";
+				end;
+			default:
+			}
+		} else
+			close;
+	}
+	mes "This door connects to the plaza's ceiling.";
+	mes "It's also a place where the lighting is set up to make Orb seem more beautiful.";
+	mes "It is closed shut.";
+	close;
+}
+
+1@ecl,58,69,3	script	Shenime#ecl01	435,{
+	mes "[Shenime]";
+	mes "Oh, what's going on here?";
+	mes "They destroyed additional troops that Mayor sent?";
+	next;
+	select("What...?:I fought monsters off!");
+	mes "[Shenime]";
+	mes "It doesn't matter.";
+	mes "Your job ends here.";
+	mes "Now you became a betrayer.";
+	mes "Farewell, then!";
+	specialeffect EF_BEGINSPELL3;
+	next;
+	mes "[" + strcharinfo(0) + "]";
+	mes "No...way!!!";
+	specialeffect2 EF_LORD;
+	percentheal -99,0;
+	soundeffect "wander_man_move.wav",1;
+	sc_start SC_BLIND,60000,0;
+	close2;
+	warp instance_mapname("1@ecl"),146,95;
+	end;
+
+OnInstanceInit:
+	hideonnpc instance_npcname(strnpcinfo(0));
+	end;
+
+OnEnable:
+	hideoffnpc instance_npcname(strnpcinfo(0));
+	end;
+}
+
+1@ecl,51,64,1	script	Suspicious Creature#1	2375,{
+	end;
+}
+1@ecl,43,67,3	duplicate(Suspicious Creature#1)	Suspicious Creature#2	2375,0,0
+1@ecl,55,80,3	duplicate(Suspicious Creature#1)	Suspicious Creature#3	2375,0,0
+1@ecl,60,75,3	duplicate(Suspicious Creature#1)	Suspicious Creature#4	2375,0,0
+
+1@ecl,42,80,5	script	Suspicious Creature#5	2376,{
+	end;
+OnInstanceInit:
+	hideonnpc instance_npcname(strnpcinfo(0));
+	end;
+}
+1@ecl,48,86,3	duplicate(Suspicious Creature#5)	Suspicious Creature#6	2376,0,0
+1@ecl,58,82,3	duplicate(Suspicious Creature#5)	Suspicious Creature#7	2376,0,0
+1@ecl,56,88,3	duplicate(Suspicious Creature#5)	Suspicious Creature#8	2376,0,0
+
+1@ecl,53,83,0	script	#sndmaster	HIDDEN_WARP_NPC,10,10,{
+	end;
+
+OnInstanceInit:
+	'mob_summoned = 0;
+	disablenpc instance_npcname(strnpcinfo(0));
+	end;
+
+OnEnable:
+	sleep 1000;
+    mapannounce instance_mapname("1@ecl"),"Warning: Abnormal occurrence in the lighting room. Abnormal occurrence in the lighting room.",bc_map,"0xffff00"; //FW_NORMAL 12 0 0
+	sleep 2000;
+    mapannounce instance_mapname("1@ecl"),"Suspicious Creature: Kerrrrr....krwahhhh!!",bc_map,"0xffff00"; //FW_NORMAL 12 0 0
+	hideoffnpc instance_npcname("Suspicious Creature#5");
+	hideoffnpc instance_npcname("Suspicious Creature#6");
+	hideoffnpc instance_npcname("Suspicious Creature#7");
+	hideoffnpc instance_npcname("Suspicious Creature#8");
+	sleep 3000;
+	hideonnpc instance_npcname("#sndmaster");
+	end;
+
+OnMyMobDead:
+	if (mobcount(instance_mapname("1@ecl"),instance_npcname("#sndmaster")+"::OnMyMobDead") == 0) {
+		donpcevent instance_npcname("Shenime#ecl01")+"::OnEnable";
+		mapannounce instance_mapname("1@ecl"),"Shenime: Good, I got here just in time.",bc_map,"0xffff00"; //FW_NORMAL 12 0 0
+	}
+	end;
+
+OnTouch:
+	if ('mob_summoned > 1) end;
+    mes "Upon eliminating the intruders near the Orb, another strange-looking creatures appeared.";
+    next;
+    mes "We couldn't communicate with them either, and one of them seemed furious after looking around and finding out that its fellows are defeated.";
+    next;
+    mes "[" + strcharinfo(0) + "]";
+    mes "They look as if they are incarnation of Morroc.";
+    mes "Is the King of Domons after the Orb?";
+    mes "Or is it just a coincidence?";
+    next;
+    mes "[Subordinate of the King of Demons]";
+    mes "Kyaarr...Keraahhh!!!";
+    mes "Kkwaaa!";
+    next;
+    mes "A battle cannot be avoided!";
+    mes "They will kill me!";
+	close2;
+	hideonnpc instance_npcname("Suspicious Creature#5");
+	hideonnpc instance_npcname("Suspicious Creature#6");
+	hideonnpc instance_npcname("Suspicious Creature#7");
+	hideonnpc instance_npcname("Suspicious Creature#8");
+	disablenpc instance_npcname("Suspicious Creature#5");
+	disablenpc instance_npcname("Suspicious Creature#6");
+	disablenpc instance_npcname("Suspicious Creature#7");
+	disablenpc instance_npcname("Suspicious Creature#8");
+	.@eclmap$ = instance_mapname("1@ecl");
+	.@sndmaster$ = instance_npcname("#sndmaster");
+	monster .@eclmap$,42,80,"Subordinate of the King of Demons",2376,1,.@sndmaster$+"::OnMyMobDead";
+	monster .@eclmap$,48,86,"Subordinate of the King of Demons",2376,1,.@sndmaster$+"::OnMyMobDead";
+	monster .@eclmap$,59,82,"Subordinate of the King of Demons",2376,1,.@sndmaster$+"::OnMyMobDead";
+	monster .@eclmap$,56,88,"Subordinate of the King of Demons",2376,1,.@sndmaster$+"::OnMyMobDead";
+	monster .@eclmap$,39,72,"Subordinate of the King of Demons",2376,1,.@sndmaster$+"::OnMyMobDead";
+	monster .@eclmap$,42,69,"Subordinate of the King of Demons",2376,1,.@sndmaster$+"::OnMyMobDead";
+	monster .@eclmap$,47,64,"Subordinate of the King of Demons",2376,1,.@sndmaster$+"::OnMyMobDead";
+	monster .@eclmap$,50,60,"Subordinate of the King of Demons",2376,1,.@sndmaster$+"::OnMyMobDead";
+	'mob_summoned = 2;
+    end;
+}
+
+1@ecl,57,65,0	script	#event	139,5,5,{
+	end;
+OnTouch:
+	if ('mob_summoned > 0) end;
+	.@eclmap$ = instance_mapname("1@ecl");
+	.@eventname$ = instance_npcname("#event");
+	mes "An empty room with nothing inside.";
+	mes "a light is coming out of a circular equipment in the middle of the room.";
+	next;
+	mes "[Suspicious Creature]";
+	mes "Keheehehehe......";
+	next;
+	mes "A group of unidentifiable creatures is approaching threateningly.";
+	mes "They seemed surprised, and although Bifrost's will still holds, it's hard to communicate.";
+	next;
+	mes "[Suspicious Creature]";
+	mes "Kyaarr...Ke...Keryarya!!";
+	next;
+	mes "It seems like they are going to start attacking any minute.";
+	mes "We cannot help fighting them!";
+	close2;
+	hideonnpc instance_npcname("Suspicious Creature#1");
+	hideonnpc instance_npcname("Suspicious Creature#2");
+	hideonnpc instance_npcname("Suspicious Creature#3");
+	hideonnpc instance_npcname("Suspicious Creature#4");
+	disablenpc instance_npcname("Suspicious Creature#1");
+	disablenpc instance_npcname("Suspicious Creature#2");
+	disablenpc instance_npcname("Suspicious Creature#3");
+	disablenpc instance_npcname("Suspicious Creature#4");
+	monster .@eclmap$,51,64,"Suspicious Creature",2375,1,.@eventname$+"::OnMyMobDead";
+	monster .@eclmap$,43,67,"Suspicious Creature",2375,1,.@eventname$+"::OnMyMobDead";
+	monster .@eclmap$,55,80,"Suspicious Creature",2375,1,.@eventname$+"::OnMyMobDead";
+	monster .@eclmap$,60,75,"Suspicious Creature",2375,1,.@eventname$+"::OnMyMobDead";
+	'mob_summoned = 1;
+	end;
+
+OnMyMobDead:
+	if (mobcount(instance_mapname("1@ecl"),instance_npcname("#event")+"::OnMyMobDead") == 0) {
+		enablenpc instance_npcname("#sndmaster");
+		donpcevent instance_npcname("#sndmaster")+"::OnEnable";
+	}
+	end;
+}
+
+1@ecl,148,97,3	script	Avant#	618,{
+	mes "[Avant]";
+	mes "Hey, look who's here!";
+	mes "You're a friend of my son, right?";
+	mes "What a strange chance it is that has brought us together here!";
+	cutin "avant01",1;
+	next;
+	mes "[Avant]";
+	mes "Did something happen to you?";
+	mes "There was a subtle and magical echo to it.";
+	mes "Immidiately after that, you were thrown here.";
+	next;
+	if (select("It's all because of you!:Shenime said...") == 1) {
+		mes "[Avant]";
+		mes "I don't understand a word you're saying.";
+		mes "Can't you organize your story? Don't you know 'five W's and one H' rule?";
+		next;
+	}
+	mes "[Avant]";
+	mes "Ooh...so that's what happened.";
+	mes "So you're saying that Shenime was after the Orb?";
+	next;
+	mes "[Avant]";
+	mes "hehehe...hahahhaha ahahahahha";
+	mes "Well, well...did he get me, too?";
+	mes "Me, Avant, of all the people?! Hahahaha!";
+	cutin "avant02",1;
+	next;
+	select("What do you mean?");
+	mes "[Avant]";
+	mes "I was doing a research on the power of the Orb on my own.";
+	mes "But Shenime just urged me persistently.";
+	cutin "avant01",1;
+	next;
+	mes "[Avant]";
+	mes "I started from thinking about the beauty of the Orb and went on to wondering what kind of power is accumulated inside the Orb...";
+	mes "and I started questioning the principle of the Orb's power since we all benefit from it.";
+	next;
+	mes "[Avant]";
+	mes "All Laphines think of the Orb as something natural as air and water, but he was the first one to make me perceive it differently and investigate its origin.";
+	mes "Right...Shenime. He excited my curiosity on purpose.";
+	next;
+	mes "[Avant]";
+	mes "Stimulate a person who wasn't aware of air and water, and make him recognize and carry on investigating!";
+	mes "Well, well...isn't that interesting!";
+	cutin "avant02",1;
+	next;
+	mes "[Avant]";
+	mes "Ha...hahaha...";
+	mes "...I'm so angry about the fact that I just realized how he used me, but what's even worse is that I've done something horrible to our people.";
+	mes "I think I'm pretty irritated now.";
+	next;
+	select("You had a conscience?");
+	mes "[Avant]";
+	mes "What kind of a person do you think I am, seriously!";
+	mes "Is it because of my sons?";
+	mes "Well, then, I can't blame you too much.";
+	cutin "avant01",1;
+	next;
+	mes "[Avant]";
+	mes "...Bah.";
+	mes "It's no fun.";
+	mes "It's not fun anymore. I'm no longer interested in you.";
+	next;
+	mes "[Avant]";
+	mes "......";
+	mes "Seems like there's a visitor.";
+	next;
+	cutin "minuel01",4;
+	mes "[Minuel]";
+	mes "" + strcharinfo(0) + "Sir,";
+	mes "Although you're detained on suspicion of being responsible for the recent incident in the lighting room,";
+	mes "there are some witnesses to prove your innocence.";
+	next;
+	mes "[Minuel]";
+	mes "I don't know the details,";
+	mes "but I also believe you're not guilty.";
+	mes "I'll move you to the treatment room since this seems like a severe wound.";
+	next;
+	mes "[Minuel]";
+	mes "I don't think it's a big deal.";
+	mes "...hopefully.";
+	mes "Let's go. I'll guide you.";
+	close2;
+	cutin "",255;
+	warp "1@ecl",146,29;
+	end;
+}
+	
+1@ecl,148,29,3	script	Loki#ecl01	512,{
+	mes "[Loki]";
+	mes "It seems like this guy next to me has a lot more to say than I do.";
+	mes "Why don't you explain to him first?";
+	close;
+}	
+	
+1@ecl,147,30,3	script	Nydhog#ecl01	510,{
+	mes "[Guardian Nydhog]";
+	mes "I think you should talk to Hisie first.";
+	close;
+}
+	
+1@ecl,144,27,5	script	Hisie#ecl01	623,{
+	cutin "hisie01",0;
+	mes "[Hisie]";
+	mes "Can you tell me exactly what happened?";
+	next;
+	select("I fought with monsters.");
+	cutin "hisie03",0;
+	mes "[Hisie]";
+	mes "Monsters? Subordinates of Morroc?";
+	mes "What you were trying to kill were our soldiers, the Laphines!!";
+	mes "What on earth happened there?";
+	npcskill "AL_HEAL",9,99,80;
+	next;
+	cutin "",255;
+	mes "[Loki]";
+	mes "It's because of this.";
+	mes "" + strcharinfo(0) + "It was inside the body of -";
+	mes "This is how powerful Shenime is.";
+	next;
+	mes "On Loki's palm, there rested a small, thin, and dried piece of thorn.";
+	next;
+	cutin "hisie03",0;
+	mes "[Hisie]";
+	mes "Shenime, the Chief of Staff?";
+	mes "Why is he related to this?";
+	npcskill "AL_HEAL",9,99,80;
+	next;
+	cutin "",255;
+	mes "[Loki]";
+	mes "Shenime is one of the subordinates of Morroc.";
+	mes "His power enbales him to control another person directly or mentally influence that person indirectly through a part of his body.";
+	next;
+	select("Now that I think about it...");
+	mes "[" + strcharinfo(0) + "]";
+	mes "Right before coming here, Shenime reached his hand out to me and I felt a spark when I held his hand.";
+	mes "I thought it was just my imagination and ignored it...maybe that's when he...";
+	next;
+	mes "[Nydhog]";
+	mes "You're probably right.";
+	mes "They use wicked tricks.";
+	mes "This thorn here probably has clouded your judgement.";
+	next;
+	cutin "hisie03",0;
+	mes "[Hisie]";
+	mes "So you're saying that he deceived us all?";
+	mes "The Chief of Staff is a Laphine who stayed with us for a long time! He can't be...";
+	npcskill "AL_HEAL",9,99,80;
+	next;
+	cutin "",255;
+	mes "[Loki]";
+	mes "He might have been under the influence for a good while.";
+	mes "Anyway, this guy is not guilty.";
+	mes "I can prove it.";
+	next;
+	mes "[Nydhog]";
+	mes "I swear by the name of the guardian of Yggdrasil, too.";
+	mes "" + strcharinfo(0) + "- will by no means do such a thing.";
+	next;
+	cutin "hisie02",0;
+	mes "[Hisie]";
+	mes "Hah...";
+	mes "But things got out of control.";
+	mes "I didn't expect this.";
+	next;
+	select("What happened to the Orb?");
+	mes "[Hisie]";
+	mes "The inner core is stolen.";
+	mes "Nobody knows that the Orb's inner core is gone,";
+	mes "and that's why Karr didn't make it here.";
+	npcskill "AL_HEAL",9,99,80;
+	next;
+	mes "[Hisie]";
+	mes "And what's more, several soldiers are injured because of you.";
+	mes "None of them died fortunately, but most of them are wounded severely.";
+	mes "The situation is not very good right now.";
+	next;
+	cutin "",255;
+	mes "[Loki]";
+	mes "Someone has to take the responsibility here then.";
+	mes "In all probablility," + strcharinfo(0) + "it will be you.";
+	next;
+	cutin "hisie02",0;
+	mes "[Hisie]";
+	mes "......these two gentlemen here cleared up all charges related to the Orb,";
+	mes "but both you and Karr won't be able to avoid your responsibility.";
+	mes "you'll have to catch Shenime.";
+	npcskill "AL_HEAL",9,99,80;
+	next;
+	cutin "hisie01",0;
+	mes "[Hisie]";
+	mes "It seems like you've rested enough. Let's get going.";
+	mes "Karr is waiting for you.";
+	mes "What will you two do?";
+	next;
+	cutin "",255;
+	mes "[Loki]";
+	mes "Don't worry about us.";
+	mes "Our target is Morroc, the King of Demons.";
+	mes "It's good enough that we found an evidence here.";
+	next;
+	cutin "hisie01",0;
+	mes "[Hisie]";
+	mes "Thank you for your help.";
+	mes "We will take off now.";
+	mes "Let's go." + strcharinfo(0) + ".";
+	ep14_2_mylord = 30;
+	changequest 7450,7451;
+	close2;
+	cutin "",255;
+	warp "ecl_in03",57,76;
+	instance_destroy;
+	end;
+}

+ 272 - 238
npc/re/merchants/coin_exchange.txt

@@ -3,8 +3,8 @@
 //===== By: ==================================================
 //= rAthena Dev Team
 //===== Current Version: =====================================
-//= 1.2
-//===== Compatible With: =====================================
+//= 1.3
+//===== Compatible With: ===================================== 
 //= rAthena Project
 //===== Description: =========================================
 //= [Official Conversion]
@@ -13,9 +13,10 @@
 //= 1.0 First version. [Euphy/Lemongrass]
 //= 1.1 Added remaining Malangdo traders. [Euphy/Lemongrass]
 //= 1.2 Added Eclage traders (not fully complete). [Euphy]
+//= 1.3 Completed Eclage Traders. [Dastgir]
 //============================================================
 
-// Malangdo Item Machines :: mal_yong
+// Malangdo
 //============================================================
 malangdo,220,167,5	script	Coin Exchanger CX-1	564,{
 	if (checkweight(1201,1) == 0) {
@@ -36,22 +37,22 @@ malangdo,220,167,5	script	Coin Exchanger CX-1	564,{
 		6420, //Cgrade_Coin
 		6421, //Dgrade_Coin
 		6422; //Egrade_Coin
-	set .@menu$,"Stop:";
-	for(set .@i,1; .@i<=6; set .@i,.@i+1) {
+	.@menu$ = "Stop:";
+	for(.@i = 1; .@i<=6; .@i++) {
 		if (countitem(.@coins[.@i]))
-			set .@menu$, .@menu$+getitemname(.@coins[.@i])+":";
+			.@menu$ += getitemname(.@coins[.@i])+":";
 		else
-			set .@menu$, .@menu$+"^aaaaaa"+getitemname(.@coins[.@i])+" (None)^000000:";
+			.@menu$ += "^aaaaaa"+getitemname(.@coins[.@i])+" (None)^000000:";
 	}
-	set .@i, select(.@menu$);
+	.@i = select(.@menu$);
 	switch(.@i) {
 	case 1:
 		mes "[Coin Exchanger CX-1]";
 		mes "Thank you for coming.";
 		close;
 	default:
-		set .@coin, .@coins[.@i-1];
-		set .@coin_select, .@i-1;
+		.@coin = .@coins[.@i-1];
+		.@coin_select = .@i-1;
 		break;
 	}
 	if (countitem(.@coin) == 0) {
@@ -71,17 +72,17 @@ malangdo,220,167,5	script	Coin Exchanger CX-1	564,{
 	setarray .@exchange_rate[0],30,10;
 	setarray .@exchange_loss[0],rand(1,4),rand(1,2); // Amount deducted per exchange.
 	setarray .@exchange_id[0],.@coins[.@coin_select-1],.@coins[.@coin_select+1];
-	if (.@exchange_id[0] == .@coins[1]) set .@exchange_id[0],0; // Cannot exchange for Silvervine.
-	set .@menu$,"Stop:";
-	for(set .@i,0; .@i<2; set .@i,.@i+1) {
+	if (.@exchange_id[0] == .@coins[1]) .@exchange_id[0] = 0; // Cannot exchange for Silvervine.
+	.@menu$ = "Stop:";
+	for(.@i = 0; .@i<2; .@i++) {
 		if (.@exchange_id[.@i] == 0)
-			set .@menu$, .@menu$+"^ff3333Unavailable exchange to "+.@exchange_name$[.@i]+" coin^000000:";
+			.@menu$ += "^ff3333Unavailable exchange to "+.@exchange_name$[.@i]+" coin^000000:";
 		else if (countitem(.@coin) < .@exchange_rate[.@i])
-			set .@menu$, .@menu$+"^aaaaaaExchange to "+.@exchange_name$[.@i]+" coin (null)^000000:";
+			.@menu$ += "^aaaaaaExchange to "+.@exchange_name$[.@i]+" coin (null)^000000:";
 		else
-			set .@menu$, .@menu$+"Exchange to "+.@exchange_name$[.@i]+" coin - "+getitemname(.@coin)+" ("+.@exchange_rate[.@i]+" needed):";
+			.@menu$ += "Exchange to "+.@exchange_name$[.@i]+" coin - "+getitemname(.@coin)+" ("+.@exchange_rate[.@i]+" needed):";
 	}
-	set .@i, select(.@menu$)-2;
+	.@i = select(.@menu$)-2;
 	if (.@i == -1) {
 		mes "[Coin Exchanger CX-1]";
 		mes "Thank you for coming.";
@@ -99,7 +100,7 @@ malangdo,220,167,5	script	Coin Exchanger CX-1	564,{
 		mes "Thank you for coming.";
 		close;
 	}
-	set .@exchange_total, .@exchange_rate[(!.@i)] - .@exchange_loss[(!.@i)];
+	.@exchange_total = .@exchange_rate[(!.@i)] - .@exchange_loss[(!.@i)];
 	delitem .@coin, .@exchange_rate[.@i];
 	getitem .@exchange_id[.@i], .@exchange_total;
 	mes "[Coin Exchanger CX-1]";
@@ -131,10 +132,10 @@ malangdo,218,165,5	script	Special Vending Machine	562,{
 		"Ordinary Lubricant",6440,36,
 		"Sillit Pong",6443,192;
 L_AddItem:
-	set .@menu$,"Explanation:";
-	for(set .@i,0; .@i<getargcount(); set .@i,.@i+3)
-		set .@menu$, .@menu$+getarg(.@i)+":";
-	set .@i, select(.@menu$)-2;
+	.@menu$ = "Explanation:";
+	for(.@i = 0; .@i<getargcount(); .@i += 3)
+		.@menu$ += getarg(.@i)+":";
+	.@i = select(.@menu$)-2;
 	if (.@i == -1) {
 		mes "[Special Vending Machine]";
 		mes "Seagod's Protection is an item used for entering the Culvert memorial dungeon during a certain period.";
@@ -149,14 +150,14 @@ L_AddItem:
 		mes "Sillit Pong is special item that separates sockets with MVP cards. Unable to separate MVP card by Premium and Ordinary Lubricant.";
 		close;
 	}
-	set .@cost, getarg(.@i*3+2);
+	.@cost = getarg(.@i*3+2);
 	mes "[Special Vending Machine]";
 	mes "You choose ^005500"+getarg(.@i*3)+"^000000. For purchasing, you need ^005500"+.@cost+"^000000 unit(s) of Silvervine Fruit.";
 	next;
 	if (countitem(6417) < .@cost)
-		set .@ven_menu$, "^999999Silvervine Fruit (missing "+(.@cost - countitem(6417))+")^000000";
+		.@ven_menu$ = "^999999Silvervine Fruit (missing "+(.@cost - countitem(6417))+")^000000";
 	else
-		set .@ven_menu$, "Purchase - Silvervine Fruit (have "+countitem(6417)+")";
+		.@ven_menu$ = "Purchase - Silvervine Fruit (have "+countitem(6417)+")";
 	switch(select("Stop:"+.@ven_menu$)) {
 	case 1:
 		mes "[Special Vending Machine]";
@@ -178,8 +179,6 @@ L_AddItem:
 	}
 }
 
-// Malangdo Coin Exchange :: mal_mo_coin
-//============================================================
 malangdo,236,179,5	script	Dark Merchant K	554,{
 	if (checkweight(1201,1) == 0) {
 		mes "It seems you have too much in your inventory. Let's try again after getting rid of some of your belongings.";
@@ -195,14 +194,14 @@ malangdo,236,179,5	script	Dark Merchant K	554,{
 	next;
 	setarray .@coin_amount[0],10,100,500,1000;
 	while(1) {
-		set .@menu$,"";
-		for(set .@i,0; .@i<getarraysize(.@coin_amount); set .@i,.@i+1) {
+		.@menu$ = "";
+		for(.@i = 0; .@i<getarraysize(.@coin_amount); .@i++) {
 			if (countitem(6420) >= .@coin_amount[.@i])
-				set .@menu$, .@menu$+"Exchange "+(.@coin_amount[.@i]/10)+" Mora Coin:";
+				.@menu$ += "Exchange "+(.@coin_amount[.@i]/10)+" Mora Coin:";
 			else
-				set .@menu$, .@menu$+"^aaaaaaExchange "+(.@coin_amount[.@i]/10)+" Mora Coin (Not Enough)^000000:";
+				.@menu$ += "^aaaaaaExchange "+(.@coin_amount[.@i]/10)+" Mora Coin (Not Enough)^000000:";
 		}
-		set .@i, select(.@menu$+"Quit")-1;
+		.@i = select(.@menu$+"Quit")-1;
 		if (.@i == getarraysize(.@coin_amount)) {
 			mes "[Merchant K]";
 			mes "Let's exchange some other time.";
@@ -247,23 +246,23 @@ malangdo,233,180,3	script	Dark MachineTX100	564,{
 		6420, //Cgrade_Coin
 		6421, //Dgrade_Coin
 		6422; //Egrade_Coin
-	set .@menu$,"Quit:";
-	for(set .@i,1; .@i<=6; set .@i,.@i+1) {
+	.@menu$ = "Quit:";
+	for(.@i = 1; .@i<=6; .@i++) {
 		if (countitem(.@coins[.@i]))
-			set .@menu$, .@menu$+getitemname(.@coins[.@i])+" (have "+countitem(.@coins[.@i])+"):";
+			.@menu$ += getitemname(.@coins[.@i])+" (have "+countitem(.@coins[.@i])+"):";
 		else
-			set .@menu$, .@menu$+"^aaaaaa"+getitemname(.@coins[.@i])+" (None)^000000:";
+			.@menu$ += "^aaaaaa"+getitemname(.@coins[.@i])+" (None)^000000:";
 	}
-	set .@i, select(.@menu$)-1;
+	.@i = select(.@menu$)-1;
 	if (.@i == 0) {
 		mes "[Dark Machine TX100]";
 		mes "Thank you for coming.";
 		close;
 	}
-	set .@coin, .@coins[.@i];
+	.@coin = .@coins[.@i];
 	setarray .@exchange_name$[0],"higher","lower";
 	setarray .@exchange_id[0],.@coins[.@i-1],.@coins[.@i+1];
-	if (.@exchange_id[0] == .@coins[1]) set .@exchange_id[0],0; // Cannot exchange for Silvervine.
+	if (.@exchange_id[0] == .@coins[1]) .@exchange_id[0] = 0; // Cannot exchange for Silvervine.
 	if (.@i > getarraysize(.@coins)) {
 		mes "[Dark Machine TX100]";
 		mes "You've chosen abnormal menu.";
@@ -283,26 +282,26 @@ malangdo,233,180,3	script	Dark MachineTX100	564,{
 	mes "---------------------";
 	mes "^ff3333We take a small vendor fee from your exchanged coins.^000000";
 	next;
-	set .@menu$, "Quit:";
+	.@menu$ = "Quit:";
 	if (.@exchange_id[0] == 0)
-		set .@menu$, .@menu$+"^ff3333Cannot exchange to higher level coin^000000:";
+		.@menu$ += "^ff3333Cannot exchange to higher level coin^000000:";
 	else {
 		if (countitem(.@coin) >= 99)
-			set .@menu$, .@menu$+"Exchange 99 "+getitemname(.@coin)+" into higher level coin:";
+			.@menu$ += "Exchange 99 "+getitemname(.@coin)+" into higher level coin:";
 		else
-			set .@menu$, .@menu$+"^aaaaaaExchange to higher level coin (Not enough)^000000:";
+			.@menu$ += "^aaaaaaExchange to higher level coin (Not enough)^000000:";
 	}
 	if (.@exchange_id[1] == 0)
-		set .@menu$, .@menu$+"^ff3333Cannot exchange to lower level coin^000000:";
+		.@menu$ += "^ff3333Cannot exchange to lower level coin^000000:";
 	else {
 		if (countitem(.@coin) > 500)
-			set .@menu$, .@menu$+"Exchange 500 "+getitemname(.@coin)+" into lower level coin:";
+			.@menu$ += "Exchange 500 "+getitemname(.@coin)+" into lower level coin:";
 		else if (countitem(.@coin))
-			set .@menu$, .@menu$+"Exchange "+countitem(.@coin)+" "+getitemname(.@coin)+" into lower level coin:";
+			.@menu$ += "Exchange "+countitem(.@coin)+" "+getitemname(.@coin)+" into lower level coin:";
 		else
-			set .@menu$, .@menu$+"^aaaaaaExchange to lower level coin (Not enough)^000000:";
+			.@menu$ += "^aaaaaaExchange to lower level coin (Not enough)^000000:";
 	}
-	set .@i, select(.@menu$)-2;
+	.@i = select(.@menu$)-2;
 	if (.@i == -1) {
 		mes "[Dark Machine TX100]";
 		mes "Thank you for coming.";
@@ -327,17 +326,17 @@ malangdo,233,180,3	script	Dark MachineTX100	564,{
 	}
 	switch(.@i) {
 	case 0:
-		set .@payment_amount,99;
-		set .@reward_amount, .@payment_amount/3;
-		set .@coin_text$,"High";
+		.@payment_amount = 99;
+		.@reward_amount = .@payment_amount/3;
+		.@coin_text$ = "High";
 		break;
 	case 1:
-		set .@payment_amount,(((countitem(.@coin) > 500))?500:countitem(.@coin));
-		set .@reward_amount, .@payment_amount*3;
-		set .@coin_text$,"Low";
+		.@payment_amount = (((countitem(.@coin) > 500))?500:countitem(.@coin));
+		.@reward_amount = .@payment_amount*3;
+		.@coin_text$ = "Low";
 		break;
 	}
-	set .@fee, rand(1,3);
+	.@fee = rand(1,3);
 	delitem .@coin, .@payment_amount;
 	getitem .@exchange_id[.@i], .@reward_amount - .@fee;
 	mes "[Dark Machine TX100]";
@@ -346,8 +345,6 @@ malangdo,233,180,3	script	Dark MachineTX100	564,{
 	close;
 }
 
-// Malangdo Can Exchange :: mal_can_rep
-//============================================================
 malangdo,175,145,4	script	Can Agency Guard	549,{
 	if (checkweight(1201,1) == 0) {
 		mes "You seem to have too many items. Give it a try after sorting out the item kinds.";
@@ -395,20 +392,20 @@ malangdo,175,145,4	script	Can Agency Guard	549,{
 		mes "Umm, I'm not here forever, so come to me if you'd like to exchange while I still am.";
 		close;
 	case 2:
-		set .@check,1;
-		set .@count,1;
+		.@check = 1;
+		.@count = 1;
 		break;
 	case 3:
-		set .@check,10;
-		set .@count,10;
+		.@check = 10;
+		.@count = 10;
 		break;
 	case 4:
-		set .@check,100;
-		set .@count,100;
+		.@check = 100;
+		.@count = 100;
 		break;
 	case 5:
-		set .@check,1;
-		set .@count,countitem(12633);
+		.@check = 1;
+		.@count = countitem(12633);
 		break;
 	}
 	if (countitem(12633) < .@check) {
@@ -429,8 +426,6 @@ malangdo,175,145,4	script	Can Agency Guard	549,{
 	close;
 }
 
-// Malangdo Traders :: malang_trader
-//============================================================
 function	script	F_mal_coin	{
 
 // Initial dialogue and checks:
@@ -509,16 +504,16 @@ function	script	F_mal_coin	{
 		mes "The price of ^0000FF["+getarg(2)+"]^000000 is";
 		if (getarg(4) && getarg(5)) { // Type 1: Egrade_Coin or Malang_Sp_Can
 			mes getarg(4)+" E Grade Coin or "+getarg(5)+" Malangdo Canned Specialties.";
-			set .@type,1;
-			set .@menu$,"Yes.:No, I'll purchase with cans.:I don't want to purchase any.";
+			.@type = 1;
+			.@menu$ = "Yes.:No, I'll purchase with cans.:I don't want to purchase any.";
 		} else if (getarg(5)) { // Type 2: Malang_Sp_Can only
 			mes getarg(5)+" Malangdo Canned Specialties.";
-			set .@type,2;
-			set .@menu$,"Yes.::No.";
+			.@type = 2;
+			.@menu$ = "Yes.::No.";
 		} else { // Type 3: Silvervine only
 			mes getarg(6)+" Silvervine Fruit.";
-			set .@type,3;
-			set .@menu$,"Yes.::I don't want to purchase any.";
+			.@type = 3;
+			.@menu$ = "Yes.::I don't want to purchase any.";
 		}
 		next;
 		mes getarg(1);
@@ -532,23 +527,23 @@ function	script	F_mal_coin	{
 		next;
 		switch(select(.@menu$)) {
 		case 2:
-			set .@type,2;
+			.@type = 2;
 		case 1:
 			switch(.@type) {
 			case 1:
-				set .@item,6422; //Egrade_Coin
-				set .@amount,getarg(4);
-				set .@str$,"coins";
+				.@item = 6422; //Egrade_Coin
+				.@amount = getarg(4);
+				.@str$ = "coins";
 				break;
 			case 2:
-				set .@item,12636; //Malang_Sp_Can
-				set .@amount,getarg(5);
-				set .@str$,"cans";
+				.@item = 12636; //Malang_Sp_Can
+				.@amount = getarg(5);
+				.@str$ = "cans";
 				break;
 			case 3:
-				set .@item,6417; //Silvervine
-				set .@amount,getarg(6);
-				set .@str$,"Silvervine Fruit";
+				.@item = 6417; //Silvervine
+				.@amount = getarg(6);
+				.@str$ = "Silvervine Fruit";
 				break;
 			}
 			if (countitem(.@item) < .@amount) {
@@ -584,7 +579,7 @@ malangdo,162,146,5	script	Wandering Merchant#mal	495,{
 		"Spearfish","Tuna","Hairtail","Saurel","Malang Snow Crab","Brindle Eel",
 		"Hairtail (7Days)","Spearfish (7Days)","Saurel (7Days)","Tuna (7Days)","Brindle Eel (7Days)","Malang Snow Crab (7Days)";
 	while(1) {
-		set .@i, select(
+		.@i = select(
 			"[Spearfish(1hr)] 8 E-Coins/50 Cans",
 			"[Tuna(1hr)] 8 E-Coins/50 Cans",
 			"[Hairtail(1hr)] 8 E-Coins/50 Cans",
@@ -711,7 +706,7 @@ malangdo,173,145,4	script	Stinky Merchant	496,{
 	setarray .@items[1],2873,16015;
 	setarray .@names$[1],"Cat Hand Glove","Cat Club";
 	while(1) {
-		set .@i, select(
+		.@i = select(
 			"[Cat Hand Glove] 32 E-Coins/200 Cans",
 			"[Cat Club] 32 E-Coins/200 Cans",
 			"End purchasing."
@@ -762,7 +757,7 @@ malangdo,150,135,5	script	Roving Merchant	495,{
 	setarray .@items[1],12639,12637,12638,12640;
 	setarray .@names$[1],"Flying Fish","Sow Bug","Dried Squid","Starfish";
 	while(1) {
-		set .@i, select(
+		.@i = select(
 			"[Flying Fish] 200 Cans",
 			"[Sow Bug] 200 Cans",
 			"[Dried Squid] 200 Cans",
@@ -835,55 +830,57 @@ malangdo,150,135,5	script	Roving Merchant	495,{
 
 // Eclage
 //============================================================
-ecl_in01,66,95,2	script	Armor Merchant Naphara	436,{
+ecl_in01,66,95,3	script	Armor Merchant Naphara#e	436,{
+	if (!checkweight(1301,3)) {
+		mes "- Stop Here!! -";
+		mes "- You have too many items. -";
+		mes "- You cannot carry any more items. -";
+		mes "- Lighten your load and -";
+		mes "- try again. -";
+		close;
+	}
 	mes "[Armor Merchant]";
 	mes "Hello, this is Naphara's store, a place of high class goods.";
 	mes "What would you need?";
 	next;
-	set .@i, select("Str Glove:Int Glove:Agi Glove:Vit Glove:Dex Glove:Luk Glove");
+	.@choice = select("Str Glove:Int Glove:Agi Glove:Vit Glove:Dex Glove:Luk Glove") -1;
 	mes "[Armor Merchant]";
-	switch(.@i) {
-	case 1: // Str Glove
+	switch(.@choice) {
+	case 0: // Str Glove
 		mes "^3131FFStr Glove^000000";
 		mes "^3131FFMHP + 100, MSP + 20^000000";
 		mes "^3131FFATK+1 increases for every STR+10^000000";
 		mes "^3131FFATK +1% added above STR 110^000000";
-		set .@item,2917; //Str_Glove
 		break;
-	case 2:
+	case 1:
 		mes "^3131FFInt Glove^000000";
 		mes "^3131FFMHP + 100, MSP + 20^000000";
 		mes "^3131FFMATK+1 increases for every INT+10^000000";
 		mes "^3131FFMATK +1% added above INT 110^000000";
-		set .@item,2918; //Int_Glove
 		break;
-	case 3:
+	case 2:
 		mes "^3131FFAgi Glove^000000";
 		mes "^3131FFMHP + 100, MSP + 20^000000";
 		mes "^3131FFFLEE+1 increases for every AGI+10^000000";
 		mes "^3131FFComplete Flee +1 added above AGI 110^000000";
-		set .@item,2919; //Agi_Glove
 		break;
-	case 4:
+	case 3:
 		mes "^3131FFVit Glove^000000";
 		mes "^3131FFMHP + 100, MSP + 20^000000";
 		mes "^3131FFMHP+50 for every VIT+10^000000";
 		mes "^3131FFMHP+1% added above VIT 110^000000";
-		set .@item,2920; //Vit_Glove
 		break;
-	case 5:
+	case 4:
 		mes "^3131FFDex Glove^000000";
 		mes "^3131FFMHP + 100, MSP + 20^000000";
 		mes "^3131FFHIT+1 increases for every DEX+10^000000";
 		mes "^3131FFRanged attack power +1% added above DEX 110^000000";
-		set .@item,2921; //Dex_Glove
 		break;
-	case 6:
+	case 5:
 		mes "^3131FFLuk Glove^000000";
 		mes "^3131FFMHP + 100, MSP + 20^000000";
 		mes "^3131FFCRI+1 increases for every LUK+10^000000";
 		mes "^3131FFCritical damage +1% added above LUK 110^000000";
-		set .@item,2922; //Luk_Glove
 		break;
 	}
 	mes "^3131FFRequired Level: 100^000000";
@@ -895,81 +892,156 @@ ecl_in01,66,95,2	script	Armor Merchant Naphara	436,{
 	mes "It costs 10 Splendide Coins.";
 	mes "Would you like to buy it?";
 	next;
-	if(select("Buy it.:Don't buy it.") == 2)
-		close;
-	if (countitem(6081) < 10) {
+	if (select("Buy it.:Don't buy it.")==1) {
+		if (countitem(6081) < 10) {
+			mes "[Armor Merchant]";
+			mes "It seems like you don't have enough coins.";
+			close;
+		}
+		delitem 6081,10; //Splendide_Coin
+		getitem (.@choice+2917),1;
 		mes "[Armor Merchant]";
-		mes "It seems like you don't have enough coins.";
-		close;
+		mes "Great, it's yours. Thank you.";
 	}
-	mes "[Armor Merchant]";
-	mes "Here you go!"; //custom
-	delitem 6081,10; //Splendide_Coin
-	getitem .@item,1;
 	close;
 }
 
-ecl_in01,64,97,4	script	Slot Expert Nattuer#ecl	436,{
+ecl_in01,64,97,5	script	Slot Expert Nattuer#ecl	436,{
+	disable_items;
 	mes "[Slot Expert]";
 	mes "I am Slot Expert Nattuer.";
 	mes "If you bring me an item from my little brother Naphara along with 5 Splendide Coins, I will open up one Slot for you.";
 	next;
-	if(select("Activate a Slot.:Forget it.") == 2)
+	if (select("Activate a Slot.:Forget it.") == 2){
 		close;
+	}
 	mes "[Slot Expert]";
 	mes "Slot activation is an extremely difficult procedure that can fail even with heightened care and the use of a magnifying lens.";
 	next;
 	mes "[Slot Expert]";
 	mes "Of course, if your heart were as big as that flower-filled land, you wouldn't mind. Right? Should I go for it?";
 	next;
-	if(select("Continue.:Forget it.") == 2)
+	if (select("Continue.:Forget it.") == 2) {
 		close;
+	}
 	mes "[Slot Expert]";
 	mes "Which item would you like to activate with a Slot?";
 	next;
-	setarray .@noslots[0],2917,2918,2919,2920,2921,2922;
-	setarray .@slotted[0],2923,2924,2925,2926,2927,2928;
-	set .@i, select("Str Glove:Int Glove:Ag Glove:Vit Glove:Dex Glove:Luk Glove")-1;
-	set .@item, .@noslots[.@i];
-	set .@new_item, .@slotted[.@i];
+	.@choice = select("Str Glove:Int Glove:Ag Glove:Vit Glove:Dex Glove:Luk Glove");
+	.@choice += 2916;
 	mes "[Slot Expert]";
-	mes "Let's confirm for the last time. Is the one you want "+getitemname(.@item)+"?";
+	mes "Let's confirm for the last time. Is the one you want " + getitemname(.@choice) + "?";
 	next;
-	if(select("Yes:No") == 2) {
+	if (select("Yes:No")==2) {
 		mes "[Slot Expert]";
 		mes "Why don't you talk to me when you know for sure.";
 		close;
 	}
-	if (countitem(.@item) == 0) {
+	if (countitem(.@choice) < 1) {
 		mes "[Slot Expert]";
 		mes "You don't have that item. Why don't you talk to me when you know for sure.";
 		close;
 	}
 	if (countitem(6081) < 5) {
 		mes "[Slot Expert]";
-		mes "You don't have enough coins. Why don't you talk to me when you know for sure."; //custom
+		mes "You don't have enough coins. Why don't you talk to me when you know for sure.";
 		close;
 	}
+	progressbar "0xFFFF00",3;
+	mes "[Slot Expert]";
 	delitem 6081,5; //Splendide_Coin
-	delitem .@item,1;
-	//custom to the end
-	if (rand(100) < 5) {
-		mes "[Slot Expert]";
-		mes "Oh no, it failed! I'm sorry, but I warned you this could happen. Better luck next time.";
+	.@luckyday = rand(1,99);
+	if (.@luckyday % 20){
+		emotion e_dots;
+		delitem .@choice,1;
+		mes "Shoot, I'm sorry. It failed.";
+		mes "But I'm sure it will work next time. I have a feeling.";
 		close;
 	}
-	mes "[Slot Expert]";
-	mes "Success! I've activated the slot.";
-	getitem .@new_item,1;
+	emotion e_no1;
+	delitem .@choice,1;
+	getitem (.@choice+6),1;
+	mes "My eyes feel like they're gonna pop out.";
+	mes "Nonetheless, congratulations. Slot activation was successful.";
+	close;
+}
+
+ecl_in01,33,98,5	script	Armor Merchant Naphara#a	443,{ // Armor Merchant Naphara#ec - Too long changed.
+	if (checkweight(1301,1)==0) {
+		mes "- Stop Here!! -";
+		mes "- You have too many items. -";
+		mes "- You cannot carry any more items. -";
+		mes "- Lighten your load and -";
+		mes "- try again. -";
+		close;
+	}
+	mes "[Herb Merchant]";
+	mes "Welcome, this is Plafina's Herb Store where only the freshest herbs are provided~!";
+	next;
+	.@item = select("Snow Flip:Peony Mommy:Slapping Herb:Yggdrasil Dust:End conversation")-1;
+	if (.@item == 4){
+		mes "[Herb Merchant]";
+		mes "Come back anytime.";
+		close;
+	}
+	mes "[Herb Merchant]";
+	switch (.@item){
+	case 0:
+		mes "Snow Flip has special effects on ^3131FFBurning, Bleeding, Deep Sleep, Sleep^000000.";
+		break;
+	case 1:
+		mes "Peony Mamy has special effects on ^3131FFFrost, Frozen, Freezing^000000";
+		break;
+	case 2:
+		mes "Slapping Herb has special effects on ^3131FFStun, Fear, Chaos, Hallucination^000000";
+		break;
+	case 3:
+		mes "Yggdrasil Dust has special effects on ^3131FFBlind, Curse, Decrease Agility, Reverse Orcish^000000.";
+		break;
+	}
+	mes "Requires 5 seconds between uses.";
+	mes "It costs "+ .cost[.@item] +" Splendide Coins for each.";
+	next;
+	.@buy = select("Buy 1.:Buy 10.:Don't buy.");
+	if (.@buy == 3){
+		close;
+	}
+	if (.@buy == 2){
+		.@buy = 10;
+	}
+	mes "[Herb Merchant]";
+	mes "Would you like to buy "+ .@buy +" "+ getitemname(.items[.@item]) +"?";
+	next;
+	if (select("Buy.:Don't buy.") == 2){
+		close;
+	}
+	if (countitem(6081) < (.cost[.@item]*.@buy) ) {
+		mes "[Herb Merchant]";
+		mes "You don't have enough coins.";
+		close;
+	}
+	mes "[Herb Merchant]";
+	mes "Thank you for your business.";
+	delitem 6081,.cost[.@item]*.@buy; //Splendide_Coin
+	getitem .items[.@item],.@buy;
 	close;
+	
+OnInit:
+	setarray .items[0],12812,12813,12814,12815;
+	setarray .cost[0],5,5,1,1;	//Splendide Coins
+	end;
 }
 
-ecl_in01,67,39,4	script	Replication Expert Palt	445,{
+ecl_in01,67,39,4	script	Replication Expert Paltu	445,{
+	if (checkweight(1301,3) == 0) {
+		mes "You have too many items to continue.";
+		close;
+	}
 	emotion e_lv;
 	mes "[Paltu]";
 	mes "Woohoo- Greetings. What are you looking for? Lots of goods here.";
 	next;
-	switch(select("No thanks.:Replication?:I know you got lots up your sleeve!")) {
+	switch (select("No thanks.:Replication?:I know you got lots up your sleeve!")) {
 	case 1:
 		emotion e_an;
 		mes "[Paltu]";
@@ -1028,16 +1100,16 @@ ecl_in01,67,39,4	script	Replication Expert Palt	445,{
 		mes "[Paltu]";
 		mes "What do you think? I'll make it happen as long as I have the ingredients and the compensation.";
 		next;
-		if(select("I'll do it later.:Show me what you got!") == 1) {
+		if (select("I'll do it later.:Show me what you got!") == 1) {
 			emotion e_dots;
 			mes "[Paltu]";
 			mes "What? Are you kidding me? Please tell me you are!";
 			close;
 		}
 		break;
-	case 3:
-		break;
 	}
+	disable_items;
+	emotion e_lv2;
 	mes "[Paltu]";
 	mes "Oh wow.";
 	mes "You made the right call. I thought I was going to starve to death because the Laphines have no interest in pretty hats.";
@@ -1048,59 +1120,84 @@ ecl_in01,67,39,4	script	Replication Expert Palt	445,{
 	mes "[Paltu]";
 	mes "Is there something you had in mind? Why don't you take a look?";
 	next;
-	setarray .@items[0],
-		5447, //Frog_Cap
-		2269, //Centimental_Flower
-		2256, //Magestic_Goat
-		5040, //Blush
-		5171, //Valkyrie_Helm
-		5038, //Deviruchi_Cap
-		5096, //Assassin_Mask_
-		2286, //Elven_Ears
-		5176, //Hahoe_Mask
-		5016; //Boy's_Cap
-	setarray .@costumes[0],
-		19548, //C_Frog_Cap
-		19552, //C_Centimental_Flower
-		19549, //C_Magestic_Goat
-		19550, //C_Blush
-		19546, //C_Valkyrie_Helm
-		19547, //C_Deviruchi_Cap
-		19553, //C_Assassin_Mask_
-		19551, //C_Elven_Ears
-		19554, //C_Hahoe_Mask
-		19545; //C_Boys_Cap
-	if (countitem(6081) >= 50 && countitem(747) >= 4 && countitem(6395) >= 1 && countitem(721) >= 10 && countitem(723) >= 10 && countitem(726) >= 10 && countitem(728) >= 10 && countitem(729) >= 10)
-		set .@item_check,1;
-	for(set .@i,0; .@i<getarraysize(.@items); set .@i,.@i+1) {
+	setarray .@items[0], 5447, 2269, 2256, 5040, 5171, 5038, 5096, 2286, 5176, 5016;
+	setarray .@costumes[0], 19548, 19552, 19549, 19550, 19546, 19547, 19553, 19551, 19554, 19545;
+	if ((countitem(6081) >= 50) && (countitem(747) >= 4) && countitem(6395) && (countitem(721) >= 10) && (countitem(723) >= 10) && (countitem(726) >= 10) && (countitem(728) >= 10) && (countitem(729) >= 10))
+		.@item_check =1;
+	for(.@i = 0; .@i<getarraysize(.@items); .@i++) {
 		if (.@item_check && countitem(.@items[.@i]))
-			set .@menu$, .@menu$+getitemname(.@items[.@i])+":"; //custom
+			.@menu$ = .@menu$+getitemname(.@items[.@i])+" (^2502FDAble to Replicate^000000):";
 		else
-			set .@menu$, .@menu$+getitemname(.@items[.@i])+" (^777777Insufficient ingredients^000000):";
+			.@menu$ = .@menu$+getitemname(.@items[.@i])+" (^777777Insufficient ingredients^000000):";
 	}
-	set .@i, select(.@menu$)-1;
-	set .@item, .@items[.@i];
-	set .@new_item, .@costumes[.@i];
+	.@i = select(.@menu$)-1;
 	mes "[Paltu]";
-	mes "Is ^0571B0"+getitemname(.@item)+"^000000 what you wanted?";
+	mes "Is ^0571B0"+getitemname(.@items[.@i])+"^000000 what you wanted?";
 	next;
-	if (.@item_check == 0 || countitem(.@item) == 0) {
+	if (.@item_check == 0 || countitem(.@items[.@i]) == 0) {
 		emotion e_sob;
 		mes "[Paltu]";
 		mes "Ay... Credit purchases are difficult for me.";
 		next;
 		mes "[Paltu]";
-		mes "^0571B0"+getitemname(.@item)+"^000000 and";
+		mes "^0571B0"+getitemname(.@items[.@i])+"^000000 and";
 		mes "^E1281E50 Splendide Coins, 4 Crystal Mirrors, 1 Fairy Magic Powder, 10 of each Emerald, Ruby, Sapphire, Topaz, and Zircon^000000 are necessary.";
 		next;
 		mes "[Paltu]";
 		mes "I'm in a tight spot myself. Please consider my situation also.";
 		close;
 	}
-	//custom to the end
-	if(select("Continue.:Forget it.") == 2)
+	emotion e_what;
+	mes "[Paltu]";
+	mes "Yes, this is more than enough. Should I make it now?";
+	next;
+	if (select("Please make it now.:Oops, I have to take care of something...") == 2) {
+		emotion e_omg;
+		mes "[Paltu]";
+		mes "Hey.. Hey! Hey! Where you going?";
 		close;
-	delitem .@item,1;
+	}
+	emotion e_omg;
+	mes "[Paltu]";
+	mes "I got it. Oh right! Almost forgot again.";
+	next;
+	mes "[Paltu]";
+	mes "^FF0000In the process of replication, magic intervention phenomenon causes the hat to lose all of its refinements, cards, and hidden enchantments.^000000";
+	next;
+	mes "[Paltu]";
+	mes "^FF0000And if you possess multiple hats of the same type, the one you don't want can undergo the replication process, so please check to make sure.^000000";
+	next;
+	mes "[Paltu]";
+	mes "So any problems with that?";
+	next;
+	if (select("Let me go check.:Start the replication process.") == 1) {
+		mes "[Paltu]";
+		mes "Yeah, please make sure!";
+		close;
+	}
+	emotion e_gg;
+	mes "[Paltu]";
+	mes "Woohoo- Got it.";
+	mes "It's finally time for me to use my skills again.";
+	next;
+	emotion e_swt2;
+	mes "[Paltu]";
+	mes "Do this thing here, and do that thing there, and then do this thing here again...";
+	next;
+	emotion e_dots;
+	emotion e_swt2;
+	mes "[Paltu]";
+	mes "... .. ...";
+	specialeffect EF_BEGINSPELL;
+	progressbar "0xFFFF00",1;
+	specialeffect EF_BEGINSPELL2;
+	progressbar "0xFFFF00",1;
+	specialeffect EF_BEGINSPELL3;
+	progressbar "0xFFFF00",1;
+	specialeffect EF_BEGINSPELL4;
+	progressbar "0xFFFF00",1;
+	specialeffect EF_MVP;
+	next;
 	delitem 6081,50; //Splendide_Coin
 	delitem 747,4; //Crystal_Mirror
 	delitem 6395,1; //Angel_Magic_Power
@@ -1109,73 +1206,10 @@ ecl_in01,67,39,4	script	Replication Expert Palt	445,{
 	delitem 726,10; //Blue_Jewel
 	delitem 728,10; //Golden_Jewel
 	delitem 729,10; //Bluish_Green_Jewel
-	getitem .@new_item,1;
+	delitem .@items[.@i],1;
+	getitem .@costumes[.@i],1;
 	mes "[Paltu]";
-	mes "Thank you so much! As promised, here is your costume.";
+	mes "Good. This is a satisfying result.";
+	mes "I'll do even a better job next time. Please tell others about my work. Have a good day~";
 	close;
 }
-
-ecl_in01,33,98,4	script	Herb Merchant Plafina#e	443,{
-	mes "[Herb Merchant]";
-	mes "Welcome, this is Plafina's Herb Store where only the freshest herbs are provided~!";
-	next;
-	switch(select("Snow Flip:Peony Mommy:Slapping Herb:Yggdrasil Dust:End conversation")) {
-	case 1:
-		mes "[Herb Merchant]";
-		mes "Snow Flip has special effects on ^3131FFBurning, Bleeding, Deep Sleep, Sleep^000000.";
-		set .@item,12812; //Snow_Flip
-		set .@cost,5;
-		break;
-	case 2:
-		mes "[Herb Merchant]";
-		mes "Peony Mamy has special effects on ^3131FFFrost, Frozen, Freezing^000000.";
-		set .@item,12813; //Peony_Mommy
-		set .@cost,5;
-		break;
-	case 3:
-		mes "[Herb Merchant]";
-		mes "Slapping Herb has special effects on ^3131FFStun, Fear, Chaos, Hallucination^000000.";
-		set .@item,12814; //Slapping_Herb
-		set .@cost,1;
-		break;
-	case 4:
-		mes "[Herb Merchant]";
-		mes "Yggdrasil Dust has special effects on ^3131FFBlind, Curse, Decrease Agility, Reverse Orcish^000000.";
-		set .@item,12815; //Yggdrasil_Dust
-		set .@cost,1;
-		break;
-	case 5:
-		mes "[Herb Merchant]";
-		mes "Come back anytime.";
-		close;
-	}
-	mes "Requires 5 seconds between uses.";
-	mes "It costs "+.@cost+" Splendide Coin"+((.@cost == 1)?"":"s")+" for each.";
-	next;
-	switch(select("Buy 1.:Buy 10.:Don't buy.")) {
-	case 1:
-		set .@amount,1;
-		break;
-	case 2:
-		set .@amount,10;
-		break;
-	case 3:
-		close;
-	}
-	set .@price,.@amount*.@cost;
-	mes "[Herb Merchant]";
-	mes "Would you like to buy "+.@amount+" "+getitemname(.@item)+"?";
-	next;
-	if(select("Buy.:Don't buy.") == 2)
-		close;
-	if (countitem(6081) < .@price) {
-		mes "[Herb Merchant]";
-		mes "You don't have enough coins.";
-		close;
-	}
-	mes "[Herb Merchant]";
-	mes "Here are your herbs."; //custom
-	delitem 6081,.@price; //Splendide_Coin
-	getitem .@item,.@amount;
-	end;
-}

文件差異過大導致無法顯示
+ 17525 - 1207
npc/re/quests/quests_eclage.txt


+ 1 - 0
npc/re/scripts_athena.conf

@@ -58,6 +58,7 @@ npc: npc/re/instances/MalangdoCulvert.txt
 npc: npc/re/instances/OctopusCave.txt
 npc: npc/re/instances/OldGlastHeim.txt
 npc: npc/re/instances/WolfchevLaboratory.txt
+npc: npc/re/instances/EclageInterior.txt
 
 // ---------------- Kafras & Cool Event Corp. -------------------
 npc: npc/re/kafras/kafras.txt

+ 1 - 1
npc/re/scripts_warps.conf

@@ -16,7 +16,7 @@ npc: npc/re/warps/cities/yggdrasil.txt
 // -------------------------- Dungeons --------------------------
 npc: npc/re/warps/dungeons/bra_dun.txt
 npc: npc/re/warps/dungeons/dic_dun.txt
-npc: npc/re/warps/dungeons/ecl_tdun.txt
+npc: npc/re/warps/dungeons/ecl_dun.txt
 npc: npc/re/warps/dungeons/iz_dun.txt
 npc: npc/re/warps/dungeons/moc_pryd.txt
 

+ 39 - 19
npc/re/warps/cities/eclage.txt

@@ -3,32 +3,52 @@
 //===== By: ==================================================
 //= Chilly
 //===== Current Version: =====================================
-//= 1.0a
-//===== Compatible With: =====================================
+//= 1.1
+//===== Compatible With: ===================================== 
 //= rAthena Project
 //===== Description: =========================================
 //= Warp Points for Eclage
 //===== Additional Comments: =================================
 //= 1.0 First Version.
 //= 1.0a Disabled quest warp. [Euphy]
+//= 1.1 Warps corresponds to official co-ordinates and
+//=	Warp Portal official names. [Dastgir]
 //============================================================
 
 // Town Warps
-bif_fild02,292,351,0	warp	eclage_field0001	1,1,ecl_fild01,205,74
-ecl_fild01,207,72,0	warp	eclage_field0002	1,1,bif_fild02,294,349
+ecl_fild01,207,72,0	warp	fild01-1_biffild	1,1,bif_fild02,294,350
+bif_fild02,292,351,0	warp	biffild_fild01-1	1,1,ecl_fild01,205,76
 //ecl_fild01,97,320,0	warp	eclage_field0003	1,1,eclage,100,28
-eclage,98,26,0	warp	eclage_field0004	1,1,ecl_fild01,97,317
-eclage,299,309,0	warp	eclage_field0005	1,1,ecl_in01,47,11
-ecl_in01,47,8,0	warp	eclage_field0006	1,1,eclage,297,307
-ecl_in01,8,67,0	warp	eclage_field0007	1,1,ecl_hub01,38,94
-ecl_hub01,40,95,0	warp	eclage_field0008	1,1,ecl_in01,11,67
-ecl_hub01,22,109,0	warp	eclage_field0009	1,1,ecl_in02,98,7
-ecl_in02,98,4,0	warp	eclage_field0010	1,1,ecl_hub01,23,107
-ecl_in02,81,18,0	warp	eclage_field0011	1,1,ecl_in02,157,65
-ecl_in02,157,68,0	warp	eclage_field0012	1,1,ecl_in02,83,18
-ecl_in01,84,68,0	warp	eclage_field0013	1,1,ecl_hub01,107,107
-ecl_hub01,107,110,0	warp	eclage_field0014	1,1,ecl_in01,81,68
-ecl_hub01,127,95,0	warp	eclage_field0015	1,1,ecl_hub01,18,31
-ecl_hub01,18,34,0	warp	eclage_field0016	1,1,ecl_hub01,124,95
-ecl_hub01,40,14,0	warp	eclage_field0017	1,1,ecl_in03,144,17
-ecl_in03,144,14,0	warp	eclage_field0018	1,1,ecl_hub01,40,11
+eclage,98,26,0	warp	eclageS_EclEnter	1,1,eclage,100,28
+eclage,299,309,0	warp	eclageN_in01s	1,1,ecl_in01,47,11
+ecl_in01,47,8,0	warp	in01s_eclageN	1,1,eclage,297,307
+ecl_in01,8,67,0	warp	in01w_hub1-1	1,1,ecl_hub01,38,94
+ecl_hub01,40,95,0	warp	hub1-1_in01w	1,1,ecl_in01,11,67
+ecl_hub01,22,109,0	warp	hub1-2_in02-1	1,1,ecl_in02,99,7
+ecl_in02,98,4,0	warp	in02-1_hub1-2	1,1,ecl_hub01,23,107
+ecl_in02,80,18,0	warp	in02-2_in02-3	1,1,ecl_in02,157,66
+ecl_in02,157,68,0	warp	in02-3_in02-2	1,1,ecl_in02,83,18
+ecl_in01,84,68,0	script	in01e_hub2-1	45,1,1,{
+	end;
+OnTouch:
+	if (ep14_2_mylord == 29)
+		warp "ecl_hub01",106,31;
+	else
+		warp "ecl_hub01",107,107;
+	end;
+}
+ecl_hub01,107,110,0	warp	hub2-1_in01e	1,1,ecl_in01,82,68
+ecl_hub01,127,95,0	warp	hub2-2_hub3-1	1,1,ecl_hub01,18,32
+ecl_hub01,18,34,0	script	hub3-1_hub2-2	45,1,1,{
+	end;
+OnTouch:
+	if (ep14_2_mylord == 29)
+		warp "ecl_hub01",135,14;
+	else
+		warp "ecl_hub01",125,94;
+	end;
+}
+ecl_hub01,40,14,0	warp	hub3-2_in03	1,1,ecl_in03,144,17
+ecl_in03,144,14,0	warp	in03_hub3-2	1,1,ecl_hub01,40,11
+ecl_hub01,105,36,0	warp	hub4-1_in01e	1,1,ecl_in01,82,68
+ecl_hub01,138,17,0	warp	hub4-2_hub3-1	1,1,ecl_hub01,18,32

+ 26 - 0
npc/re/warps/dungeons/ecl_dun.txt

@@ -0,0 +1,26 @@
+//===== rAthena Script =======================================
+//= Eclage Dungeon Warp Script
+//===== By: ==================================================
+//= Chilly
+//===== Current Version: =====================================
+//= 1.1
+//===== Compatible With: ===================================== 
+//= rAthena Project
+//===== Description: =========================================
+//= Warp Portals for Eclage Dungeon
+//===== Additional Comments: =================================
+//= 1.0 First Version.
+//= 1.1 Corrected Warp Co-ordinates and 
+//=      name of Warp Portal. [Dastgir]
+//============================================================
+
+ecl_fild01,182,82,0	warp	Tenter_TOut	1,1,ecl_tdun01,60,13
+ecl_tdun01,61,11,0	warp	TOut_Tenter	1,1,ecl_fild01,182,85
+ecl_tdun01,67,106,0	warp	tdun1up_tdun2dn	1,1,ecl_tdun02,60,88
+ecl_tdun02,60,90,0	warp	tdun2dn_tdun1up	1,1,ecl_tdun01,70,105
+ecl_tdun02,52,9,0	warp	tdun2up_tdun3dn	1,1,ecl_tdun03,47,13
+ecl_tdun03,49,11,0	warp	tdun3dn_tdun2up	1,1,ecl_tdun02,50,11
+ecl_tdun03,50,46,0	warp	tdun3up_tdun4dn	1,1,ecl_tdun04,26,24
+ecl_tdun04,26,26,0	warp	tdun4dn_tdun3up	1,1,ecl_tdun03,50,44
+ecl_tdun04,34,17,0	warp	tdun4-1_ttop	1,1,ecl_fild01,183,73
+ecl_fild01,183,70,0	warp	ttop_tdun4-1	1,1,ecl_tdun04,33,19

+ 1 - 1
src/char/int_storage.c

@@ -379,7 +379,7 @@ int mapif_parse_itembound_retrieve(int fd)
 	if (j) {
 		StringBuf buf2;
 		StringBuf_Init(&buf2);
-		StringBuf_Printf(&buf2, "UPDATE `%s` SET %s WHERE `char_id`='%d", schema_config.char_db, StringBuf_Value(&buf), char_id);
+		StringBuf_Printf(&buf2, "UPDATE `%s` SET %s WHERE `char_id`='%d'", schema_config.char_db, StringBuf_Value(&buf), char_id);
 
 		if( SQL_ERROR == SqlStmt_PrepareStr(stmt, StringBuf_Value(&buf)) ||
 			SQL_ERROR == SqlStmt_Execute(stmt) )

+ 7 - 6
src/common/mmo.h

@@ -277,13 +277,14 @@ struct storage_data {
 	struct item items[MAX_STORAGE];
 };
 
+/// Guild storgae struct
 struct guild_storage {
-	bool dirty;
-	int guild_id;
-	short storage_amount;
-	struct item items[MAX_GUILD_STORAGE];
-	bool locked;
-	int opened; /// Holds the char_id that open the storage
+	bool dirty; ///< Dirty status, need to be saved
+	int guild_id; ///< Guild ID
+	short storage_amount; ///< Amount of item on storage
+	struct item items[MAX_GUILD_STORAGE]; ///< Item entries
+	bool locked; ///< If locked, can't use storage when item bound retrieval
+	uint32 opened; ///< Holds the char_id that open the storage
 };
 
 struct s_pet {

+ 2 - 2
src/map/mob.c

@@ -4513,7 +4513,7 @@ static bool mob_readdb_itemratio(char* str[], int columns, int current)
 	nameid = atoi(str[0]);
 
 	if (itemdb_exists(nameid) == NULL) {
-		ShowWarning("itemdb_read_itemratio: Invalid item id %hu.\n", nameid);
+		ShowWarning("mob_readdb_itemratio: Invalid item id %hu.\n", nameid);
 		return false;
 	}
 
@@ -4527,7 +4527,7 @@ static bool mob_readdb_itemratio(char* str[], int columns, int current)
 	for (i = 0; i < columns-2; i++) {
 		uint16 mob_id = atoi(str[i+2]);
 		if (mob_db(mob_id) == mob_dummy)
-			ShowError("itemdb_read_itemratio: Invalid monster with ID %hu (Item:%hu Col:%d).\n", mob_id, nameid, columns);
+			ShowError("mob_readdb_itemratio: Invalid monster with ID %hu (Item:%hu Col:%d).\n", mob_id, nameid, columns);
 		else
 			item_ratio->mob_id[i] = atoi(str[i+2]);
 	}

+ 4 - 2
src/map/skill.c

@@ -2388,7 +2388,7 @@ static int skill_area_temp[8];
 short skill_blown(struct block_list* src, struct block_list* target, char count, int8 dir, unsigned char flag)
 {
 	int dx = 0, dy = 0;
-	int reason = 0, checkflag = 0;
+	uint8 reason = 0, checkflag = 0;
 
 	nullpo_ret(src);
 	nullpo_ret(target);
@@ -12895,7 +12895,9 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns
 
 					if( td )
 						sec = DIFF_TICK(td->tick, tick);
-					if( !unit_blown_immune(bl,0x1) ) {
+					if( (sg->unit_id == UNT_MANHOLE && bl->type == BL_PC)
+						|| !unit_blown_immune(bl,0x1) )
+					{
 						unit_movepos(bl, unit->bl.x, unit->bl.y, 0, 0);
 						clif_fixpos(bl);
 					}

+ 4 - 1
src/map/status.c

@@ -10052,7 +10052,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_ELECTRICSHOCKER:
 		case SC_BITE:
 		case SC_THORNSTRAP:
-		case SC__MANHOLE:
 		//case SC__CHAOS:
 		case SC_CRYSTALIZE:
 		case SC_CURSEDCIRCLE_ATKER:
@@ -10067,6 +10066,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			if (!unit_blown_immune(bl,0x1))
 				unit_stop_walking(bl,1);
 			break;
+		case SC__MANHOLE:
+			if (bl->type == BL_PC || !unit_blown_immune(bl,0x1))
+				unit_stop_walking(bl,1);
+			break;
 		case SC_HIDING:
 		case SC_CLOAKING:
 		case SC_CLOAKINGEXCEED:

+ 6 - 6
src/map/unit.c

@@ -1097,9 +1097,10 @@ int unit_blown(struct block_list* bl, int dx, int dy, int count, int flag)
  *		5 - target has 'special_state.no_knockback';
  *		6 - target is trap that cannot be knocked back
  */
-int unit_blown_immune(struct block_list* bl, int flag)
+uint8 unit_blown_immune(struct block_list* bl, uint8 flag)
 {
-	if ((flag&0x1) && (map_flag_gvg(bl->m) || map[bl->m].flag.battleground)
+	if ((flag&0x1)
+		&& (map_flag_gvg(bl->m) || map[bl->m].flag.battleground)
 		&& ((flag&0x2) || !(battle_config.skill_trap_type&0x1)))
 		return 1; // No knocking back in WoE / BG
 
@@ -1118,16 +1119,15 @@ int unit_blown_immune(struct block_list* bl, int flag)
 		case BL_PC: {
 				struct map_session_data *sd = BL_CAST(BL_PC, bl);
 				// Basilica caster can't be knocked-back by normal monsters.
-				if( sd->sc.data[SC_BASILICA] && sd->sc.data[SC_BASILICA]->val4 == sd->bl.id && !(flag&0x4))
+				if( !(flag&0x4) && &sd->sc && sd->sc.data[SC_BASILICA] && sd->sc.data[SC_BASILICA]->val4 == sd->bl.id)
 					return 4;
 				// Target has special_state.no_knockback (equip)
-				if( (flag&0x1) && (flag&0x2) && sd->special_state.no_knockback )
+				if( (flag&(0x1|0x2)) && sd->special_state.no_knockback )
 					return 5;
 			}
 			break;
 		case BL_SKILL: {
-				struct skill_unit* su = NULL;
-				su = (struct skill_unit *)bl;
+				struct skill_unit* su = (struct skill_unit *)bl;
 				// Trap cannot be knocked back
 				if (su && su->group && skill_get_unit_flag(su->group->skill_id)&UF_NOKNOCKBACK)
 					return 6;

+ 1 - 1
src/map/unit.h

@@ -100,7 +100,7 @@ int unit_warp(struct block_list *bl, short map, short x, short y, clr_type type)
 int unit_setdir(struct block_list *bl, unsigned char dir);
 uint8 unit_getdir(struct block_list *bl);
 int unit_blown(struct block_list* bl, int dx, int dy, int count, int flag);
-int unit_blown_immune(struct block_list* bl, int flag);
+uint8 unit_blown_immune(struct block_list* bl, uint8 flag);
 
 // Can-reach checks
 bool unit_can_reach_pos(struct block_list *bl,int x,int y,int easy);

部分文件因文件數量過多而無法顯示