浏览代码

Updated Illusion dungeon exchange NPCs (#8014)

Atemo 1 年之前
父节点
当前提交
8efb5b9d71
共有 2 个文件被更改,包括 438 次插入894 次删除
  1. 402 0
      npc/re/merchants/barters/enchan_illusion_dungeons.yml
  2. 36 894
      npc/re/merchants/enchan_illusion_dungeons.txt

+ 402 - 0
npc/re/merchants/barters/enchan_illusion_dungeons.yml

@@ -412,3 +412,405 @@ Body:
           - Index: 3
             Item: IllusionStone
             Amount: 120
+  - Name: barter_ill_moonlight
+    Items:
+      - Index: 0
+        Item: Staff_Of_Bordeaux_IL
+        RequiredItems:
+          - Index: 0
+            Item: Staff_Of_Bordeaux
+          - Index: 1
+            Item: IllusionStone
+            Amount: 30
+          - Index: 2
+            Item: HazyDream
+            Amount: 100
+      - Index: 1
+        Item: Moonlight_Sword_IL
+        RequiredItems:
+          - Index: 0
+            Item: Moonlight_Sword
+          - Index: 1
+            Item: IllusionStone
+            Amount: 60
+          - Index: 2
+            Item: HazyDream
+            Amount: 100
+      - Index: 2
+        Item: Long_Mace_IL
+        RequiredItems:
+          - Index: 0
+            Item: Long_Mace
+          - Index: 1
+            Item: IllusionStone
+            Amount: 10
+          - Index: 2
+            Item: HazyDream
+            Amount: 20
+      - Index: 3
+        Item: Spectral_Spear_IL
+        RequiredItems:
+          - Index: 0
+            Item: Spectral_Spear
+          - Index: 1
+            Item: IllusionStone
+            Amount: 20
+          - Index: 2
+            Item: HazyDream
+            Amount: 100
+      - Index: 4
+        Item: Nurse_Cap_IL
+        RequiredItems:
+          - Index: 0
+            Item: Nurse_Cap
+          - Index: 1
+            Item: IllusionStone
+            Amount: 10
+          - Index: 2
+            Item: Bloody_LoveLetter
+            Amount: 100
+      - Index: 5
+        Item: Apple_Of_Archer_IL
+        RequiredItems:
+          - Index: 0
+            Item: Apple_Of_Archer
+          - Index: 1
+            Item: IllusionStone
+            Amount: 10
+          - Index: 2
+            Item: BrokenArrow
+            Amount: 100
+      - Index: 6
+        Item: Puente_Robe_IL
+        RequiredItems:
+          - Index: 0
+            Item: Puente_Robe
+          - Index: 1
+            Item: IllusionStone
+            Amount: 10
+          - Index: 2
+            Item: HazyDream
+            Amount: 100
+      - Index: 7
+        Item: Muffler_IL
+        RequiredItems:
+          - Index: 0
+            Item: Muffler_
+          - Index: 1
+            Item: IllusionStone
+            Amount: 10
+          - Index: 2
+            Item: HazyMooncake
+            Amount: 100
+      - Index: 8
+        Item: Shoes_IL
+        RequiredItems:
+          - Index: 0
+            Item: Shoes_
+          - Index: 1
+            Item: IllusionStone
+            Amount: 10
+          - Index: 2
+            Item: HazyMooncake
+            Amount: 100
+  - Name: barter_ill_frozen
+    Items:
+      - Index: 0
+        Item: Huuma_Flutter_Snow_IL
+        RequiredItems:
+          - Index: 0
+            Item: Huuma_Fluttering_Snow
+          - Index: 1
+            Item: IllusionStone
+            Amount: 100
+          - Index: 2
+            Item: KTULLANUXsEye
+            Amount: 20
+      - Index: 1
+        Item: Combo_Battle_Glove_IL
+        RequiredItems:
+          - Index: 0
+            Item: Combo_Battle_Glove
+          - Index: 1
+            Item: IllusionStone
+            Amount: 100
+          - Index: 2
+            Item: Snowball
+            Amount: 100
+      - Index: 2
+        Item: Herald_Of_GOD_IL
+        RequiredItems:
+          - Index: 0
+            Item: Herald_Of_GOD_
+          - Index: 1
+            Item: IllusionStone
+            Amount: 100
+          - Index: 2
+            Item: SpritJewel
+            Amount: 300
+      - Index: 3
+        Item: Clack_Of_Servival_IL
+        RequiredItems:
+          - Index: 0
+            Item: Clack_Of_Servival
+          - Index: 1
+            Item: IllusionStone
+            Amount: 100
+          - Index: 2
+            Item: Frozen_PieceOfRock
+            Amount: 200
+      - Index: 4
+        Item: Cap_IL
+        RequiredItems:
+          - Index: 0
+            Item: Cap_
+          - Index: 1
+            Item: IllusionStone
+            Amount: 50
+          - Index: 2
+            Item: Frozen_PieceOfRock
+            Amount: 100
+  - Name: barter_ill_vampire
+    Items:
+      - Index: 0
+        Item: Infiltrator_IL
+        RequiredItems:
+          - Index: 0
+            Item: Infiltrator_
+          - Index: 1
+            Item: IllusionStone
+            Amount: 80
+          - Index: 2
+            Item: Torn_Diary
+            Amount: 20
+      - Index: 1
+        Item: Ghoul_Leg_IL
+        RequiredItems:
+          - Index: 0
+            Item: Ghoul_Leg
+          - Index: 1
+            Item: IllusionStone
+            Amount: 10
+          - Index: 2
+            Item: NightmareOfLump
+            Amount: 100
+      - Index: 2
+        Item: Wizardy_Staff_IL
+        RequiredItems:
+          - Index: 0
+            Item: Wizardy_Staff
+          - Index: 1
+            Item: IllusionStone
+            Amount: 40
+          - Index: 2
+            Item: SuspiciousMagicCircle
+            Amount: 100
+      - Index: 3
+        Item: Balistar_IL
+        RequiredItems:
+          - Index: 0
+            Item: Balistar_
+          - Index: 1
+            Item: IllusionStone
+            Amount: 50
+          - Index: 2
+            Item: Shining_Spore
+            Amount: 100
+      - Index: 4
+        Item: Book_Of_The_Apo_IL
+        RequiredItems:
+          - Index: 0
+            Item: Book_Of_The_Apocalypse
+          - Index: 1
+            Item: IllusionStone
+            Amount: 50
+          - Index: 2
+            Item: Dried_Clover
+            Amount: 10
+      - Index: 5
+        Item: Cape_Of_Ancient_Lord_IL
+        RequiredItems:
+          - Index: 0
+            Item: Cape_Of_Ancient_Lord_
+          - Index: 1
+            Item: IllusionStone
+            Amount: 30
+          - Index: 2
+            Item: Short_Bat_Fur
+            Amount: 200
+      - Index: 6
+        Item: Skul_Ring_IL
+        RequiredItems:
+          - Index: 0
+            Item: Skul_Ring_
+          - Index: 1
+            Item: IllusionStone
+            Amount: 50
+          - Index: 2
+            Item: Dried_Leaf_Of_Ygg
+            Amount: 400
+      - Index: 7
+        Item: Ring_IL
+        RequiredItems:
+          - Index: 0
+            Item: Ring_
+          - Index: 1
+            Item: IllusionStone
+            Amount: 50
+          - Index: 2
+            Item: SuspiciousMagicCircle
+            Amount: 400
+  - Name: barter_ill_turtle
+    Items:
+      - Index: 0
+        Item: Immaterial_Sword_IL
+        RequiredItems:
+          - Index: 0
+            Item: Immaterial_Sword
+          - Index: 1
+            Item: IllusionStone
+            Amount: 100
+          - Index: 2
+            Item: ShipsLog
+            Amount: 50
+      - Index: 1
+        Item: War_Axe_IL
+        RequiredItems:
+          - Index: 0
+            Item: War_Axe
+          - Index: 1
+            Item: IllusionStone
+            Amount: 100
+          - Index: 2
+            Item: PieceOfBlackSpirit
+            Amount: 200
+      - Index: 2
+        Item: Pole_Axe_IL
+        RequiredItems:
+          - Index: 0
+            Item: Pole_Axe
+          - Index: 1
+            Item: IllusionStone
+            Amount: 100
+          - Index: 2
+            Item: PieceOfBlackSpirit
+            Amount: 200
+      - Index: 3
+        Item: Huuma_Bird_Wing_IL
+        RequiredItems:
+          - Index: 0
+            Item: Huuma_Bird_Wing
+          - Index: 1
+            Item: IllusionStone
+            Amount: 100
+          - Index: 2
+            Item: OldShell
+            Amount: 200
+      - Index: 4
+        Item: Iron_Driver_IL
+        RequiredItems:
+          - Index: 0
+            Item: Iron_Driver
+          - Index: 1
+            Item: IllusionStone
+            Amount: 100
+          - Index: 2
+            Item: OldShell
+            Amount: 200
+      - Index: 5
+        Item: Fancy_Flower_IL
+        RequiredItems:
+          - Index: 0
+            Item: Fancy_Flower
+          - Index: 1
+            Item: IllusionStone
+            Amount: 50
+          - Index: 2
+            Item: OldDoll
+            Amount: 50
+  - Name: barter_ill_luanda
+    Items:
+      - Index: 0
+        Item: Tablet_IL
+        RequiredItems:
+          - Index: 0
+            Item: Tablet
+          - Index: 1
+            Item: IllusionStone
+            Amount: 50
+          - Index: 2
+            Item: Weak_Worm
+            Amount: 100
+      - Index: 1
+        Item: Hunter_Bow_IL
+        RequiredItems:
+          - Index: 0
+            Item: Hunter_Bow_
+          - Index: 1
+            Item: IllusionStone
+            Amount: 80
+          - Index: 2
+            Item: Shooting_Stone
+            Amount: 50
+          - Index: 3
+            Item: Pot_Stone
+            Amount: 50
+          - Index: 4
+            Item: Hair_Leaf
+            Amount: 50
+      - Index: 2
+        Item: Goibne_Helmet_IL
+        RequiredItems:
+          - Index: 0
+            Item: Goibne's_Helmet
+          - Index: 1
+            Item: IllusionStone
+            Amount: 120
+          - Index: 2
+            Item: Wootan_D_S_Piece
+            Amount: 30
+          - Index: 3
+            Item: Token_Of_Wootan
+            Amount: 150
+      - Index: 3
+        Item: Goibne_Armor_IL
+        RequiredItems:
+          - Index: 0
+            Item: Goibne's_Armor
+          - Index: 1
+            Item: IllusionStone
+            Amount: 80
+          - Index: 2
+            Item: Hard_Mud
+            Amount: 100
+          - Index: 3
+            Item: Token_Of_Bigstone
+            Amount: 150
+      - Index: 4
+        Item: Goibne_Boots_IL
+        RequiredItems:
+          - Index: 0
+            Item: Goibne's_Combat_Boots
+          - Index: 1
+            Item: IllusionStone
+            Amount: 80
+          - Index: 2
+            Item: Wootan_F_Fur
+            Amount: 100
+          - Index: 3
+            Item: Token_Of_Wootan
+            Amount: 150
+      - Index: 5
+        Item: Goibne_Shoulder_IL
+        RequiredItems:
+          - Index: 0
+            Item: Goibne's_Shoulder_Arms
+          - Index: 1
+            Item: IllusionStone
+            Amount: 120
+          - Index: 2
+            Item: Fragment_Of_Rock
+            Amount: 30
+          - Index: 3
+            Item: Token_Of_Bigstone
+            Amount: 150

+ 36 - 894
npc/re/merchants/enchan_illusion_dungeons.txt

@@ -23,7 +23,7 @@ pay_d03_i,160,45,3	script	Gemcutter#ilp20	4_TOWER_17,3,3,{
 	mes "[ Gemcutter ]";
 	mes "Do you have business with me?";
 	next;
-	switch (select("What are you doing here?:Upgrade Weapon.:Upgrade Armor.")) {
+	switch( select( "What are you doing here?", "Upgrade equipments" ) ) {
 	case 1:
 		mes "[ Gemcutter ]";
 		mes "I came to the ruined village,";
@@ -40,30 +40,8 @@ pay_d03_i,160,45,3	script	Gemcutter#ilp20	4_TOWER_17,3,3,{
 		mes "If you're interested, we can discuss the details of our bargain.";
 		close;
 	case 2:
-		disable_items;
-		if (checkweight(25271,1) == 0 || (MaxWeight - Weight) < 1000) {
-			mes "- You're carrying too many items to proceed. -";
-			close;
-		}
-		setarray .@reward_id[0],
-			26109,		// Illusion Staff of Bordeaux
-			28725,		// Illusion Moonlight Dagger
-			16063,		// Illusion Long Mace
-			26007;		// Illusion Spectral Spear
-		.@size = getarraysize(.@reward_id);
-
-		.@refine_req = 9;
-
-		for ( .@i = 0; .@i < .@size; ++.@i )
-			.@reward_name$[.@i] = replacestr( getitemname(.@reward_id[.@i]), ":", "" );
-
 		mes "[ Gemcutter ]";
-		mes "The following is the list of equipment I can handle.";
-		for ( .@i = 0; .@i < .@size; ++.@i )
-			mes mesitemlink( .@reward_id[.@i], false );
-		next;
-		mes "[ Gemcutter ]";
-		mes "Make sure ^0000FFyour equipment is refined to at least +" + .@refine_req + "^000000 before bringing it to me.";
+		mes "Make sure ^0000FFyour equipment is refined to at least +9^000000 before bringing it to me.";
 		mes "That's the minimum requirement for my upgrade service to have any visible effects on your equipment.";
 		next;
 		mes "[ Gemcutter ]";
@@ -77,178 +55,11 @@ pay_d03_i,160,45,3	script	Gemcutter#ilp20	4_TOWER_17,3,3,{
 		mes "[ Gemcutter ]";
 		mes "And I need ^0000FFIllusion Stones and some other materials^000000 to upgrade your equipment.";
 		mes "Pick an item you want and I'll tell you what I need.";
-		next;
-		switch( select( .@reward_name$[0], .@reward_name$[1], .@reward_name$[2], .@reward_name$[3] ) ) {
-		case 1:
-			.@reward = .@reward_id[0];		// Illusion Staff of Bordeaux
-			.@eq_req = 1648;				// Staff of Bordeaux
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,30,					// Illusion Stones
-				25256,100;					// Hazy Dreams
-			break;
-		case 2:
-			.@reward = .@reward_id[1];		// Illusion Moonlight Dagger
-			.@eq_req = 1234;				// Moonlight Dagger
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,60,					// Illusion Stones
-				25256,100;					// Hazy Dreams
-			break;
-		case 3:
-			.@reward = .@reward_id[2];		// Illusion Long Mace
-			.@eq_req = 1525;				// Long Mace
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,10,					// Illusion Stones
-				25256,20;					// Hazy Dreams
-			break;
-		case 4:
-			.@reward = .@reward_id[3];		// Illusion Spectral Spear
-			.@eq_req = 1477;				// Spectral Spear
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,20,					// Illusion Stones
-				25256,100;					// Hazy Dreams
-			break;
-		}
-		break;
-	case 3:
-		disable_items;
-		if (checkweight(25271,1) == 0 || (MaxWeight - Weight) < 1000) {
-			mes "- You're carrying too many items to proceed. -";
-			close;
-		}
-		setarray .@reward_id[0],
-			19209,		// Illusion Nurse Cap
-			19210,		// Illusion Apple of Archer
-			15195,		// Illusion Puente Robe
-			20838,		// Illusion Muffler [1]
-			22133;		// Illusion Shoes [1]
-		.@size = getarraysize(.@reward_id);
-
-		.@refine_req = 9;
-
-		for ( .@i = 0; .@i < .@size; ++.@i )
-			.@reward_name$[.@i] = replacestr( getitemname(.@reward_id[.@i]), ":", "" );
-
-		mes "[ Gemcutter ]";
-		mes "The following is the list of equipment I can handle.";
-		for ( .@i = 0; .@i < .@size; ++.@i )
-			mes mesitemlink( .@reward_id[.@i], false );
-		next;
-		mes "[ Gemcutter ]";
-		mes "Make sure ^0000FFyour equipment is refined to at least +" + .@refine_req + "^000000 before bringing it to me.";
-		mes "That's the minimum requirement for my upgrade service to have any visible effects on your equipment.";
-		next;
-		mes "[ Gemcutter ]";
-		mes "Make sure you're ^0000FFequipped with the item that you want to improve.^000000";
-		mes "Otherwise, I can't evaluate its condition.";
-		next;
-		mes "[ Gemcutter ]";
-		mes "As you may have guessed, your equipment will transform into something new after this.";
-		mes "In other words, ^0000FFIt'll lose its current refining levels, cards and enchantments.^000000";
-		next;
-		mes "[ Gemcutter ]";
-		mes "And I need ^0000FFIllusion Stones and some other materials^000000 to upgrade your equipment.";
-		mes "Pick an item you want and I'll tell you what I need.";
-		next;
-		switch( select( .@reward_name$[0], .@reward_name$[1], .@reward_name$[2], .@reward_name$[3], .@reward_name$[4] ) ) {
-		case 1:
-			.@reward = .@reward_id[0];		// Illusion Nurse Cap
-			.@eq_req = 2277;				// Nurse Cap
-			.@part = EQI_HEAD_TOP;
-
-			setarray .@items_req[0],
-				25271,10,					// Illusion Stones
-				25257,100;					// Bloody_Love_Letter
-			break;
-		case 2:
-			.@reward = .@reward_id[1];		// Illusion Apple of Archer
-			.@eq_req = 2285;				// Apple of Archer
-			.@part = EQI_HEAD_TOP;
-
-			setarray .@items_req[0],
-				25271,10,					// Illusion Stones
-				25258,100;					// Broken_Arrow
-			break;
-		case 3:
-			.@reward = .@reward_id[2];		// Illusion Puente Robe
-			.@eq_req = 15012;				// Puente Robe
-			.@part = EQI_ARMOR;
-
-			setarray .@items_req[0],
-				25271,10,					// Illusion Stones
-				25256,100;					// Hazy Dreams
-			break;
-		case 4:
-			.@reward = .@reward_id[3];		// Illusion Muffler [1]
-			.@eq_req = 2504;				// Muffler
-			.@part = EQI_GARMENT;
-
-			setarray .@items_req[0],
-				25271,10,					// Illusion Stones
-				23228,100;					// Hazy_Mooncake
-			break;
-		case 5:
-			.@reward = .@reward_id[4];		// Illusion Shoes [1]
-			.@eq_req = 2404;				// Shoes
-			.@part = EQI_SHOES;
-
-			setarray .@items_req[0],
-				25271,10,					// Illusion Stones
-				23228,100;					// Hazy_Mooncake
-			break;
-		}
-		break;
-	}
-	mes "[Gemcutter]";
-	mes "For that equipment, I need the following materials.";
-	mes "^4d4fff +" + .@refine_req + " " + getitemname(.@eq_req) + "";
-	mes "" + .@items_req[1] + " " + getitemname(.@items_req[0]) + "";
-	mes "" + .@items_req[3] + " " + getitemname(.@items_req[2]) + "^000000";
-	mes "Do you want to continue?";
-	next;
-	if (select( "Continue.", "I'll bring those materials." ) == 2) {
-		mes "[Gemcutter]";
-		mes "Come back when you're ready.";
-		close;
-	}
-	if (countitem(.@items_req[0]) < .@items_req[1] || countitem(.@items_req[2]) < .@items_req[3]) {
-		mes "[Gemcutter]";
-		mes "You don't have all the materials.";
-		close;
-	}
-	.@equip_id = getequipid(.@part);
-	if (.@equip_id == -1) {
-		mes "[Gemcutter]";
-		if (.@part == EQI_HAND_R)
-			mes "Where's your weapon?";
-		else
-			mes "Why don't you go wear that equipment first?";
-		close;
-	}
-	if (.@equip_id != .@eq_req) {
-		mes "[Gemcutter]";
-		mes "Please equip a ^4d4fff+9 " + getitemname(.@eq_req) + ".^000000";
-		close;
-	}
-	if (getequiprefinerycnt(.@part) < .@refine_req) {
-		mes "[Gemcutter]";
-		mes "I can only upgrade equipment that is ^4d4fffrefined to at least +" + .@refine_req + ".^000000";
-		close;
+		close2;
+		callshop( "barter_ill_moonlight" );
+		end;
 	}
-	mes "[Gemcutter]";
-	mes "There you go.";
-	delequip .@part;
-	delitem .@items_req[0], .@items_req[1];
-	delitem .@items_req[2], .@items_req[3];
-	getitem .@reward,1;
-	close;
+	end;
 
 OnTouch:
 	if (illusion_moonlight > 7)
@@ -261,222 +72,23 @@ OnTouch:
 //= Illusion of Vampire
 //============================================================
 gef_dun01,139,228,3	script	Great Merchant#illgef	4_M_HUMERCHANT,{
-	if (checkweight(501,1) == 0 || (MaxWeight - Weight) < 1000) {
-		mes "[Great Merchant]";
-		mes "You don't seem to be able to carry any more stuff. Why don't you lighten your bag?";
-		close;
-	}
-	disable_items;
 	mes "[Great Merchant]";
 	mes "Adventurer, do you have ^0000cdIllusion Stones^000000? If you have a ^0000cdweapon, a piece armor^000000, or ^0000cdan accessory at Refining Level 9 or higher^000000, ";
 	mes "then I can exchange it for something better at the cost of some Illusion Stones and other materials.";
 	next;
 	mes "[Great Merchant]";
-	mes "Check the ^0000cdcatalog^000000 for the available equipment and necessary materials.";
-	next;
-	mes "[Great Merchant]";
 	mes "So, what do you want?";
 	next;
-	switch( select( "Weapon exchange (5 kinds)", "Armor exchange (1 kind)", "Accessory exchange (2 kinds)", "Check the catalog.", "What are Illusion Stones?", "Can I refine the equipment I get in exchange for my Illusion Stones?" ) ) {
+	switch( select( "Exchange illusion equipment", "What are Illusion Stones?", "Can I strengthen the exchanged item?", "Cancel" ) ) {
 	case 1:
-		setarray .@item_req[0],		// item equipped aren't required to build the menu color
-			28022, 25271,80, 25261,20,			// Illusion_Infiltrator
-			28023, 25271,10, 25264,100,			// Illusion_Sharpened_Legbone_of_Ghoul
-			2039,  25271,40, 25261,100,			// Illusion_Wizardry_Staff
-			18149, 25271,50, 25265,100,			// Illusion_Ballista
-			28612, 25271,50, 25262,10;			// Illusion_Apocalypse
-		.@size = getarraysize(.@item_req);
-		for ( .@i = 0; .@i < .@size; .@i += 5 ) {
-			if (countitem(.@item_req[.@i+1]) < .@item_req[.@i+2] || countitem(.@item_req[.@i+3]) < .@item_req[.@i+4])
-				.@menu$ += "^aaaaaa" + getitemname(.@item_req[.@i]) + ".^000000:";
-			else
-				.@menu$ += getitemname(.@item_req[.@i]) + ".:";
-		}
-		switch( select(.@menu$) ) {
-		case 1:
-			mes "[Great Merchant]";
-			mes "Illusion Infiltrator, huh? That's a good weapon. Dreadful name, though. Let's see what you've got.";
-			callsub( S_WeaponArmor, 28022,	// Illusion_Infiltrator
-				EQI_HAND_R,
-				1266,						// Infiltrator_
-				25271,80,					// Illusion Stones
-				25261,20					// Torn_Diary
-			);
-		case 2:
-			mes "[Great Merchant]";
-			mes "Illusion Sharpened Legbone of Ghoul. It perfectly fits in this place. Let's see what you've got.";
-			callsub( S_WeaponArmor, 28023,	// Illusion_Sharpened_Legbone_of_Ghoul
-				EQI_HAND_R,
-				1260,						// Ghoul_Leg
-				25271,10,					// Illusion Stones
-				25264,100					// NightmareOfLump
-			);
-		case 3:
-			mes "[Great Merchant]";
-			mes "Illusion Wizardry Staff, huh? *Chuckle* Having that is every mage's dream. Let's see what you've got.";
-			callsub( S_WeaponArmor, 2039,	// Illusion_Wizardry_Staff
-				EQI_HAND_R,
-				1473,						// Wizardy_Staff
-				25271,40,					// Illusion Stones
-				25261,100					// SuspiciousMagicCircle
-			);
-		case 4:
-			mes "[Great Merchant]";
-			mes "Illusion Ballista... I would've loved to have this when, sigh, never mind. Let's see what you've got.";
-			callsub( S_WeaponArmor, 18149,	// Illusion_Ballista
-				EQI_HAND_R,
-				1727,						// Balistar_
-				25271,50,					// Illusion Stones
-				25265,100					// Shining_Spore
-			);
-		case 5:
-			mes "[Great Merchant]";
-			mes "Illusion Book of the Apocalypse, huh? It's been a long time since I heard the story behind this book. Anyway, let's see what you've got.";
-			callsub( S_WeaponArmor, 28612,	// Illusion_Apocalypse
-				EQI_HAND_R,
-				1557,						// Book_Of_The_Apocalypse
-				25271,50,					// Illusion Stones
-				25262,10					// Dried_Clover
-			);
-		}
-	case 2:
-		if (countitem(25271) < 30 || countitem(25263) < 200)
-			.@menu$ = "^aaaaaa" + getitemname(20840) + ".^000000";
-		else
-			.@menu$ = getitemname(20840);
-		select(.@menu$);
+		specialeffect EF_HFLIMOON3;
+		emotion ET_BEST;
 		mes "[Great Merchant]";
-		mes "Illusion Ancient Cape. Someone in this place? *Ahem* Let's see what you've got.";
-		callsub( S_WeaponArmor, 20840,	// Illusion_Ancient_Cape
-			EQI_GARMENT,
-			2525,						// Cape_Of_Ancient_Lord_
-			25271,30,					// Illusion Stones
-			25263,200					// Short_Bat_Fur
-		);
-	case 3:
-		setarray .@item_req[0],		// item equipped aren't required to build the menu color
-			28508, 25271,50, 25266,400,			// Illusion_Skull_Ring
-			28509, 25271,50, 25267,400;			// Illusion_Ring
-		.@size = getarraysize(.@item_req);
-		for ( .@i = 0; .@i < .@size; .@i += 5 ) {
-			if (countitem(.@item_req[.@i+1]) < .@item_req[.@i+2] || countitem(.@item_req[.@i+3]) < .@item_req[.@i+4])
-				.@menu$ += "^aaaaaa" + getitemname(.@item_req[.@i]) + ".^000000:";
-			else
-				.@menu$ += getitemname(.@item_req[.@i]) + ".:";
-		}
-		switch( select(.@menu$) ) {
-		case 1:
-			mes "[Great Merchant]";
-			mes "Illusion Skull Ring. *Chuckle* I remember when I was young, my friends and I wore this ring and played pranks, hah hah, never mind. That was a long time ago. Anyway, let's see what you've got.";
-			callsub( S_Accessory, 28508,	// Illusion_Skull_Ring
-				2715,						// Skul_Ring_
-				25271,50,					// Illusion Stones
-				25266,400					// Dried_Yggdrasil_Leaf
-			);
-		case 2:
-			mes "[Great Merchant]";
-			mes "Illusion Ring... It may not look much, but it has an important meaning to me. Anyway, let's see what you've got.";
-			callsub( S_Accessory, 28509,	// Illusion_Ring
-				2621,						// Ring_
-				25271,50,					// Illusion Stones
-				25267,400					// SuspiciousMagicCircle
-			);
-		}
-	case 4:
-		while( true ) {
-			mes "[Great Merchant]";
-			mes "Do you want to see my catalog? Sure thing.";
-			next;
-			switch( select( "Weapons (5 kinds)", "Armor (1 kind)", "Accessory (2 kinds)", "Cancel." ) ) {
-			case 1:
-				switch( select( "Illusion Infiltrator", "Illusion Sharpened Legbone of Ghoul", "Illusion Wizardry Staff", "Illusion Ballista", "Illusion Book of the Apocalypse" ) ) {
-				case 1:
-					mes mesitemlink( 28022, false );
-					mes "***********************************";
-					mes "Necessary Items";
-					mes "^0000cd+9 or higher^000000 Infiltrator ^C71585[1]^000000 x1";
-					mes "Socket Artisan";
-					mes "<NAVI>: Seiyablem in Prontera<INFO>prt_in,33,70,000,0,</INFO></NAVI>";
-					mes "80 Illusion Stones";
-					mes "20 Torn Papers";
-					break;
-				case 2:
-					mes mesitemlink( 28023, false );
-					mes "********************************";
-					mes "Necessary Items";
-					mes "^0000cd+9 or higher^000000 Sharpened Legbone of Ghoul x1";
-					mes "10 Illusion Stones";
-					mes "100 Clusters of Nightmares";
-					break;
-				case 3:
-					mes mesitemlink( 2039, false );
-					mes "********************************";
-					mes "Necessary Items";
-					mes "^0000cd+9 or higher^000000 Wizardry Staff x1";
-					mes "40 Illusion Stones";
-					mes "100 Suspicious Pentacles";
-					break;
-				case 4:
-					mes mesitemlink( 18149, false );
-					mes "*************************";
-					mes "Necessary Items";
-					mes "^0000cd+9 or higher^000000 Ballista ^C71585[1]^000000 x1";
-					mes "Socket Artisan";
-					mes "<NAVI>: Seiyablem in Prontera<INFO>prt_in,33,70,000,0,</INFO></NAVI>";
-					mes "50 Illusion Stones";
-					mes "100 Shining Spores";
-					break;
-				case 5:
-					mes mesitemlink( 28612, false );
-					mes "***********************";
-					mes "Necessary Items";
-					mes "^0000cd+9 or higher^000000 Book of the Apocalypse x1";
-					mes "50 Illusion Stones";
-					mes "10 Well-dried Clovers";
-					break;
-				}
-				break;
-			case 2:
-				select("Illusion Ancient Cape");
-				mes mesitemlink( 20840, false );
-				mes "*******************************";
-				mes "Necessary Items";
-				mes "^0000cd+9 or higher^000000 Ancient Cape ^C71585[1]^000000 x1";
-				mes "Socket Artisan";
-				mes "<NAVI>: Leablem in Prontera<INFO>prontera,244,169,000,0,</INFO></NAVI>";
-				mes "30 Illusion Stones";
-				mes "200 Short Bat Hairs";
-				break;
-			case 3:
-				switch( select( "Illusion Skull Ring", "Illusion Ring" ) ) {
-				case 1:
-					mes mesitemlink( 28508, false );
-					mes "*************************";
-					mes "Necessary Items";
-					mes "Skull Ring ^C71585[1]^000000 x1";
-					mes "Socket Artisan";
-					mes "<NAVI>: Leablem in Prontera<INFO>prontera,244,169,000,0,</INFO></NAVI>";
-					mes "50 Illusion Stones";
-					mes "400 Dried Yggdrasil Leaves";
-					break;
-				case 2:
-					mes mesitemlink( 28509, false );
-					mes "********************";
-					mes "Necessary Items";
-					mes "Ring ^C71585[1]^000000 x1";
-					mes "50 Illusion Stones";
-					mes "400 Suspicious Pentacles";
-					break;
-				}
-				break;
-			case 4:
-				mes "[Great Merchant]";
-				mes "Did you find something you like? Let me know if I can help you.";
-				close;
-			}
-			next;
-		}
-	case 5:
+		mes "Use it well and come see me later if you find more Illusion Stones! *Chuckle*";
+		close2;
+		callshop( "barter_ill_vampire" );
+		end;
+	case 2:
 		mes "[Great Merchant]";
 		mes "What are ^0000cdIllusion Stones^000000, you ask? Well... I don't think anyone knows exactly what they are.";
 		next;
@@ -495,7 +107,7 @@ gef_dun01,139,228,3	script	Great Merchant#illgef	4_M_HUMERCHANT,{
 		mes "[Great Merchant]";
 		mes "This benefits both of us. Let me know if you're interested in my proposition.";
 		close;
-	case 6:
+	case 3:
 		mes "[Great Merchant]";
 		mes "So, you want to reinforce the equipment you get. You're thorough. I like that!";
 		next;
@@ -508,116 +120,11 @@ gef_dun01,139,228,3	script	Great Merchant#illgef	4_M_HUMERCHANT,{
 		mes "[Great Merchant]";
 		mes "If you want to refine your equipment, then go to the <NAVI>Illusion Enchanter<INFO>prontera,90,115,000,0,</INFO></NAVI> near the Town Office.";
 		close;
-	}
-
-S_WeaponArmor:
-	.@reward = getarg(0);
-	.@part = getarg(1);
-	.@eq_req = getarg(2);
-
-	setarray .@items_req[0],
-		getarg(3),getarg(4),
-		getarg(5),getarg(6);
-
-	next;
-	donpcevent "Great Merchant#illgef::OnProgress";
-	sleep2 1000;
-	.@slots = getitemslots(.@eq_req);
-	.@eq_req_name$ = getitemname(.@eq_req) + ( .@slots ? "[" + .@slots + "]" : "" );
-	.@equip_id = getequipid(.@part);
-	if (.@equip_id == -1) {
-		mes "[Great Merchant]";
-		if (.@part == EQI_HAND_R)
-			mes "Oh, you must have been in a hurry: you forgot to bring a weapon.";
-		else
-			mes "Oh, you must have been in a hurry: you forgot to bring an armor.";
-		mes "Please come back equipped with a ^0000cd+9 " + .@eq_req_name$ + "^000000. I'll wait here.";
-		close;
-	}
-	if (.@equip_id != .@eq_req) {
-		mes "[Great Merchant]";
-		mes "Let's see... Mm? What did you bring? Come back equipped with a ^0000cd+9 " + .@eq_req_name$ + "^000000.";
-		close;
-	}
-	if (getequiprefinerycnt(.@part) < 9) {
-		mes "[Great Merchant]";
-		if (.@part == EQI_HAND_R)
-			mes "Um, this one isn't refined enough. I told you the armor has to be ^0000cdrefined to as least +9^000000.";
-		else
-			mes "Um, this one isn't refined enough. I told you the weapon has to be ^0000cdrefined to as least +9^000000.";
-		close;
-	}
-	mes "[Great Merchant]";
-	mes "Ah, you're equipped with the correct item. Now, let me check the other materials.";
-	next;
-	if (countitem(.@items_req[0]) < .@items_req[1] || countitem(.@items_req[2]) < .@items_req[3]) {
-		mes "[Great Merchant]";
-		mes "Mm, you're so impatient. I told you, I need ^4d4fff" + .@items_req[1] + " " + getitemname(.@items_req[0]) + " and " + .@items_req[3] + " " + getitemname(.@items_req[2]) + "^000000. Check your inventory and bring all of them.";
-		close;
-	}
-	mes "[Great Merchant]";
-	mes "Alright, you've got everything.";
-	next;
-	mes "[Great Merchant]";
-	mes "Are you ready to make the exchange?";
-	next;
-	if (select( "Wait! Let me think.", "Yes, I am." ) == 1) {
-		mes "[Great Merchant]";
-		mes "Sure, no problem. Come back when you're ready.";
-		close;
-	}
-	mes "[Great Merchant]";
-	mes "Alright! Let's see...";
-	next;
-	mes "[Great Merchant]";
-	mes "Here, take this. I hope you'll enjoy. If you find more Illusion Stones, feel free to bring them to me! *Chuckle*";
-	delequip .@part;
-	delitem .@items_req[0], .@items_req[1];
-	delitem .@items_req[2], .@items_req[3];
-	getitem .@reward,1;
-	close;
-
-S_Accessory:	// the structure is slightly different from above
-	.@reward = getarg(0);
-	.@eq_req = getarg(1);
-
-	setarray .@items_req[0],
-		getarg(2),getarg(3),
-		getarg(4),getarg(5);
-
-	next;
-	donpcevent "Great Merchant#illgef::OnProgress";
-	sleep2 1000;
-	.@count = countitem(.@eq_req) - (getequipid(EQI_ACC_L) == .@eq_req) - (getequipid(EQI_ACC_R) == .@eq_req);
-	if (.@count < 1 || countitem(.@items_req[0]) < .@items_req[1] || countitem(.@items_req[2]) < .@items_req[3]) {
-		mes "[Great Merchant]";
-		mes "Mm, you're so impatient. I told you, I need ^4d4fff1 socketed " + getitemname(.@eq_req) + ", " + .@items_req[1] + " " + getitemname(.@items_req[0]) + " and " + .@items_req[3] + " " + getitemname(.@items_req[2]) + "^000000. Check your inventory and bring all of them.";
-		close;
-	}
-	mes "[Great Merchant]";
-	mes "Alright, you've got everything.";
-	next;
-	mes "[Great Merchant]";
-	mes "Are you ready to make the exchange?";
-	next;
-	if (select( "Wait! Let me think.", "Yes, I am." ) == 1) {
+	case 4:
 		mes "[Great Merchant]";
-		mes "Sure, no problem. Come back when you're ready.";
+		mes "Did you find anything you liked? If you need anything, please let me know at any time.";
 		close;
 	}
-	mes "[Great Merchant]";
-	mes "Alright! Let's see...";
-	next;
-	mes "[Great Merchant]";
-	mes "Here, take this. I hope you'll enjoy. If you find more Illusion Stones, feel free to bring them to me! *Chuckle*";
-	delitem .@eq_req,1;
-	delitem .@items_req[0], .@items_req[1];
-	delitem .@items_req[2], .@items_req[3];
-	getitem .@reward,1;
-	close;
-
-OnProgress:
-	progressbar_npc "000000",1;
 	end;
 }
 
@@ -631,7 +138,7 @@ ice_dun02,153,18,3	script	Illusion Stone Research	4_M_ALCHE_B,{
 	mes "[Illusion Stone Researcher]";
 	mes "Ah, Illusion Stones are truly mysterious...";
 	next;
-	switch( select( "What are you doing here?", "Upgrade weapon.", "Upgrade armor." ) ) {
+	switch( select( "What are you doing here?", "Upgrade equipments", "Cancel" ) ) {
 	case 1:
 		mes "[Illusion Stone Researcher]";
 		mes "I'm here to find some Illusion Stones that I need for my research.";
@@ -645,17 +152,6 @@ ice_dun02,153,18,3	script	Illusion Stone Research	4_M_ALCHE_B,{
 		mes "What do you say?";
 		close;
 	case 2:
-		setarray .@reward_id[0],
-			13337,	// Huuma_Flutter_Snow_IL
-			1846;	// Combo_Battle_Glove_IL
-		setarray .@reward_name$[0],
-			getitemname(.@reward_id[0]),
-			getitemname(.@reward_id[1]);
-		mes "[Illusion Stone Researcher]";
-		mes "The following is the list of equipment I can handle.";
-		mes mesitemlink( .@reward_id[0], false );
-		mes mesitemlink( .@reward_id[1], false );
-		next;
 		mes "[Illusion Stone Researcher]";
 		mes "Make sure ^4d4dffyour equipment is refined to at least +9^000000 before bringing it to me.";
 		mes "Make sure you're ^4d4dffequipped with the item that you want to improve^000000.";
@@ -667,127 +163,15 @@ ice_dun02,153,18,3	script	Illusion Stone Research	4_M_ALCHE_B,{
 		mes "[Illusion Stone Researcher]";
 		mes "And I need ^4d4dffIllusion Stones and some other materials^000000 to upgrade your equipment.";
 		mes "Pick an item you want. I'll tell you what I need.";
-		next;
-		.@s = select( .@reward_name$[0], .@reward_name$[1], "Cancel." ) - 1;
-		switch(.@s) {
-		case 0:		// Huuma_Flutter_Snow_IL
-			.@eq_req = 13314;		// Huuma_Fluttering_Snow
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,100,			// IllusionStone
-				25300,20;			// KTULLANUXsEye
-			break;
-		case 1:		// Combo_Battle_Glove_IL
-			.@eq_req = 1822;		// Combo_Battle_Glove
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,100,			// IllusionStone
-				25299,100;			// Snowball
-			break;
-		case 2:
-			end;
-		}
-		break;
+		close2;
+		callshop( "barter_ill_frozen" );
+		end;
 	case 3:
-		setarray .@reward_id[0],
-			28922,	// Herald_Of_GOD_IL
-			20847,	// Clack_Of_Servival_IL
-			19223;	// Cap_IL
-		setarray .@reward_name$[0],
-			getitemname(.@reward_id[0]),
-			getitemname(.@reward_id[1]),
-			getitemname(.@reward_id[2]);
-		mes "[Illusion Stone Researcher]";
-		mes "The following is the list of equipment I can handle.";
-		mes mesitemlink( .@reward_id[0], false );
-		mes mesitemlink( .@reward_id[1], false );
-		mes mesitemlink( .@reward_id[2], false );
-		next;
-		mes "[Illusion Stone Researcher]";
-		mes "Make sure ^4d4dffyour equipment is refined to at least +9^000000 before bringing it to me.";
-		mes "Make sure you're ^4d4dffequipped with the item that you want to improve^000000.";
-		next;
 		mes "[Illusion Stone Researcher]";
-		mes "As you may have guessed, your equipment will transform into something new after this.";
-		mes "In other words, ^4d4dffit'll lose its current Refining and Upgrade levels.^000000";
-		mes "Are you ready?";
-		next;
-		.@s = select( .@reward_name$[0], .@reward_name$[1], .@reward_name$[2], "Cancel." ) - 1;
-		switch(.@s) {
-		case 0:		// Herald_Of_GOD_IL
-			.@eq_req = 2128;		// Herald_Of_GOD_
-			.@part = EQI_HAND_L;
-
-			setarray .@items_req[0],
-				25271,100,			// IllusionStone
-				25298,300;			// SpritJewel
-			break;
-		case 1:		// Clack_Of_Servival_IL
-			.@eq_req = 2509;		// Clack_Of_Servival
-			.@part = EQI_GARMENT;
-
-			setarray .@items_req[0],
-				25271,100,			// IllusionStone
-				25297,200;			// Frozen_PieceOfRock
-			break;
-		case 2:		// Cap_IL
-			.@eq_req = 2227;		// Cap_
-			.@part = EQI_HEAD_TOP;
-
-			setarray .@items_req[0],
-				25271,50,			// IllusionStone
-				25297,100;			// Frozen_PieceOfRock
-			break;
-		case 3:
-			end;
-		}
-		break;
-	}
-	mes "[Illusion Stone Researcher]";
-	mes "For that equipment, I need the following materials.";
-	mes "^4d4fff +9 " + getitemname(.@eq_req) + "";
-	mes "" + .@items_req[1] + " " + getitemname(.@items_req[0]) + "";
-	mes "" + .@items_req[3] + " " + getitemname(.@items_req[2]) + "^000000";
-	mes "Do you want to continue?";
-	next;
-	if (select( "Continue.", "I'll bring those materials." ) == 2) {
-		mes "[Illusion Stone Researcher]";
-		mes "Come back when you're ready.";
-		close;
-	}
-	if (countitem(.@items_req[0]) < .@items_req[1] || countitem(.@items_req[2]) < .@items_req[3]) {
-		mes "[Illusion Stone Researcher]";
-		mes "You don't have all the materials.";
-		close;
-	}
-	.@equip_id = getequipid(.@part);
-	if (.@equip_id == -1) {
-		mes "[Illusion Stone Researcher]";
-		if (.@part == EQI_HAND_R)
-			mes "Where's your weapon?";
-		else
-			mes "Why don't you go wear that equipment first?";
-		close;
-	}
-	if (.@equip_id != .@eq_req) {
-		mes "[Illusion Stone Researcher]";
-		mes "Please equip a ^4d4fff+9 " + getitemname(.@eq_req) + ".^000000";
+		mes "It's just hard to get..";
 		close;
 	}
-	if (getequiprefinerycnt(.@part) < 9) {
-		mes "[Illusion Stone Researcher]";
-		mes "I can only upgrade equipment that is ^4d4fffrefined to at least +9.^000000";
-		close;
-	}
-	mes "[Illusion Stone Researcher]";
-	mes "There you go.";
-	delequip .@part;
-	delitem .@items_req[0], .@items_req[1];
-	delitem .@items_req[2], .@items_req[3];
-	getitem .@reward_id[.@s],1;
-	close;
+	end;
 }
 
 
@@ -1349,8 +733,6 @@ OnTouch:
 
 // Exchange npc
 alberta,226,28,3	script	Equipment Researcher	4_TOWER_15,{
-	disable_items;
-
 	.@illusion_stone_name$ = getitemname(25271);
 
 	mes "[Equipment Researcher]";
@@ -1358,7 +740,7 @@ alberta,226,28,3	script	Equipment Researcher	4_TOWER_15,{
 	mes "If you have the materials I need for my research, wouldn't you hand them over?";
 	mes "If you give me some equipment and some materials, I'll exchange them for my reinforced equipment.";
 	next;
-	switch( select( "What are you doing here?", "Exchange Weapon", "Exchange Armor" ) ) {
+	switch( select( "What are you doing here?", "Exchange equipment" ) ) {
 	case 1:
 		mes "[Equipment Researcher]";
 		mes "I'm working on how to use an " + .@illusion_stone_name$ + " to strengthen equipment.";
@@ -1371,137 +753,19 @@ alberta,226,28,3	script	Equipment Researcher	4_TOWER_15,{
 		close;
 	case 2:
 		mes "[Equipment Researcher]";
-		mes "What are the weapons I can exchange? Wait a minute. I'll name them.";
-		next;
-		mes "[Equipment Researcher]";
-		mes "" + mesitemlink(13469, false) + ",";
-		mes "" + mesitemlink(1326, false) + ",";
-		mes "" + mesitemlink(32005, false) + ",";
-		mes "" + mesitemlink(13338, false) + ",";
-		mes "" + mesitemlink(16065, false) + ".";
-		mes "Each has two slots.";
+		mes "What are the equipment I can exchange? Wait a minute. I'll let you know.";
 		next;
 		mes "[Equipment Researcher]";
-		mes "As a material, you can bring ^0000CDexisting weapons that have been refined over +9.^000000";
+		mes "As a material, you can bring ^0000CDexisting equipment that have been refined to +9 or higher.^000000";
 		mes "And I need some ^0000CD" + .@illusion_stone_name$ + " and other materials.^000000";
-		mes "If you pick the weapon you want, I'll tell you in detail.";
 		next;
 		mes "[Equipment Researcher]";
-		mes "Of course, we're giving you new weapons, so don't forget that all the existing ^0000CDsmelting and enchantments^000000 will disappear.";
-		mes "I need to see the performance of the weapons to be exchanged, so you must ^0000CDwear them^000000.";
+		mes "Of course, we're giving you new equipment, so don't forget that all the existing ^0000CDsmelting and enchantments^000000 will disappear.";
 		mes "So, what kind of weapon do you want?";
-		next;
-		switch( select( "Illusion Immaterial Sword", "Illusion War Axe", "Illusion Pole Axe", "Illusion Wing Shuriken", "Illusion Iron Driver" ) ) {
-		case 1:
-			.@reward = 13469;		// Illusion Immaterial Sword
-			.@eq_req = 1141;		// Immaterial Sword
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,100,			// Illusion Stones
-				25314,50;			// Ships Log
-			break;
-		case 2:
-			.@reward = 1326;		// Illusion War Axe
-			.@eq_req = 1306;		// War Axe
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,100,			// Illusion Stones
-				25311,200;			// Black Piece of Soul
-			break;
-		case 3:
-			.@reward = 32005;		// Illusion Pole Axe
-			.@eq_req = 1417;		// Pole Axe
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,100,			// Illusion Stones
-				25311,200;			// Black Piece of Soul
-			break;
-		case 4:
-			.@reward = 13338;		// Illusion Wing Shuriken
-			.@eq_req = 13300;		// Huuma Wing Shuriken
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,100,			// Illusion Stones
-				25313,200;			// Old Turtle Shells
-			break;
-		case 5:
-			.@reward = 16065;		// Illusion Iron Driver
-			.@eq_req = 1529;		// Iron Driver
-			.@part = EQI_HAND_R;
-
-			setarray .@items_req[0],
-				25271,100,			// Illusion Stones
-				25313,200;			// Old Turtle Shells
-			break;
-		}
-		mes "[Equipment Researcher]";
-		mes "" + mesitemlink(.@reward, false) + "?";
-		mes "I need " + callfunc("F_GetArticle",getitemname(.@eq_req)) + " ^0000CD+9 " + getitemname(.@eq_req) + " ^000000,";
-		mes "^0000CD" + getitemname(.@items_req[0]) + " " + .@items_req[1] + "ea^000000 and ^0000CD" + getitemname(.@items_req[2]) + " " + .@items_req[3] + "ea^000000 as materials.";
-		break;
-	case 3:
-		.@reward = 19247;		// Illusion Fancy Flower
-		.@eq_req = 2207;		// Fancy Flower
-		.@part = EQI_HEAD_TOP;
-
-		setarray .@items_req[0],
-			25271,50,			// Illusion Stones
-			25312,50;			// Pretty Old Doll
-
-		mes "[Equipment Researcher]";
-		mes "You can only exchange one type of armor, " + mesitemlink(.@reward, false) + ". It has 1 slot.";
-		mes "I need " + callfunc("F_GetArticle",getitemname(.@eq_req)) + " ^0000CD" + getitemname(.@eq_req) + "^000000,";
-		mes "^0000CD" + getitemname(.@items_req[0]) + " " + .@items_req[1] + " ea^000000 and ^0000CD" + getitemname(.@items_req[2]) + " " + .@items_req[3] + " ea^000000 as materials.";
-		next;
-		mes "[Equipment Researcher]";
-		mes "Of course, we're giving you new weapons, so don't forget that all the existing ^0000CDsmelting and enchantments^000000 will disappear.";
-		mes "I need to see the performance of the weapons to be exchanged, so you must ^0000CDwear them^000000.";
-		break;
-	}
-	mes "Would you like to exchange it right now?";
-	next;
-	if (select( "Exchange " + getitemname(.@reward), "Cancel" ) == 2) {
-		mes "[Equipment Researcher]";
-		mes "Yeah, come back if you change your mind.";
-		close;
-	}
-	if (countitem(.@items_req[0]) < .@items_req[1] || countitem(.@items_req[2]) < .@items_req[3]) {
-		mes "[Equipment Researcher]";
-		mes "Well... you're running out of ingredients.";
-		mes "Bring me ^0000CD" + getitemname(.@items_req[0]) + " " + .@items_req[1] + "ea^000000 and ^0000CD" + getitemname(.@items_req[2]) + " " + .@items_req[3] + " ea^000000. Then I'll exchange it for you..";
-		close;
-	}
-	// custom texts and checks
-	.@equip_id = getequipid(.@part);
-	if (.@equip_id == -1) {
-		mes "[Equipment Researcher]";
-		if (.@part == EQI_HAND_R)
-			mes "Where's your weapon?";
-		else
-			mes "Why don't you go wear that equipment first?";
-		close;
-	}
-	if (.@equip_id != .@eq_req) {
-		mes "[Equipment Researcher]";
-		mes "Please equip " + callfunc("F_GetArticle",getitemname(.@eq_req)) + " ^4d4fff+9 " + getitemname(.@eq_req) + ".^000000";
-		close;
-	}
-	if (getequiprefinerycnt(.@part) < 9) {
-		mes "[Equipment Researcher]";
-		mes "I can only upgrade equipment that is ^4d4fffrefined to at least +9.^000000";
-		close;
+		close2;
+		callshop( "barter_ill_turtle" );
+		end;
 	}
-	mes "[Equipment Researcher]";
-	mes "There you go.";
-	delequip .@part;
-	delitem .@items_req[0], .@items_req[1];
-	delitem .@items_req[2], .@items_req[3];
-	getitem .@reward,1;
-	close;
 }
 
 
@@ -1511,141 +775,19 @@ alberta,226,28,3	script	Equipment Researcher	4_TOWER_15,{
 
 // Exchange npc
 com_d02_i,234,266,6	script	Village Soap#Lu	4_M_ORIENT01,{
-	if (checkweight(1201,3) == 0) {
-		mes "- You cannot proceed because you have too many items. -";
-		close;
-	}
-	disable_items;
-	setarray .@equipment_id[0],
-		18174,
-		28626,
-		19366,
-		15348,
-		22192,
-		20923;
-	setarray .@equipment_name$[0],
-		getitemname(.@equipment_id[0]),
-		getitemname(.@equipment_id[1]),
-		getitemname(.@equipment_id[2]),
-		getitemname(.@equipment_id[3]),
-		getitemname(.@equipment_id[4]),
-		getitemname(.@equipment_id[5]);
-
 	mes "[Village Soap]";
 	mes "I've also rolled up my sleeves for the adventurers who work hard for the village. Can I make your equipment stronger? Is there anything on the list you want?";
 	next;
-	.@s = select( "[Material Check] View catalog.", "[Production Request] " + .@equipment_name$[0], "[Production Request] " + .@equipment_name$[1], "[Production Request] " + .@equipment_name$[2],
-		"[Production Request] " + .@equipment_name$[3], "[Production Request] " + .@equipment_name$[4], "[Production Request] " + .@equipment_name$[5] ) - 2;
-	if (.@s == -1) {
+	if (select( "Look at the illusion equipment", "Cancel" ) == 2) {
 		mes "[Village Soap]";
-		mes "Are you curious about the ingredients? Take a look.";
-		while(1) {
-			next;
-			.@s = select( "Stop watching", "[Material Check] " + .@equipment_name$[0], "[Material Check] " + .@equipment_name$[1], "[Material Check] " + .@equipment_name$[2],
-				"[Material Check] " + .@equipment_name$[3], "[Material Check] " + .@equipment_name$[4], "[Material Check] " + .@equipment_name$[5] ) - 2;
-			if (.@s == -1) {
-				mes "[Village Soap]";
-				mes "If you equip the required equipment and bring the ingredients, I'll make it for you in no time.";
-				close;
-			}
-			.@size = callsub( S_Data, .@equipment_id[.@s], .@equip_id_refined, .@req_id, .@req_amount, .@part );
-
-			mes "" + mesitemlink(.@equipment_id[.@s]) + "";
-			mes "**********************************";
-			if (.@equipment_id[.@s] == 18174)
-				mes "1 " + mesitemlink(.@equip_id_refined) + "";
-			else
-				mes "1 " + mesitemlink(.@equip_id_refined) + "";
-			for ( .@i = 0; .@i < .@size; ++.@i )
-				mes "" + .@req_amount[.@i] + " " + mesitemlink(.@req_id[.@i]) + "";
-		}
-		end;
-	}
-	.@size = callsub( S_Data, .@equipment_id[.@s], .@equip_id_refined, .@req_id, .@req_amount, .@part );
-
-	if (getequiprefinerycnt(.@part) < 9) {
-		mes "[Village Soap]";
-		mes "I don't care what this equipment is, but it needs to be refined to at least +9.";
+		mes "Please come later. Just bring the ingredients and I'll make it for you.";
 		close;
 	}
-	if (getequipid(.@part) != .@equip_id_refined) {
-		mes "[Village Soap]";
-		mes "Eheh- This dude misunderstood me. Do you have to equip the equipment that becomes the material?";
-		close;
-	}
-	// todo text (currently custom)
-
-	for ( .@i = 0; .@i < .@size; ++.@i ) {
-		if (countitem(.@req_id[.@i]) < .@req_amount[.@i]) {
-			mes "[Village Soap]";
-			mes "You don't have enough items.";
-			close;
-		}
-	}
-	delequip .@part;
-	for ( .@i = 0; .@i < .@size; ++.@i )
-		delitem .@req_id[.@i], .@req_amount[.@i];
-	getitem .@equipment_id[.@s],1;
+	mes "[Village Soap]";
+	mes "Who made it? It might be useful for you to take it with you.";
+	close2;
+	callshop( "barter_ill_luanda" );
 	end;
-
-S_Data:
-	switch( getarg(0) ) {
-	case 18174:
-		set getarg(1), 1726;	// .@equip_id_refined,
-		setarray .@req[0],
-			25636,50,
-			25640,50,
-			25637,50,
-			25271,80;
-		set getarg(4), EQI_HAND_R;
-		break;
-	case 28626:
-		set getarg(1), 1552;
-		setarray .@req[0],
-			25642,100,
-			25271,50;
-		set getarg(4), EQI_HAND_R;
-		break;
-	case 19366:
-		set getarg(1), 5128;
-		setarray .@req[0],
-			25634,30,
-			25633,150,
-			25271,120;
-		set getarg(4), EQI_HEAD_TOP;
-		break;
-	case 15348:
-		set getarg(1), 2354;
-		setarray .@req[0],
-			25641,100,
-			25638,150,
-			25271,80;
-		set getarg(4), EQI_ARMOR;
-		break;
-	case 22192:
-		set getarg(1), 2419;
-		setarray .@req[0],
-			25635,100,
-			25633,150,
-			25271,80;
-		set getarg(4), EQI_SHOES;
-		break;
-	case 20923:
-		set getarg(1), 2520;
-		setarray .@req[0],
-			25639,30,
-			25638,150,
-			25271,120;
-		set getarg(4), EQI_GARMENT;
-		break;
-	}
-	.@size = getarraysize(.@req);
-
-	for ( .@i = 0; .@i < .@size; .@i += 2 ) {
-		set getelementofarray(getarg(2), .@i/2), .@req[.@i];
-		set getelementofarray(getarg(3), .@i/2), .@req[.@i+1];
-	}
-	return (.@size/2);
 }