Преглед на файлове

Merge branch 'master' into academie

Atemo преди 9 години
родител
ревизия
c3125026d2

+ 8 - 0
.gitignore

@@ -98,6 +98,14 @@ Thumbs.db
 /tools/*.ilk
 /tools/*.pdb
 
+# /vcproj-14/
+.vs
+/vcproj-14/char-server
+/vcproj-14/login-server
+/vcproj-14/mapcache
+/vcproj-14/map-server
+/vcproj-14/*.user
+
 # /vcproj-13/
 /vcproj-13/char-server
 /vcproj-13/login-server

+ 2 - 1
conf/battle/player.conf

@@ -198,7 +198,8 @@ vip_exp_penalty_job: 1
 vip_bm_increase: 2
 
 // Item drop increase. Setting to 0 will disable.
-// Note: 50 = 0.5%
+// Note: 50 = 50% item_drop increase.
+// For item_rate = 200: 200 * 50 / 100 = 100 bonus rate added to the 200 base giving total rate of 300.
 // Default: 50
 vip_drop_increase: 50
 

+ 2 - 978
npc/re/instances/WolfchevLaboratory.txt

@@ -10,6 +10,8 @@
 //= Defeat Wolfchev's human experimentations.
 //===== Additional Comments: =================================
 //= 1.0 First version, edited. [Euphy]
+//= 1.1 Moved the Enchant (Sorcerer#Bio4Reward) and Reward
+//=		(Weird old man#Bio4Reward) NPC in merchant folder. [Capuche]
 //============================================================
 
 // Giacomo Girolam
@@ -290,984 +292,6 @@ OnTouch:
 	end;
 }
 
-// Weird Old Man (Rewards)
-//============================================================
-lighthalzen,342,291,4	script	Weird old man#Bio4Reward	4_M_EINOLD,{
-	if ((MaxWeight - Weight) < 2800 || !checkweight(1201, 1)) {
-		mes "^FF0000 Check up your inventory. You got too many items to carry out the quest. ^000000";
-		close;
-	}
-	mes "[Weird old man]";
-	mes "Phew, those young people nowadays, are so rude and have no manners.";
-	next;
-	if (select("Ignore him", "Talk with him") == 1) {
-		mes "[Weird old man]";
-		mes "You, Very bad young man!";
-		close;
-	}
-	mes "["+ strcharinfo(0) +"]";
-	mes "Sir, Are you alright??";
-	next;
-	mes "[Weird old man]";
-	mes "....?? You are not like other young people. You have good manners! You know what happened to me..?";
-	next;
-	switch(rand(1,2)) {
-	case 1:
-		mes "[Weird old man]";
-		mes "I was on the way to visit my son who lives in Rune Midgarts. It's really far away, so I took the airplane, and..";
-		next;
-		mes "[Weird old man]";
-		mes "those young people...so noisy.... I was standing but non of them offered me a seat..and they were just talking in loud voices which bothered everyone.";
-		next;
-		mes "[Weird old man]";
-		mes "I could lecture them if I were 10 years younger than now..";
-		next;
-		mes "[Weird old man]";
-		mes "Pffff.. Never like the time passing....";
-		next;
-		mes "[Weird old man]";
-		mes "So, you... what would you do??";
-		next;
-		mes "[Weird old man]";
-		mes "In an open, public place, you are supposed to stay quiet to the destination and offer your seat to the elderly and the infirm.";
-		next;
-		break;
-	case 2:
-		mes "[Weird old man]";
-		mes "I was on the way to visit my son who lives in Rune Midgarts. It's really far away, so I took the airplane, and..";
-		next;
-		mes "[Weird old man]";
-		mes "those young people...so noisy.... I was standing but non of them offered me a seat..and they were just talking in loud voices which bothered everyone.";
-		next;
-		mes "[Weird old man]";
-		mes "I could lecture them if I were 10 years younger than now..";
-		next;
-		mes "[Weird old man]";
-		mes "Pffff.. Never like the time passing....";
-		next;
-		mes "[Weird old man]";
-		mes "So, you... what would you do??";
-		next;
-		mes "[Weird old man]";
-		mes "In an open, public place, you are supposed to stay quiet to the destination and offer your seat to the elderly and the infirm. Right?";
-		next;
-		mes "[Weird old man]";
-		mes "Isn't that right?!";
-		next;
-		switch(rand(1,2)) {
-		case 1:
-			mes "[Weird old man]";
-			mes "Oh, and then! you know what...?";
-			next;
-			mes "[Weird old man]";
-			mes "Once I was walking in the town, and some boy were spitting on the street, and were bothering girls who were passing by...tut tut!";
-			next;
-			mes "[Weird old man]";
-			mes "The world is going to the dogs.. How will it be?? It was even a day time when they were doing it..tut tut.";
-			next;
-			switch(rand(1,2)) {
-			case 1:
-				mes "[Weird old man]";
-				mes "Oh, and then! you know what...?";
-				next;
-				break;
-			case 2:
-				mes "[Weird old man]";
-				mes "Oh, and then! you know what...?";
-				next;
-				mes "[Weird old man]";
-				mes "Lately young people are not so patient!!!!";
-				next;
-				mes "[Weird old man]";
-				mes "That often, they say they will quit.. they say they can't more. How will they live all the lift with that kind of mentality..tut tut.";
-				next;
-				mes "[Weird old man]";
-				mes "It's not easy to find a job, it is very difficult to be hired. But then they even cannot stand a week there, and leave the work already.";
-				next;
-				mes "[Weird old man]";
-				mes "How impatient and irresponsible!!";
-				next;
-				mes "[Weird old man]";
-				mes "Oh, and then! you know what...?";
-				next;
-				break;
-			}
-		case 2:
-			mes "[Weird old man]";
-			mes "Oh, and then! you know what...?";
-			next;
-			break;
-		}
-	}
-	mes "^E7A43DThe old man talked over and over again.^000000";
-	next;
-	mes "[Weird old man]";
-	mes "Hm......You are not like common young people, you seem pretty patient too. I like that!!!";
-	next;
-	mes "[Weird old man]";
-	mes "Now I am just an old, weak man but when I was young, I was a famous merchant in the town.";
-	next;
-	mes "[Weird old man]";
-	mes "It's been a while since I stopped the business,";
-	mes "but a former client of mine contacted me and asked me";
-	next;
-	mes "[Weird old man]";
-	mes "If I could get him some unknown objects named 'Will of Warrior', 'Thirst for Blood', 'Chill of the Dead'.";
-	next;
-	mes "[Weird old man]";
-	mes "I liked your politeness which is not like most of young people, so if you get me those, I will dare to give you some stuffs that I consider as my treasures.";
-	next;
-	while(1) {
-		switch(select("When I gather them, I will come back", "Show me the armors", "Show me the weapons")) {
-		case 1:
-			mes "[Weird old man]";
-			mes "OK, young man. See you later.";
-			close;
-		case 2:
-			mes "[Weird old man]";
-			mes "So, you are interested in armors.";
-			next;
-			mes "[Weird old man]";
-			mes "These are the armors I have.";
-			next;
-			for(.@i = 1; .@i < 8; .@i++) {
-				if (((.@i == 1 || .@i == 5) && (countitem(6469) >= 100) && (countitem(6470) >= 50) && (countitem(6471) >= 35)) || 
-				    ((.@i == 2 || .@i == 3) && (countitem(6469) >= 100) && (countitem(6470) >= 50) && (countitem(6471) >= 22)) ||
-				    ((.@i == 4 || .@i == 7) && (countitem(6469) >= 300) && (countitem(6470) >= 300) && (countitem(6471) >= 400)) ||
-				    ((.@i == 6) && (countitem(6469) >= 100) && (countitem(6470) >= 50) && (countitem(6471) >= 30))) {
-					.@armor$[.@i] = "^0000FF";
-				} else {
-					.@armor$[.@i] = "^FF0000";
-				}
-			}
-			while(1) {
-				switch(select(
-					"Show me other items.",
-					""+.@armor$[1]+"Giant Shield^000000",
-					""+.@armor$[2]+"Acient Book of Geffenia-Water^000000",
-					""+.@armor$[3]+"Bible of Promise(2nd Vol.)^000000",
-					""+.@armor$[4]+"Salvage Cape^000000",
-					""+.@armor$[5]+"Assassin's Handcuffs^000000",
-					""+.@armor$[6]+"Green Operating Gown^000000",
-					""+.@armor$[7]+"Ancient Gold Decoration^000000"
-				)) {
-				case 1:
-					mes "[Weird old man]";
-					mes "Have a look.";
-					next;
-					.@break = 1;
-					break;
-				case 2:
-					mes "<<Giant Shield[1]>>";
-					mes "Decrease 5% of Damage from Large Monsters, if Refine Lv is 9, decrease 5% more of the Damage.";
-					mes "Shield / Def 130 / Weight 280 / Required Lv 100 / Socket 1 / for 3rd Swordman Classes";
-					callsub L_Reward, 2160, 100, 50, 35; //Giant_Shield
-					break;
-				case 3:
-					mes "<<Acient Book of Geffenia-Water[1]>>";
-					mes "INT + 1, MDEF + 2. If Original INT point is 120, MATK + 10, MHP + 800.";
-					mes "When equipping with Lacryma Stick, the casting % from Storm Gust, Frost Misty and Jack frost will discount equivalent to 4 times Refine Lv.";
-					mes "Shield / Def 30 / Weight 100 / Required Lv 100 / Socket 1 / for Warlock";
-					callsub L_Reward, 2161, 100, 50, 22; //Geffenia_Book_Water
-					break;
-				case 4:
-					mes "<<Bible of Promise(2nd Vol.)[1]>>";
-					mes "MDEF + 5, Allow to use 'Odin's Power'(Lv 2). Increase 5% more for Heal skill.";
-					mes "Shield / Def 20 / Weight 50 / Required Lv 140 / Socket 1 / for Archbishop";
-					callsub L_Reward, 2162, 100, 50, 22; //Bible_Of_Promise2
-					break;
-				case 5:
-					mes "<<Salvage Cape[0]>>";
-					mes "Allow to use 'Cicada Skin Shed'(Lv 1). Cool time for this skill will be 30 seconds. When equiping it, SP consumption for using any skill will be doubled, When taking it off, SP - 1200.";
-					mes "Garment / Def 1 / Weight 40 / Required Lv 130 / Socket 0 / for Archbishop";
-					callsub L_Reward, 2582, 100, 50, 35; //Salvage_Cape
-					break;
-				case 6:
-					mes "<<Assassin's Handcuffs[1]>>";
-					mes "MSP + 20, CRI + 3. When equipping with Krishna, ATK + 50, ATK power from 'Sonic Blow' 50% increased, FLEE - 30. When equipping with Cakram CRI + 4, Critical ATK power 40% increased, MHP - 10%.";
-					mes "Accessory / Def 3 / Weight 40 / Required Lv 100 / Socket 1 / for Guillotine Cross";
-					callsub L_Reward, 2892, 300, 300, 400; //Assassin_Handcuffs
-					break;
-				case 7:
-					mes "<<Green Operating Gown[1]>>";
-					mes "DEX + 1, MSP + 30. Equipping with Scalpel will let to drop 'Immortal Heart', 'Alcohol' with a certain chance when hunting Human, Animal type monsters. Refine Lv affects the drop rate.";
-					mes "Armor / Def 66 / Weight 66 / Required Lv 100 / Socket 1 / for Generic";
-					callsub L_Reward, 15044, 100, 50, 30; //Green_Operation_Coat
-					break;
-				case 8:
-					mes "<<Ancient Gold Decoration[1]>>";
-					mes "If the base lv is 150, All State + 2. for Swordman, Merchant, Thief Classes ATK + 8%, for Magician, Acolyte classes MATK + 8%, Heal Power + 7%, for Archer classes DEX + 3, Long Distance ATK power + 10%.";
-					mes "Helm / Def 7 / Location - Upper / Weight 40 / Required Lv 100 / Socket 1 / for 3rd Job Classes";
-					callsub L_Reward, 18570, 300, 300, 400; //Ancient_Gold_Deco
-					break;
-				}
-				if (.@break) {
-					.@break = 0;
-					break;
-				}
-			}
-			break;
-		case 3:
-			mes "[Weird old man]";
-			mes "So, you are interested in weapons.";
-			next;
-			mes "[Weird old man]";
-			mes "These are the weapons I've got.";
-			next;
-			for(.@i = 1; .@i < 15; .@i++) {
-				if (((.@i == 1) && (countitem(6469) >= 50) && (countitem(6470) >= 100) && (countitem(6471) >= 10)) ||
-				((.@i == 2) && (countitem(6469) >= 50) && (countitem(6470) >= 100) && (countitem(6471) >= 85)) ||
-				((.@i == 3 || .@i == 4 || (.@i >= 8 && .@i < 11) || .@i >= 12) && (countitem(6469) >= 50) && (countitem(6470) >= 100) && (countitem(6471) >= 35)) ||
-				((.@i == 5 || .@i == 7 || .@i == 11) && (countitem(6469) >= 50) && (countitem(6470) >= 100) && (countitem(6471) >= 40)) ||
-				((.@i == 6) && (countitem(6469) >= 300) && (countitem(6470) >= 300) && (countitem(6471) >= 400))) {
-					.@weapon$[.@i] = "^0000FF";
-				} else {
-					.@weapon$[.@i] = "^FF0000";
-				}
-			}
-			while(1) {
-				switch(select(
-					"Show me other items.",
-					""+.@weapon$[1]+"Agent Katar^000000",
-					""+.@weapon$[2]+"Guillotine Katar^000000",
-					""+.@weapon$[3]+"Ygnus Stale^000000",
-					""+.@weapon$[4]+"End Sektura^000000",
-					""+.@weapon$[5]+"Cannon Spear^000000",
-					""+.@weapon$[6]+"Giant Lance^000000",
-					""+.@weapon$[7]+"Chilly Spell Book^000000",
-					""+.@weapon$[8]+"Recovery Light^000000",
-					""+.@weapon$[9]+"Aztoe Nail^000000",
-					""+.@weapon$[10]+"Scarletto Nail^000000",
-					""+.@weapon$[11]+"Bloody Cross^000000",
-					""+.@weapon$[12]+"Catapult^000000",
-					""+.@weapon$[13]+"Big CrossBow^000000",
-					""+.@weapon$[14]+"Creeper Bow^000000"
-				)) {
-				case 1:
-					mes "[Weird old man]";
-					mes "Have a look.";
-					next;
-					.@break = 1;
-					break;
-				case 2:
-					mes "<<Agent Katar[1]>>";
-					mes "Every 2 Original LUK points gets additional 1 HIT point";
-					mes "Katar / ATK 170 / Weight 120 / Weapon Lv 3 / Required Lv 100 / Socket 1 / for Guillotine Cross";
-					callsub L_Reward, 1290, 50, 100, 10; //Agent_Katar
-					break;
-				case 3:
-					mes "<<Guillotine Katar[1]>>";
-					mes "DEX + 2. FLEE - 30. 50% more damage to Human monsters. Add 30% more damage for Cross Impact skill.";
-					mes "Katar / ATK 200 / Weight 150 / Weapon Lv 4 / Required Lv 140 / Socket 1 / for Guillotine Cross";
-					callsub L_Reward, 1291, 50, 100, 85; //Guillotine_Katar
-					break;
-				case 4:
-					mes "<<Ygnus Stale[1]>>";
-					mes "When doing short distance attack, cast ¹ßÈ­ to the player and to the enemy with a certain chance.";
-					mes "Two-Handed Axe / ATK 250 / Weight 190 / Fire Property / Weapon Lv 4 / Required Lv 95 / Socket 1 / for High Swordman/Merchant Classes";
-					callsub L_Reward, 1392, 50, 100, 35; //Ygnus_Stale
-					break;
-				case 5:
-					mes "<<End Sektura[1]>>";
-					mes "When doing short distance attack, cast Freezing to the player and to the enemy with a certain chance.";
-					mes "Two-Handed Axe / ATK 250 / Weight 190 / Water Property / Weapon Lv 4 / Required Lv 95 / Socket 1 / for High Swordman/Merchant Classes";
-					callsub L_Reward, 1393, 50, 100, 35; //End_Sektura
-					break;
-				case 6:
-					mes "<<Cannon Spear[1]>>";
-					mes "MSP - 100, Increases 10% of Damage impacted with Cannon Spear, Additional ATK power of Cannon Spear equivalent to 3 times Refine Lv.";
-					mes "One-Handed Spear / ATK 180 / Weight 160 / Weapon Lv 4 / Required Lv 100 / Socket 1 / for Royal Guard";
-					callsub L_Reward, 1435, 50, 100, 40; //Cannon_Spear
-					break;
-				case 7:
-					mes "<<Giant Lance[0]>>";
-					mes "ASPD - 10, When it's taken off, the character gets SP - 600. 20 more seconds of Delay time exists before using back the Clashing Spiral. If the original STR points are 120, + ATK 300.";
-					mes "Two-Handed Lance / ATK 20 / Weight 2000 / Weapon Lv 4 / Required Lv 140 / Socket 0 / for Rune Knight";
-					callsub L_Reward, 1490, 300, 300, 400; //Giant_Lance
-					break;
-				case 8:
-					mes "<<Chilly Spell Book[2]>>";
-					mes "MATK + 160, DEX + 1. Increases ATK % of Cold Bolt, Diamond Dust equivalent to 3 times Refine Lv, also SP consumption from those skills increased equivalent to 5 times Refine Lv. Undestroyable.";
-					mes "Book / ATK 100 / Weight 100 / Water Property / Weapon Lv 4 / Required Lv 100 / Socket 2 / for Sorcerer";
-					callsub L_Reward, 1584, 50, 100, 40; //Chilly_Spell_Book
-					break;
-				case 9:
-					mes "<<Recovery Light[1]>>";
-					mes "MATK + 160. Depending on its Refine Lv, Heal Ability and SP consumption for the skill increased. Indestructible.";
-					mes "One-Handed Staff / ATK 30 / Weight 40 / Saint Property / Weapon Lv 4 / Required Lv 110 / Socket 1 / for Archbishop.";
-					callsub L_Reward, 1659, 50, 100, 35; //Recovery_Light
-					break;
-				case 10:
-					mes "<<Aztoe Nail[0]>>";
-					mes "MATK + 80. For Physical Melee Attack, cast Freezing to the target with a certain chance. The chance is affected by Refine Lv.";
-					mes "Dagger / ATK 160 / Weight 50 / Wind Property / Weapon Lv 4 / Required Lv 110 / Socket 0 / for High Swordman/Merchant/Theif Classes";
-					callsub L_Reward, 13069, 50, 100, 35; //Aztoe_Nail
-					break;
-				case 11:
-					mes "<<Scarletto Nail[0]>>";
-					mes "MATK + 80. For Physical Melee Attack, cast Stone curse to the target with a certain chance. The chance is affected by Refine Lv.";
-					mes "Dagger / ATK 160 / Weight 50 / Fire Property / Weapon Lv 4 / Required Lv 110 / Socket 0 / for High Swordman/Merchant/Theif Classes";
-					callsub L_Reward, 13070, 50, 100, 35; //Scarletto_Nail
-					break;
-				case 12:
-					mes "<<Bloody Cross[0]>>";
-					mes "For Physical Melee Attack, autocast 'Hell Inferno'(Lv 1) with a certain chance. The chance is affected by Refine Lv.";
-					mes "Mace / ATK 170 / Weight 150 / Darkness Property / Weapon Lv 4 / Required Lv 100 / Socket 0 / for High Acolyte Classes";
-					callsub L_Reward, 16017, 50, 100, 40; //Bloody_Cross
-					break;
-				case 13:
-					mes "<<Catapult[2]>>";
-					mes "Increases ATK % of 'Triangle Shot' equivalent to 2 times Refine Lv, Also SP consumption from the skill increased.";
-					mes "Bow / ATK 150 / Weight 110 / Weapon Lv 4 / Required Lv 100 / Socket 2 / for Shadow Chaser";
-					callsub L_Reward, 18109, 50, 100, 35; //Catapult
-					break;
-				case 14:
-					mes "<<Big CrossBow[2]>>";
-					mes "Increases ATK % of 'Arrow Storm' equivalent to 5 times Refine Lv. Also SP consumption from the skill increased, If the Original AGI points are 120, ASPD + 1.";
-					mes "Bow / ATK 160 / Weight 90 / Weapon Lv 4 / Required Lv 110 / Socket 2 / for Ranger";
-					callsub L_Reward, 18110, 50, 100, 35; //Big_CrossBow
-					break;
-				case 15:
-					mes "<<Creeper Bow[2]>>";
-					mes "DEX + 1, For Physical Attack, auto-cast 'Fiber Lock'(Lv 1) with a certain chance.";
-					mes "Bow / ATK 150 / Weight 150 / Weapon Lv 3 / Required Lv 120 / Socket 2 / for 3rd Archer Classes";
-					callsub L_Reward, 18111, 50, 100, 35; //Creeper_Bow
-					break;
-				}
-				if (.@break) {
-					.@break = 0;
-					break;
-				}
-			}
-		}
-	}
-	close;
-
-L_Reward:
-	next;
-	mes ""+getarg(1)+" Will of Warrior, "+getarg(2)+" Thirst for Blood, "+getarg(3)+" Chill of the Dead are needed for the exchange.";
-	next;
-	if (countitem(6469) >= getarg(1) && countitem(6470) >= getarg(2) && countitem(6471) >= getarg(3)) {
-		if (select("Don't exchange", "Exchange") == 1) {
-			mes "[Weird old man]";
-			mes "Okay..";
-			close;
-		}
-		emotion e_swt2, "Weird old man#Bio4Reward";
-		progressbar "FF00FF", 2;
-		delitem 6469, getarg(1); //Will_Of_Warrior
-		delitem 6470, getarg(2); //Blood_Thirst
-		delitem 6471, getarg(3); //Goast_Chill
-		getitem getarg(0), 1;
-		mes "[Weird old man]";
-		mes "There you go. Visit me sometimes and we could talk.";
-		close;
-	}
-	return;
-}
-
-// Sorcerer (Rewards)
-//============================================================
-lhz_cube,233,24,4	script	Sorcerer#Bio4Reward	4_M_UMDANCEKID,{
-	if ((MaxWeight - Weight) < 1200 || !checkweight(1201, 1)) {
-		mes "^FF0000 Check up your inventory. You got too many items to carry out the quest. ^000000";
-		close;
-	}
-	disable_items;
-	mes "[Pudding]";
-	mes "... .... ...";
-	next;
-	switch(select("Umba umba humbaa", "What are you doing here?", "Which are the equipments found so far?", "Here you are, Sir.")) {
-	case 1:
-		emotion e_an;
-		mes "[Pudding]";
-		mes "Hey, excuse me, but I'm not from Umbala! You are so rude.";
-		close;
-	case 2:
-		mes "[Pudding]";
-		mes "As you can see, I'm a training Sorcerer, and my name is Pudding.";
-		next;
-		select("....?");
-		emotion e_an;
-		mes "[Pudding]";
-		mes "... What's that face? I'm starting to feel unpleasant..";
-		next;
-		emotion e_ok;
-		mes "[Pudding]";
-		mes "Couple of days ago, while I was undergoing discipline, I felt a strange, bizzare tinge. So I followed that and it brought me here.";
-		next;
-		select("I see.");
-		mes "[Pudding]";
-		mes "OK, let me continue. I am so bothered if you disturb me while I'm talking.";
-		next;
-		mes "[Pudding]";
-		mes "And I entered to the laboratory here in order to investigate, and oh gosh! I found those monsters which were like doppelgangers from 'Geffen Dungeon'. It was full of them.";
-		next;
-		mes "[Pudding]";
-		mes "From those monsters, I could find rare items like '^F2766EWill of Warrior^000000' '^952420Thirst for Blood^000000' '^88C6F7Chill of the Dead^000000' which you cannot find from any other place.";
-		next;
-		emotion e_what, "Sorcerer#Bio4Reward";
-		mes "[Pudding]";
-		mes "And after many hours of research on my own, I finally figured out a way to use those items. Do you wanna know?";
-		next;
-		switch(select("Oh....pardon?!", "Of course, I really wanna know.")) {
-		case 1:
-			emotion e_omg, 1;
-			emotion e_an, "Sorcerer#Bio4Reward";
-			mes "[Pudding]";
-			mes "Oh my! You fell asleep after you asked me something? Well, anyway I feel lazy to explain again so I will just continue.";
-			next;
-			break;
-		case 2:
-			emotion e_heh, "Sorcerer#Bio4Reward";
-			mes "[Pudding]";
-			mes "Good, I am content that you are listening to my story carefully. Then I will keep explaining.";
-			next;
-			break;
-		}
-		mes "[Pudding]";
-		mes "Those '^F2766EWill of Warrior^000000' and '^952420Thirst for Blood^000000'..... are aggresive but warm materials.";
-		next;
-		mes "[Pudding]";
-		mes "So '^F2766EWill of Warrior^000000' can dwell a special power to the 4th slot of an equipment,";
-		next;
-		mes "[Pudding]";
-		mes "and '^952420Thirst for Blood^000000' can dwell a special power to the 3rd slot.";
-		next;
-		mes "[Pudding]";
-		mes "Whereas!!!";
-		mes "'^88C6F7Chill of the Dead^000000' is a cold type material.";
-		mes "which allows to return the power from '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000' so it let the equipment to be 'ZERO'.";
-		next;
-		mes "[Pudding]";
-		mes "What do you say? Doesn't it sound interesting? But, there's a problem...";
-		next;
-		mes "[Pudding]";
-		mes "Since those materials can only be found from the monsters in the Lab., the special power also can be dwelt into certain equipments which can be obtained from the Lab.";
-		next;
-		select("So what's the conclusion?");
-		emotion e_what, 1;
-		emotion e_an;
-		mes "[Pudding]";
-		mes "Gee.. I told you not to cut while I talk, didn't I? Well, I will answer that becuase that's important.";
-		next;
-		mes "[Pudding]";
-		mes "If you bring me 10 '^F2766EWill of Warrior^000000' or 10 '^952420Thirst for Blood^000000', I will dwell some power to certain equipments that you can find in the Lab..";
-		next;
-		mes "[Pudding]";
-		mes "And if you are not satisfied with the power you got, bring me 10 '^88C6F7Chill of the Dead^000000', and I will take off that power.";
-		next;
-		mes "[Pudding]";
-		mes "WHat do you say? Having both options.....quite nice, huh?";
-		next;
-		mes "[Pudding]";
-		mes "If you obtain '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000', and obtain also equipment which is capable to accept their power, bring them to me. I will be waiting.";
-		close;
-	case 3:
-		mes "[Pudding]";
-		mes "Hm.... Equipment which are discovered so far are....";
-		next;
-		mes "- checking -";
-		mes "Pudding takes some paper out from a pocket.";
-		next;
-		mes "[Pudding]";
-		mes "Let me see.. the equipments discovered until now are....";
-		mes "6 Armors, 14 Weapons.";
-		next;
-		while(1) {
-			switch(select("Ok, I don't have to know more.", "6 Armors", "14 Weapons")) {
-			case 1:
-				mes "[Pudding]";
-				mes "If you obtain '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000', and obtain also equipment which is capable to accept their power, bring them to me. I will be waiting.";
-				close;
-			case 2:
-				mes "< Armor List >";
-				mes "Giant Shield[1]";
-				mes "Acient Book of Geffenia-Water[1]";
-				mes "Bible of Promise(2nd Vol.)[1]";
-				mes "Salvage Cape[0]";
-				mes "Assassin's Handcuffs[1]";
-				mes "Green Operating Gown[1]";
-				mes "Ancient Gold Decoration[1]";
-				next;
-				mes "[Pudding]";
-				mes "So far these are the Armors discovered. Do you wanna see other things?";
-				next;
-				break;
-			case 3:
-				mes "< Weapon List >";
-				mes "Agent Katar[1]";
-				mes "Guillotine Katar[1]";
-				mes "Ygnus Stale[1]";
-				mes "End Sektura[1]";
-				mes "Cannon Spear[1]";
-				mes "Giant Lance[0]";
-				mes "Chilly Spell Book[2]";
-				mes "Recovery Light[1]";
-				mes "Aztoe Nail[0]";
-				mes "Scarletto Nail[0]";
-				mes "Bloody Cross[0]";
-				mes "Catapult[2]";
-				mes "Big CrossBow[2]";
-				mes "Creeper Bow[2]";
-				next;
-				mes "[Pudding]";
-				mes "So far these are the Weapons discovered. Do you wanna see other things?";
-				next;
-				break;
-			}
-		}
-		close;
-	case 4:
-		emotion e_flash;
-		mes "[Pudding]";
-		mes "Ohhhhh Have you brought them?";
-		next;
-		break;
-	}
-	mes "[Pudding]";
-	mes "OKAY! In which equipment you want to dwell the power?";
-	next;
-	setarray .@parts[0], EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_TOP;
-	for(.@i = 0; .@i < 7; .@i++) {
-		if (!getequipisequiped(.@parts[.@i])) {
-			switch(.@i) {
-				case 0:
-					.@equipped$[.@i] = "^999999Armor-[Not equipped]^000000";
-					break;
-				case 1:
-					.@equipped$[.@i] = "^999999Left Hand-[Not equipped]^000000";
-					break;
-				case 2:
-					.@equipped$[.@i] = "^999999Right Hand-[Not equipped]^000000";
-					break;
-				case 3:
-					.@equipped$[.@i] = "^999999Garment-[Not equipped]^000000";
-					break;
-				case 4:
-					.@equipped$[.@i] = "^999999Accessory-[Not equipped]^000000";
-					break;
-				case 5:
-					.@equipped$[.@i] = "^999999Accessory-[Not equipped]^000000";
-					break;
-				case 6:
-					.@equipped$[.@i] = "^999999Helm-[Not equipped]^000000";
-					break;
-			}
-		} else {
-			.@equipped$[.@i] = getequipname(.@parts[.@i]);
-		}
-	}
-	switch(select("I changed my mind.", .@equipped$[0], .@equipped$[1], .@equipped$[2], .@equipped$[3], .@equipped$[4], 
-	.@equipped$[5], .@equipped$[6])) {
-	case 1:
-		mes "[Pudding]";
-		mes "Well, I was looking forward to doing it, but I cannot help then.";
-		close;
-	case 2:
-		if (!getequipisequiped(EQI_ARMOR)) {
-			mes "[Pudding]";
-			mes "Hey..Where is the armor?";
-			close;
-		}
-		.@part = EQI_ARMOR;
-		break;
-	case 3:
-		if (!getequipisequiped(EQI_HAND_L)) {
-			mes "[Pudding]";
-			mes "Well.. You are not equipping anything on the left hand.";
-			close;
-		}
-		.@part = EQI_HAND_L;
-		break;
-	case 4:
-		if (!getequipisequiped(EQI_HAND_R)) {
-			mes "[Pudding]";
-			mes "Well.. You are not equipping anything on the right hand.";
-			close;
-		}
-		.@part = EQI_HAND_R;
-		break;
-	case 5:
-		if (!getequipisequiped(EQI_GARMENT)) {
-			mes "[Pudding]";
-			mes "Um.... Where's your robe?";
-			close;
-		}
-		.@part = EQI_GARMENT;
-		break;
-	case 6:
-		if (!getequipisequiped(EQI_ACC_L)) {
-			mes "[Pudding]";
-			mes ".....Where's the accessory?";
-			close;
-		}
-		.@part = EQI_ACC_L;
-		break;
-	case 7:
-		if (!getequipisequiped(EQI_ACC_R)) {
-			mes "[Pudding]";
-			mes ".....Where's the accessory?";
-			close;
-		}
-		.@part = EQI_ACC_R;
-		break;
-	case 8:
-		if (!getequipisequiped(EQI_HEAD_TOP)) {
-			mes "[Pudding]";
-			mes "Hey.. Are you not wearing any Helm?";
-			close;
-		}
-		.@part = EQI_HEAD_TOP;
-		break;
-	}
-	.@refine_count = getequiprefinerycnt(.@part);
-	.@equip_item = getequipid(.@part);
-	.@lhz_max_num = 4000;
-	if (.@equip_item == 13069 || .@equip_item == 1291 || .@equip_item == 1392 || 
-	    .@equip_item == 1393 || .@equip_item == 1435 || .@equip_item == 1490 || 
-	    .@equip_item == 13069 || .@equip_item == 13070 || .@equip_item == 16017) {
-		.@type = 1;
-		if (.@equip_item == 1490)
-			.@lhz_max_num = 4200;
-	} else if (.@equip_item == 18109 || .@equip_item == 18110 || .@equip_item == 18111) {
-		.@type = 2;
-	} else if (.@equip_item == 1584 || .@equip_item == 1659) {
-		.@type = 3;
-	} else if (.@equip_item == 2160 || .@equip_item == 2161 || .@equip_item == 2162 ||
-	           .@equip_item == 2582 || .@equip_item == 2892 || .@equip_item == 15044 || 
-	           .@equip_item == 18570) {
-		.@type = 4;
-		if (.@equip_item == 2582 || .@equip_item == 18570)
-			.@lhz_max_num = 4200;
-	} else {
-		mes "[Pudding]";
-		mes "Before! I need to check if this equipment can accept the power.";
-		next;
-		specialeffect2 EF_SPHERE;
-		progressbar "ffff00", 2;
-		specialeffect2 EF_SUI_EXPLOSION;
-		emotion e_sob;
-		mes "[Pudding]";
-		mes "Hm.... This equipment cannot accept the power of '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000'.";
-		close;
-	}
-	emotion e_ho;
-	mes "[Pudding]";
-	mes "OHHH.. This equipment could accept the power of '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000'.";
-	next;
-	if (countitem(6469) >= 10)
-		.@menu_in$[1] = "Dwell the power of '^F2766EWill of Warrior^000000'";
-	else
-		.@menu_in$[1] = "Not enough ^999999'Will of Warrior'^000000";
-
-	if (countitem(6470) >= 10)
-		.@menu_in$[2] = "Dwell the power of '^952420Thirst for Blood^000000'";
-	else
-		.@menu_in$[2] = "Not enough ^999999'Thirst for Blood'^000000";
-
-	if (countitem(6471) >= 10)
-		.@menu_in$[3] = "Consume the '^88C6F7Chill of the Dead^000000'";
-	else
-		.@menu_in$[3] = "Not enough ^999999'Chill of the Dead'^000000";
-	mes "[Pudding]";
-	mes "OK! Which power do you want to dwell in your equipment?";
-	next;
-	switch(select("I say no! I don't need that!!", .@menu_in$[1], .@menu_in$[2], .@menu_in$[3])) {
-	case 1:
-		mes "[Pudding]";
-		mes "Ohhh.. I was looking forward to doing it, but it's all up to you......";
-		close;
-	case 2:
-		if (countitem(6469) < 10) {
-			mes "[Pudding]";
-			mes "Not enough '^F2766EWill of Warrior^000000', You need to bring 10 '^F2766EWill of Warrior^000000'";
-			close;
-		}
-		else if (getequipcardid(.@part, 3) > 0) {
-			mes "[Pudding]";
-			mes "This equipment already got the power of '^F2766EWill of Warrior^000000'.";
-			close;
-		} else {
-			.@socket_type = 4;
-		}
-		break;
-	case 3:
-		if (countitem(6470) < 10) {
-			mes "[Pudding]";
-			mes "Not enough '^952420Thirst for Blood^000000', You need to bring 10 '^952420Thirst for Blood^000000'";
-			close;
-		}
-		else if (getequipcardid(.@part, 2) > 0) {
-			mes "[Pudding]";
-			mes "This equipment already got the power of '^952420Thirst for Blood^000000'.";
-			close;
-		} else {
-			.@socket_type = 3;
-		}
-		break;
-	case 4:
-		// Enchant Removal
-		if (countitem(6471) < 10) {
-			.@menu_clear$[1] = "^999999Not enough 'Chill of the Dead'^000000";
-			.@menu_clear$[2] = "^999999Not enough 'Chill of the Dead'^000000";
-			.@4thzptsodyd = 1;
-			.@3thzptsodyd = 1;
-		} else {
-			if (getequipcardid(.@part, 3) > 0) {
-				.@menu_clear$[1] = "Remove the power of '^F2766EWill of Warrior^000000'";
-			} else {
-				.@menu_clear$[1] = "^999999There's no power to remove^000000";
-				.@4thzptsodyd = 1;
-			}
-			if (getequipcardid(.@part, 2) > 0) {
-				.@menu_clear$[2] = "Remove the power of '^952420Thirst for Blood^000000'";
-			} else {
-				.@menu_clear$[2] = "^999999There's no power to remove^000000";
-				.@3thzptsodyd = 1;
-			}
-		}
-		mes "[Pudding]";
-		mes "Alright, which power do you want to remove?";
-		next;
-		.@menu = select("No, I don't wannna remove any.", .@menu_clear$[1], .@menu_clear$[2]);
-		switch(.@menu){
-		case 1:
-			mes "[Pudding]";
-			mes "Really? Ok. I got it..";
-			close;
-		case 2:
-		case 3:
-			if (countitem(6471) < 10) {
-				mes "[Pudding]";
-				mes "Not enough '^88C6F7Chill of the Dead^000000', You need to bring 10 '^88C6F7Chill of the Dead^000000'";
-				close;
-			}
-			if ( (.@menu==3 && .@3thzptsodyd == 1) || (.@menu==2 && .@4thzptsodyd == 1) ) {
-				mes "[Pudding]";
-				mes "This equipment didn't get any special power.";
-				close;
-			}
-			setarray .@equip_card[0], getequipcardid(.@part,0), getequipcardid(.@part,1), getequipcardid(.@part,2), getequipcardid(.@part,3);
-			if (.@menu == 2)
-				.@equip_card[3] = 0;
-			else
-				.@equip_card[2] = 0;
-			.@equip_item = getequipid(.@part);
-			specialeffect EF_BEGINSPELL2, AREA, "Sorcerer#Bio4Reward";
-			progressbar "ffff00", 2;
-			specialeffect2 EF_FROSTWEAPON;
-			delitem 6471, 10; //Goast_Chill
-			delequip .@part;
-			getitem2 .@equip_item, 1, 1, .@refine_count, 0, .@equip_card[0], .@equip_card[1], .@equip_card[2], .@equip_card[3];
-			mes "[Pudding]";
-			if (.@menu == 3)
-				mes "The power of '^952420Thirst for Blood^000000' has been perfectly removed.";
-			else
-				mes "The power of '^F2766EWill of Warrior^000000' has been perfectly removed.";
-			close;
-		}
-	}
-	mes "[Pudding]";
-	mes "Before I dwell the power, let me explain to you cautions.";
-	next;
-	mes "[Pudding]";
-	mes "While dwelling the power of '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000', the equipment would be not capable to accept that and will be destryed..";
-	next;
-	mes "[Pudding]";
-	mes "^9D2628If the equipment is destroyed, you will also lose the cards you inserted in it, and the refine Lv will be removed too.^000000";
-	next;
-	mes "[Pudding]";
-	mes "Alright. will you really wish to dwell the power into the equipment?";
-	next;
-	if (select("Wait, I will think again.", "Sure, carry on.") == 1) {
-		mes "[Pudding]";
-		mes "OK. I will be hoping to see you again.";
-		close;
-	}
-	mes "[Pudding]";
-	mes "I wish you made a correct decision...";
-	next;
-	if (.@socket_type >= 3) {
-		switch(.@type){
-			case 1:	// Short Distance
-				.@r = rand(1, .@lhz_max_num);
-				if      (.@r < 401)  .@enchant = 4700; //Strength1
-				else if (.@r < 441)  .@enchant = 4701; //Strength2
-				else if (.@r < 445)  .@enchant = 4702; //Strength3
-				else if (.@r < 845)  .@enchant = 4730; //Agility1
-				else if (.@r < 885)  .@enchant = 4731; //Agility2
-				else if (.@r < 889)  .@enchant = 4732; //Agility3
-				else if (.@r < 1289) .@enchant = 4740; //Vitality1
-				else if (.@r < 1329) .@enchant = 4741; //Vitality2
-				else if (.@r < 1333) .@enchant = 4742; //Vitality3
-				else if (.@r < 1523) .@enchant = 4710; //Inteligence1
-				else if (.@r < 1542) .@enchant = 4711; //Inteligence2
-				else if (.@r < 1544) .@enchant = 4712; //Inteligence3
-				else if (.@r < 1844) .@enchant = 4720; //Dexterity1
-				else if (.@r < 1874) .@enchant = 4721; //Dexterity2
-				else if (.@r < 1877) .@enchant = 4722; //Dexterity3
-				else if (.@r < 2067) .@enchant = 4750; //Luck1
-				else if (.@r < 2086) .@enchant = 4751; //Luck2
-				else if (.@r < 2088) .@enchant = 4752; //Luck3
-				else if (.@r < 2491) .@enchant = 0;
-				else if (.@r < 2891) .@enchant = 4811; //Fighting_Spirit1
-				else if (.@r < 2931) .@enchant = 4810; //Fighting_Spirit2
-				else if (.@r < 2935) .@enchant = 4809; //Fighting_Spirit3
-				else if (.@r < 3125) .@enchant = 4815; //Spell1
-				else if (.@r < 3144) .@enchant = 4814; //Spell2
-				else if (.@r < 3146) .@enchant = 4813; //Spell3
-				else if (.@r < 3148) .@enchant = 4807; //Atk_Speed1
-				else if (.@r < 3348) .@enchant = 4818; //Sharp1
-				else if (.@r < 3368) .@enchant = 4817; //Sharp2
-				else if (.@r < 3370) .@enchant = 4816; //Sharp3
-				else if (.@r < 3560) .@enchant = 4832; //Expert_Archer1
-				else if (.@r < 3579) .@enchant = 4833; //Expert_Archer2
-				else if (.@r < 3581) .@enchant = 4834; //Expert_Archer3
-				else                 .@enchant = 0;
-				break;
-			case 2:	// Long Distance
-				.@r = rand(1, .@lhz_max_num);
-				if      (.@r < 191)  .@enchant = 4700; //Strength1
-				else if (.@r < 210)  .@enchant = 4701; //Strength2
-				else if (.@r < 212)  .@enchant = 4702; //Strength3
-				else if (.@r < 612)  .@enchant = 4730; //Agility1
-				else if (.@r < 652)  .@enchant = 4731; //Agility2
-				else if (.@r < 656)  .@enchant = 4732; //Agility3
-				else if (.@r < 846)  .@enchant = 4740; //Vitality1
-				else if (.@r < 865)  .@enchant = 4741; //Vitality2
-				else if (.@r < 867)  .@enchant = 4742; //Vitality3
-				else if (.@r < 1167) .@enchant = 4710; //Inteligence1
-				else if (.@r < 1197) .@enchant = 4711; //Inteligence2
-				else if (.@r < 1200) .@enchant = 4712; //Inteligence3
-				else if (.@r < 1600) .@enchant = 4720; //Dexterity1
-				else if (.@r < 1640) .@enchant = 4721; //Dexterity2
-				else if (.@r < 1644) .@enchant = 4722; //Dexterity3
-				else if (.@r < 1834) .@enchant = 4750; //Luck1
-				else if (.@r < 1853) .@enchant = 4751; //Luck2
-				else if (.@r < 1855) .@enchant = 4752; //Luck3
-				else if (.@r < 2258) .@enchant = 0;
-				else if (.@r < 2448) .@enchant = 4811; //Fighting_Spirit1
-				else if (.@r < 2467) .@enchant = 4810; //Fighting_Spirit2
-				else if (.@r < 2469) .@enchant = 4809; //Fighting_Spirit3
-				else if (.@r < 2669) .@enchant = 4815; //Spell1
-				else if (.@r < 2689) .@enchant = 4814; //Spell2
-				else if (.@r < 2691) .@enchant = 4813; //Spell3
-				else if (.@r < 2693) .@enchant = 4807; //Atk_Speed1
-				else if (.@r < 3093) .@enchant = 4818; //Sharp1
-				else if (.@r < 3133) .@enchant = 4817; //Sharp2
-				else if (.@r < 3137) .@enchant = 4816; //Sharp3
-				else if (.@r < 3537) .@enchant = 4832; //Expert_Archer1
-				else if (.@r < 3577) .@enchant = 4833; //Expert_Archer2
-				else if (.@r < 3581) .@enchant = 4834; //Expert_Archer3
-				else                 .@enchant = 0;
-				break;
-			case 3:
-				.@r = rand(1, .@lhz_max_num);
-				if      (.@r < 301)  .@enchant = 4700; //Strength1
-				else if (.@r < 331)  .@enchant = 4701; //Strength2
-				else if (.@r < 334)  .@enchant = 4702; //Strength3
-				else if (.@r < 534)  .@enchant = 4730; //Agility1
-				else if (.@r < 554)  .@enchant = 4731; //Agility2
-				else if (.@r < 556)  .@enchant = 4732; //Agility3
-				else if (.@r < 956)  .@enchant = 4740; //Vitality1
-				else if (.@r < 996)  .@enchant = 4741; //Vitality2
-				else if (.@r < 1000) .@enchant = 4742; //Vitality3
-				else if (.@r < 1400) .@enchant = 4710; //Inteligence1
-				else if (.@r < 1440) .@enchant = 4711; //Inteligence2
-				else if (.@r < 1444) .@enchant = 4712; //Inteligence3
-				else if (.@r < 1844) .@enchant = 4720; //Dexterity1
-				else if (.@r < 1884) .@enchant = 4721; //Dexterity2
-				else if (.@r < 1888) .@enchant = 4722; //Dexterity3
-				else if (.@r < 2078) .@enchant = 4750; //Luck1
-				else if (.@r < 2097) .@enchant = 4751; //Luck2
-				else if (.@r < 2099) .@enchant = 4752; //Luck3
-				else if (.@r < 2502) .@enchant = 0;
-				else if (.@r < 2692) .@enchant = 4811; //Fighting_Spirit1
-				else if (.@r < 2711) .@enchant = 4810; //Fighting_Spirit2
-				else if (.@r < 2713) .@enchant = 4809; //Fighting_Spirit3
-				else if (.@r < 3113) .@enchant = 4815; //Spell1
-				else if (.@r < 3153) .@enchant = 4814; //Spell2
-				else if (.@r < 3157) .@enchant = 4813; //Spell3
-				else if (.@r < 3159) .@enchant = 4807; //Atk_Speed1
-				else if (.@r < 3349) .@enchant = 4818; //Sharp1
-				else if (.@r < 3368) .@enchant = 4817; //Sharp2
-				else if (.@r < 3370) .@enchant = 4816; //Sharp3
-				else if (.@r < 3560) .@enchant = 4832; //Expert_Archer1
-				else if (.@r < 3579) .@enchant = 4833; //Expert_Archer2
-				else if (.@r < 3581) .@enchant = 4834; //Expert_Archer3
-				else                 .@enchant = 0;
-				break;
-			case 4:	// Armor
-				.@r = rand(1, .@lhz_max_num);
-				if      (.@r < 301)  .@enchant = 4700; //Strength1
-				else if (.@r < 331)  .@enchant = 4701; //Strength2
-				else if (.@r < 334)  .@enchant = 4702; //Strength3
-				else if (.@r < 634)  .@enchant = 4730; //Agility1
-				else if (.@r < 664)  .@enchant = 4731; //Agility2
-				else if (.@r < 667)  .@enchant = 4732; //Agility3
-				else if (.@r < 967)  .@enchant = 4740; //Vitality1
-				else if (.@r < 997)  .@enchant = 4741; //Vitality2
-				else if (.@r < 1000) .@enchant = 4742; //Vitality3
-				else if (.@r < 1300) .@enchant = 4710; //Inteligence1
-				else if (.@r < 1330) .@enchant = 4711; //Inteligence2
-				else if (.@r < 1333) .@enchant = 4712; //Inteligence3
-				else if (.@r < 1633) .@enchant = 4720; //Dexterity1
-				else if (.@r < 1663) .@enchant = 4721; //Dexterity2
-				else if (.@r < 1666) .@enchant = 4722; //Dexterity3
-				else if (.@r < 1966) .@enchant = 4750; //Luck1
-				else if (.@r < 1996) .@enchant = 4751; //Luck2
-				else if (.@r < 1999) .@enchant = 4752; //Luck3
-				else if (.@r < 2399) .@enchant = 0;
-				else if (.@r < 2549) .@enchant = 4786; //Mdef2
-				else if (.@r < 2599) .@enchant = 4787; //Mdef4
-				else if (.@r < 2609) .@enchant = 4788; //Mdef6
-				else if (.@r < 2614) .@enchant = 4789; //Mdef8
-				else if (.@r < 2616) .@enchant = 4790; //Mdef10
-				else if (.@r < 2766) .@enchant = 4791; //Def3
-				else if (.@r < 2866) .@enchant = 4792; //Def6
-				else if (.@r < 2876) .@enchant = 4793; //Def9
-				else if (.@r < 2878) .@enchant = 4794; //Def12
-				else if (.@r < 3278) .@enchant = 0;
-				else if (.@r < 3428) .@enchant = 4859; //Evasion1
-				else if (.@r < 3478) .@enchant = 4860; //Evasion3
-				else if (.@r < 3488) .@enchant = 4762; //Evasion6
-				else if (.@r < 3498) .@enchant = 4800; //SP50
-				else if (.@r < 3734) .@enchant = 4795; //HP100
-				else if (.@r < 3834) .@enchant = 4796; //HP200
-				else if (.@r < 3884) .@enchant = 4797; //HP300
-				else                 .@enchant = 0;
-			break;
-		}
-		setarray .@equip_card[0], getequipcardid(.@part,0),getequipcardid(.@part,1),getequipcardid(.@part,2),getequipcardid(.@part,3);
-		.@equip_card[(.@socket_type-1)] = .@enchant;
-		.@equip_item = getequipid(.@part);
-		specialeffect EF_BEGINSPELL3, AREA, "Sorcerer#Bio4Reward";
-		progressbar "ffff00", 2;
-		if (.@socket_type == 3)
-			delitem 6470, 10; //Blood_Thirst
-		else
-			delitem 6469, 10; //Will_Of_Warrior
-		delequip .@part;
-		
-		if (.@enchant == 0){
-			specialeffect2 EF_SUI_EXPLOSION;
-			emotion e_otl;
-			mes "[Pudding]";
-			mes "...Well....the equipment could not accept the power of "+((.@socket_type==3)?"'^952420Thirst for Blood^000000'":"'^F2766EWill of Warrior^000000'")+" and it got destroyed.";
-			close;
-		} else {
-			specialeffect2 EF_FIREHIT;
-			getitem2 .@equip_item, 1, 1, .@refine_count, 0, .@equip_card[0], .@equip_card[1], .@equip_card[2], .@equip_card[3];
-			emotion e_ho;
-			mes "[Pudding]";
-			mes "Fortunately the power of "+((.@socket_type==3)?"'^952420Thirst for Blood^000000'":"'^F2766EWill of Warrior^000000'")+" has been dwelt well in your equipment...";
-			close;
-		}
-	}
-	end;
-}
-
 // Warp portal to the 4th Fl.
 //============================================================
 lhz_dun03,239,78,1	script	lhz_dun03_lhz_dun04	WARPNPC,1,1,{

+ 985 - 0
npc/re/merchants/bio4_reward.txt

@@ -0,0 +1,985 @@
+//===== rAthena Script =======================================
+//= Lighthalzen rewards NPCs
+//===== Description: =========================================
+//= Enchant and reward NPCs from Bio instance/dungeon item drop.
+//===== Changelogs: ==========================================
+//= 1.0 Moved the NPCs from WolfchevLaboratory.txt. [Capuche]
+//============================================================
+
+// Weird Old Man (Rewards)
+//============================================================
+lighthalzen,342,291,4	script	Weird old man#Bio4Reward	4_M_EINOLD,{
+	if ((MaxWeight - Weight) < 2800 || !checkweight(1201, 1)) {
+		mes "^FF0000 Check up your inventory. You got too many items to carry out the quest. ^000000";
+		close;
+	}
+	mes "[Weird old man]";
+	mes "Phew, those young people nowadays, are so rude and have no manners.";
+	next;
+	if (select("Ignore him", "Talk with him") == 1) {
+		mes "[Weird old man]";
+		mes "You, Very bad young man!";
+		close;
+	}
+	mes "["+ strcharinfo(0) +"]";
+	mes "Sir, Are you alright??";
+	next;
+	mes "[Weird old man]";
+	mes "....?? You are not like other young people. You have good manners! You know what happened to me..?";
+	next;
+	switch(rand(1,2)) {
+	case 1:
+		mes "[Weird old man]";
+		mes "I was on the way to visit my son who lives in Rune Midgarts. It's really far away, so I took the airplane, and..";
+		next;
+		mes "[Weird old man]";
+		mes "those young people...so noisy.... I was standing but non of them offered me a seat..and they were just talking in loud voices which bothered everyone.";
+		next;
+		mes "[Weird old man]";
+		mes "I could lecture them if I were 10 years younger than now..";
+		next;
+		mes "[Weird old man]";
+		mes "Pffff.. Never like the time passing....";
+		next;
+		mes "[Weird old man]";
+		mes "So, you... what would you do??";
+		next;
+		mes "[Weird old man]";
+		mes "In an open, public place, you are supposed to stay quiet to the destination and offer your seat to the elderly and the infirm.";
+		next;
+		break;
+	case 2:
+		mes "[Weird old man]";
+		mes "I was on the way to visit my son who lives in Rune Midgarts. It's really far away, so I took the airplane, and..";
+		next;
+		mes "[Weird old man]";
+		mes "those young people...so noisy.... I was standing but non of them offered me a seat..and they were just talking in loud voices which bothered everyone.";
+		next;
+		mes "[Weird old man]";
+		mes "I could lecture them if I were 10 years younger than now..";
+		next;
+		mes "[Weird old man]";
+		mes "Pffff.. Never like the time passing....";
+		next;
+		mes "[Weird old man]";
+		mes "So, you... what would you do??";
+		next;
+		mes "[Weird old man]";
+		mes "In an open, public place, you are supposed to stay quiet to the destination and offer your seat to the elderly and the infirm. Right?";
+		next;
+		mes "[Weird old man]";
+		mes "Isn't that right?!";
+		next;
+		switch(rand(1,2)) {
+		case 1:
+			mes "[Weird old man]";
+			mes "Oh, and then! you know what...?";
+			next;
+			mes "[Weird old man]";
+			mes "Once I was walking in the town, and some boy were spitting on the street, and were bothering girls who were passing by...tut tut!";
+			next;
+			mes "[Weird old man]";
+			mes "The world is going to the dogs.. How will it be?? It was even a day time when they were doing it..tut tut.";
+			next;
+			switch(rand(1,2)) {
+			case 1:
+				mes "[Weird old man]";
+				mes "Oh, and then! you know what...?";
+				next;
+				break;
+			case 2:
+				mes "[Weird old man]";
+				mes "Oh, and then! you know what...?";
+				next;
+				mes "[Weird old man]";
+				mes "Lately young people are not so patient!!!!";
+				next;
+				mes "[Weird old man]";
+				mes "That often, they say they will quit.. they say they can't more. How will they live all the lift with that kind of mentality..tut tut.";
+				next;
+				mes "[Weird old man]";
+				mes "It's not easy to find a job, it is very difficult to be hired. But then they even cannot stand a week there, and leave the work already.";
+				next;
+				mes "[Weird old man]";
+				mes "How impatient and irresponsible!!";
+				next;
+				mes "[Weird old man]";
+				mes "Oh, and then! you know what...?";
+				next;
+				break;
+			}
+		case 2:
+			mes "[Weird old man]";
+			mes "Oh, and then! you know what...?";
+			next;
+			break;
+		}
+	}
+	mes "^E7A43DThe old man talked over and over again.^000000";
+	next;
+	mes "[Weird old man]";
+	mes "Hm......You are not like common young people, you seem pretty patient too. I like that!!!";
+	next;
+	mes "[Weird old man]";
+	mes "Now I am just an old, weak man but when I was young, I was a famous merchant in the town.";
+	next;
+	mes "[Weird old man]";
+	mes "It's been a while since I stopped the business,";
+	mes "but a former client of mine contacted me and asked me";
+	next;
+	mes "[Weird old man]";
+	mes "If I could get him some unknown objects named 'Will of Warrior', 'Thirst for Blood', 'Chill of the Dead'.";
+	next;
+	mes "[Weird old man]";
+	mes "I liked your politeness which is not like most of young people, so if you get me those, I will dare to give you some stuffs that I consider as my treasures.";
+	next;
+	while(1) {
+		switch(select("When I gather them, I will come back", "Show me the armors", "Show me the weapons")) {
+		case 1:
+			mes "[Weird old man]";
+			mes "OK, young man. See you later.";
+			close;
+		case 2:
+			mes "[Weird old man]";
+			mes "So, you are interested in armors.";
+			next;
+			mes "[Weird old man]";
+			mes "These are the armors I have.";
+			next;
+			for(.@i = 1; .@i < 8; .@i++) {
+				if (((.@i == 1 || .@i == 5) && (countitem(6469) >= 100) && (countitem(6470) >= 50) && (countitem(6471) >= 35)) || 
+				    ((.@i == 2 || .@i == 3) && (countitem(6469) >= 100) && (countitem(6470) >= 50) && (countitem(6471) >= 22)) ||
+				    ((.@i == 4 || .@i == 7) && (countitem(6469) >= 300) && (countitem(6470) >= 300) && (countitem(6471) >= 400)) ||
+				    ((.@i == 6) && (countitem(6469) >= 100) && (countitem(6470) >= 50) && (countitem(6471) >= 30))) {
+					.@armor$[.@i] = "^0000FF";
+				} else {
+					.@armor$[.@i] = "^FF0000";
+				}
+			}
+			while(1) {
+				switch(select(
+					"Show me other items.",
+					""+.@armor$[1]+"Giant Shield^000000",
+					""+.@armor$[2]+"Acient Book of Geffenia-Water^000000",
+					""+.@armor$[3]+"Bible of Promise(2nd Vol.)^000000",
+					""+.@armor$[4]+"Salvage Cape^000000",
+					""+.@armor$[5]+"Assassin's Handcuffs^000000",
+					""+.@armor$[6]+"Green Operating Gown^000000",
+					""+.@armor$[7]+"Ancient Gold Decoration^000000"
+				)) {
+				case 1:
+					mes "[Weird old man]";
+					mes "Have a look.";
+					next;
+					.@break = 1;
+					break;
+				case 2:
+					mes "<<Giant Shield[1]>>";
+					mes "Decrease 5% of Damage from Large Monsters, if Refine Lv is 9, decrease 5% more of the Damage.";
+					mes "Shield / Def 130 / Weight 280 / Required Lv 100 / Socket 1 / for 3rd Swordman Classes";
+					callsub L_Reward, 2160, 100, 50, 35; //Giant_Shield
+					break;
+				case 3:
+					mes "<<Acient Book of Geffenia-Water[1]>>";
+					mes "INT + 1, MDEF + 2. If Original INT point is 120, MATK + 10, MHP + 800.";
+					mes "When equipping with Lacryma Stick, the casting % from Storm Gust, Frost Misty and Jack frost will discount equivalent to 4 times Refine Lv.";
+					mes "Shield / Def 30 / Weight 100 / Required Lv 100 / Socket 1 / for Warlock";
+					callsub L_Reward, 2161, 100, 50, 22; //Geffenia_Book_Water
+					break;
+				case 4:
+					mes "<<Bible of Promise(2nd Vol.)[1]>>";
+					mes "MDEF + 5, Allow to use 'Odin's Power'(Lv 2). Increase 5% more for Heal skill.";
+					mes "Shield / Def 20 / Weight 50 / Required Lv 140 / Socket 1 / for Archbishop";
+					callsub L_Reward, 2162, 100, 50, 22; //Bible_Of_Promise2
+					break;
+				case 5:
+					mes "<<Salvage Cape[0]>>";
+					mes "Allow to use 'Cicada Skin Shed'(Lv 1). Cool time for this skill will be 30 seconds. When equiping it, SP consumption for using any skill will be doubled, When taking it off, SP - 1200.";
+					mes "Garment / Def 1 / Weight 40 / Required Lv 130 / Socket 0 / for Archbishop";
+					callsub L_Reward, 2582, 100, 50, 35; //Salvage_Cape
+					break;
+				case 6:
+					mes "<<Assassin's Handcuffs[1]>>";
+					mes "MSP + 20, CRI + 3. When equipping with Krishna, ATK + 50, ATK power from 'Sonic Blow' 50% increased, FLEE - 30. When equipping with Cakram CRI + 4, Critical ATK power 40% increased, MHP - 10%.";
+					mes "Accessory / Def 3 / Weight 40 / Required Lv 100 / Socket 1 / for Guillotine Cross";
+					callsub L_Reward, 2892, 300, 300, 400; //Assassin_Handcuffs
+					break;
+				case 7:
+					mes "<<Green Operating Gown[1]>>";
+					mes "DEX + 1, MSP + 30. Equipping with Scalpel will let to drop 'Immortal Heart', 'Alcohol' with a certain chance when hunting Human, Animal type monsters. Refine Lv affects the drop rate.";
+					mes "Armor / Def 66 / Weight 66 / Required Lv 100 / Socket 1 / for Generic";
+					callsub L_Reward, 15044, 100, 50, 30; //Green_Operation_Coat
+					break;
+				case 8:
+					mes "<<Ancient Gold Decoration[1]>>";
+					mes "If the base lv is 150, All State + 2. for Swordman, Merchant, Thief Classes ATK + 8%, for Magician, Acolyte classes MATK + 8%, Heal Power + 7%, for Archer classes DEX + 3, Long Distance ATK power + 10%.";
+					mes "Helm / Def 7 / Location - Upper / Weight 40 / Required Lv 100 / Socket 1 / for 3rd Job Classes";
+					callsub L_Reward, 18570, 300, 300, 400; //Ancient_Gold_Deco
+					break;
+				}
+				if (.@break) {
+					.@break = 0;
+					break;
+				}
+			}
+			break;
+		case 3:
+			mes "[Weird old man]";
+			mes "So, you are interested in weapons.";
+			next;
+			mes "[Weird old man]";
+			mes "These are the weapons I've got.";
+			next;
+			for(.@i = 1; .@i < 15; .@i++) {
+				if (((.@i == 1) && (countitem(6469) >= 50) && (countitem(6470) >= 100) && (countitem(6471) >= 10)) ||
+				((.@i == 2) && (countitem(6469) >= 50) && (countitem(6470) >= 100) && (countitem(6471) >= 85)) ||
+				((.@i == 3 || .@i == 4 || (.@i >= 8 && .@i < 11) || .@i >= 12) && (countitem(6469) >= 50) && (countitem(6470) >= 100) && (countitem(6471) >= 35)) ||
+				((.@i == 5 || .@i == 7 || .@i == 11) && (countitem(6469) >= 50) && (countitem(6470) >= 100) && (countitem(6471) >= 40)) ||
+				((.@i == 6) && (countitem(6469) >= 300) && (countitem(6470) >= 300) && (countitem(6471) >= 400))) {
+					.@weapon$[.@i] = "^0000FF";
+				} else {
+					.@weapon$[.@i] = "^FF0000";
+				}
+			}
+			while(1) {
+				switch(select(
+					"Show me other items.",
+					""+.@weapon$[1]+"Agent Katar^000000",
+					""+.@weapon$[2]+"Guillotine Katar^000000",
+					""+.@weapon$[3]+"Ygnus Stale^000000",
+					""+.@weapon$[4]+"End Sektura^000000",
+					""+.@weapon$[5]+"Cannon Spear^000000",
+					""+.@weapon$[6]+"Giant Lance^000000",
+					""+.@weapon$[7]+"Chilly Spell Book^000000",
+					""+.@weapon$[8]+"Recovery Light^000000",
+					""+.@weapon$[9]+"Aztoe Nail^000000",
+					""+.@weapon$[10]+"Scarletto Nail^000000",
+					""+.@weapon$[11]+"Bloody Cross^000000",
+					""+.@weapon$[12]+"Catapult^000000",
+					""+.@weapon$[13]+"Big CrossBow^000000",
+					""+.@weapon$[14]+"Creeper Bow^000000"
+				)) {
+				case 1:
+					mes "[Weird old man]";
+					mes "Have a look.";
+					next;
+					.@break = 1;
+					break;
+				case 2:
+					mes "<<Agent Katar[1]>>";
+					mes "Every 2 Original LUK points gets additional 1 HIT point";
+					mes "Katar / ATK 170 / Weight 120 / Weapon Lv 3 / Required Lv 100 / Socket 1 / for Guillotine Cross";
+					callsub L_Reward, 1290, 50, 100, 10; //Agent_Katar
+					break;
+				case 3:
+					mes "<<Guillotine Katar[1]>>";
+					mes "DEX + 2. FLEE - 30. 50% more damage to Human monsters. Add 30% more damage for Cross Impact skill.";
+					mes "Katar / ATK 200 / Weight 150 / Weapon Lv 4 / Required Lv 140 / Socket 1 / for Guillotine Cross";
+					callsub L_Reward, 1291, 50, 100, 85; //Guillotine_Katar
+					break;
+				case 4:
+					mes "<<Ygnus Stale[1]>>";
+					mes "When doing short distance attack, cast ¹ßÈ­ to the player and to the enemy with a certain chance.";
+					mes "Two-Handed Axe / ATK 250 / Weight 190 / Fire Property / Weapon Lv 4 / Required Lv 95 / Socket 1 / for High Swordman/Merchant Classes";
+					callsub L_Reward, 1392, 50, 100, 35; //Ygnus_Stale
+					break;
+				case 5:
+					mes "<<End Sektura[1]>>";
+					mes "When doing short distance attack, cast Freezing to the player and to the enemy with a certain chance.";
+					mes "Two-Handed Axe / ATK 250 / Weight 190 / Water Property / Weapon Lv 4 / Required Lv 95 / Socket 1 / for High Swordman/Merchant Classes";
+					callsub L_Reward, 1393, 50, 100, 35; //End_Sektura
+					break;
+				case 6:
+					mes "<<Cannon Spear[1]>>";
+					mes "MSP - 100, Increases 10% of Damage impacted with Cannon Spear, Additional ATK power of Cannon Spear equivalent to 3 times Refine Lv.";
+					mes "One-Handed Spear / ATK 180 / Weight 160 / Weapon Lv 4 / Required Lv 100 / Socket 1 / for Royal Guard";
+					callsub L_Reward, 1435, 50, 100, 40; //Cannon_Spear
+					break;
+				case 7:
+					mes "<<Giant Lance[0]>>";
+					mes "ASPD - 10, When it's taken off, the character gets SP - 600. 20 more seconds of Delay time exists before using back the Clashing Spiral. If the original STR points are 120, + ATK 300.";
+					mes "Two-Handed Lance / ATK 20 / Weight 2000 / Weapon Lv 4 / Required Lv 140 / Socket 0 / for Rune Knight";
+					callsub L_Reward, 1490, 300, 300, 400; //Giant_Lance
+					break;
+				case 8:
+					mes "<<Chilly Spell Book[2]>>";
+					mes "MATK + 160, DEX + 1. Increases ATK % of Cold Bolt, Diamond Dust equivalent to 3 times Refine Lv, also SP consumption from those skills increased equivalent to 5 times Refine Lv. Undestroyable.";
+					mes "Book / ATK 100 / Weight 100 / Water Property / Weapon Lv 4 / Required Lv 100 / Socket 2 / for Sorcerer";
+					callsub L_Reward, 1584, 50, 100, 40; //Chilly_Spell_Book
+					break;
+				case 9:
+					mes "<<Recovery Light[1]>>";
+					mes "MATK + 160. Depending on its Refine Lv, Heal Ability and SP consumption for the skill increased. Indestructible.";
+					mes "One-Handed Staff / ATK 30 / Weight 40 / Saint Property / Weapon Lv 4 / Required Lv 110 / Socket 1 / for Archbishop.";
+					callsub L_Reward, 1659, 50, 100, 35; //Recovery_Light
+					break;
+				case 10:
+					mes "<<Aztoe Nail[0]>>";
+					mes "MATK + 80. For Physical Melee Attack, cast Freezing to the target with a certain chance. The chance is affected by Refine Lv.";
+					mes "Dagger / ATK 160 / Weight 50 / Wind Property / Weapon Lv 4 / Required Lv 110 / Socket 0 / for High Swordman/Merchant/Theif Classes";
+					callsub L_Reward, 13069, 50, 100, 35; //Aztoe_Nail
+					break;
+				case 11:
+					mes "<<Scarletto Nail[0]>>";
+					mes "MATK + 80. For Physical Melee Attack, cast Stone curse to the target with a certain chance. The chance is affected by Refine Lv.";
+					mes "Dagger / ATK 160 / Weight 50 / Fire Property / Weapon Lv 4 / Required Lv 110 / Socket 0 / for High Swordman/Merchant/Theif Classes";
+					callsub L_Reward, 13070, 50, 100, 35; //Scarletto_Nail
+					break;
+				case 12:
+					mes "<<Bloody Cross[0]>>";
+					mes "For Physical Melee Attack, autocast 'Hell Inferno'(Lv 1) with a certain chance. The chance is affected by Refine Lv.";
+					mes "Mace / ATK 170 / Weight 150 / Darkness Property / Weapon Lv 4 / Required Lv 100 / Socket 0 / for High Acolyte Classes";
+					callsub L_Reward, 16017, 50, 100, 40; //Bloody_Cross
+					break;
+				case 13:
+					mes "<<Catapult[2]>>";
+					mes "Increases ATK % of 'Triangle Shot' equivalent to 2 times Refine Lv, Also SP consumption from the skill increased.";
+					mes "Bow / ATK 150 / Weight 110 / Weapon Lv 4 / Required Lv 100 / Socket 2 / for Shadow Chaser";
+					callsub L_Reward, 18109, 50, 100, 35; //Catapult
+					break;
+				case 14:
+					mes "<<Big CrossBow[2]>>";
+					mes "Increases ATK % of 'Arrow Storm' equivalent to 5 times Refine Lv. Also SP consumption from the skill increased, If the Original AGI points are 120, ASPD + 1.";
+					mes "Bow / ATK 160 / Weight 90 / Weapon Lv 4 / Required Lv 110 / Socket 2 / for Ranger";
+					callsub L_Reward, 18110, 50, 100, 35; //Big_CrossBow
+					break;
+				case 15:
+					mes "<<Creeper Bow[2]>>";
+					mes "DEX + 1, For Physical Attack, auto-cast 'Fiber Lock'(Lv 1) with a certain chance.";
+					mes "Bow / ATK 150 / Weight 150 / Weapon Lv 3 / Required Lv 120 / Socket 2 / for 3rd Archer Classes";
+					callsub L_Reward, 18111, 50, 100, 35; //Creeper_Bow
+					break;
+				}
+				if (.@break) {
+					.@break = 0;
+					break;
+				}
+			}
+		}
+	}
+	close;
+
+L_Reward:
+	next;
+	mes ""+getarg(1)+" Will of Warrior, "+getarg(2)+" Thirst for Blood, "+getarg(3)+" Chill of the Dead are needed for the exchange.";
+	next;
+	if (countitem(6469) >= getarg(1) && countitem(6470) >= getarg(2) && countitem(6471) >= getarg(3)) {
+		if (select("Don't exchange", "Exchange") == 1) {
+			mes "[Weird old man]";
+			mes "Okay..";
+			close;
+		}
+		emotion e_swt2, "Weird old man#Bio4Reward";
+		progressbar "FF00FF", 2;
+		delitem 6469, getarg(1); //Will_Of_Warrior
+		delitem 6470, getarg(2); //Blood_Thirst
+		delitem 6471, getarg(3); //Goast_Chill
+		getitem getarg(0), 1;
+		mes "[Weird old man]";
+		mes "There you go. Visit me sometimes and we could talk.";
+		close;
+	}
+	return;
+}
+
+// Sorcerer (Rewards)
+//============================================================
+lhz_cube,233,24,4	script	Sorcerer#Bio4Reward	4_M_UMDANCEKID,{
+	if ((MaxWeight - Weight) < 1200 || !checkweight(1201, 1)) {
+		mes "^FF0000 Check up your inventory. You got too many items to carry out the quest. ^000000";
+		close;
+	}
+	disable_items;
+	mes "[Pudding]";
+	mes "... .... ...";
+	next;
+	switch(select("Umba umba humbaa", "What are you doing here?", "Which are the equipments found so far?", "Here you are, Sir.")) {
+	case 1:
+		emotion e_an;
+		mes "[Pudding]";
+		mes "Hey, excuse me, but I'm not from Umbala! You are so rude.";
+		close;
+	case 2:
+		mes "[Pudding]";
+		mes "As you can see, I'm a training Sorcerer, and my name is Pudding.";
+		next;
+		select("....?");
+		emotion e_an;
+		mes "[Pudding]";
+		mes "... What's that face? I'm starting to feel unpleasant..";
+		next;
+		emotion e_ok;
+		mes "[Pudding]";
+		mes "Couple of days ago, while I was undergoing discipline, I felt a strange, bizzare tinge. So I followed that and it brought me here.";
+		next;
+		select("I see.");
+		mes "[Pudding]";
+		mes "OK, let me continue. I am so bothered if you disturb me while I'm talking.";
+		next;
+		mes "[Pudding]";
+		mes "And I entered to the laboratory here in order to investigate, and oh gosh! I found those monsters which were like doppelgangers from 'Geffen Dungeon'. It was full of them.";
+		next;
+		mes "[Pudding]";
+		mes "From those monsters, I could find rare items like '^F2766EWill of Warrior^000000' '^952420Thirst for Blood^000000' '^88C6F7Chill of the Dead^000000' which you cannot find from any other place.";
+		next;
+		emotion e_what, "Sorcerer#Bio4Reward";
+		mes "[Pudding]";
+		mes "And after many hours of research on my own, I finally figured out a way to use those items. Do you wanna know?";
+		next;
+		switch(select("Oh....pardon?!", "Of course, I really wanna know.")) {
+		case 1:
+			emotion e_omg, 1;
+			emotion e_an, "Sorcerer#Bio4Reward";
+			mes "[Pudding]";
+			mes "Oh my! You fell asleep after you asked me something? Well, anyway I feel lazy to explain again so I will just continue.";
+			next;
+			break;
+		case 2:
+			emotion e_heh, "Sorcerer#Bio4Reward";
+			mes "[Pudding]";
+			mes "Good, I am content that you are listening to my story carefully. Then I will keep explaining.";
+			next;
+			break;
+		}
+		mes "[Pudding]";
+		mes "Those '^F2766EWill of Warrior^000000' and '^952420Thirst for Blood^000000'..... are aggresive but warm materials.";
+		next;
+		mes "[Pudding]";
+		mes "So '^F2766EWill of Warrior^000000' can dwell a special power to the 4th slot of an equipment,";
+		next;
+		mes "[Pudding]";
+		mes "and '^952420Thirst for Blood^000000' can dwell a special power to the 3rd slot.";
+		next;
+		mes "[Pudding]";
+		mes "Whereas!!!";
+		mes "'^88C6F7Chill of the Dead^000000' is a cold type material.";
+		mes "which allows to return the power from '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000' so it let the equipment to be 'ZERO'.";
+		next;
+		mes "[Pudding]";
+		mes "What do you say? Doesn't it sound interesting? But, there's a problem...";
+		next;
+		mes "[Pudding]";
+		mes "Since those materials can only be found from the monsters in the Lab., the special power also can be dwelt into certain equipments which can be obtained from the Lab.";
+		next;
+		select("So what's the conclusion?");
+		emotion e_what, 1;
+		emotion e_an;
+		mes "[Pudding]";
+		mes "Gee.. I told you not to cut while I talk, didn't I? Well, I will answer that becuase that's important.";
+		next;
+		mes "[Pudding]";
+		mes "If you bring me 10 '^F2766EWill of Warrior^000000' or 10 '^952420Thirst for Blood^000000', I will dwell some power to certain equipments that you can find in the Lab..";
+		next;
+		mes "[Pudding]";
+		mes "And if you are not satisfied with the power you got, bring me 10 '^88C6F7Chill of the Dead^000000', and I will take off that power.";
+		next;
+		mes "[Pudding]";
+		mes "WHat do you say? Having both options.....quite nice, huh?";
+		next;
+		mes "[Pudding]";
+		mes "If you obtain '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000', and obtain also equipment which is capable to accept their power, bring them to me. I will be waiting.";
+		close;
+	case 3:
+		mes "[Pudding]";
+		mes "Hm.... Equipment which are discovered so far are....";
+		next;
+		mes "- checking -";
+		mes "Pudding takes some paper out from a pocket.";
+		next;
+		mes "[Pudding]";
+		mes "Let me see.. the equipments discovered until now are....";
+		mes "6 Armors, 14 Weapons.";
+		next;
+		while(1) {
+			switch(select("Ok, I don't have to know more.", "6 Armors", "14 Weapons")) {
+			case 1:
+				mes "[Pudding]";
+				mes "If you obtain '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000', and obtain also equipment which is capable to accept their power, bring them to me. I will be waiting.";
+				close;
+			case 2:
+				mes "< Armor List >";
+				mes "Giant Shield[1]";
+				mes "Acient Book of Geffenia-Water[1]";
+				mes "Bible of Promise(2nd Vol.)[1]";
+				mes "Salvage Cape[0]";
+				mes "Assassin's Handcuffs[1]";
+				mes "Green Operating Gown[1]";
+				mes "Ancient Gold Decoration[1]";
+				next;
+				mes "[Pudding]";
+				mes "So far these are the Armors discovered. Do you wanna see other things?";
+				next;
+				break;
+			case 3:
+				mes "< Weapon List >";
+				mes "Agent Katar[1]";
+				mes "Guillotine Katar[1]";
+				mes "Ygnus Stale[1]";
+				mes "End Sektura[1]";
+				mes "Cannon Spear[1]";
+				mes "Giant Lance[0]";
+				mes "Chilly Spell Book[2]";
+				mes "Recovery Light[1]";
+				mes "Aztoe Nail[0]";
+				mes "Scarletto Nail[0]";
+				mes "Bloody Cross[0]";
+				mes "Catapult[2]";
+				mes "Big CrossBow[2]";
+				mes "Creeper Bow[2]";
+				next;
+				mes "[Pudding]";
+				mes "So far these are the Weapons discovered. Do you wanna see other things?";
+				next;
+				break;
+			}
+		}
+		close;
+	case 4:
+		emotion e_flash;
+		mes "[Pudding]";
+		mes "Ohhhhh Have you brought them?";
+		next;
+		break;
+	}
+	mes "[Pudding]";
+	mes "OKAY! In which equipment you want to dwell the power?";
+	next;
+	setarray .@parts[0], EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_TOP;
+	for(.@i = 0; .@i < 7; .@i++) {
+		if (!getequipisequiped(.@parts[.@i])) {
+			switch(.@i) {
+				case 0:
+					.@equipped$[.@i] = "^999999Armor-[Not equipped]^000000";
+					break;
+				case 1:
+					.@equipped$[.@i] = "^999999Left Hand-[Not equipped]^000000";
+					break;
+				case 2:
+					.@equipped$[.@i] = "^999999Right Hand-[Not equipped]^000000";
+					break;
+				case 3:
+					.@equipped$[.@i] = "^999999Garment-[Not equipped]^000000";
+					break;
+				case 4:
+					.@equipped$[.@i] = "^999999Accessory-[Not equipped]^000000";
+					break;
+				case 5:
+					.@equipped$[.@i] = "^999999Accessory-[Not equipped]^000000";
+					break;
+				case 6:
+					.@equipped$[.@i] = "^999999Helm-[Not equipped]^000000";
+					break;
+			}
+		} else {
+			.@equipped$[.@i] = getequipname(.@parts[.@i]);
+		}
+	}
+	switch(select("I changed my mind.", .@equipped$[0], .@equipped$[1], .@equipped$[2], .@equipped$[3], .@equipped$[4], 
+	.@equipped$[5], .@equipped$[6])) {
+	case 1:
+		mes "[Pudding]";
+		mes "Well, I was looking forward to doing it, but I cannot help then.";
+		close;
+	case 2:
+		if (!getequipisequiped(EQI_ARMOR)) {
+			mes "[Pudding]";
+			mes "Hey..Where is the armor?";
+			close;
+		}
+		.@part = EQI_ARMOR;
+		break;
+	case 3:
+		if (!getequipisequiped(EQI_HAND_L)) {
+			mes "[Pudding]";
+			mes "Well.. You are not equipping anything on the left hand.";
+			close;
+		}
+		.@part = EQI_HAND_L;
+		break;
+	case 4:
+		if (!getequipisequiped(EQI_HAND_R)) {
+			mes "[Pudding]";
+			mes "Well.. You are not equipping anything on the right hand.";
+			close;
+		}
+		.@part = EQI_HAND_R;
+		break;
+	case 5:
+		if (!getequipisequiped(EQI_GARMENT)) {
+			mes "[Pudding]";
+			mes "Um.... Where's your robe?";
+			close;
+		}
+		.@part = EQI_GARMENT;
+		break;
+	case 6:
+		if (!getequipisequiped(EQI_ACC_L)) {
+			mes "[Pudding]";
+			mes ".....Where's the accessory?";
+			close;
+		}
+		.@part = EQI_ACC_L;
+		break;
+	case 7:
+		if (!getequipisequiped(EQI_ACC_R)) {
+			mes "[Pudding]";
+			mes ".....Where's the accessory?";
+			close;
+		}
+		.@part = EQI_ACC_R;
+		break;
+	case 8:
+		if (!getequipisequiped(EQI_HEAD_TOP)) {
+			mes "[Pudding]";
+			mes "Hey.. Are you not wearing any Helm?";
+			close;
+		}
+		.@part = EQI_HEAD_TOP;
+		break;
+	}
+	.@refine_count = getequiprefinerycnt(.@part);
+	.@equip_item = getequipid(.@part);
+	.@lhz_max_num = 4000;
+	if (.@equip_item == 13069 || .@equip_item == 1291 || .@equip_item == 1392 || 
+	    .@equip_item == 1393 || .@equip_item == 1435 || .@equip_item == 1490 || 
+	    .@equip_item == 13069 || .@equip_item == 13070 || .@equip_item == 16017) {
+		.@type = 1;
+		if (.@equip_item == 1490)
+			.@lhz_max_num = 4200;
+	} else if (.@equip_item == 18109 || .@equip_item == 18110 || .@equip_item == 18111) {
+		.@type = 2;
+	} else if (.@equip_item == 1584 || .@equip_item == 1659) {
+		.@type = 3;
+	} else if (.@equip_item == 2160 || .@equip_item == 2161 || .@equip_item == 2162 ||
+	           .@equip_item == 2582 || .@equip_item == 2892 || .@equip_item == 15044 || 
+	           .@equip_item == 18570) {
+		.@type = 4;
+		if (.@equip_item == 2582 || .@equip_item == 18570)
+			.@lhz_max_num = 4200;
+	} else {
+		mes "[Pudding]";
+		mes "Before! I need to check if this equipment can accept the power.";
+		next;
+		specialeffect2 EF_SPHERE;
+		progressbar "ffff00", 2;
+		specialeffect2 EF_SUI_EXPLOSION;
+		emotion e_sob;
+		mes "[Pudding]";
+		mes "Hm.... This equipment cannot accept the power of '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000'.";
+		close;
+	}
+	emotion e_ho;
+	mes "[Pudding]";
+	mes "OHHH.. This equipment could accept the power of '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000'.";
+	next;
+	if (countitem(6469) >= 10)
+		.@menu_in$[1] = "Dwell the power of '^F2766EWill of Warrior^000000'";
+	else
+		.@menu_in$[1] = "Not enough ^999999'Will of Warrior'^000000";
+
+	if (countitem(6470) >= 10)
+		.@menu_in$[2] = "Dwell the power of '^952420Thirst for Blood^000000'";
+	else
+		.@menu_in$[2] = "Not enough ^999999'Thirst for Blood'^000000";
+
+	if (countitem(6471) >= 10)
+		.@menu_in$[3] = "Consume the '^88C6F7Chill of the Dead^000000'";
+	else
+		.@menu_in$[3] = "Not enough ^999999'Chill of the Dead'^000000";
+	mes "[Pudding]";
+	mes "OK! Which power do you want to dwell in your equipment?";
+	next;
+	switch(select("I say no! I don't need that!!", .@menu_in$[1], .@menu_in$[2], .@menu_in$[3])) {
+	case 1:
+		mes "[Pudding]";
+		mes "Ohhh.. I was looking forward to doing it, but it's all up to you......";
+		close;
+	case 2:
+		if (countitem(6469) < 10) {
+			mes "[Pudding]";
+			mes "Not enough '^F2766EWill of Warrior^000000', You need to bring 10 '^F2766EWill of Warrior^000000'";
+			close;
+		}
+		else if (getequipcardid(.@part, 3) > 0) {
+			mes "[Pudding]";
+			mes "This equipment already got the power of '^F2766EWill of Warrior^000000'.";
+			close;
+		} else {
+			.@socket_type = 4;
+		}
+		break;
+	case 3:
+		if (countitem(6470) < 10) {
+			mes "[Pudding]";
+			mes "Not enough '^952420Thirst for Blood^000000', You need to bring 10 '^952420Thirst for Blood^000000'";
+			close;
+		}
+		else if (getequipcardid(.@part, 2) > 0) {
+			mes "[Pudding]";
+			mes "This equipment already got the power of '^952420Thirst for Blood^000000'.";
+			close;
+		} else {
+			.@socket_type = 3;
+		}
+		break;
+	case 4:
+		// Enchant Removal
+		if (countitem(6471) < 10) {
+			.@menu_clear$[1] = "^999999Not enough 'Chill of the Dead'^000000";
+			.@menu_clear$[2] = "^999999Not enough 'Chill of the Dead'^000000";
+			.@4thzptsodyd = 1;
+			.@3thzptsodyd = 1;
+		} else {
+			if (getequipcardid(.@part, 3) > 0) {
+				.@menu_clear$[1] = "Remove the power of '^F2766EWill of Warrior^000000'";
+			} else {
+				.@menu_clear$[1] = "^999999There's no power to remove^000000";
+				.@4thzptsodyd = 1;
+			}
+			if (getequipcardid(.@part, 2) > 0) {
+				.@menu_clear$[2] = "Remove the power of '^952420Thirst for Blood^000000'";
+			} else {
+				.@menu_clear$[2] = "^999999There's no power to remove^000000";
+				.@3thzptsodyd = 1;
+			}
+		}
+		mes "[Pudding]";
+		mes "Alright, which power do you want to remove?";
+		next;
+		.@menu = select("No, I don't wannna remove any.", .@menu_clear$[1], .@menu_clear$[2]);
+		switch(.@menu){
+		case 1:
+			mes "[Pudding]";
+			mes "Really? Ok. I got it..";
+			close;
+		case 2:
+		case 3:
+			if (countitem(6471) < 10) {
+				mes "[Pudding]";
+				mes "Not enough '^88C6F7Chill of the Dead^000000', You need to bring 10 '^88C6F7Chill of the Dead^000000'";
+				close;
+			}
+			if ( (.@menu==3 && .@3thzptsodyd == 1) || (.@menu==2 && .@4thzptsodyd == 1) ) {
+				mes "[Pudding]";
+				mes "This equipment didn't get any special power.";
+				close;
+			}
+			setarray .@equip_card[0], getequipcardid(.@part,0), getequipcardid(.@part,1), getequipcardid(.@part,2), getequipcardid(.@part,3);
+			if (.@menu == 2)
+				.@equip_card[3] = 0;
+			else
+				.@equip_card[2] = 0;
+			.@equip_item = getequipid(.@part);
+			specialeffect EF_BEGINSPELL2, AREA, "Sorcerer#Bio4Reward";
+			progressbar "ffff00", 2;
+			specialeffect2 EF_FROSTWEAPON;
+			delitem 6471, 10; //Goast_Chill
+			delequip .@part;
+			getitem2 .@equip_item, 1, 1, .@refine_count, 0, .@equip_card[0], .@equip_card[1], .@equip_card[2], .@equip_card[3];
+			mes "[Pudding]";
+			if (.@menu == 3)
+				mes "The power of '^952420Thirst for Blood^000000' has been perfectly removed.";
+			else
+				mes "The power of '^F2766EWill of Warrior^000000' has been perfectly removed.";
+			close;
+		}
+	}
+	mes "[Pudding]";
+	mes "Before I dwell the power, let me explain to you cautions.";
+	next;
+	mes "[Pudding]";
+	mes "While dwelling the power of '^F2766EWill of Warrior^000000' or '^952420Thirst for Blood^000000', the equipment would be not capable to accept that and will be destryed..";
+	next;
+	mes "[Pudding]";
+	mes "^9D2628If the equipment is destroyed, you will also lose the cards you inserted in it, and the refine Lv will be removed too.^000000";
+	next;
+	mes "[Pudding]";
+	mes "Alright. will you really wish to dwell the power into the equipment?";
+	next;
+	if (select("Wait, I will think again.", "Sure, carry on.") == 1) {
+		mes "[Pudding]";
+		mes "OK. I will be hoping to see you again.";
+		close;
+	}
+	mes "[Pudding]";
+	mes "I wish you made a correct decision...";
+	next;
+	if (.@socket_type >= 3) {
+		switch(.@type){
+			case 1:	// Short Distance
+				.@r = rand(1, .@lhz_max_num);
+				if      (.@r < 401)  .@enchant = 4700; //Strength1
+				else if (.@r < 441)  .@enchant = 4701; //Strength2
+				else if (.@r < 445)  .@enchant = 4702; //Strength3
+				else if (.@r < 845)  .@enchant = 4730; //Agility1
+				else if (.@r < 885)  .@enchant = 4731; //Agility2
+				else if (.@r < 889)  .@enchant = 4732; //Agility3
+				else if (.@r < 1289) .@enchant = 4740; //Vitality1
+				else if (.@r < 1329) .@enchant = 4741; //Vitality2
+				else if (.@r < 1333) .@enchant = 4742; //Vitality3
+				else if (.@r < 1523) .@enchant = 4710; //Inteligence1
+				else if (.@r < 1542) .@enchant = 4711; //Inteligence2
+				else if (.@r < 1544) .@enchant = 4712; //Inteligence3
+				else if (.@r < 1844) .@enchant = 4720; //Dexterity1
+				else if (.@r < 1874) .@enchant = 4721; //Dexterity2
+				else if (.@r < 1877) .@enchant = 4722; //Dexterity3
+				else if (.@r < 2067) .@enchant = 4750; //Luck1
+				else if (.@r < 2086) .@enchant = 4751; //Luck2
+				else if (.@r < 2088) .@enchant = 4752; //Luck3
+				else if (.@r < 2491) .@enchant = 0;
+				else if (.@r < 2891) .@enchant = 4811; //Fighting_Spirit1
+				else if (.@r < 2931) .@enchant = 4810; //Fighting_Spirit2
+				else if (.@r < 2935) .@enchant = 4809; //Fighting_Spirit3
+				else if (.@r < 3125) .@enchant = 4815; //Spell1
+				else if (.@r < 3144) .@enchant = 4814; //Spell2
+				else if (.@r < 3146) .@enchant = 4813; //Spell3
+				else if (.@r < 3148) .@enchant = 4807; //Atk_Speed1
+				else if (.@r < 3348) .@enchant = 4818; //Sharp1
+				else if (.@r < 3368) .@enchant = 4817; //Sharp2
+				else if (.@r < 3370) .@enchant = 4816; //Sharp3
+				else if (.@r < 3560) .@enchant = 4832; //Expert_Archer1
+				else if (.@r < 3579) .@enchant = 4833; //Expert_Archer2
+				else if (.@r < 3581) .@enchant = 4834; //Expert_Archer3
+				else                 .@enchant = 0;
+				break;
+			case 2:	// Long Distance
+				.@r = rand(1, .@lhz_max_num);
+				if      (.@r < 191)  .@enchant = 4700; //Strength1
+				else if (.@r < 210)  .@enchant = 4701; //Strength2
+				else if (.@r < 212)  .@enchant = 4702; //Strength3
+				else if (.@r < 612)  .@enchant = 4730; //Agility1
+				else if (.@r < 652)  .@enchant = 4731; //Agility2
+				else if (.@r < 656)  .@enchant = 4732; //Agility3
+				else if (.@r < 846)  .@enchant = 4740; //Vitality1
+				else if (.@r < 865)  .@enchant = 4741; //Vitality2
+				else if (.@r < 867)  .@enchant = 4742; //Vitality3
+				else if (.@r < 1167) .@enchant = 4710; //Inteligence1
+				else if (.@r < 1197) .@enchant = 4711; //Inteligence2
+				else if (.@r < 1200) .@enchant = 4712; //Inteligence3
+				else if (.@r < 1600) .@enchant = 4720; //Dexterity1
+				else if (.@r < 1640) .@enchant = 4721; //Dexterity2
+				else if (.@r < 1644) .@enchant = 4722; //Dexterity3
+				else if (.@r < 1834) .@enchant = 4750; //Luck1
+				else if (.@r < 1853) .@enchant = 4751; //Luck2
+				else if (.@r < 1855) .@enchant = 4752; //Luck3
+				else if (.@r < 2258) .@enchant = 0;
+				else if (.@r < 2448) .@enchant = 4811; //Fighting_Spirit1
+				else if (.@r < 2467) .@enchant = 4810; //Fighting_Spirit2
+				else if (.@r < 2469) .@enchant = 4809; //Fighting_Spirit3
+				else if (.@r < 2669) .@enchant = 4815; //Spell1
+				else if (.@r < 2689) .@enchant = 4814; //Spell2
+				else if (.@r < 2691) .@enchant = 4813; //Spell3
+				else if (.@r < 2693) .@enchant = 4807; //Atk_Speed1
+				else if (.@r < 3093) .@enchant = 4818; //Sharp1
+				else if (.@r < 3133) .@enchant = 4817; //Sharp2
+				else if (.@r < 3137) .@enchant = 4816; //Sharp3
+				else if (.@r < 3537) .@enchant = 4832; //Expert_Archer1
+				else if (.@r < 3577) .@enchant = 4833; //Expert_Archer2
+				else if (.@r < 3581) .@enchant = 4834; //Expert_Archer3
+				else                 .@enchant = 0;
+				break;
+			case 3:
+				.@r = rand(1, .@lhz_max_num);
+				if      (.@r < 301)  .@enchant = 4700; //Strength1
+				else if (.@r < 331)  .@enchant = 4701; //Strength2
+				else if (.@r < 334)  .@enchant = 4702; //Strength3
+				else if (.@r < 534)  .@enchant = 4730; //Agility1
+				else if (.@r < 554)  .@enchant = 4731; //Agility2
+				else if (.@r < 556)  .@enchant = 4732; //Agility3
+				else if (.@r < 956)  .@enchant = 4740; //Vitality1
+				else if (.@r < 996)  .@enchant = 4741; //Vitality2
+				else if (.@r < 1000) .@enchant = 4742; //Vitality3
+				else if (.@r < 1400) .@enchant = 4710; //Inteligence1
+				else if (.@r < 1440) .@enchant = 4711; //Inteligence2
+				else if (.@r < 1444) .@enchant = 4712; //Inteligence3
+				else if (.@r < 1844) .@enchant = 4720; //Dexterity1
+				else if (.@r < 1884) .@enchant = 4721; //Dexterity2
+				else if (.@r < 1888) .@enchant = 4722; //Dexterity3
+				else if (.@r < 2078) .@enchant = 4750; //Luck1
+				else if (.@r < 2097) .@enchant = 4751; //Luck2
+				else if (.@r < 2099) .@enchant = 4752; //Luck3
+				else if (.@r < 2502) .@enchant = 0;
+				else if (.@r < 2692) .@enchant = 4811; //Fighting_Spirit1
+				else if (.@r < 2711) .@enchant = 4810; //Fighting_Spirit2
+				else if (.@r < 2713) .@enchant = 4809; //Fighting_Spirit3
+				else if (.@r < 3113) .@enchant = 4815; //Spell1
+				else if (.@r < 3153) .@enchant = 4814; //Spell2
+				else if (.@r < 3157) .@enchant = 4813; //Spell3
+				else if (.@r < 3159) .@enchant = 4807; //Atk_Speed1
+				else if (.@r < 3349) .@enchant = 4818; //Sharp1
+				else if (.@r < 3368) .@enchant = 4817; //Sharp2
+				else if (.@r < 3370) .@enchant = 4816; //Sharp3
+				else if (.@r < 3560) .@enchant = 4832; //Expert_Archer1
+				else if (.@r < 3579) .@enchant = 4833; //Expert_Archer2
+				else if (.@r < 3581) .@enchant = 4834; //Expert_Archer3
+				else                 .@enchant = 0;
+				break;
+			case 4:	// Armor
+				.@r = rand(1, .@lhz_max_num);
+				if      (.@r < 301)  .@enchant = 4700; //Strength1
+				else if (.@r < 331)  .@enchant = 4701; //Strength2
+				else if (.@r < 334)  .@enchant = 4702; //Strength3
+				else if (.@r < 634)  .@enchant = 4730; //Agility1
+				else if (.@r < 664)  .@enchant = 4731; //Agility2
+				else if (.@r < 667)  .@enchant = 4732; //Agility3
+				else if (.@r < 967)  .@enchant = 4740; //Vitality1
+				else if (.@r < 997)  .@enchant = 4741; //Vitality2
+				else if (.@r < 1000) .@enchant = 4742; //Vitality3
+				else if (.@r < 1300) .@enchant = 4710; //Inteligence1
+				else if (.@r < 1330) .@enchant = 4711; //Inteligence2
+				else if (.@r < 1333) .@enchant = 4712; //Inteligence3
+				else if (.@r < 1633) .@enchant = 4720; //Dexterity1
+				else if (.@r < 1663) .@enchant = 4721; //Dexterity2
+				else if (.@r < 1666) .@enchant = 4722; //Dexterity3
+				else if (.@r < 1966) .@enchant = 4750; //Luck1
+				else if (.@r < 1996) .@enchant = 4751; //Luck2
+				else if (.@r < 1999) .@enchant = 4752; //Luck3
+				else if (.@r < 2399) .@enchant = 0;
+				else if (.@r < 2549) .@enchant = 4786; //Mdef2
+				else if (.@r < 2599) .@enchant = 4787; //Mdef4
+				else if (.@r < 2609) .@enchant = 4788; //Mdef6
+				else if (.@r < 2614) .@enchant = 4789; //Mdef8
+				else if (.@r < 2616) .@enchant = 4790; //Mdef10
+				else if (.@r < 2766) .@enchant = 4791; //Def3
+				else if (.@r < 2866) .@enchant = 4792; //Def6
+				else if (.@r < 2876) .@enchant = 4793; //Def9
+				else if (.@r < 2878) .@enchant = 4794; //Def12
+				else if (.@r < 3278) .@enchant = 0;
+				else if (.@r < 3428) .@enchant = 4859; //Evasion1
+				else if (.@r < 3478) .@enchant = 4860; //Evasion3
+				else if (.@r < 3488) .@enchant = 4762; //Evasion6
+				else if (.@r < 3498) .@enchant = 4800; //SP50
+				else if (.@r < 3734) .@enchant = 4795; //HP100
+				else if (.@r < 3834) .@enchant = 4796; //HP200
+				else if (.@r < 3884) .@enchant = 4797; //HP300
+				else                 .@enchant = 0;
+			break;
+		}
+		setarray .@equip_card[0], getequipcardid(.@part,0),getequipcardid(.@part,1),getequipcardid(.@part,2),getequipcardid(.@part,3);
+		.@equip_card[(.@socket_type-1)] = .@enchant;
+		.@equip_item = getequipid(.@part);
+		specialeffect EF_BEGINSPELL3, AREA, "Sorcerer#Bio4Reward";
+		progressbar "ffff00", 2;
+		if (.@socket_type == 3)
+			delitem 6470, 10; //Blood_Thirst
+		else
+			delitem 6469, 10; //Will_Of_Warrior
+		delequip .@part;
+		
+		if (.@enchant == 0){
+			specialeffect2 EF_SUI_EXPLOSION;
+			emotion e_otl;
+			mes "[Pudding]";
+			mes "...Well....the equipment could not accept the power of "+((.@socket_type==3)?"'^952420Thirst for Blood^000000'":"'^F2766EWill of Warrior^000000'")+" and it got destroyed.";
+			close;
+		} else {
+			specialeffect2 EF_FIREHIT;
+			getitem2 .@equip_item, 1, 1, .@refine_count, 0, .@equip_card[0], .@equip_card[1], .@equip_card[2], .@equip_card[3];
+			emotion e_ho;
+			mes "[Pudding]";
+			mes "Fortunately the power of "+((.@socket_type==3)?"'^952420Thirst for Blood^000000'":"'^F2766EWill of Warrior^000000'")+" has been dwelt well in your equipment...";
+			close;
+		}
+	}
+	end;
+}

+ 3 - 3
npc/re/quests/eden/eden_tutorial.txt

@@ -201,7 +201,7 @@ moc_para01,34,178,3	script	Tutorial Instructor	904,{
 				mes "The ^006400Universal Silver Catalog^000000";
 				mes "can be obtained from";
 				mes "the ^0000FFCatalogue Wizard^000000";
-				mes "that is located in South Prontera.";
+				mes "that is located in the Eden Group Headquarter.";
 				next;
 				mes "[Tutorial Instructor]";
 				mes "Now, go and obtain";
@@ -252,7 +252,7 @@ moc_para01,34,178,3	script	Tutorial Instructor	904,{
 			mes "You can get the";
 			mes "^006400Universal Silver Catalog^000000";
 			mes "from the ^0000FFCatalogue Wizard^000000";
-			mes "who is located in Prontera.";
+			mes "who is located in the Eden Group Headquarter.";
 			next;
 			mes "[Tutorial Instructor]";
 			mes "So, go and get the";
@@ -515,7 +515,7 @@ moc_para01,34,178,3	script	Tutorial Instructor	904,{
 			mes "The ^006400Universal Silver Catalog^000000";
 			mes "can be obtained from ";
 			mes "the ^0000FFCatalogue Wizard^000000";
-			mes "that is located in South Prontera;";
+			mes "that is located in the Eden Group Headquarter.";
 			next;
 			mes "[Tutorial Instructor]";
 			mes "It only costs 200 zeny for one";

+ 1 - 0
npc/re/scripts_athena.conf

@@ -69,6 +69,7 @@ npc: npc/re/merchants/advanced_refiner.txt
 npc: npc/re/merchants/alchemist.txt
 npc: npc/re/merchants/ammo_boxes.txt
 npc: npc/re/merchants/ammo_dealer.txt
+npc: npc/re/merchants/bio4_reward.txt
 //npc: npc/re/merchants/blessed_refiner.txt
 //npc: npc/re/merchants/card_exchange.txt
 npc: npc/re/merchants/card_separation.txt

+ 40 - 0
rAthena-14.sln

@@ -0,0 +1,40 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.23107.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server", "vcproj-14\char-server.vcxproj", "{D356871D-58E1-450B-967A-E4E9646175AF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "login-server", "vcproj-14\login-server.vcxproj", "{D356871D-58E1-450B-967A-E5E9646175AF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server", "vcproj-14\map-server.vcxproj", "{D356871D-58E1-450B-967A-E6E9646175AF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mapcache", "vcproj-14\mapcache.vcxproj", "{D356871D-58E1-450B-967A-E7E9646175AF}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{D356871D-58E1-450B-967A-E4E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D356871D-58E1-450B-967A-E4E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
+		{D356871D-58E1-450B-967A-E4E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
+		{D356871D-58E1-450B-967A-E4E9646175AF}.Release|Win32.Build.0 = Release|Win32
+		{D356871D-58E1-450B-967A-E5E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D356871D-58E1-450B-967A-E5E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
+		{D356871D-58E1-450B-967A-E5E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
+		{D356871D-58E1-450B-967A-E5E9646175AF}.Release|Win32.Build.0 = Release|Win32
+		{D356871D-58E1-450B-967A-E6E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D356871D-58E1-450B-967A-E6E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
+		{D356871D-58E1-450B-967A-E6E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
+		{D356871D-58E1-450B-967A-E6E9646175AF}.Release|Win32.Build.0 = Release|Win32
+		{D356871D-58E1-450B-967A-E7E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D356871D-58E1-450B-967A-E7E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
+		{D356871D-58E1-450B-967A-E7E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
+		{D356871D-58E1-450B-967A-E7E9646175AF}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 181 - 144
sql-files/logs.sql

@@ -1,144 +1,181 @@
-#PickLog types (M)onsters Drop, (P)layers Drop/Take, Mobs Drop (L)oot Drop/Take,
-# Players (T)rade Give/Take, Players (V)ending Sell/Take, (S)hop Sell/Take, (N)PC Give/Take,
-# (C)onsumable Items, (A)dministrators Create/Delete, Sto(R)age, (G)uild Storage,
-# (E)mail attachment,(B)uying Store, Pr(O)duced Items/Ingredients, Auct(I)oned Items,
-# (X) Other, (D) Stolen from mobs, (U) MVP Prizes, (F) Guild/Party Bound retrieval
-# Lotter(Y), (Z) Merged Items, (Q)uest
-
-#Database: ragnarok
-#Table: picklog
-CREATE TABLE IF NOT EXISTS `picklog` (
-  `id` int(11) NOT NULL auto_increment,
-  `time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `char_id` int(11) NOT NULL default '0',
-  `type` enum('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$','F','Z','Q') NOT NULL default 'P',
-  `nameid` smallint(5) unsigned NOT NULL default '0',
-  `amount` int(11) NOT NULL default '1',
-  `refine` tinyint(3) unsigned NOT NULL default '0',
-  `card0` smallint(5) unsigned NOT NULL default '0',
-  `card1` smallint(5) unsigned NOT NULL default '0',
-  `card2` smallint(5) unsigned NOT NULL default '0',
-  `card3` smallint(5) unsigned NOT NULL default '0',
-  `unique_id` bigint(20) unsigned NOT NULL default '0',
-  `map` varchar(11) NOT NULL default '',
-  `bound` tinyint(1) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`id`),
-  INDEX (`type`)
-) ENGINE=MyISAM AUTO_INCREMENT=1 ;
-
-#ZenyLog types (M)onsters,(T)rade,(V)ending Sell/Buy,(S)hop Sell/Buy,(N)PC Change amount,(A)dministrators,(E)Mail,(B)uying Store,Ban(K) Transactions
-#Database: ragnarok
-#Table: zenylog
-CREATE TABLE IF NOT EXISTS `zenylog` (
-  `id` int(11) NOT NULL auto_increment,
-  `time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `char_id` int(11) NOT NULL default '0',
-  `src_id` int(11) NOT NULL default '0',
-  `type` enum('T','V','P','M','S','N','D','C','A','E','I','B','K') NOT NULL default 'S',
-  `amount` int(11) NOT NULL default '0',
-  `map` varchar(11) NOT NULL default '',
-  PRIMARY KEY  (`id`),
-  INDEX (`type`)
-) ENGINE=MyISAM AUTO_INCREMENT=1 ;
-
-#Database: ragnarok
-#Table: branchlog
-CREATE TABLE IF NOT EXISTS `branchlog` (
-  `branch_id` mediumint(9) unsigned NOT NULL auto_increment,
-  `branch_date` datetime NOT NULL default '0000-00-00 00:00:00',
-  `account_id` int(11) NOT NULL default '0',
-  `char_id` int(11) NOT NULL default '0',
-  `char_name` varchar(25) NOT NULL default '',
-  `map` varchar(11) NOT NULL default '',
-  PRIMARY KEY  (`branch_id`),
-  INDEX (`account_id`),
-  INDEX (`char_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1 ;
-
-#Database: ragnarok
-#Table: mvplog
-CREATE TABLE IF NOT EXISTS `mvplog` (
-  `mvp_id` mediumint(9) unsigned NOT NULL auto_increment,
-  `mvp_date` datetime NOT NULL default '0000-00-00 00:00:00',
-  `kill_char_id` int(11) NOT NULL default '0',
-  `monster_id` smallint(6) NOT NULL default '0',
-  `prize` smallint(5) unsigned NOT NULL default '0',
-  `mvpexp` mediumint(9) NOT NULL default '0',
-  `map` varchar(11) NOT NULL default '',
-  PRIMARY KEY  (`mvp_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1 ;
-
-#Database: ragnarok
-#Table: atcommandlog
-CREATE TABLE IF NOT EXISTS `atcommandlog` (
-  `atcommand_id` mediumint(9) unsigned NOT NULL auto_increment,
-  `atcommand_date` datetime NOT NULL default '0000-00-00 00:00:00',
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `char_name` varchar(25) NOT NULL default '',
-  `map` varchar(11) NOT NULL default '',
-  `command` varchar(255) NOT NULL default '',
-  PRIMARY KEY  (`atcommand_id`),
-  INDEX (`account_id`),
-  INDEX (`char_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1 ;
-
-#Database: ragnarok
-#Table: npclog
-CREATE TABLE IF NOT EXISTS `npclog` (
-  `npc_id` mediumint(9) unsigned NOT NULL auto_increment,
-  `npc_date` datetime NOT NULL default '0000-00-00 00:00:00',
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `char_name` varchar(25) NOT NULL default '',
-  `map` varchar(11) NOT NULL default '',
-  `mes` varchar(255) NOT NULL default '',
-  PRIMARY KEY  (`npc_id`),
-  INDEX (`account_id`),
-  INDEX (`char_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1 ;
-
-#ChatLog types Gl(O)bal,(W)hisper,(P)arty,(G)uild,(M)ain chat
-#Database: ragnarok
-#Table: chatlog
-CREATE TABLE IF NOT EXISTS `chatlog` (
-  `id` bigint(20) NOT NULL auto_increment,
-  `time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `type` enum('O','W','P','G','M') NOT NULL default 'O',
-  `type_id` int(11) NOT NULL default '0',
-  `src_charid` int(11) NOT NULL default '0',
-  `src_accountid` int(11) NOT NULL default '0',
-  `src_map` varchar(11) NOT NULL default '',
-  `src_map_x` smallint(4) NOT NULL default '0',
-  `src_map_y` smallint(4) NOT NULL default '0',
-  `dst_charname` varchar(25) NOT NULL default '',
-  `message` varchar(150) NOT NULL default '',
-  PRIMARY KEY  (`id`),
-  INDEX (`src_accountid`),
-  INDEX (`src_charid`)
-) ENGINE=MyISAM AUTO_INCREMENT=1 ;
-
-#Database: ragnarok
-#Table: loginlog
-CREATE TABLE IF NOT EXISTS `loginlog` (
-  `time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `ip` varchar(15) NOT NULL default '',
-  `user` varchar(23) NOT NULL default '',
-  `rcode` tinyint(4) NOT NULL default '0',
-  `log` varchar(255) NOT NULL default '',
-  INDEX (`ip`)
-) ENGINE=MyISAM ;
-
-#Database: ragnarok
-#Table: cashlog
-CREATE TABLE IF NOT EXISTS `cashlog` (
-  `id` int(11) NOT NULL AUTO_INCREMENT,
-  `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
-  `char_id` int(11) NOT NULL DEFAULT '0',
-  `type` enum('T','V','P','M','S','N','D','C','A','E','I','B','$') NOT NULL DEFAULT 'S',
-  `cash_type` enum('O','K','C') NOT NULL DEFAULT 'O',
-  `amount` int(11) NOT NULL DEFAULT '0',
-  `map` varchar(11) NOT NULL DEFAULT '',
-  PRIMARY KEY (`id`),
-  INDEX `type` (`type`)
-) ENGINE=MyISAM AUTO_INCREMENT=1;
+--
+-- Table structure for table `atcommandlog`
+--
+
+CREATE TABLE IF NOT EXISTS `atcommandlog` (
+  `atcommand_id` mediumint(9) unsigned NOT NULL auto_increment,
+  `atcommand_date` datetime NOT NULL default '0000-00-00 00:00:00',
+  `account_id` int(11) unsigned NOT NULL default '0',
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `char_name` varchar(25) NOT NULL default '',
+  `map` varchar(11) NOT NULL default '',
+  `command` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`atcommand_id`),
+  INDEX (`account_id`),
+  INDEX (`char_id`)
+) ENGINE=MyISAM AUTO_INCREMENT=1;
+
+--
+-- Table structure for table `branchlog`
+--
+
+CREATE TABLE IF NOT EXISTS `branchlog` (
+  `branch_id` mediumint(9) unsigned NOT NULL auto_increment,
+  `branch_date` datetime NOT NULL default '0000-00-00 00:00:00',
+  `account_id` int(11) NOT NULL default '0',
+  `char_id` int(11) NOT NULL default '0',
+  `char_name` varchar(25) NOT NULL default '',
+  `map` varchar(11) NOT NULL default '',
+  PRIMARY KEY  (`branch_id`),
+  INDEX (`account_id`),
+  INDEX (`char_id`)
+) ENGINE=MyISAM AUTO_INCREMENT=1;
+
+--
+-- Table structure for table `cashlog`
+--
+
+CREATE TABLE IF NOT EXISTS `cashlog` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+  `char_id` int(11) NOT NULL DEFAULT '0',
+  `type` enum('T','V','P','M','S','N','D','C','A','E','I','B','$') NOT NULL DEFAULT 'S',
+  `cash_type` enum('O','K','C') NOT NULL DEFAULT 'O',
+  `amount` int(11) NOT NULL DEFAULT '0',
+  `map` varchar(11) NOT NULL DEFAULT '',
+  PRIMARY KEY (`id`),
+  INDEX `type` (`type`)
+) ENGINE=MyISAM AUTO_INCREMENT=1;
+
+--
+-- Table structure for table `chatlog`
+--
+# ChatLog types
+# Gl(O)bal
# (W)hisper
# (P)arty
# (G)uild
# (M)ain chat
+
+CREATE TABLE IF NOT EXISTS `chatlog` (
+  `id` bigint(20) NOT NULL auto_increment,
+  `time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `type` enum('O','W','P','G','M') NOT NULL default 'O',
+  `type_id` int(11) NOT NULL default '0',
+  `src_charid` int(11) NOT NULL default '0',
+  `src_accountid` int(11) NOT NULL default '0',
+  `src_map` varchar(11) NOT NULL default '',
+  `src_map_x` smallint(4) NOT NULL default '0',
+  `src_map_y` smallint(4) NOT NULL default '0',
+  `dst_charname` varchar(25) NOT NULL default '',
+  `message` varchar(150) NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  INDEX (`src_accountid`),
+  INDEX (`src_charid`)
+) ENGINE=MyISAM AUTO_INCREMENT=1;
+
+--
+-- Table structure for table `loginlog`
+--
+
+CREATE TABLE IF NOT EXISTS `loginlog` (
+  `time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `ip` varchar(15) NOT NULL default '',
+  `user` varchar(23) NOT NULL default '',
+  `rcode` tinyint(4) NOT NULL default '0',
+  `log` varchar(255) NOT NULL default '',
+  INDEX (`ip`)
+) ENGINE=MyISAM ;
+
+--
+-- Table structure for table `mvplog`
+--
+
+CREATE TABLE IF NOT EXISTS `mvplog` (
+  `mvp_id` mediumint(9) unsigned NOT NULL auto_increment,
+  `mvp_date` datetime NOT NULL default '0000-00-00 00:00:00',
+  `kill_char_id` int(11) NOT NULL default '0',
+  `monster_id` smallint(6) NOT NULL default '0',
+  `prize` smallint(5) unsigned NOT NULL default '0',
+  `mvpexp` mediumint(9) NOT NULL default '0',
+  `map` varchar(11) NOT NULL default '',
+  PRIMARY KEY  (`mvp_id`)
+) ENGINE=MyISAM AUTO_INCREMENT=1;
+
+--
+-- Table structure for table `npclog`
+--
+
+CREATE TABLE IF NOT EXISTS `npclog` (
+  `npc_id` mediumint(9) unsigned NOT NULL auto_increment,
+  `npc_date` datetime NOT NULL default '0000-00-00 00:00:00',
+  `account_id` int(11) unsigned NOT NULL default '0',
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `char_name` varchar(25) NOT NULL default '',
+  `map` varchar(11) NOT NULL default '',
+  `mes` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`npc_id`),
+  INDEX (`account_id`),
+  INDEX (`char_id`)
+) ENGINE=MyISAM AUTO_INCREMENT=1;
+
+--
+-- Table structure for table `picklog`
+--
+# PickLog types
+# (M)onsters Drop
+# (P)layers Drop/Take
+# Mobs Drop (L)oot Drop/Take
+# Players (T)rade Give/Take
+# Players (V)ending Sell/Take
+# (S)hop Sell/Take
+# (N)PC Give/Take
+# (C)onsumable Items
+# (A)dministrators Create/Delete
+# Sto(R)age
+# (G)uild Storage
+# (E)mail attachment
+# (B)uying Store
+# Pr(O)duced Items/Ingredients
+# Auct(I)oned Items
+# (X) Other
+# (D) Stolen from mobs
+# (U) MVP Prizes
+# (F) Guild/Party Bound retrieval
+# Lotter(Y)
+# (Z) Merged Items
+# (Q)uest
+
+CREATE TABLE IF NOT EXISTS `picklog` (
+  `id` int(11) NOT NULL auto_increment,
+  `time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `char_id` int(11) NOT NULL default '0',
+  `type` enum('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$','F','Z','Q') NOT NULL default 'P',
+  `nameid` smallint(5) unsigned NOT NULL default '0',
+  `amount` int(11) NOT NULL default '1',
+  `refine` tinyint(3) unsigned NOT NULL default '0',
+  `card0` smallint(5) unsigned NOT NULL default '0',
+  `card1` smallint(5) unsigned NOT NULL default '0',
+  `card2` smallint(5) unsigned NOT NULL default '0',
+  `card3` smallint(5) unsigned NOT NULL default '0',
+  `unique_id` bigint(20) unsigned NOT NULL default '0',
+  `map` varchar(11) NOT NULL default '',
+  `bound` tinyint(1) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`id`),
+  INDEX (`type`)
+) ENGINE=MyISAM AUTO_INCREMENT=1;
+
+--
+-- Table structure for table `zenylog`
+--
+# ZenyLog types
+# (M)onsters
# (T)rade
# (V)ending Sell/Buy
# (S)hop Sell/Buy
# (N)PC Change amount
+# (A)dministrators
# (E)Mail
# (B)uying Store
# Ban(K) Transactions
+
+CREATE TABLE IF NOT EXISTS `zenylog` (
+  `id` int(11) NOT NULL auto_increment,
+  `time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `char_id` int(11) NOT NULL default '0',
+  `src_id` int(11) NOT NULL default '0',
+  `type` enum('T','V','P','M','S','N','D','C','A','E','I','B','K') NOT NULL default 'S',
+  `amount` int(11) NOT NULL default '0',
+  `map` varchar(11) NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  INDEX (`type`)
+) ENGINE=MyISAM AUTO_INCREMENT=1;

+ 136 - 190
sql-files/main.sql

@@ -24,19 +24,6 @@ CREATE TABLE IF NOT EXISTS `acc_reg_str` (
   KEY `account_id` (`account_id`)
 ) ENGINE=MyISAM;
 
---
--- Table structure for table `skillcooldown`
---
-
-CREATE TABLE IF NOT EXISTS `skillcooldown` (
-  `account_id` int(11) unsigned NOT NULL,
-  `char_id` int(11) unsigned NOT NULL,
-  `skill` smallint(11) unsigned NOT NULL DEFAULT '0',
-  `tick` int(11) NOT NULL,
-  KEY `account_id` (`account_id`),
-  KEY `char_id` (`char_id`)
-) ENGINE=MyISAM;
-
 --
 -- Table structure for table `auction`
 --
@@ -64,6 +51,65 @@ CREATE TABLE IF NOT EXISTS `auction` (
   PRIMARY KEY  (`auction_id`)
 ) ENGINE=MyISAM;
 
+--
+-- Table structure for `db_roulette`
+--
+
+CREATE TABLE `db_roulette` (
+  `index` int(11) NOT NULL default '0',
+  `level` smallint(5) unsigned NOT NULL,
+  `item_id` smallint(5) unsigned NOT NULL,
+  `amount` smallint(5) unsigned NOT NULL DEFAULT '1',
+  `flag` smallint(5) unsigned NOT NULL DEFAULT '1',
+  PRIMARY KEY (`index`)
+) ENGINE=MyISAM;
+
+--
+-- Table structure for table `bonus_script`
+--
+
+CREATE TABLE IF NOT EXISTS `bonus_script` (
+  `char_id` INT(11) UNSIGNED NOT NULL,
+  `script` TEXT NOT NULL,
+  `tick` INT(11) UNSIGNED NOT NULL DEFAULT '0',
+  `flag` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+  `type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
+  `icon` SMALLINT(3) NOT NULL DEFAULT '-1'
+) ENGINE=InnoDB;
+
+--
+-- Table structure for table `buyingstore_items`
+--
+
+CREATE TABLE IF NOT EXISTS `buyingstore_items` (
+  `buyingstore_id` int(10) unsigned NOT NULL,
+  `index` smallint(5) unsigned NOT NULL,
+  `item_id` int(10) unsigned NOT NULL,
+  `amount` smallint(5) unsigned NOT NULL,
+  `price` int(10) unsigned NOT NULL
+) ENGINE=MyISAM;
+
+--
+-- Table structure for table `buyingstores`
+--
+
+CREATE TABLE IF NOT EXISTS `buyingstores` (
+  `id` int(10) unsigned NOT NULL,
+  `account_id` int(11) unsigned NOT NULL,
+  `char_id` int(10) unsigned NOT NULL,
+  `sex` enum('F','M') NOT NULL DEFAULT 'M',
+  `map` varchar(20) NOT NULL,
+  `x` smallint(5) unsigned NOT NULL,
+  `y` smallint(5) unsigned NOT NULL,
+  `title` varchar(80) NOT NULL,
+  `limit` int(10) unsigned NOT NULL,
+  `body_direction` CHAR( 1 ) NOT NULL DEFAULT '4',
+  `head_direction` CHAR( 1 ) NOT NULL DEFAULT '0',
+  `sit` CHAR( 1 ) NOT NULL DEFAULT '1',
+  `autotrade` tinyint(4) NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=MyISAM;
+
 --
 -- Table structure for table `cart_inventory`
 --
@@ -242,19 +288,6 @@ CREATE TABLE IF NOT EXISTS `friends` (
   KEY  `char_id` (`char_id`)
 ) ENGINE=MyISAM;
 
---
--- Table structure for table `hotkey`
---
-
-CREATE TABLE IF NOT EXISTS `hotkey` (
-	`char_id` INT(11) NOT NULL,
-	`hotkey` TINYINT(2) unsigned NOT NULL,
-	`type` TINYINT(1) unsigned NOT NULL default '0',
-	`itemskill_id` INT(11) unsigned NOT NULL default '0',
-	`skill_lvl` TINYINT(4) unsigned NOT NULL default '0',
-	PRIMARY KEY (`char_id`,`hotkey`)
-) ENGINE=MyISAM;
-
 --
 -- Table structure for table `global_acc_reg_num`
 --
@@ -460,6 +493,19 @@ CREATE TABLE IF NOT EXISTS `homunculus` (
   PRIMARY KEY  (`homun_id`)
 ) ENGINE=MyISAM;
 
+--
+-- Table structure for table `hotkey`
+--
+
+CREATE TABLE IF NOT EXISTS `hotkey` (
+	`char_id` INT(11) NOT NULL,
+	`hotkey` TINYINT(2) unsigned NOT NULL,
+	`type` TINYINT(1) unsigned NOT NULL default '0',
+	`itemskill_id` INT(11) unsigned NOT NULL default '0',
+	`skill_lvl` TINYINT(4) unsigned NOT NULL default '0',
+	PRIMARY KEY (`char_id`,`hotkey`)
+) ENGINE=MyISAM;
+
 -- 
 -- Table structure for table `interlog`
 --
@@ -469,6 +515,16 @@ CREATE TABLE IF NOT EXISTS `interlog` (
   `log` varchar(255) NOT NULL default ''
 ) ENGINE=MyISAM; 
 
+--
+-- Table structure for table `interreg`
+--
+
+CREATE TABLE IF NOT EXISTS `interreg` (
+  `varname` varchar(11) NOT NULL,
+  `value` varchar(20) NOT NULL,
+   PRIMARY KEY (`varname`)
+) ENGINE=InnoDB;
+
 --
 -- Table structure for table `inventory`
 --
@@ -538,34 +594,6 @@ CREATE TABLE IF NOT EXISTS `login` (
 
 INSERT INTO `login` (`account_id`, `userid`, `user_pass`, `sex`, `email`) VALUES ('1', 's1', 'p1', 'S','athena@athena.com');
 
---
--- Table structure for table `mapreg`
---
-
-CREATE TABLE IF NOT EXISTS `mapreg` (
-  `varname` varchar(32) binary NOT NULL,
-  `index` int(11) unsigned NOT NULL default '0',
-  `value` varchar(255) NOT NULL,
-  PRIMARY KEY (`varname`,`index`)
-) ENGINE=MyISAM;
-
---
--- Table structure for table `sc_data`
---
-
-CREATE TABLE IF NOT EXISTS `sc_data` (
-  `account_id` int(11) unsigned NOT NULL,
-  `char_id` int(11) unsigned NOT NULL,
-  `type` smallint(11) unsigned NOT NULL,
-  `tick` int(11) NOT NULL,
-  `val1` int(11) NOT NULL default '0',
-  `val2` int(11) NOT NULL default '0',
-  `val3` int(11) NOT NULL default '0',
-  `val4` int(11) NOT NULL default '0',
-  KEY (`account_id`),
-  KEY (`char_id`)
-) ENGINE=MyISAM;
-
 --
 -- Table structure for table `mail`
 --
@@ -595,6 +623,30 @@ CREATE TABLE IF NOT EXISTS `mail` (
   PRIMARY KEY  (`id`)
 ) ENGINE=MyISAM;
 
+--
+-- Table structure for table `mapreg`
+--
+
+CREATE TABLE IF NOT EXISTS `mapreg` (
+  `varname` varchar(32) binary NOT NULL,
+  `index` int(11) unsigned NOT NULL default '0',
+  `value` varchar(255) NOT NULL,
+  PRIMARY KEY (`varname`,`index`)
+) ENGINE=MyISAM;
+
+--
+-- Table `market` for market shop persistency
+--
+
+CREATE TABLE IF NOT EXISTS `market` (
+  `name` varchar(32) NOT NULL DEFAULT '',
+  `nameid` SMALLINT(5) UNSIGNED NOT NULL,
+  `price` INT(11) UNSIGNED NOT NULL,
+  `amount` SMALLINT(5) UNSIGNED NOT NULL,
+  `flag` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0',
+  PRIMARY KEY  (`name`,`nameid`)
+) ENGINE = MyISAM;
+
 --
 -- Table structure for table `memo`
 --
@@ -640,6 +692,36 @@ CREATE TABLE IF NOT EXISTS `mercenary_owner` (
   PRIMARY KEY  (`char_id`)
 ) ENGINE=MyISAM;
 
+--
+-- Table structure for table `sc_data`
+--
+
+CREATE TABLE IF NOT EXISTS `sc_data` (
+  `account_id` int(11) unsigned NOT NULL,
+  `char_id` int(11) unsigned NOT NULL,
+  `type` smallint(11) unsigned NOT NULL,
+  `tick` int(11) NOT NULL,
+  `val1` int(11) NOT NULL default '0',
+  `val2` int(11) NOT NULL default '0',
+  `val3` int(11) NOT NULL default '0',
+  `val4` int(11) NOT NULL default '0',
+  KEY (`account_id`),
+  KEY (`char_id`)
+) ENGINE=MyISAM;
+
+--
+-- Table structure for table `skillcooldown`
+--
+
+CREATE TABLE IF NOT EXISTS `skillcooldown` (
+  `account_id` int(11) unsigned NOT NULL,
+  `char_id` int(11) unsigned NOT NULL,
+  `skill` smallint(11) unsigned NOT NULL DEFAULT '0',
+  `tick` int(11) NOT NULL,
+  KEY `account_id` (`account_id`),
+  KEY `char_id` (`char_id`)
+) ENGINE=MyISAM;
+
 --
 -- Table structure for table `party`
 --
@@ -701,73 +783,6 @@ CREATE TABLE IF NOT EXISTS `ragsrvinfo` (
   `drop` int(11) unsigned NOT NULL default '0'
 ) ENGINE=MyISAM;
 
---
--- Table structure for `db_roulette`
---
-
-CREATE TABLE `db_roulette` (
-  `index` int(11) NOT NULL default '0',
-  `level` smallint(5) unsigned NOT NULL,
-  `item_id` smallint(5) unsigned NOT NULL,
-  `amount` smallint(5) unsigned NOT NULL DEFAULT '1',
-  `flag` smallint(5) unsigned NOT NULL DEFAULT '1',
-  PRIMARY KEY (`index`)
-) ENGINE=MyISAM;
-
--- ----------------------------
--- Records of db_roulette
--- ----------------------------
--- Info: http://ro.gnjoy.com/news/update/View.asp?seq=157&curpage=1
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 0, 1, 675, 1, 1 ); -- Silver_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 1, 1, 671, 1, 0 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 2, 1, 678, 1, 0 ); -- Poison_Bottle
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 3, 1, 604, 1, 0 ); -- Branch_Of_Dead_Tree
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 4, 1, 522, 1, 0 ); -- Fruit_Of_Mastela
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 5, 1, 671, 1, 0 ); -- Old_Ore_Box
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 6, 1, 12523, 1, 0 ); -- E_Inc_Agi_10_Scroll
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 7, 1, 985, 1, 0 ); -- Elunium
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 8, 1, 984, 1, 0 ); -- Oridecon
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 9, 2, 675, 1, 1 ); -- Silver_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 10, 2, 671, 1, 0 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 11, 2, 603, 1, 0 ); -- Old_Blue_Box
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 12, 2, 608, 1, 0 ); -- Seed_Of_Yggdrasil
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 13, 2, 607, 1, 0 ); -- Yggdrasilberry
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 14, 2, 12522, 1, 0 ); -- E_Blessing_10_Scroll
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 15, 2, 6223, 1, 0 ); -- Carnium
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 16, 2, 6224, 1, 0 ); -- Bradium
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 17, 3, 675, 1, 1 ); -- Silver_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 18, 3, 671, 1, 0 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 19, 3, 12108, 1, 0 ); -- Bundle_Of_Magic_Scroll
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 20, 3, 617, 1, 0 ); -- Old_Violet_Box
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 21, 3, 12514, 1, 0 ); -- E_Abrasive
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 22, 3, 7444, 1, 0 ); -- Treasure_Box
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 23, 3, 969, 1, 0 ); -- Gold
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 24, 4, 675, 1, 1 ); -- Silver_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 25, 4, 671, 1, 0 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 26, 4, 616, 1, 0 ); -- Old_Card_Album
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 27, 4, 12516, 1, 0 ); -- E_Small_Life_Potion
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 28, 4, 22777, 1, 0 ); -- Gift_Buff_Set
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 29, 4, 6231, 1, 0 ); -- Guarantee_Weapon_6Up
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 30, 5, 671, 1, 1 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 31, 5, 12246, 1, 0 ); -- Magic_Card_Album
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 32, 5, 12263, 1, 0 ); -- Comp_Battle_Manual
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 33, 5, 671, 1, 0 ); -- Potion_Box
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 34, 5, 6235, 1, 0 ); -- Guarantee_Armor_6Up
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 35, 6, 671, 1, 1 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 36, 6, 12766, 1, 0 ); -- Reward_Job_BM25
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 37, 6, 6234, 1, 0 ); -- Guarantee_Armor_7Up
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 38, 6, 6233, 1, 0 ); -- Guarantee_Armor_8Up
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 39, 7, 671, 1, 1 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 40, 7, 6233, 1, 0 ); -- Guarantee_Armor_8Up
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 41, 7, 6233, 1, 0 ); -- Guarantee_Armor_8Up	// KRO lists this twice
-
 --
 -- Table structure for table `skill`
 --
@@ -825,29 +840,6 @@ CREATE TABLE IF NOT EXISTS `storage` (
   KEY `account_id` (`account_id`)
 ) ENGINE=MyISAM;
 
---
--- Table structure for table `interreg`
---
-
-CREATE TABLE IF NOT EXISTS `interreg` (
-  `varname` varchar(11) NOT NULL,
-  `value` varchar(20) NOT NULL,
-   PRIMARY KEY (`varname`)
-) ENGINE=InnoDB;
-
---
--- Table structure for table `bonus_script`
---
-
-CREATE TABLE IF NOT EXISTS `bonus_script` (
-  `char_id` INT(11) UNSIGNED NOT NULL,
-  `script` TEXT NOT NULL,
-  `tick` INT(11) UNSIGNED NOT NULL DEFAULT '0',
-  `flag` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
-  `type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
-  `icon` SMALLINT(3) NOT NULL DEFAULT '-1'
-) ENGINE=InnoDB;
-
 --
 -- Table structure for table `vending_items`
 --
@@ -879,49 +871,3 @@ CREATE TABLE IF NOT EXISTS `vendings` (
   `autotrade` tinyint(4) NOT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=MyISAM;
-
---
--- Table structure for table `buyingstore_items`
---
-
-CREATE TABLE IF NOT EXISTS `buyingstore_items` (
-  `buyingstore_id` int(10) unsigned NOT NULL,
-  `index` smallint(5) unsigned NOT NULL,
-  `item_id` int(10) unsigned NOT NULL,
-  `amount` smallint(5) unsigned NOT NULL,
-  `price` int(10) unsigned NOT NULL
-) ENGINE=MyISAM;
-
---
--- Table structure for table `buyingstores`
---
-
-CREATE TABLE IF NOT EXISTS `buyingstores` (
-  `id` int(10) unsigned NOT NULL,
-  `account_id` int(11) unsigned NOT NULL,
-  `char_id` int(10) unsigned NOT NULL,
-  `sex` enum('F','M') NOT NULL DEFAULT 'M',
-  `map` varchar(20) NOT NULL,
-  `x` smallint(5) unsigned NOT NULL,
-  `y` smallint(5) unsigned NOT NULL,
-  `title` varchar(80) NOT NULL,
-  `limit` int(10) unsigned NOT NULL,
-  `body_direction` CHAR( 1 ) NOT NULL DEFAULT '4',
-  `head_direction` CHAR( 1 ) NOT NULL DEFAULT '0',
-  `sit` CHAR( 1 ) NOT NULL DEFAULT '1',
-  `autotrade` tinyint(4) NOT NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=MyISAM;
-
---
--- Table `market` for market shop persistency
---
-
-CREATE TABLE IF NOT EXISTS `market` (
-  `name` varchar(32) NOT NULL DEFAULT '',
-  `nameid` SMALLINT(5) UNSIGNED NOT NULL,
-  `price` INT(11) UNSIGNED NOT NULL,
-  `amount` SMALLINT(5) UNSIGNED NOT NULL,
-  `flag` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0',
-  PRIMARY KEY  (`name`,`nameid`)
-) ENGINE = MyISAM;

+ 53 - 0
sql-files/roulette_default_data.sql

@@ -0,0 +1,53 @@
+-- ----------------------------
+-- Records of db_roulette
+-- ----------------------------
+-- Info: http://ro.gnjoy.com/news/update/View.asp?seq=157&curpage=1
+
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 0, 1, 675, 1, 1 ); -- Silver_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 1, 1, 671, 1, 0 ); -- Gold_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 2, 1, 678, 1, 0 ); -- Poison_Bottle
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 3, 1, 604, 1, 0 ); -- Branch_Of_Dead_Tree
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 4, 1, 522, 1, 0 ); -- Fruit_Of_Mastela
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 5, 1, 671, 1, 0 ); -- Old_Ore_Box
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 6, 1, 12523, 1, 0 ); -- E_Inc_Agi_10_Scroll
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 7, 1, 985, 1, 0 ); -- Elunium
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 8, 1, 984, 1, 0 ); -- Oridecon
+
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 9, 2, 675, 1, 1 ); -- Silver_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 10, 2, 671, 1, 0 ); -- Gold_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 11, 2, 603, 1, 0 ); -- Old_Blue_Box
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 12, 2, 608, 1, 0 ); -- Seed_Of_Yggdrasil
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 13, 2, 607, 1, 0 ); -- Yggdrasilberry
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 14, 2, 12522, 1, 0 ); -- E_Blessing_10_Scroll
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 15, 2, 6223, 1, 0 ); -- Carnium
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 16, 2, 6224, 1, 0 ); -- Bradium
+
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 17, 3, 675, 1, 1 ); -- Silver_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 18, 3, 671, 1, 0 ); -- Gold_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 19, 3, 12108, 1, 0 ); -- Bundle_Of_Magic_Scroll
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 20, 3, 617, 1, 0 ); -- Old_Violet_Box
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 21, 3, 12514, 1, 0 ); -- E_Abrasive
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 22, 3, 7444, 1, 0 ); -- Treasure_Box
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 23, 3, 969, 1, 0 ); -- Gold
+
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 24, 4, 675, 1, 1 ); -- Silver_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 25, 4, 671, 1, 0 ); -- Gold_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 26, 4, 616, 1, 0 ); -- Old_Card_Album
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 27, 4, 12516, 1, 0 ); -- E_Small_Life_Potion
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 28, 4, 22777, 1, 0 ); -- Gift_Buff_Set
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 29, 4, 6231, 1, 0 ); -- Guarantee_Weapon_6Up
+
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 30, 5, 671, 1, 1 ); -- Gold_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 31, 5, 12246, 1, 0 ); -- Magic_Card_Album
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 32, 5, 12263, 1, 0 ); -- Comp_Battle_Manual
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 33, 5, 671, 1, 0 ); -- Potion_Box
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 34, 5, 6235, 1, 0 ); -- Guarantee_Armor_6Up
+
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 35, 6, 671, 1, 1 ); -- Gold_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 36, 6, 12766, 1, 0 ); -- Reward_Job_BM25
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 37, 6, 6234, 1, 0 ); -- Guarantee_Armor_7Up
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 38, 6, 6233, 1, 0 ); -- Guarantee_Armor_8Up
+
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 39, 7, 671, 1, 1 ); -- Gold_Coin
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 40, 7, 6233, 1, 0 ); -- Guarantee_Armor_8Up
+INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 41, 7, 6233, 1, 0 ); -- Guarantee_Armor_8Up	// KRO lists this twice

+ 2 - 0
src/common/cbasetypes.h

@@ -229,7 +229,9 @@ typedef uintptr_t uintptr;
 #define strcasecmp			stricmp
 #define strncasecmp			strnicmp
 #define strncmpi			strnicmp
+#if defined(__BORLANDC__) || _MSC_VER < 1900
 #define snprintf			_snprintf
+#endif
 #if defined(_MSC_VER) && _MSC_VER < 1400
 #define vsnprintf			_vsnprintf
 #endif

+ 17 - 7
src/map/atcommand.c

@@ -7076,7 +7076,7 @@ ACMD_FUNC(mobinfo)
 #ifdef VIP_ENABLE
 			// Display item rate increase for VIP.
 			if (pc_isvip(sd) && battle_config.vip_drop_increase)
-				droprate += battle_config.vip_drop_increase;
+				droprate += (droprate * battle_config.vip_drop_increase) / 100;
 #endif
 			if (item_data->slot)
 				sprintf(atcmd_output2, " - %s[%d]  %02.02f%%", item_data->jname, item_data->slot, (float)droprate / 100);
@@ -7616,7 +7616,7 @@ ACMD_FUNC(whodrops)
 #ifdef VIP_ENABLE
 				// Display item rate increase for VIP.
 				if (pc_isvip(sd) && battle_config.vip_drop_increase)
-					dropchance += battle_config.vip_drop_increase;
+					dropchance += (dropchance * battle_config.vip_drop_increase) / 100;
 #endif
 				sprintf(atcmd_output, "- %s (%d): %02.02f%%", mob_db(item_data->mob[j].id)->jname, item_data->mob[j].id, dropchance/100.);
 				clif_displaymessage(fd, atcmd_output);
@@ -7727,7 +7727,7 @@ ACMD_FUNC(mutearea)
 ACMD_FUNC(rates)
 {
 	char buf[CHAT_SIZE_MAX];
-	int base_exp_rate = 0, job_exp_rate = 0, item_rate = 0;
+	int base_exp_rate = 0, job_exp_rate = 0;
 
 	nullpo_ret(sd);
 	memset(buf, '\0', sizeof(buf));
@@ -7737,20 +7737,30 @@ ACMD_FUNC(rates)
 	if (pc_isvip(sd) && (battle_config.vip_base_exp_increase || battle_config.vip_job_exp_increase || battle_config.vip_drop_increase)) {
 		base_exp_rate += battle_config.vip_base_exp_increase;
 		job_exp_rate += battle_config.vip_job_exp_increase;
-		item_rate += battle_config.vip_drop_increase;
 	}
 #endif
+
 	snprintf(buf, CHAT_SIZE_MAX, msg_txt(sd,1298), // Experience rates: Base %.2fx / Job %.2fx
 		(battle_config.base_exp_rate+base_exp_rate)/100., (battle_config.job_exp_rate+job_exp_rate)/100.);
 	clif_displaymessage(fd, buf);
 	snprintf(buf, CHAT_SIZE_MAX, msg_txt(sd,1299), // Normal Drop Rates: Common %.2fx / Healing %.2fx / Usable %.2fx / Equipment %.2fx / Card %.2fx
-		(battle_config.item_rate_common+item_rate)/100., (battle_config.item_rate_heal+item_rate)/100., (battle_config.item_rate_use+item_rate)/100., (battle_config.item_rate_equip+item_rate)/100., (battle_config.item_rate_card+item_rate)/100.);
+		(battle_config.item_rate_common + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_common) / 100 : 0)) / 100.,
+		(battle_config.item_rate_heal + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_heal) / 100 : 0)) / 100.,
+		(battle_config.item_rate_use + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_use) / 100 : 0)) / 100.,
+		(battle_config.item_rate_equip + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_equip) / 100 : 0)) / 100.,
+		(battle_config.item_rate_card + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_card) / 100 : 0)) / 100.);
 	clif_displaymessage(fd, buf);
 	snprintf(buf, CHAT_SIZE_MAX, msg_txt(sd,1300), // Boss Drop Rates: Common %.2fx / Healing %.2fx / Usable %.2fx / Equipment %.2fx / Card %.2fx
-		(battle_config.item_rate_common_boss+item_rate)/100., (battle_config.item_rate_heal_boss+item_rate)/100., (battle_config.item_rate_use_boss+item_rate)/100., (battle_config.item_rate_equip_boss+item_rate)/100., (battle_config.item_rate_card_boss+item_rate)/100.);
+		(battle_config.item_rate_common_boss + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_common_boss) / 100 : 0)) / 100.,
+		(battle_config.item_rate_heal_boss + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_heal_boss) / 100 : 0)) / 100.,
+		(battle_config.item_rate_use_boss + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_use_boss) / 100 : 0)) / 100.,
+		(battle_config.item_rate_equip_boss + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_equip_boss) / 100 : 0)) / 100.,
+		(battle_config.item_rate_card_boss + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_card_boss) / 100 : 0)) / 100.);
 	clif_displaymessage(fd, buf);
 	snprintf(buf, CHAT_SIZE_MAX, msg_txt(sd,1301), // Other Drop Rates: MvP %.2fx / Card-Based %.2fx / Treasure %.2fx
-		(battle_config.item_rate_mvp+item_rate)/100., (battle_config.item_rate_adddrop+item_rate)/100., (battle_config.item_rate_treasure+item_rate)/100.);
+		(battle_config.item_rate_mvp + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_mvp) / 100 : 0)) / 100.,
+		(battle_config.item_rate_adddrop + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_adddrop) / 100 : 0)) / 100.,
+		(battle_config.item_rate_treasure + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_treasure) / 100 : 0)) / 100.);
 	clif_displaymessage(fd, buf);
 
 	return 0;

+ 32 - 22
src/map/clif.c

@@ -945,7 +945,9 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool
 	struct map_session_data* sd;
 	struct status_change* sc = status_get_sc(bl);
 	struct view_data* vd = status_get_viewdata(bl);
-	struct status_data *status = NULL;
+#if PACKETVER >= 20131223
+	struct status_data *status = status_get_status_data(bl);
+#endif
 	unsigned char *buf = WBUFP(buffer, 0);
 #if PACKETVER < 20091103
 	bool type = !pcdb_checkid(vd->class_);
@@ -981,17 +983,14 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool
 
 #if PACKETVER >= 20091103
 	name = status_get_name(bl);
-#if PACKETVER >= 20131223
-	status = status_get_status_data(bl);
 #if PACKETVER < 20110111
 	WBUFW(buf,2) = (spawn ? 62 : 63)+strlen(name);
 #elif PACKETVER < 20131223
-	WBUFW(buf,2) = (spawn ? 64 : 65)+strlen(name);
+	WBUFW(buf,2) = (uint16)((spawn ? 64 : 65)+strlen(name));
 #elif PACKETVER < 20150513
 	WBUFW(buf,2) = (spawn ? 77 : 78)+strlen(name);
 #else
 	WBUFW(buf,2) = (spawn ? 79 : 80)+strlen(name);
-#endif
 #endif
 	WBUFB(buf,4) = clif_bl_type(bl);
 	offset+=3;
@@ -1129,7 +1128,11 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool
 	buf = WBUFP(buffer,offset);
 #endif
 #if PACKETVER >= 20091103
+#if PACKETVER >= 20131223
 	memcpy((char*)WBUFP(buf,64), name, NAME_LENGTH);
+#else
+	memcpy((char*)WBUFP(buf,55), name, NAME_LENGTH);
+#endif
 	return WBUFW(buffer,2);
 #else
 	return packet_len(WBUFW(buffer,0));
@@ -1144,7 +1147,9 @@ static int clif_set_unit_walking(struct block_list* bl, struct unit_data* ud, un
 	struct map_session_data* sd;
 	struct status_change* sc = status_get_sc(bl);
 	struct view_data* vd = status_get_viewdata(bl);
-	struct status_data *status = NULL;
+#if PACKETVER >= 20131223
+	struct status_data *status = status_get_status_data(bl);
+#endif
 	unsigned char* buf = WBUFP(buffer,0);
 #if PACKETVER >= 7
 	unsigned short offset = 0;
@@ -1175,17 +1180,14 @@ static int clif_set_unit_walking(struct block_list* bl, struct unit_data* ud, un
 
 #if PACKETVER >= 20091103
 	name = status_get_name(bl);
-#if PACKETVER >= 20131223
-	status = status_get_status_data(bl);
 #if PACKETVER < 20110111
 	WBUFW(buf, 2) = 69+strlen(name);
 #elif PACKETVER < 20131223
-	WBUFW(buf, 2) = 71+strlen(name);
+	WBUFW(buf, 2) = (uint16)(71+strlen(name));
 #elif PACKETVER < 20150513
 	WBUFW(buf, 2) = 84+strlen(name);
 #else
 	WBUFW(buf, 2) = 86+strlen(name);
-#endif
 #endif
 	offset+=2;
 	buf = WBUFP(buffer,offset);
@@ -1269,7 +1271,11 @@ static int clif_set_unit_walking(struct block_list* bl, struct unit_data* ud, un
 	buf = WBUFP(buffer,offset);
 #endif
 #if PACKETVER >= 20091103
+#if PACKETVER >= 20131223
 	memcpy((char*)WBUFP(buf,71), name, NAME_LENGTH);
+#else
+	memcpy((char*)WBUFP(buf,62), name, NAME_LENGTH);
+#endif
 	return WBUFW(buffer,2);
 #else
 	return packet_len(WBUFW(buffer,0));
@@ -2410,16 +2416,18 @@ static void clif_addcards(unsigned char* buf, struct item* item)
 }
 
 /// Fills in part of the item buffers that calls for variable bonuses data. [Rytech]
-static void clif_add_random_options(unsigned char* buf, struct item* item)
+/// Dummy data used since this feature isnt supported yet (ITEM_RDM_OPT).
+/// A max of 5 random options can be supported.
+void clif_add_random_options(unsigned char* buf, struct item* item)
 {
-	// Dummy data used since this feature isnt supported yet (ITEM_RDM_OPT).
-	// A max of 5 random options can be supported.
+#if PACKETVER >= 20150226
 	int i;
 	for (i = 0; i < 5; i++){
 		WBUFW(buf,i*5+0) = 0;	// OptIndex
 		WBUFW(buf,i*5+2) = 0;	// Value
 		WBUFB(buf,i*5+4) = 0;	// Param1
 	}
+#endif
 }
 
 /// Notifies the client, about a received inventory item or the result of a pick-up request.
@@ -3135,7 +3143,9 @@ void clif_updatestatus(struct map_session_data *sd,int type)
 		break;
 	case SP_HP:
 		// On officials the HP never go below 1, even if you die [Lemongrass]
-		WFIFOL(fd,4)=max(1,sd->battle_status.hp);
+		// On officials the HP Novice class never go below 50%, even if you die [Napster]
+		WFIFOL(fd,4)= sd->battle_status.hp ? sd->battle_status.hp : (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE ? 1 : sd->battle_status.max_hp/2;
+
 		// TODO: Won't these overwrite the current packet?
 		if( map[sd->bl.m].hpmeter_visible )
 			clif_hpmeter(sd);
@@ -3938,7 +3948,7 @@ void clif_dispchat(struct chat_data* cd, int fd)
 	     : 1;
 
 	WBUFW(buf, 0) = 0xd7;
-	WBUFW(buf, 2) = 17 + strlen(cd->title);
+	WBUFW(buf, 2) = (uint16)(17 + strlen(cd->title));
 	WBUFL(buf, 4) = cd->owner->id;
 	WBUFL(buf, 8) = cd->bl.id;
 	WBUFW(buf,12) = cd->limit;
@@ -3976,7 +3986,7 @@ void clif_changechatstatus(struct chat_data* cd)
 	     : 1;
 
 	WBUFW(buf, 0) = 0xdf;
-	WBUFW(buf, 2) = 17 + strlen(cd->title);
+	WBUFW(buf, 2) = (uint16)(17 + strlen(cd->title));
 	WBUFL(buf, 4) = cd->owner->id;
 	WBUFL(buf, 8) = cd->bl.id;
 	WBUFW(buf,12) = cd->limit;
@@ -6016,7 +6026,7 @@ void clif_broadcast2(struct block_list* bl, const char* mes, int len, unsigned l
 void clif_channel_msg(struct Channel *channel, struct map_session_data *sd, char *msg, short color) {
 	DBIterator *iter;
 	struct map_session_data *user;
-	unsigned short msg_len = strlen(msg) + 1;
+	unsigned short msg_len = (unsigned short)(strlen(msg) + 1);
 
 	WFIFOHEAD(sd->fd,msg_len + 12);
 	WFIFOW(sd->fd,0) = 0x2C1;
@@ -8994,7 +9004,7 @@ void clif_specialeffect_value(struct block_list* bl, int effect_id, int num, sen
 // Modification of clif_messagecolor to send colored messages to players to chat log only (doesn't display overhead)
 /// 02c1 <packet len>.W <id>.L <color>.L <message>.?B
 int clif_colormes(int fd, unsigned long color, const char* msg) {
-	unsigned short msg_len = strlen(msg) + 1;
+	unsigned short msg_len = (unsigned short)(strlen(msg) + 1);
 
 	WFIFOHEAD(fd,msg_len + 12);
 	WFIFOW(fd,0) = 0x2C1;
@@ -9010,7 +9020,7 @@ int clif_colormes(int fd, unsigned long color, const char* msg) {
 /// Monster/NPC color chat [SnakeDrak] (ZC_NPC_CHAT).
 /// 02c1 <packet len>.W <id>.L <color>.L <message>.?B
 void clif_messagecolor(struct block_list* bl, unsigned long color, const char* msg) {
-	unsigned short msg_len = strlen(msg) + 1;
+	unsigned short msg_len = (unsigned short)(strlen(msg) + 1);
 	uint8 buf[256];
 	color = (color & 0x0000FF) << 16 | (color & 0x00FF00) | (color & 0xFF0000) >> 16; // RGB to BGR
 
@@ -9032,7 +9042,7 @@ void clif_messagecolor(struct block_list* bl, unsigned long color, const char* m
 
 void clif_messagecolor2(struct map_session_data *sd, unsigned long color, const char* msg)
 {
-	unsigned short msg_len = strlen(msg) + 1;
+	unsigned short msg_len = (unsigned short)(strlen(msg) + 1);
 
 	nullpo_retv(sd);
 
@@ -17727,7 +17737,7 @@ void clif_display_pinfo(struct map_session_data *sd, int cmdtype) {
 		//0:PCRoom
 		details_drop[0] = 0;
 		//1:Premium
-		details_drop[1] = battle_config.vip_drop_increase;
+		details_drop[1] = (battle_config.vip_drop_increase * battle_config.item_rate_common) / 100;
 		if (pc_isvip(sd)) {
 			if (details_drop[1] < 0)
 				details_drop[1] = 0 - details_drop[1];
@@ -17911,7 +17921,7 @@ void clif_showscript(struct block_list* bl, const char* message) {
 	}
 
 	WBUFW(buf,0) = 0x8b3;
-	WBUFW(buf,2) = (len+8);
+	WBUFW(buf,2) = (uint16)(len+8);
 	WBUFL(buf,4) = bl->id;
 	safestrncpy((char *) WBUFP(buf,8), message, len);
 	clif_send((unsigned char *) buf, WBUFW(buf,2), bl, ALL_CLIENT);

+ 3 - 4
src/map/itemdb.c

@@ -613,8 +613,7 @@ static void itemdb_read_itemgroup_sub(const char* filename, bool silent)
 
 		// Remove from DB
 		if (strcmpi(str[1], "clear") == 0 && itemdb_group->remove(itemdb_group, db_ui2key(group_id), &data)) {
-                        va_list ap;
-			itemdb_group_free(db_ui2key(group_id), &data, ap);
+			itemdb_group_free(db_ui2key(group_id), &data, NULL);
 			ShowNotice("Item Group '%s' has been cleared.\n", str[0]);
 			continue;
 		}
@@ -1580,8 +1579,8 @@ static void itemdb_read(void) {
 		itemdb_readdb();
 	
 	for(i=0; i<ARRAYLENGTH(dbsubpath); i++){
-		uint8 n1 = strlen(db_path)+strlen(dbsubpath[i])+1;
-		uint8 n2 = strlen(db_path)+strlen(DBPATH)+strlen(dbsubpath[i])+1;
+		uint8 n1 = (uint8)(strlen(db_path)+strlen(dbsubpath[i])+1);
+		uint8 n2 = (uint8)(strlen(db_path)+strlen(DBPATH)+strlen(dbsubpath[i])+1);
 		char* dbsubpath1 = (char*)aMalloc(n1+1);
 		char* dbsubpath2 = (char*)aMalloc(n2+1);
 		

+ 1 - 1
src/map/mob.c

@@ -2485,7 +2485,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 				drop_rate = max(drop_rate,cap_value((int)(0.5+drop_rate*(sd->sc.data[SC_ITEMBOOST]->val1)/100.),0,9000));
 			// Increase item drop rate for VIP.
 			if (battle_config.vip_drop_increase && (sd && pc_isvip(sd))) {
-				drop_rate += (int)(0.5 + (drop_rate * battle_config.vip_drop_increase) / 10000.);
+				drop_rate += (int)(0.5 + (drop_rate * battle_config.vip_drop_increase) / 100);
 				drop_rate = min(drop_rate,10000); //cap it to 100%
 			}
 #ifdef RENEWAL_DROP

+ 2 - 2
src/map/pc.c

@@ -10847,8 +10847,8 @@ void pc_readdb(void) {
 	 // reset then read statspoint
 	memset(statp,0,sizeof(statp));
 	for(i=0; i<ARRAYLENGTH(dbsubpath); i++){
-		uint8 n1 = strlen(db_path)+strlen(dbsubpath[i])+1;
-		uint8 n2 = strlen(db_path)+strlen(DBPATH)+strlen(dbsubpath[i])+1;
+		uint8 n1 = (uint8)(strlen(db_path)+strlen(dbsubpath[i])+1);
+		uint8 n2 = (uint8)(strlen(db_path)+strlen(DBPATH)+strlen(dbsubpath[i])+1);
 		char* dbsubpath1 = (char*)aMalloc(n1+1);
 		char* dbsubpath2 = (char*)aMalloc(n2+1);
 

+ 229 - 0
vcproj-14/char-server.vcxproj

@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{D356871D-58E1-450B-967A-E4E9646175AF}</ProjectGuid>
+    <RootNamespace>char-server</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">char-server</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">char-server</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessToFile>false</PreprocessToFile>
+      <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <AdditionalOptions>
+      </AdditionalOptions>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <DisableSpecificWarnings>4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
+      <AdditionalLibraryDirectories>..\3rdparty\mysql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;LIBCONFIG_STATIC;YY_USE_CONST;FD_SETSIZE=4096;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <AdditionalOptions>
+      </AdditionalOptions>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <DisableSpecificWarnings>4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
+      <AdditionalLibraryDirectories>..\3rdparty\mysql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\3rdparty\libconfig\grammar.h" />
+    <ClInclude Include="..\3rdparty\libconfig\libconfig.h" />
+    <ClInclude Include="..\3rdparty\libconfig\parsectx.h" />
+    <ClInclude Include="..\3rdparty\libconfig\scanctx.h" />
+    <ClInclude Include="..\3rdparty\libconfig\scanner.h" />
+    <ClInclude Include="..\3rdparty\libconfig\strbuf.h" />
+    <ClInclude Include="..\3rdparty\libconfig\wincompat.h" />
+    <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h" />
+    <ClInclude Include="..\src\common\cbasetypes.h" />
+    <ClInclude Include="..\src\common\core.h" />
+    <ClInclude Include="..\src\common\conf.h" />
+    <ClInclude Include="..\src\common\db.h" />
+    <ClInclude Include="..\src\common\ers.h" />
+    <ClInclude Include="..\src\common\malloc.h" />
+    <ClInclude Include="..\src\common\mapindex.h" />
+    <ClInclude Include="..\src\common\mempool.h" />
+    <ClInclude Include="..\src\common\mmo.h" />
+    <ClInclude Include="..\src\common\mutex.h" />
+    <ClInclude Include="..\src\common\nullpo.h" />
+    <ClInclude Include="..\src\common\raconf.h" />
+    <ClInclude Include="..\src\common\random.h" />
+    <ClInclude Include="..\src\common\showmsg.h" />
+    <ClInclude Include="..\src\common\socket.h" />
+    <ClInclude Include="..\src\common\sql.h" />
+    <ClInclude Include="..\src\common\strlib.h" />
+    <ClInclude Include="..\src\common\thread.h" />
+    <ClInclude Include="..\src\common\timer.h" />
+    <ClInclude Include="..\src\common\utils.h" />
+    <ClInclude Include="..\src\common\cli.h" />
+    <ClInclude Include="..\src\common\msg_conf.h" />
+    <ClInclude Include="..\src\char\char.h" />
+    <ClInclude Include="..\src\char\char_clif.h" />
+    <ClInclude Include="..\src\char\char_cnslif.h" />
+    <ClInclude Include="..\src\char\char_logif.h" />
+    <ClInclude Include="..\src\char\char_mapif.h" />
+    <ClInclude Include="..\src\char\int_auction.h" />
+    <ClInclude Include="..\src\char\int_elemental.h" />
+    <ClInclude Include="..\src\char\int_guild.h" />
+    <ClInclude Include="..\src\char\int_homun.h" />
+    <ClInclude Include="..\src\char\int_mail.h" />
+    <ClInclude Include="..\src\char\int_mercenary.h" />
+    <ClInclude Include="..\src\char\int_party.h" />
+    <ClInclude Include="..\src\char\int_pet.h" />
+    <ClInclude Include="..\src\char\int_quest.h" />
+    <ClInclude Include="..\src\char\int_storage.h" />
+    <ClInclude Include="..\src\char\inter.h" />
+    <ClInclude Include="..\src\common\winapi.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\3rdparty\libconfig\grammar.c" />
+    <ClCompile Include="..\3rdparty\libconfig\libconfig.c" />
+    <ClCompile Include="..\3rdparty\libconfig\scanctx.c" />
+    <ClCompile Include="..\3rdparty\libconfig\scanner.c" />
+    <ClCompile Include="..\3rdparty\libconfig\strbuf.c" />
+    <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c" />
+    <ClCompile Include="..\src\common\core.c" />
+    <ClCompile Include="..\src\common\conf.c" />
+    <ClCompile Include="..\src\common\db.c" />
+    <ClCompile Include="..\src\common\ers.c" />
+    <ClCompile Include="..\src\common\malloc.c" />
+    <ClCompile Include="..\src\common\mapindex.c" />
+    <ClCompile Include="..\src\common\mempool.c" />
+    <ClCompile Include="..\src\common\mutex.c" />
+    <ClCompile Include="..\src\common\nullpo.c" />
+    <ClCompile Include="..\src\common\raconf.c" />
+    <ClCompile Include="..\src\common\random.c" />
+    <ClCompile Include="..\src\common\showmsg.c" />
+    <ClCompile Include="..\src\common\socket.c" />
+    <ClCompile Include="..\src\common\sql.c" />
+    <ClCompile Include="..\src\common\strlib.c" />
+    <ClCompile Include="..\src\common\thread.c" />
+    <ClCompile Include="..\src\common\timer.c" />
+    <ClCompile Include="..\src\common\utils.c" />
+    <ClCompile Include="..\src\common\cli.c" />
+    <ClCompile Include="..\src\common\msg_conf.c" />
+    <ClInclude Include="..\src\config\core.h" />
+    <ClCompile Include="..\src\char\char.c" />
+    <ClCompile Include="..\src\char\char_clif.c" />
+    <ClCompile Include="..\src\char\char_cnslif.c" />
+    <ClCompile Include="..\src\char\char_logif.c" />
+    <ClCompile Include="..\src\char\char_mapif.c" />
+    <ClCompile Include="..\src\char\int_auction.c" />
+    <ClCompile Include="..\src\char\int_elemental.c" />
+    <ClCompile Include="..\src\char\int_guild.c" />
+    <ClCompile Include="..\src\char\int_homun.c" />
+    <ClCompile Include="..\src\char\int_mail.c" />
+    <ClCompile Include="..\src\char\int_mercenary.c" />
+    <ClCompile Include="..\src\char\int_party.c" />
+    <ClCompile Include="..\src\char\int_pet.c" />
+    <ClCompile Include="..\src\char\int_quest.c" />
+    <ClCompile Include="..\src\char\int_storage.c" />
+    <ClCompile Include="..\src\char\inter.c" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 297 - 0
vcproj-14/char-server.vcxproj.filters

@@ -0,0 +1,297 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="..\src\common\cli.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\core.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\conf.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\db.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\ers.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\malloc.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\mapindex.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\nullpo.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\random.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\showmsg.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\socket.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\sql.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\strlib.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\timer.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\utils.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\char.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\char_clif.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\char_cnslif.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\char_logif.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\char_mapif.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\int_auction.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\int_elemental.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\int_guild.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\int_homun.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\int_mail.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\int_mercenary.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\int_party.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\int_pet.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\int_quest.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\int_storage.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\char\inter.c">
+      <Filter>char</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c">
+      <Filter>3rdparty\mt19937ar</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\grammar.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\libconfig.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\scanctx.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\scanner.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\strbuf.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\thread.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\mutex.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\mempool.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\msg_conf.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\raconf.c">
+      <Filter>common</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\common\cbasetypes.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\cli.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\core.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\conf.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\db.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\ers.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\malloc.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mapindex.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mmo.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\nullpo.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\random.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\showmsg.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\socket.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\sql.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\strlib.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\timer.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\utils.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\inter.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\char.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\char_clif.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\char_cnslif.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\char_logif.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\char_mapif.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\int_auction.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\int_elemental.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\int_guild.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\int_homun.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\int_mail.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\int_mercenary.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\int_party.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\int_pet.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\int_quest.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\char\int_storage.h">
+      <Filter>char</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h">
+      <Filter>3rdparty\mt19937ar</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\grammar.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\libconfig.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\parsectx.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\scanctx.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\scanner.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\strbuf.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\wincompat.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\winapi.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\thread.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mutex.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mempool.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\msg_conf.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\raconf.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\config\core.h">
+      <Filter>config</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="common">
+      <UniqueIdentifier>{623f21b1-c166-4848-83d8-8b4fe0e2e2df}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="char">
+      <UniqueIdentifier>{83b1ecf5-21d1-4dac-915f-95ff77a90899}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="3rdparty">
+      <UniqueIdentifier>{b3f5c857-79c0-4a55-b8c5-7e7f56a8f948}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="3rdparty\mt19937ar">
+      <UniqueIdentifier>{847768ab-8c4b-431b-8667-00f8ae3b915c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="3rdparty\libconfig">
+      <UniqueIdentifier>{9e8badd7-548f-4eb4-9e87-613e87e772ff}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="config">
+      <UniqueIdentifier>{6489e7a1-f724-450c-86b4-f98d40eebb3a}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>

+ 215 - 0
vcproj-14/login-server.vcxproj

@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{D356871D-58E1-450B-967A-E5E9646175AF}</ProjectGuid>
+    <RootNamespace>login-server</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">login-server</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">login-server</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;WITH_SQL;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessToFile>false</PreprocessToFile>
+      <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <AdditionalOptions>
+      </AdditionalOptions>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <DisableSpecificWarnings>4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
+      <AdditionalLibraryDirectories>..\3rdparty\mysql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;WITH_SQL;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <AdditionalOptions>
+      </AdditionalOptions>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <PrecompiledHeaderFile>
+      </PrecompiledHeaderFile>
+      <PrecompiledHeaderOutputFile>
+      </PrecompiledHeaderOutputFile>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <DisableSpecificWarnings>4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
+      <AdditionalLibraryDirectories>..\3rdparty\mysql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\3rdparty\libconfig\grammar.h" />
+    <ClInclude Include="..\3rdparty\libconfig\libconfig.h" />
+    <ClInclude Include="..\3rdparty\libconfig\parsectx.h" />
+    <ClInclude Include="..\3rdparty\libconfig\scanctx.h" />
+    <ClInclude Include="..\3rdparty\libconfig\scanner.h" />
+    <ClInclude Include="..\3rdparty\libconfig\strbuf.h" />
+    <ClInclude Include="..\3rdparty\libconfig\wincompat.h" />
+    <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h" />
+    <ClInclude Include="..\src\common\mempool.h" />
+    <ClInclude Include="..\src\common\mutex.h" />
+    <ClInclude Include="..\src\common\raconf.h" />
+    <ClInclude Include="..\src\common\thread.h" />
+    <ClInclude Include="..\src\common\winapi.h" />
+    <ClInclude Include="..\src\common\cbasetypes.h" />
+    <ClInclude Include="..\src\common\core.h" />
+    <ClInclude Include="..\src\common\conf.h" />
+    <ClInclude Include="..\src\common\db.h" />
+    <ClInclude Include="..\src\common\ers.h" />
+    <ClInclude Include="..\src\common\malloc.h" />
+    <ClInclude Include="..\src\common\md5calc.h" />
+    <ClInclude Include="..\src\common\mmo.h" />
+    <ClInclude Include="..\src\common\nullpo.h" />
+    <ClInclude Include="..\src\common\random.h" />
+    <ClInclude Include="..\src\common\showmsg.h" />
+    <ClInclude Include="..\src\common\socket.h" />
+    <ClInclude Include="..\src\common\sql.h" />
+    <ClInclude Include="..\src\common\strlib.h" />
+    <ClInclude Include="..\src\common\timer.h" />
+    <ClInclude Include="..\src\common\utils.h" />
+    <ClInclude Include="..\src\common\cli.h" />
+    <ClInclude Include="..\src\common\msg_conf.h" />
+    <ClInclude Include="..\src\config\core.h" />
+    <ClInclude Include="..\src\login\account.h" />
+    <ClInclude Include="..\src\login\ipban.h" />
+    <ClInclude Include="..\src\login\login.h" />
+    <ClInclude Include="..\src\login\loginchrif.h" />
+    <ClInclude Include="..\src\login\loginclif.h" />
+    <ClInclude Include="..\src\login\logincnslif.h" />
+    <ClInclude Include="..\src\login\loginlog.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\3rdparty\libconfig\grammar.c" />
+    <ClCompile Include="..\3rdparty\libconfig\libconfig.c" />
+    <ClCompile Include="..\3rdparty\libconfig\scanctx.c" />
+    <ClCompile Include="..\3rdparty\libconfig\scanner.c" />
+    <ClCompile Include="..\3rdparty\libconfig\strbuf.c" />
+    <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c" />
+    <ClCompile Include="..\src\common\mempool.c" />
+    <ClCompile Include="..\src\common\mutex.c" />
+    <ClCompile Include="..\src\common\raconf.c" />
+    <ClCompile Include="..\src\common\thread.c" />
+    <ClCompile Include="..\src\common\core.c" />
+    <ClCompile Include="..\src\common\conf.c" />
+    <ClCompile Include="..\src\common\db.c" />
+    <ClCompile Include="..\src\common\ers.c" />
+    <ClCompile Include="..\src\common\malloc.c" />
+    <ClCompile Include="..\src\common\md5calc.c" />
+    <ClCompile Include="..\src\common\nullpo.c" />
+    <ClCompile Include="..\src\common\random.c" />
+    <ClCompile Include="..\src\common\showmsg.c" />
+    <ClCompile Include="..\src\common\socket.c" />
+    <ClCompile Include="..\src\common\sql.c" />
+    <ClCompile Include="..\src\common\strlib.c" />
+    <ClCompile Include="..\src\common\timer.c" />
+    <ClCompile Include="..\src\common\utils.c" />
+    <ClCompile Include="..\src\common\cli.c" />
+    <ClCompile Include="..\src\common\msg_conf.c" />
+    <ClCompile Include="..\src\login\account.c" />
+    <ClCompile Include="..\src\login\ipban.c" />
+    <ClCompile Include="..\src\login\login.c" />
+    <ClCompile Include="..\src\login\loginchrif.c" />
+    <ClCompile Include="..\src\login\loginclif.c" />
+    <ClCompile Include="..\src\login\logincnslif.c" />
+    <ClCompile Include="..\src\login\loginlog.c" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 243 - 0
vcproj-14/login-server.vcxproj.filters

@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="..\src\login\account.c">
+      <Filter>login</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\login\ipban.c">
+      <Filter>login</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\login\login.c">
+      <Filter>login</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\login\loginchrif.c">
+      <Filter>login</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\login\loginclif.c">
+      <Filter>login</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\login\logincnslif.c">
+      <Filter>login</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\login\loginlog.c">
+      <Filter>login</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\cli.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\core.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\conf.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\db.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\ers.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\malloc.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\md5calc.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\nullpo.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\random.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\showmsg.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\socket.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\sql.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\strlib.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\timer.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\utils.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\thread.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\mutex.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\mempool.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\msg_conf.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\raconf.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c">
+      <Filter>3rdparty\mt19937ar</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\grammar.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\libconfig.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\scanctx.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\scanner.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\strbuf.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\login\account.h">
+      <Filter>login</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\login\ipban.h">
+      <Filter>login</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\login\login.h">
+      <Filter>login</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\login\loginchrif.h">
+      <Filter>login</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\login\loginclif.h">
+      <Filter>login</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\login\logincnslif.h">
+      <Filter>login</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\login\loginlog.h">
+      <Filter>login</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\cbasetypes.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\core.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\cli.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\conf.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\db.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\ers.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\malloc.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\md5calc.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mmo.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\nullpo.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\random.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\showmsg.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\socket.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\sql.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\strlib.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\timer.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\utils.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\winapi.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\thread.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mutex.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mempool.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\msg_conf.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\raconf.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h">
+      <Filter>3rdparty\mt19937ar</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\grammar.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\libconfig.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\parsectx.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\scanctx.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\scanner.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\strbuf.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\wincompat.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\config\core.h">
+      <Filter>config</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="common">
+      <UniqueIdentifier>{b50ee803-e71d-4d41-8f7d-2dad5839df50}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="login">
+      <UniqueIdentifier>{8eea96ed-d379-4694-ae2e-ffb0be95170c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="3rdparty">
+      <UniqueIdentifier>{ab5c90ec-923d-4847-a214-45b40818211e}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="3rdparty\mt19937ar">
+      <UniqueIdentifier>{68e3bcee-28d9-4b2d-8701-614d50f32999}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="3rdparty\libconfig">
+      <UniqueIdentifier>{779e8145-9bb2-4a88-9149-60586ab0bdd4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="config">
+      <UniqueIdentifier>{9aa58d37-a3b4-436e-94f2-3776f379251a}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>

+ 363 - 0
vcproj-14/map-server.vcxproj

@@ -0,0 +1,363 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{D356871D-58E1-450B-967A-E6E9646175AF}</ProjectGuid>
+    <RootNamespace>map-server</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">map-server</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">map-server</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;..\3rdparty\libconfig;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessToFile>false</PreprocessToFile>
+      <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <AdditionalOptions>
+      </AdditionalOptions>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <DisableSpecificWarnings>4018;4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;zdll.lib;pcre.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
+      <AdditionalLibraryDirectories>..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;..\3rdparty\pcre\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;..\3rdparty\libconfig;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;NDEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <AdditionalOptions>
+      </AdditionalOptions>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <DisableSpecificWarnings>4018;4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;zdll.lib;pcre.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
+      <AdditionalLibraryDirectories>..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;..\3rdparty\pcre\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\3rdparty\libconfig\grammar.h" />
+    <ClInclude Include="..\3rdparty\libconfig\libconfig.h" />
+    <ClInclude Include="..\3rdparty\libconfig\parsectx.h" />
+    <ClInclude Include="..\3rdparty\libconfig\scanctx.h" />
+    <ClInclude Include="..\3rdparty\libconfig\scanner.h" />
+    <ClInclude Include="..\3rdparty\libconfig\strbuf.h" />
+    <ClInclude Include="..\3rdparty\libconfig\wincompat.h" />
+    <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h" />
+    <ClInclude Include="..\src\common\cbasetypes.h" />
+    <ClInclude Include="..\src\common\conf.h" />
+    <ClInclude Include="..\src\common\core.h" />
+    <ClInclude Include="..\src\common\db.h" />
+    <ClInclude Include="..\src\common\des.h" />
+    <ClInclude Include="..\src\common\ers.h" />
+    <ClInclude Include="..\src\common\grfio.h" />
+    <ClInclude Include="..\src\common\malloc.h" />
+    <ClInclude Include="..\src\common\mapindex.h" />
+    <ClInclude Include="..\src\common\md5calc.h" />
+    <ClInclude Include="..\src\common\mempool.h" />
+    <ClInclude Include="..\src\common\mmo.h" />
+    <ClInclude Include="..\src\common\mutex.h" />
+    <ClInclude Include="..\src\common\nullpo.h" />
+    <ClInclude Include="..\src\common\raconf.h" />
+    <ClInclude Include="..\src\common\random.h" />
+    <ClInclude Include="..\src\common\showmsg.h" />
+    <ClInclude Include="..\src\common\socket.h" />
+    <ClInclude Include="..\src\common\sql.h" />
+    <ClInclude Include="..\src\common\strlib.h" />
+    <ClInclude Include="..\src\common\thread.h" />
+    <ClInclude Include="..\src\common\timer.h" />
+    <ClInclude Include="..\src\common\utils.h" />
+    <ClInclude Include="..\src\common\winapi.h" />
+    <ClInclude Include="..\src\common\cli.h" />
+    <ClInclude Include="..\src\common\msg_conf.h" />
+    <ClInclude Include="..\src\map\atcommand.h" />
+    <ClInclude Include="..\src\map\battle.h" />
+    <ClInclude Include="..\src\map\battleground.h" />
+    <ClInclude Include="..\src\map\buyingstore.h" />
+    <ClInclude Include="..\src\map\cashshop.h" />
+    <ClInclude Include="..\src\map\channel.h" />
+    <ClInclude Include="..\src\map\chat.h" />
+    <ClInclude Include="..\src\map\chrif.h" />
+    <ClInclude Include="..\src\map\clif.h" />
+    <ClInclude Include="..\src\map\date.h" />
+    <ClInclude Include="..\src\map\duel.h" />
+    <ClInclude Include="..\src\map\elemental.h" />
+    <ClInclude Include="..\src\map\guild.h" />
+    <ClInclude Include="..\src\map\intif.h" />
+    <ClInclude Include="..\src\map\itemdb.h" />
+    <ClInclude Include="..\src\map\log.h" />
+    <ClInclude Include="..\src\map\mail.h" />
+    <ClInclude Include="..\src\map\map.h" />
+    <ClInclude Include="..\src\map\mapreg.h" />
+    <ClInclude Include="..\src\map\homunculus.h" />
+    <ClInclude Include="..\src\map\instance.h" />
+    <ClInclude Include="..\src\map\mercenary.h" />
+    <ClInclude Include="..\src\map\mob.h" />
+    <ClInclude Include="..\src\map\npc.h" />
+    <ClInclude Include="..\src\map\party.h" />
+    <ClInclude Include="..\src\map\path.h" />
+    <ClInclude Include="..\src\map\pc.h" />
+    <ClInclude Include="..\src\map\pc_groups.h" />
+    <ClInclude Include="..\src\map\pet.h" />
+    <ClInclude Include="..\src\map\quest.h" />
+    <ClInclude Include="..\src\config\const.h" />
+    <ClInclude Include="..\src\config\core.h" />
+    <ClInclude Include="..\src\config\renewal.h" />
+    <ClInclude Include="..\src\config\secure.h" />
+    <ClInclude Include="..\src\config\classes\general.h" />
+    <ClInclude Include="..\src\map\script.h" />
+    <ClInclude Include="..\src\map\searchstore.h" />
+    <ClInclude Include="..\src\map\skill.h" />
+    <ClInclude Include="..\src\map\status.h" />
+    <ClInclude Include="..\src\map\storage.h" />
+    <ClInclude Include="..\src\map\trade.h" />
+    <ClInclude Include="..\src\map\unit.h" />
+    <ClInclude Include="..\src\map\vending.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\3rdparty\libconfig\grammar.c" />
+    <ClCompile Include="..\3rdparty\libconfig\libconfig.c" />
+    <ClCompile Include="..\3rdparty\libconfig\scanctx.c" />
+    <ClCompile Include="..\3rdparty\libconfig\scanner.c" />
+    <ClCompile Include="..\3rdparty\libconfig\strbuf.c" />
+    <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c" />
+    <ClCompile Include="..\src\common\conf.c" />
+    <ClCompile Include="..\src\common\core.c" />
+    <ClCompile Include="..\src\common\db.c" />
+    <ClCompile Include="..\src\common\des.c" />
+    <ClCompile Include="..\src\common\ers.c" />
+    <ClCompile Include="..\src\common\grfio.c" />
+    <ClCompile Include="..\src\common\malloc.c" />
+    <ClCompile Include="..\src\common\mapindex.c" />
+    <ClCompile Include="..\src\common\md5calc.c" />
+    <ClCompile Include="..\src\common\mempool.c" />
+    <ClCompile Include="..\src\common\mutex.c" />
+    <ClCompile Include="..\src\common\nullpo.c" />
+    <ClCompile Include="..\src\common\raconf.c" />
+    <ClCompile Include="..\src\common\random.c" />
+    <ClCompile Include="..\src\common\showmsg.c" />
+    <ClCompile Include="..\src\common\socket.c" />
+    <ClCompile Include="..\src\common\sql.c" />
+    <ClCompile Include="..\src\common\strlib.c" />
+    <ClCompile Include="..\src\common\thread.c" />
+    <ClCompile Include="..\src\common\timer.c" />
+    <ClCompile Include="..\src\common\utils.c" />
+    <ClCompile Include="..\src\common\cli.c" />
+    <ClCompile Include="..\src\common\msg_conf.c" />
+    <ClCompile Include="..\src\map\atcommand.c" />
+    <ClCompile Include="..\src\map\battle.c" />
+    <ClCompile Include="..\src\map\battleground.c" />
+    <ClCompile Include="..\src\map\buyingstore.c" />
+    <ClCompile Include="..\src\map\cashshop.c" />
+    <ClCompile Include="..\src\map\channel.c" />
+    <ClCompile Include="..\src\map\chat.c" />
+    <ClCompile Include="..\src\map\chrif.c" />
+    <ClCompile Include="..\src\map\clif.c" />
+    <ClCompile Include="..\src\map\date.c" />
+    <ClCompile Include="..\src\map\duel.c" />
+    <ClCompile Include="..\src\map\elemental.c" />
+    <ClCompile Include="..\src\map\guild.c" />
+    <ClCompile Include="..\src\map\intif.c" />
+    <ClCompile Include="..\src\map\itemdb.c" />
+    <ClCompile Include="..\src\map\log.c" />
+    <ClCompile Include="..\src\map\mail.c" />
+    <ClCompile Include="..\src\map\map.c" />
+    <ClCompile Include="..\src\map\mapreg.c" />
+    <ClCompile Include="..\src\map\homunculus.c" />
+    <ClCompile Include="..\src\map\instance.c" />
+    <ClCompile Include="..\src\map\mercenary.c" />
+    <ClCompile Include="..\src\map\mob.c" />
+    <ClCompile Include="..\src\map\npc.c" />
+    <ClCompile Include="..\src\map\npc_chat.c" />
+    <ClCompile Include="..\src\map\party.c" />
+    <ClCompile Include="..\src\map\path.c" />
+    <ClCompile Include="..\src\map\pc.c" />
+    <ClCompile Include="..\src\map\pc_groups.c" />
+    <ClCompile Include="..\src\map\pet.c" />
+    <ClCompile Include="..\src\map\quest.c" />
+    <ClCompile Include="..\src\map\script.c" />
+    <ClCompile Include="..\src\map\searchstore.c" />
+    <ClCompile Include="..\src\map\skill.c" />
+    <ClCompile Include="..\src\map\status.c" />
+    <ClCompile Include="..\src\map\storage.c" />
+    <ClCompile Include="..\src\map\trade.c" />
+    <ClCompile Include="..\src\map\unit.c" />
+    <ClCompile Include="..\src\map\vending.c" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+  <Target Name="AfterBuild">
+    <Copy SourceFiles="..\conf\import-tmpl\battle_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\import\battle_conf.txt')" />
+    <Copy SourceFiles="..\conf\import-tmpl\char_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\import\char_conf.txt')" />
+    <Copy SourceFiles="..\conf\import-tmpl\inter_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\import\inter_conf.txt')" />
+    <Copy SourceFiles="..\conf\import-tmpl\log_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\import\log_conf.txt')" />
+    <Copy SourceFiles="..\conf\import-tmpl\login_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\import\login_conf.txt')" />
+    <Copy SourceFiles="..\conf\import-tmpl\map_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\import\map_conf.txt')" />
+    <Copy SourceFiles="..\conf\import-tmpl\packet_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\import\packet_conf.txt')" />
+    <Copy SourceFiles="..\conf\import-tmpl\script_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\import\script_conf.txt')" />
+    <Copy SourceFiles="..\conf\msg_conf\import-tmpl\map_msg_chn_conf.txt" DestinationFolder="..\conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\msg_conf\import\map_msg_chn_conf.txt')" />
+    <Copy SourceFiles="..\conf\msg_conf\import-tmpl\map_msg_eng_conf.txt" DestinationFolder="..\conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\msg_conf\import\map_msg_eng_conf.txt')" />
+    <Copy SourceFiles="..\conf\msg_conf\import-tmpl\map_msg_frn_conf.txt" DestinationFolder="..\conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\msg_conf\import\map_msg_frn_conf.txt')" />
+    <Copy SourceFiles="..\conf\msg_conf\import-tmpl\map_msg_grm_conf.txt" DestinationFolder="..\conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\msg_conf\import\map_msg_grm_conf.txt')" />
+    <Copy SourceFiles="..\conf\msg_conf\import-tmpl\map_msg_idn_conf.txt" DestinationFolder="..\conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\msg_conf\import\map_msg_idn_conf.txt')" />
+    <Copy SourceFiles="..\conf\msg_conf\import-tmpl\map_msg_mal_conf.txt" DestinationFolder="..\conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\msg_conf\import\map_msg_mal_conf.txt')" />
+    <Copy SourceFiles="..\conf\msg_conf\import-tmpl\map_msg_por_conf.txt" DestinationFolder="..\conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\msg_conf\import\map_msg_por_conf.txt')" />
+    <Copy SourceFiles="..\conf\msg_conf\import-tmpl\map_msg_rus_conf.txt" DestinationFolder="..\conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\msg_conf\import\map_msg_rus_conf.txt')" />
+    <Copy SourceFiles="..\conf\msg_conf\import-tmpl\map_msg_spn_conf.txt" DestinationFolder="..\conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('..\conf\msg_conf\import\map_msg_spn_conf.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\abra_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\abra_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\attr_fix.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\attr_fix.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\castle_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\castle_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\create_arrow_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\create_arrow_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\elemental_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\elemental_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\elemental_skill_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\elemental_skill_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\exp_guild.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\exp_guild.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\exp_homun.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\exp_homun.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\guild_skill_tree.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\guild_skill_tree.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\homun_skill_tree.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\homun_skill_tree.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\homunculus_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\homunculus_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\instance_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\instance_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_avail.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_avail.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_buyingstore.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_buyingstore.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_cash_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_cash_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_combo_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_combo_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_delay.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_delay.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_group_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_group_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_noequip.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_noequip.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_nouse.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_nouse.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_stack.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_stack.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\item_trade.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\item_trade.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\job_basehpsp_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_basehpsp_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\job_db1.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_db1.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\job_db2.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_db2.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\job_exp.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_exp.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\job_param_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\job_param_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\level_penalty.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\level_penalty.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\magicmushroom_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\magicmushroom_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\map_cache.dat" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\map_cache.dat')" />
+    <Copy SourceFiles="..\db\import-tmpl\map_index.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\map_index.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\mercenary_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\mercenary_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\mercenary_skill_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\mercenary_skill_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\mob_avail.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\mob_avail.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\mob_chat_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\mob_chat_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\mob_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\mob_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\mob_item_ratio.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\mob_item_ratio.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\mob_race2_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\mob_race2_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\mob_random_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\mob_random_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\mob_skill_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\mob_skill_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\packet_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\packet_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\pet_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\pet_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\produce_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\produce_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\quest_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\quest_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\refine_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\refine_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\size_fix.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\size_fix.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_cast_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_cast_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_castnodex_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_castnodex_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_changematerial_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_changematerial_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_copyable_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_copyable_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_damage_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_damage_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_improvise_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_improvise_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_nocast_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_nocast_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_nonearnpc_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_nonearnpc_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_require_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_require_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_tree.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_tree.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\skill_unit_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\skill_unit_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\spellbook_db.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\spellbook_db.txt')" />
+    <Copy SourceFiles="..\db\import-tmpl\statpoint.txt" DestinationFolder="..\db\import\" ContinueOnError="true" Condition="!Exists('..\db\import\statpoint.txt')" />
+  </Target>
+</Project>

+ 465 - 0
vcproj-14/map-server.vcxproj.filters

@@ -0,0 +1,465 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="..\src\map\atcommand.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\battle.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\battleground.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\buyingstore.c">
+      <Filter>map</Filter>
+    </ClCompile>  
+    <ClCompile Include="..\src\map\channel.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\cashshop.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\chat.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\chrif.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\clif.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\date.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\duel.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\elemental.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\guild.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\homunculus.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\instance.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\intif.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\itemdb.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\log.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\mail.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\map.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\mapreg.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\mercenary.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\mob.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\npc.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\npc_chat.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\party.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\path.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\pc.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\pet.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\quest.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\script.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\searchstore.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\skill.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\status.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\storage.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\trade.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\unit.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\vending.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\core.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\des.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\db.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\ers.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\grfio.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\malloc.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\mapindex.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\md5calc.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\nullpo.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\random.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\socket.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\sql.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\strlib.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\timer.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\utils.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\conf.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\map\pc_groups.c">
+      <Filter>map</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\showmsg.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c">
+      <Filter>3rdparty\mt19937ar</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\grammar.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\libconfig.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\scanctx.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\scanner.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\3rdparty\libconfig\strbuf.c">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\thread.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\mutex.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\mempool.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\raconf.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\cli.c">
+		<Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\msg_conf.c">
+		<Filter>common</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\map\atcommand.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\battle.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\battleground.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\buyingstore.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\channel.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\cashshop.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\chat.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\chrif.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\clif.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\date.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\duel.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\elemental.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\guild.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\homunculus.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\instance.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\intif.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\itemdb.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\log.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\mail.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\map.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\mapreg.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\mercenary.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\mob.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\npc.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\party.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\path.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\pc.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\pet.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\quest.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\script.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\searchstore.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\skill.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\status.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\storage.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\trade.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\unit.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\vending.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\cbasetypes.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\core.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\db.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\des.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\ers.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\grfio.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\malloc.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mapindex.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\md5calc.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mmo.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\nullpo.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\random.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\socket.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\sql.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\strlib.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\timer.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\utils.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\conf.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\map\pc_groups.h">
+      <Filter>map</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\showmsg.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h">
+      <Filter>3rdparty\mt19937ar</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\grammar.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\libconfig.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\parsectx.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\scanctx.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\scanner.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\strbuf.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\3rdparty\libconfig\wincompat.h">
+      <Filter>3rdparty\libconfig</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\winapi.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\thread.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mutex.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mempool.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\raconf.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\cli.h">
+	 <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\msg_conf.h">
+		<Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\config\secure.h">
+      <Filter>config</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\config\const.h">
+      <Filter>config</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\config\core.h">
+      <Filter>config</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\config\renewal.h">
+      <Filter>config</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\config\classes\general.h">
+      <Filter>config\classes</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="common">
+      <UniqueIdentifier>{3a137217-ebf7-44ee-95d9-3d7c51d2a199}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="map">
+      <UniqueIdentifier>{8c01a080-5a78-4fb7-96f2-862c33a02230}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="3rdparty">
+      <UniqueIdentifier>{c4845ea8-bcc7-411b-af29-e3842adb6714}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="3rdparty\mt19937ar">
+      <UniqueIdentifier>{fcf23386-ddba-4a72-9b41-62f8e2d0e6c0}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="3rdparty\libconfig">
+      <UniqueIdentifier>{9caf40b7-c4d1-43b4-bd1f-0376b4f920e7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="config">
+      <UniqueIdentifier>{3308d722-72ef-4a4c-a7aa-892d173c8ea3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="config\classes">
+      <UniqueIdentifier>{dc4ce819-c8e2-4c38-b929-5a57d01e6657}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>

+ 154 - 0
vcproj-14/mapcache.vcxproj

@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{D356871D-58E1-450B-967A-E7E9646175AF}</ProjectGuid>
+    <RootNamespace>mapcache</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mapcache</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mapcache</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessToFile>false</PreprocessToFile>
+      <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <AdditionalOptions>
+      </AdditionalOptions>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <AdditionalOptions>/FIXED:NO %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalDependencies>libcmtd.lib;oldnames.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)mapcache.exe</OutputFile>
+      <AdditionalLibraryDirectories>..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <AdditionalOptions>
+      </AdditionalOptions>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>libcmt.lib;oldnames.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)mapcache.exe</OutputFile>
+      <AdditionalLibraryDirectories>..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\common\core.c" />
+    <ClCompile Include="..\src\common\des.c" />
+    <ClCompile Include="..\src\common\grfio.c" />
+    <ClCompile Include="..\src\common\malloc.c" />
+    <ClCompile Include="..\src\common\showmsg.c" />
+    <ClCompile Include="..\src\common\strlib.c" />
+    <ClCompile Include="..\src\common\utils.c" />
+    <ClCompile Include="..\src\tool\mapcache.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\common\cbasetypes.h" />
+    <ClInclude Include="..\src\common\core.h" />
+    <ClInclude Include="..\src\common\des.h" />
+    <ClInclude Include="..\src\common\grfio.h" />
+    <ClInclude Include="..\src\common\malloc.h" />
+    <ClInclude Include="..\src\common\mmo.h" />
+    <ClInclude Include="..\src\common\showmsg.h" />
+    <ClInclude Include="..\src\common\strlib.h" />
+    <ClInclude Include="..\src\common\utils.h" />
+    <ClInclude Include="..\src\common\winapi.h" />
+    <ClInclude Include="..\src\config\renewal.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 75 - 0
vcproj-14/mapcache.vcxproj.filters

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="..\src\common\core.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\des.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\grfio.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\malloc.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\showmsg.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\strlib.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\common\utils.c">
+      <Filter>common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\tool\mapcache.c">
+      <Filter>mapcache</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\common\cbasetypes.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\core.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\des.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\grfio.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\malloc.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\mmo.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\showmsg.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\strlib.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\utils.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\common\winapi.h">
+      <Filter>common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\config\renewal.h">
+      <Filter>config</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="common">
+      <UniqueIdentifier>{a9c2444c-ffec-4e89-8412-e530231d79dc}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="mapcache">
+      <UniqueIdentifier>{5ea9d6f7-0a10-4bfb-ad39-478e4b1d8a0d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="config">
+      <UniqueIdentifier>{8ccd627c-fbb0-4bd1-bb96-a95bffa1dd8d}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>