Jelajahi Sumber

EOL-styled some more files

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9947 54d463be-8e91-2dee-dedb-b68131a5f0ec
ultramage 18 tahun lalu
induk
melakukan
4ca0b15de3
52 mengubah file dengan 2606 tambahan dan 2605 penghapusan
  1. 89 89
      eAthena-6.dsw
  2. TEMPAT SAMPAH
      lib/zlib-1.2.3
  3. 5 5
      npc/custom/eAAC_Scripts/DonationGirl/sql/donate.sql
  4. 13 13
      npc/custom/eAAC_Scripts/DonationGirl/sql/donate_item_db.sql
  5. 4 4
      npc/jobs/2-2/sage.txt
  6. 1 1
      npc/jobs/novice/supernovice.txt
  7. 70 70
      npc/sample/npc_test_setitemx.txt
  8. 22 22
      sql-files/convert_engine.sql
  9. 3 3
      sql-files/convert_passwords.sql
  10. 42 42
      sql-files/item_db2.sql
  11. 112 112
      sql-files/logs.sql
  12. 12 12
      sql-files/mail.sql
  13. 578 578
      sql-files/main.sql
  14. 204 204
      sql-files/oA2eA-rc5.sql
  15. 13 13
      sql-files/update_logs.sql
  16. 1 1
      sql-files/upgrade_0.5.2_database.sql
  17. 62 62
      sql-files/upgrade_0.5.2_main.sql
  18. 3 3
      sql-files/upgrade_1.0.0-rc1_main.sql
  19. 4 4
      sql-files/upgrade_1.0.0-rc2_database.sql
  20. 4 4
      sql-files/upgrade_1.0.0-rc5_database.sql
  21. 18 18
      sql-files/upgrade_svn1759.sql
  22. 7 7
      sql-files/upgrade_svn1863.sql
  23. 3 3
      sql-files/upgrade_svn2068.sql
  24. 14 14
      sql-files/upgrade_svn2252.sql
  25. 3 3
      sql-files/upgrade_svn2331.sql
  26. 2 2
      sql-files/upgrade_svn2574.sql
  27. 12 12
      sql-files/upgrade_svn3273.sql
  28. 1 1
      sql-files/upgrade_svn3746.sql
  29. 9 9
      sql-files/upgrade_svn4367.sql
  30. 5 5
      sql-files/upgrade_svn4941.sql
  31. 1 1
      sql-files/upgrade_svn5311.sql
  32. 1 1
      sql-files/upgrade_svn5322.sql
  33. 2 2
      sql-files/upgrade_svn5455.sql
  34. 1 1
      sql-files/upgrade_svn5607.sql
  35. 1 1
      sql-files/upgrade_svn5834.sql
  36. 14 14
      sql-files/upgrade_svn5902.sql
  37. 2 2
      sql-files/upgrade_svn6533.sql
  38. 1 1
      sql-files/upgrade_svn6868.sql
  39. 1 1
      sql-files/upgrade_svn7146.sql
  40. 2 2
      sql-files/upgrade_svn7580.sql
  41. 36 36
      sql-files/upgrade_svn7706.sql
  42. 7 7
      sql-files/upgrade_svn7768.sql
  43. 1 1
      sql-files/upgrade_svn8630.sql
  44. 1 1
      sql-files/upgrade_svn8675.sql
  45. 4 4
      sql-files/upgrade_svn8728.sql
  46. 6 6
      sql-files/upgrade_svn9050.sql
  47. 1 1
      sql-files/upgrade_svn9135.sql
  48. 1 0
      src/map/script.c
  49. 982 982
      src/tool/grfio.c
  50. 23 23
      src/tool/grfio.h
  51. 202 202
      src/tool/mapcache.c
  52. TEMPAT SAMPAH
      src/zlib/zlib-1.2.3

+ 89 - 89
eAthena-6.dsw

@@ -1,89 +1,89 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "login_txt"=".\vcproj-6\login-server_txt.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "login_sql"=".\vcproj-6\login-server_sql.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "char_txt"=".\vcproj-6\char-server_txt.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "char_sql"=".\vcproj-6\char-server_sql.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "map_txt"=".\vcproj-6\map-server_txt.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "map_sql"=".\vcproj-6\map-server_sql.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "login_txt"=".\vcproj-6\login-server_txt.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "login_sql"=".\vcproj-6\login-server_sql.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "char_txt"=".\vcproj-6\char-server_txt.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "char_sql"=".\vcproj-6\char-server_sql.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "map_txt"=".\vcproj-6\map-server_txt.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "map_sql"=".\vcproj-6\map-server_sql.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+

TEMPAT SAMPAH
lib/zlib-1.2.3


+ 5 - 5
npc/custom/eAAC_Scripts/DonationGirl/sql/donate.sql

@@ -1,6 +1,6 @@
-CREATE TABLE `donate` (
-  `account_id` int(11) unsigned NOT NULL,
-  `amount` float(5,2) unsigned NOT NULL,
-  `claimed` float(5,2) unsigned NOT NULL,
-  PRIMARY KEY  (`account_id`,`amount`)
+CREATE TABLE `donate` (
+  `account_id` int(11) unsigned NOT NULL,
+  `amount` float(5,2) unsigned NOT NULL,
+  `claimed` float(5,2) unsigned NOT NULL,
+  PRIMARY KEY  (`account_id`,`amount`)
 ) TYPE=MyISAM;

+ 13 - 13
npc/custom/eAAC_Scripts/DonationGirl/sql/donate_item_db.sql

@@ -1,14 +1,14 @@
-CREATE TABLE `donate_item_db` (
-  `id` smallint(5) unsigned NOT NULL default '0',
-  `name` varchar(30) NOT NULL default '',
-  `price` float(5,2) unsigned NOT NULL,
-  PRIMARY KEY  (`id`)
-) TYPE=MyISAM;
-
-#(ID,'Name',Price);
-REPLACE INTO `donate_item_db` VALUES (601,'Fly_Wing',0.06);
-REPLACE INTO `donate_item_db` VALUES (602,'Butterfly_Wing',0.33);
-REPLACE INTO `donate_item_db` VALUES (603,'Old_Blue_Box',10);
-REPLACE INTO `donate_item_db` VALUES (604,'Dead_Branch',0.05);
-REPLACE INTO `donate_item_db` VALUES (605,'Anodyne',2);
+CREATE TABLE `donate_item_db` (
+  `id` smallint(5) unsigned NOT NULL default '0',
+  `name` varchar(30) NOT NULL default '',
+  `price` float(5,2) unsigned NOT NULL,
+  PRIMARY KEY  (`id`)
+) TYPE=MyISAM;
+
+#(ID,'Name',Price);
+REPLACE INTO `donate_item_db` VALUES (601,'Fly_Wing',0.06);
+REPLACE INTO `donate_item_db` VALUES (602,'Butterfly_Wing',0.33);
+REPLACE INTO `donate_item_db` VALUES (603,'Old_Blue_Box',10);
+REPLACE INTO `donate_item_db` VALUES (604,'Dead_Branch',0.05);
+REPLACE INTO `donate_item_db` VALUES (605,'Anodyne',2);
 REPLACE INTO `donate_item_db` VALUES (606,'Aloevera',2);

+ 4 - 4
npc/jobs/2-2/sage.txt

@@ -1558,15 +1558,15 @@ L_Menu1_2:
 		L_Test1_14:
 			mes "15. Which one isn't necessary to unlock the Blacksmith skill 'Maximize Power'?";
 			next;
-			menu "Hilt Bending",L_Test1_15,"Skin Tempering",-,"Hammer Fall",L_Test1_15,"Weapon Perfection",L_Test1_15;
+			menu "Hilt Binding",L_Test1_15,"Skin Tempering",-,"Hammer Fall",L_Test1_15,"Weapon Perfection",L_Test1_15;
 			set @sage_test2,@sage_test2+5;
 		L_Test1_15:
-			mes "16. What is the defense power and supplemental ability of a Ribbon?";
+			mes "16. What is the defense power and supplemental ability of a Cute Ribbon?";
 			next;
 			menu "0 / SP +20",L_Test1_16,"0 / SP +30",L_Test1_16,"1 / SP +20",-,"1 / SP +30",L_Test1_16;
 			set @sage_test2,@sage_test2+5;
 		L_Test1_16:
-			mes "17. Which class can't equip a Saint Robe?";
+			mes "17. Which class can't equip a Saint's Robe?";
 			next;
 		//Swordsmen can't equip it either as of this writing.
 			menu "Swordsman",-,"Merchant",L_Test1_17,"Thief",-,"Acolyte",L_Test1_17;
@@ -1584,7 +1584,7 @@ L_Menu1_2:
 		L_Test1_19:
 			mes "20. Which tree is said to be the world's root?";
 			next;
-			menu "Igg Drasil",-,"Idrasil",L_Menu2_3,"Master",L_Menu2_3,"Old Tree",L_Menu2_3;
+			menu "Yggdrasil",-,"Idrasil",L_Menu2_3,"Master",L_Menu2_3,"Old Tree",L_Menu2_3;
 			set @sage_test2,@sage_test2+5;
 			goto L_Menu2_3;
 	//==================================

+ 1 - 1
npc/jobs/novice/supernovice.txt

@@ -216,7 +216,7 @@ L_Otherjob:
 
 
 // -- Car Rental --
-aldebaran.gat,54,238,5	script	Kafra	117,{
+aldebaran.gat,54,238,5	script	Kafra::kaf_sn	117,{
 	if(BaseJob != Job_SuperNovice) goto L_Otherjob;
 	if(checkcart() == 1) goto L_GotCart;
 	mes "[Kafra]";

+ 70 - 70
npc/sample/npc_test_setitemx.txt

@@ -1,70 +1,70 @@
-//by Lupus.
-// SVN TRUNK 9940+ only
-
-//setiteminfo(itemID,n,Value), where n
-//		0 value_buy;
-//		1 value_sell;
-//		2 type;
-//		3 maxchance = Max drop chance of this item e.g. 1 = 0.01% , etc..
-//				if = 0, then monsters don't drop it at all (rare or a quest item)
-//				if = 10000, then this item is sold in NPC shops only
-//		4 sex;
-//		5 equip;
-//		6 weight;
-//		7 atk;
-//		8 def;
-//		9 range;
-//		10 slot;
-//		11 look;
-//		12 elv;
-//		13 wlv;
-
-prontera.gat,164,161,5	script	Lupus	1013,{
-	menu "Make Knife[3] Edible",M_1,
-		"Make Apple Equippable",M_2,
-		"Edible Knife = Full SP",M_3,
-		"Knife = Weapon + 3 Notes",M_4;
-	close;
-
-M_1:
-	//WORKS!
-	mes "Ok. We Made Knife[3] Edible";
-	setiteminfo(1201,2,0); //type = 0 : potion
-	setitemscript(1201,"{dispbottom \"* You used Knife[3]\";}");
-	close;
-
-M_2:
-	//WORKS!
-	mes "Ok. We Made Apple Equippable";
-	//item type -> headgear
-	setiteminfo(512,2,5); //type = 5
-	//where to equip to
-	setiteminfo(512,5,512); //equip = 512
-	//set as headgear location
-	setiteminfo(512,11,256); //loc = 256
-	//set Headgear Sprite ID
-	setiteminfo(512,14,85); //view id = 85
-
-	setitemscript(512,"{dispbottom \"* Other item's changed\";}",0);
-	setitemscript(512,"{dispbottom \"* Equipped\";}",1);
-	setitemscript(512,"{dispbottom \"* Unequipped\";}",2);
-	close;
-
-M_3:
-	//WORKS!
-	mes "Ok. Now Edible Knife[3] restores your SP";
-	setitemscript(1201,2,0);
-	setitemscript(1201,"{dispbottom \"* You ate Knife[3] + Full SP\"; percentheal 0,100;}");
-	close;
-
-M_4:
-	//WORKS!
-	mes "Ok. We Made Knife... a weapon. But added 3 notes.";
-	setiteminfo(1201,2,4); //type = 4 : weapon again
-	setitemscript(1201,"{dispbottom \"* 1 Used\";}",0);
-	setitemscript(1201,"{dispbottom \"* 2 Equipped\";}",1);
-	setitemscript(1201,"{dispbottom \"* 3 Unequipped\";}",2);
-	close;
-
-}
-
+//by Lupus.
+// SVN TRUNK 9940+ only
+
+//setiteminfo(itemID,n,Value), where n
+//		0 value_buy;
+//		1 value_sell;
+//		2 type;
+//		3 maxchance = Max drop chance of this item e.g. 1 = 0.01% , etc..
+//				if = 0, then monsters don't drop it at all (rare or a quest item)
+//				if = 10000, then this item is sold in NPC shops only
+//		4 sex;
+//		5 equip;
+//		6 weight;
+//		7 atk;
+//		8 def;
+//		9 range;
+//		10 slot;
+//		11 look;
+//		12 elv;
+//		13 wlv;
+
+prontera.gat,164,161,5	script	Lupus	1013,{
+	menu "Make Knife[3] Edible",M_1,
+		"Make Apple Equippable",M_2,
+		"Edible Knife = Full SP",M_3,
+		"Knife = Weapon + 3 Notes",M_4;
+	close;
+
+M_1:
+	//WORKS!
+	mes "Ok. We Made Knife[3] Edible";
+	setiteminfo(1201,2,0); //type = 0 : potion
+	setitemscript(1201,"{dispbottom \"* You used Knife[3]\";}");
+	close;
+
+M_2:
+	//WORKS!
+	mes "Ok. We Made Apple Equippable";
+	//item type -> headgear
+	setiteminfo(512,2,5); //type = 5
+	//where to equip to
+	setiteminfo(512,5,512); //equip = 512
+	//set as headgear location
+	setiteminfo(512,11,256); //loc = 256
+	//set Headgear Sprite ID
+	setiteminfo(512,14,85); //view id = 85
+
+	setitemscript(512,"{dispbottom \"* Other item's changed\";}",0);
+	setitemscript(512,"{dispbottom \"* Equipped\";}",1);
+	setitemscript(512,"{dispbottom \"* Unequipped\";}",2);
+	close;
+
+M_3:
+	//WORKS!
+	mes "Ok. Now Edible Knife[3] restores your SP";
+	setitemscript(1201,2,0);
+	setitemscript(1201,"{dispbottom \"* You ate Knife[3] + Full SP\"; percentheal 0,100;}");
+	close;
+
+M_4:
+	//WORKS!
+	mes "Ok. We Made Knife... a weapon. But added 3 notes.";
+	setiteminfo(1201,2,4); //type = 4 : weapon again
+	setitemscript(1201,"{dispbottom \"* 1 Used\";}",0);
+	setitemscript(1201,"{dispbottom \"* 2 Equipped\";}",1);
+	setitemscript(1201,"{dispbottom \"* 3 Unequipped\";}",2);
+	close;
+
+}
+

+ 22 - 22
sql-files/convert_engine.sql

@@ -1,22 +1,22 @@
---
--- eAthena Database Converter ( InnoDB -> MyISAM ) by Jaguar
---
-
-ALTER TABLE `sc_data` DROP FOREIGN KEY `scdata_ibfk_1`, DROP FOREIGN KEY `scdata_ibfk_2`;
-ALTER TABLE `guild` DROP FOREIGN KEY `guild_ibfk_1`;
-ALTER TABLE `guild_alliance` DROP FOREIGN KEY `guild_alliance_ibfk_1`, DROP FOREIGN KEY `guild_alliance_ibfk_2`;
-ALTER TABLE `guild_expulsion` DROP FOREIGN KEY `guild_expulsion_ibfk_1`;
-ALTER TABLE `guild_member` DROP FOREIGN KEY `guild_member_ibfk_1`, DROP FOREIGN KEY `guild_member_ibfk_2`;
-ALTER TABLE `guild_position` DROP FOREIGN KEY `guild_position_ibfk_1`;
-ALTER TABLE `guild_skill` DROP FOREIGN KEY `guild_skill_ibfk_1`;
-ALTER TABLE `guild_storage` DROP FOREIGN KEY `guild_storage_ibfk_1`;
-ALTER TABLE `sc_data` TYPE = MYISAM;
-ALTER TABLE `login` TYPE = MYISAM;
-ALTER TABLE `char` TYPE = MYISAM;
-ALTER TABLE `guild` TYPE = MYISAM;
-ALTER TABLE `guild_alliance` TYPE = MYISAM;
-ALTER TABLE `guild_expulsion` TYPE = MYISAM;
-ALTER TABLE `guild_member` TYPE = MYISAM;
-ALTER TABLE `guild_position` TYPE = MYISAM;
-ALTER TABLE `guild_skill` TYPE = MYISAM;
-ALTER TABLE `guild_storage` TYPE = MYISAM;
+--
+-- eAthena Database Converter ( InnoDB -> MyISAM ) by Jaguar
+--
+
+ALTER TABLE `sc_data` DROP FOREIGN KEY `scdata_ibfk_1`, DROP FOREIGN KEY `scdata_ibfk_2`;
+ALTER TABLE `guild` DROP FOREIGN KEY `guild_ibfk_1`;
+ALTER TABLE `guild_alliance` DROP FOREIGN KEY `guild_alliance_ibfk_1`, DROP FOREIGN KEY `guild_alliance_ibfk_2`;
+ALTER TABLE `guild_expulsion` DROP FOREIGN KEY `guild_expulsion_ibfk_1`;
+ALTER TABLE `guild_member` DROP FOREIGN KEY `guild_member_ibfk_1`, DROP FOREIGN KEY `guild_member_ibfk_2`;
+ALTER TABLE `guild_position` DROP FOREIGN KEY `guild_position_ibfk_1`;
+ALTER TABLE `guild_skill` DROP FOREIGN KEY `guild_skill_ibfk_1`;
+ALTER TABLE `guild_storage` DROP FOREIGN KEY `guild_storage_ibfk_1`;
+ALTER TABLE `sc_data` TYPE = MYISAM;
+ALTER TABLE `login` TYPE = MYISAM;
+ALTER TABLE `char` TYPE = MYISAM;
+ALTER TABLE `guild` TYPE = MYISAM;
+ALTER TABLE `guild_alliance` TYPE = MYISAM;
+ALTER TABLE `guild_expulsion` TYPE = MYISAM;
+ALTER TABLE `guild_member` TYPE = MYISAM;
+ALTER TABLE `guild_position` TYPE = MYISAM;
+ALTER TABLE `guild_skill` TYPE = MYISAM;
+ALTER TABLE `guild_storage` TYPE = MYISAM;

+ 3 - 3
sql-files/convert_passwords.sql

@@ -1,3 +1,3 @@
-# Convert passwords to MD5 hashes
-
-UPDATE `login` SET `user_pass`=MD5(`user_pass`);
+# Convert passwords to MD5 hashes
+
+UPDATE `login` SET `user_pass`=MD5(`user_pass`);

+ 42 - 42
sql-files/item_db2.sql

@@ -1,42 +1,42 @@
-#
-# Table structure for table `item_db2`
-#
-
-DROP TABLE IF EXISTS `item_db2`;
-CREATE TABLE `item_db2` (
-  `id` smallint(5) unsigned NOT NULL default '0',
-  `name_english` varchar(50) NOT NULL default '',
-  `name_japanese` varchar(50) NOT NULL default '',
-  `type` tinyint(2) unsigned NOT NULL default '0',
-  `price_buy` mediumint(10) unsigned default NULL,
-  `price_sell` mediumint(10) unsigned default NULL,
-  `weight` smallint(5) unsigned NOT NULL default '0',
-  `attack` smallint(3) unsigned default NULL,
-  `defence` tinyint(3) unsigned default NULL,
-  `range` tinyint(2) unsigned default NULL,
-  `slots` tinyint(2) unsigned default NULL,
-  `equip_jobs` int(12) unsigned default NULL,
-  `equip_upper` tinyint(8) unsigned default NULL,
-  `equip_genders` tinyint(2) unsigned default NULL,
-  `equip_locations` smallint(4) unsigned default NULL,
-  `weapon_level` tinyint(2) unsigned default NULL,
-  `equip_level` tinyint(3) unsigned default NULL,
-  `refineable` tinyint(1) unsigned default NULL,
-  `view` smallint(3) unsigned default NULL,
-  `script` text,
-  `equip_script` text,
-  `unequip_script` text,
-  PRIMARY KEY  (`id`)
-) TYPE=MyISAM;
-
-# // Items Additional Database - Custom Items go here
-# //
-# // Structure of Database:
-# // ID,Name,Name,Type,Price,Sell,Weight,ATK,DEF,Range,Slot,Job,Upper,Gender,Loc,wLV,eLV,Refineable,View,{ Script },{ OnEquip_Script },{ OnUnequip_Script }
-# //
-# // THQ Quest Items
-# //=============================================================
-# REPLACE INTO `item_db2` VALUES (7950,'THG_Membership','THG Membership',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-# REPLACE INTO `item_db2` VALUES (7951,'Token_Bag','Token Bag',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-# REPLACE INTO `item_db2` VALUES (1998,'Jeramiah\'s_Jur','Jeramiah\'s Jur',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-# REPLACE INTO `item_db2` VALUES (1999,'Zed\'s_Staff','Zed\'s Staff',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+#
+# Table structure for table `item_db2`
+#
+
+DROP TABLE IF EXISTS `item_db2`;
+CREATE TABLE `item_db2` (
+  `id` smallint(5) unsigned NOT NULL default '0',
+  `name_english` varchar(50) NOT NULL default '',
+  `name_japanese` varchar(50) NOT NULL default '',
+  `type` tinyint(2) unsigned NOT NULL default '0',
+  `price_buy` mediumint(10) unsigned default NULL,
+  `price_sell` mediumint(10) unsigned default NULL,
+  `weight` smallint(5) unsigned NOT NULL default '0',
+  `attack` smallint(3) unsigned default NULL,
+  `defence` tinyint(3) unsigned default NULL,
+  `range` tinyint(2) unsigned default NULL,
+  `slots` tinyint(2) unsigned default NULL,
+  `equip_jobs` int(12) unsigned default NULL,
+  `equip_upper` tinyint(8) unsigned default NULL,
+  `equip_genders` tinyint(2) unsigned default NULL,
+  `equip_locations` smallint(4) unsigned default NULL,
+  `weapon_level` tinyint(2) unsigned default NULL,
+  `equip_level` tinyint(3) unsigned default NULL,
+  `refineable` tinyint(1) unsigned default NULL,
+  `view` smallint(3) unsigned default NULL,
+  `script` text,
+  `equip_script` text,
+  `unequip_script` text,
+  PRIMARY KEY  (`id`)
+) TYPE=MyISAM;
+
+# // Items Additional Database - Custom Items go here
+# //
+# // Structure of Database:
+# // ID,Name,Name,Type,Price,Sell,Weight,ATK,DEF,Range,Slot,Job,Upper,Gender,Loc,wLV,eLV,Refineable,View,{ Script },{ OnEquip_Script },{ OnUnequip_Script }
+# //
+# // THQ Quest Items
+# //=============================================================
+# REPLACE INTO `item_db2` VALUES (7950,'THG_Membership','THG Membership',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+# REPLACE INTO `item_db2` VALUES (7951,'Token_Bag','Token Bag',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+# REPLACE INTO `item_db2` VALUES (1998,'Jeramiah\'s_Jur','Jeramiah\'s Jur',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+# REPLACE INTO `item_db2` VALUES (1999,'Zed\'s_Staff','Zed\'s Staff',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

+ 112 - 112
sql-files/logs.sql

@@ -1,112 +1,112 @@
-#Pick_Log 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
-
-#Database: log
-#Table: picklog
-CREATE TABLE `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` set('M','P','L','T','V','S','N','C','A') NOT NULL default 'P',
-  `nameid` int(11) NOT NULL default '0',
-  `amount` int(11) NOT NULL default '1',
-  `refine` tinyint(3) unsigned NOT NULL default '0',
-  `card0` int(11) NOT NULL default '0',
-  `card1` int(11) NOT NULL default '0',
-  `card2` int(11) NOT NULL default '0',
-  `card3` int(11) NOT NULL default '0',
-  `map` varchar(20) NOT NULL default 'prontera.gat',
-  PRIMARY KEY  (`id`),
-  INDEX (`type`)
-) TYPE=MyISAM AUTO_INCREMENT=1 ;
-
-#ZenyLog types (M)onsters,(T)rade,(V)ending Sell/Buy,(S)hop Sell/Buy,(N)PC Change amount,(A)dministrators
-#Database: log
-#Table: zenylog
-CREATE TABLE `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` set('M','T','V','S','N','A') NOT NULL default 'S',
-  `amount` int(11) NOT NULL default '0',
-  `map` varchar(20) NOT NULL default 'prontera.gat',
-  PRIMARY KEY  (`id`),
-  INDEX (`type`)
-) TYPE=MyISAM AUTO_INCREMENT=1 ;
-
-#Database: log
-#Table: branchlog
-CREATE TABLE `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(30) NOT NULL default '',
-  `map` varchar(20) NOT NULL default 'prontera.gat',
-  PRIMARY KEY  (`branch_id`),
-  INDEX (`account_id`),
-  INDEX (`char_id`)
-) TYPE=MyISAM AUTO_INCREMENT=1 ;
-
-#Database: log
-#Table: mvplog
-CREATE TABLE `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` int(11) NOT NULL default '0',
-  `mvpexp` mediumint(9) NOT NULL default '0',
-  `map` varchar(20) NOT NULL default 'prontera.gat',
-  PRIMARY KEY  (`mvp_id`)
-) TYPE=MyISAM AUTO_INCREMENT=1 ;
-
-#Database: log
-#Table: atcommandlog
-CREATE TABLE `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(30) NOT NULL default '',
-  `map` varchar(20) NOT NULL default 'prontera.gat',
-  `command` varchar(50) NOT NULL default '',
-  PRIMARY KEY  (`atcommand_id`),
-  INDEX (`account_id`),
-  INDEX (`char_id`)
-) TYPE=MyISAM AUTO_INCREMENT=1 ;
-
-#Database: log
-#Table: npclog
-CREATE TABLE `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(30) NOT NULL default '',
-  `map` varchar(20) NOT NULL default 'prontera.gat',
-  `mes` varchar(255) NOT NULL default '',
-  PRIMARY KEY  (`npc_id`),
-  INDEX (`account_id`),
-  INDEX (`char_id`)
-) TYPE=MyISAM AUTO_INCREMENT=1 ;
-
-#ChatLOG
-CREATE TABLE `chatlog` (
-  `id` bigint(20) NOT NULL auto_increment,
-  `time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `type` set('W','P','G') NOT NULL default 'W',
-  `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(17) NOT NULL default 'prontera.gat',
-  `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`)
-) TYPE=MyISAM AUTO_INCREMENT=1 ;
+#Pick_Log 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
+
+#Database: log
+#Table: picklog
+CREATE TABLE `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` set('M','P','L','T','V','S','N','C','A') NOT NULL default 'P',
+  `nameid` int(11) NOT NULL default '0',
+  `amount` int(11) NOT NULL default '1',
+  `refine` tinyint(3) unsigned NOT NULL default '0',
+  `card0` int(11) NOT NULL default '0',
+  `card1` int(11) NOT NULL default '0',
+  `card2` int(11) NOT NULL default '0',
+  `card3` int(11) NOT NULL default '0',
+  `map` varchar(20) NOT NULL default 'prontera.gat',
+  PRIMARY KEY  (`id`),
+  INDEX (`type`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+#ZenyLog types (M)onsters,(T)rade,(V)ending Sell/Buy,(S)hop Sell/Buy,(N)PC Change amount,(A)dministrators
+#Database: log
+#Table: zenylog
+CREATE TABLE `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` set('M','T','V','S','N','A') NOT NULL default 'S',
+  `amount` int(11) NOT NULL default '0',
+  `map` varchar(20) NOT NULL default 'prontera.gat',
+  PRIMARY KEY  (`id`),
+  INDEX (`type`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+#Database: log
+#Table: branchlog
+CREATE TABLE `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(30) NOT NULL default '',
+  `map` varchar(20) NOT NULL default 'prontera.gat',
+  PRIMARY KEY  (`branch_id`),
+  INDEX (`account_id`),
+  INDEX (`char_id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+#Database: log
+#Table: mvplog
+CREATE TABLE `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` int(11) NOT NULL default '0',
+  `mvpexp` mediumint(9) NOT NULL default '0',
+  `map` varchar(20) NOT NULL default 'prontera.gat',
+  PRIMARY KEY  (`mvp_id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+#Database: log
+#Table: atcommandlog
+CREATE TABLE `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(30) NOT NULL default '',
+  `map` varchar(20) NOT NULL default 'prontera.gat',
+  `command` varchar(50) NOT NULL default '',
+  PRIMARY KEY  (`atcommand_id`),
+  INDEX (`account_id`),
+  INDEX (`char_id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+#Database: log
+#Table: npclog
+CREATE TABLE `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(30) NOT NULL default '',
+  `map` varchar(20) NOT NULL default 'prontera.gat',
+  `mes` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`npc_id`),
+  INDEX (`account_id`),
+  INDEX (`char_id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+#ChatLOG
+CREATE TABLE `chatlog` (
+  `id` bigint(20) NOT NULL auto_increment,
+  `time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `type` set('W','P','G') NOT NULL default 'W',
+  `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(17) NOT NULL default 'prontera.gat',
+  `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`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;

+ 12 - 12
sql-files/mail.sql

@@ -1,12 +1,12 @@
-CREATE TABLE `mail` (
-  `message_id` int(11) NOT NULL auto_increment,
-  `to_account_id` int(11) NOT NULL default '0',
-  `to_char_name` varchar(24) NOT NULL default '',
-  `from_account_id` int(11) NOT NULL default '0',
-  `from_char_name` varchar(24) NOT NULL default '',
-  `message` varchar(80) NOT NULL default '',
-  `read_flag` tinyint(1) NOT NULL default '0',
-  `priority` tinyint(1) NOT NULL default '0',
-  `check_flag` tinyint(1) NOT NULL default '0',
-  PRIMARY KEY  (`message_id`)
-) TYPE=MyISAM;
+CREATE TABLE `mail` (
+  `message_id` int(11) NOT NULL auto_increment,
+  `to_account_id` int(11) NOT NULL default '0',
+  `to_char_name` varchar(24) NOT NULL default '',
+  `from_account_id` int(11) NOT NULL default '0',
+  `from_char_name` varchar(24) NOT NULL default '',
+  `message` varchar(80) NOT NULL default '',
+  `read_flag` tinyint(1) NOT NULL default '0',
+  `priority` tinyint(1) NOT NULL default '0',
+  `check_flag` tinyint(1) NOT NULL default '0',
+  PRIMARY KEY  (`message_id`)
+) TYPE=MyISAM;

+ 578 - 578
sql-files/main.sql

@@ -1,578 +1,578 @@
--- MySQL dump 9.11
--- Server version	4.0.24
-
---
--- Table structure for table `cart_inventory`
---
-
-DROP TABLE IF EXISTS `cart_inventory`;
-CREATE TABLE `cart_inventory` (
-  `id` int(11) NOT NULL auto_increment,
-  `char_id` int(11) NOT NULL default '0',
-  `nameid` int(11) NOT NULL default '0',
-  `amount` int(11) NOT NULL default '0',
-  `equip` mediumint(8) unsigned NOT NULL default '0',
-  `identify` smallint(6) NOT NULL default '0',
-  `refine` tinyint(3) unsigned NOT NULL default '0',
-  `attribute` tinyint(4) NOT NULL default '0',
-  `card0` int(11) NOT NULL default '0',
-  `card1` int(11) NOT NULL default '0',
-  `card2` int(11) NOT NULL default '0',
-  `card3` int(11) NOT NULL default '0',
-  PRIMARY KEY  (`id`),
-  KEY `char_id` (`char_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `char`
---
-
-DROP TABLE IF EXISTS `char`;
-CREATE TABLE `char` (
-  `char_id` int(11) unsigned NOT NULL auto_increment,
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `char_num` tinyint(1) NOT NULL default '0',
-  `name` varchar(30) NOT NULL default '',
-  `class` smallint(6) unsigned NOT NULL default '0',
-  `base_level` smallint(6) unsigned NOT NULL default '1',
-  `job_level` smallint(6) unsigned NOT NULL default '1',
-  `base_exp` bigint(20) unsigned NOT NULL default '0',
-  `job_exp` bigint(20) unsigned NOT NULL default '0',
-  `zeny` int(11) unsigned NOT NULL default '0',
-  `str` smallint(4) unsigned NOT NULL default '0',
-  `agi` smallint(4) unsigned NOT NULL default '0',
-  `vit` smallint(4) unsigned NOT NULL default '0',
-  `int` smallint(4) unsigned NOT NULL default '0',
-  `dex` smallint(4) unsigned NOT NULL default '0',
-  `luk` smallint(4) unsigned NOT NULL default '0',
-  `max_hp` mediumint(8) unsigned NOT NULL default '0',
-  `hp` mediumint(8) unsigned NOT NULL default '0',
-  `max_sp` mediumint(6) unsigned NOT NULL default '0',
-  `sp` mediumint(6) unsigned NOT NULL default '0',
-  `status_point` smallint(4) unsigned NOT NULL default '0',
-  `skill_point` smallint(4) unsigned NOT NULL default '0',
-  `option` int(11) NOT NULL default '0',
-  `karma` tinyint(3) NOT NULL default '0',
-  `manner` tinyint(3) NOT NULL default '0',
-  `party_id` int(11) unsigned NOT NULL default '0',
-  `guild_id` int(11) unsigned NOT NULL default '0',
-  `pet_id` int(11) unsigned NOT NULL default '0',
-  `homun_id` int(11) unsigned NOT NULL default '0',
-  `hair` tinyint(4) unsigned NOT NULL default '0',
-  `hair_color` smallint(5) unsigned NOT NULL default '0',
-  `clothes_color` smallint(5) unsigned NOT NULL default '0',
-  `weapon` smallint(6) unsigned NOT NULL default '1',
-  `shield` smallint(6) unsigned NOT NULL default '0',
-  `head_top` smallint(6) unsigned NOT NULL default '0',
-  `head_mid` smallint(6) unsigned NOT NULL default '0',
-  `head_bottom` smallint(6) unsigned NOT NULL default '0',
-  `last_map` varchar(20) NOT NULL default 'prontera.gat',
-  `last_x` smallint(4) unsigned NOT NULL default '53',
-  `last_y` smallint(4) unsigned NOT NULL default '111',
-  `save_map` varchar(20) NOT NULL default 'prontera.gat',
-  `save_x` smallint(4) unsigned NOT NULL default '53',
-  `save_y` smallint(4) unsigned NOT NULL default '111',
-  `partner_id` int(11) unsigned NOT NULL default '0',
-  `online` tinyint(2) NOT NULL default '0',
-  `father` int(11) unsigned NOT NULL default '0',
-  `mother` int(11) unsigned NOT NULL default '0',
-  `child` int(11) unsigned NOT NULL default '0',
-  `fame` int(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`char_id`),
-  KEY `account_id` (`account_id`),
-  KEY `party_id` (`party_id`),
-  KEY `guild_id` (`guild_id`),
-  KEY `name` (`name`),
-  KEY `online` (`online`)
-) TYPE=MyISAM AUTO_INCREMENT=150000; 
-
---
--- Table structure for table `charlog`
---
-
-DROP TABLE IF EXISTS `charlog`;
-CREATE TABLE `charlog` (
-  `time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `char_msg` varchar(255) NOT NULL default 'char select',
-  `account_id` int(11) NOT NULL default '0',
-  `char_num` tinyint(4) NOT NULL default '0',
-  `name` varchar(255) NOT NULL default '',
-  `str` int(11) unsigned NOT NULL default '0',
-  `agi` int(11) unsigned NOT NULL default '0',
-  `vit` int(11) unsigned NOT NULL default '0',
-  `int` int(11) unsigned NOT NULL default '0',
-  `dex` int(11) unsigned NOT NULL default '0',
-  `luk` int(11) unsigned NOT NULL default '0',
-  `hair` tinyint(4) NOT NULL default '0',
-  `hair_color` int(11) NOT NULL default '0'
-) TYPE=MyISAM; 
-
---
--- Table structure for table `friends`
---
-
-DROP TABLE IF EXISTS `friends`;
-CREATE TABLE `friends` (
-  `char_id` int(11) NOT NULL default '0',
-  `friend_account` int(11) NOT NULL default '0',
-  `friend_id` int(11) NOT NULL default '0',
-  KEY  `char_id` (`char_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `global_reg_value`
---
-
-DROP TABLE IF EXISTS `global_reg_value`;
-CREATE TABLE `global_reg_value` (
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `str` varchar(255) NOT NULL default '',
-  `value` varchar(255) NOT NULL default '0',
-  `type` int(11) NOT NULL default '3',
-  `account_id` int(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`char_id`,`str`,`account_id`),
-  KEY `account_id` (`account_id`),
-  KEY `char_id` (`char_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `guild`
---
-
-DROP TABLE IF EXISTS `guild`;
-CREATE TABLE `guild` (
-  `guild_id` int(11) unsigned NOT NULL auto_increment,
-  `name` varchar(24) NOT NULL default '',
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `master` varchar(24) NOT NULL default '',
-  `guild_lv` tinyint(6) unsigned NOT NULL default '0',
-  `connect_member` tinyint(6) unsigned NOT NULL default '0',
-  `max_member` tinyint(6) unsigned NOT NULL default '0',
-  `average_lv` smallint(6) unsigned NOT NULL default '1',
-  `exp` int(11) unsigned NOT NULL default '0',
-  `next_exp` int(11) unsigned NOT NULL default '0',
-  `skill_point` tinyint(11) unsigned NOT NULL default '0',
-  `mes1` varchar(60) NOT NULL default '',
-  `mes2` varchar(120) NOT NULL default '',
-  `emblem_len` int(11) unsigned NOT NULL default '0',
-  `emblem_id` int(11) unsigned NOT NULL default '0',
-  `emblem_data` blob,
-  PRIMARY KEY  (`guild_id`,`char_id`),
-  UNIQUE KEY `guild_id` (`guild_id`),
-  KEY `char_id` (`char_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `guild_alliance`
---
-
-DROP TABLE IF EXISTS `guild_alliance`;
-CREATE TABLE `guild_alliance` (
-  `guild_id` int(11) unsigned NOT NULL default '0',
-  `opposition` int(11) unsigned NOT NULL default '0',
-  `alliance_id` int(11) unsigned NOT NULL default '0',
-  `name` varchar(24) NOT NULL default '',
-  PRIMARY KEY  (`guild_id`,`alliance_id`),
-  KEY `alliance_id` (`alliance_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `guild_castle`
---
-
-DROP TABLE IF EXISTS `guild_castle`;
-CREATE TABLE `guild_castle` (
-  `castle_id` int(11) unsigned NOT NULL default '0',
-  `guild_id` int(11) unsigned NOT NULL default '0',
-  `economy` int(11) unsigned NOT NULL default '0',
-  `defense` int(11) unsigned NOT NULL default '0',
-  `triggerE` int(11) unsigned NOT NULL default '0',
-  `triggerD` int(11) unsigned NOT NULL default '0',
-  `nextTime` int(11) unsigned NOT NULL default '0',
-  `payTime` int(11) unsigned NOT NULL default '0',
-  `createTime` int(11) unsigned NOT NULL default '0',
-  `visibleC` int(11) unsigned NOT NULL default '0',
-  `visibleG0` int(11) unsigned NOT NULL default '0',
-  `visibleG1` int(11) unsigned NOT NULL default '0',
-  `visibleG2` int(11) unsigned NOT NULL default '0',
-  `visibleG3` int(11) unsigned NOT NULL default '0',
-  `visibleG4` int(11) unsigned NOT NULL default '0',
-  `visibleG5` int(11) unsigned NOT NULL default '0',
-  `visibleG6` int(11) unsigned NOT NULL default '0',
-  `visibleG7` int(11) unsigned NOT NULL default '0',
-  `gHP0` int(11) unsigned NOT NULL default '0',
-  `ghP1` int(11) unsigned NOT NULL default '0',
-  `gHP2` int(11) unsigned NOT NULL default '0',
-  `gHP3` int(11) unsigned NOT NULL default '0',
-  `gHP4` int(11) unsigned NOT NULL default '0',
-  `gHP5` int(11) unsigned NOT NULL default '0',
-  `gHP6` int(11) unsigned NOT NULL default '0',
-  `gHP7` int(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`castle_id`),
-  KEY `guild_id` (`guild_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `guild_expulsion`
---
-
-DROP TABLE IF EXISTS `guild_expulsion`;
-CREATE TABLE `guild_expulsion` (
-  `guild_id` int(11) unsigned NOT NULL default '0',
-  `name` varchar(24) NOT NULL default '',
-  `mes` varchar(40) NOT NULL default '',
-  `acc` varchar(40) NOT NULL default '',
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `rsv1` int(11) unsigned NOT NULL default '0',
-  `rsv2` int(11) unsigned NOT NULL default '0',
-  `rsv3` int(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`guild_id`,`name`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `guild_member`
---
-
-DROP TABLE IF EXISTS `guild_member`;
-CREATE TABLE `guild_member` (
-  `guild_id` int(11) unsigned NOT NULL default '0',
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `hair` tinyint(6) unsigned NOT NULL default '0',
-  `hair_color` smallint(6) unsigned NOT NULL default '0',
-  `gender` tinyint(6) unsigned NOT NULL default '0',
-  `class` smallint(6) unsigned NOT NULL default '0',
-  `lv` smallint(6) unsigned NOT NULL default '0',
-  `exp` bigint(20) unsigned NOT NULL default '0',
-  `exp_payper` tinyint(11) unsigned NOT NULL default '0',
-  `online` tinyint(4) unsigned NOT NULL default '0',
-  `position` tinyint(6) unsigned NOT NULL default '0',
-  `rsv1` int(11) unsigned NOT NULL default '0',
-  `rsv2` int(11) unsigned NOT NULL default '0',
-  `name` varchar(24) NOT NULL default '',
-  PRIMARY KEY  (`guild_id`,`char_id`),
-  KEY `char_id` (`char_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `guild_position`
---
-
-DROP TABLE IF EXISTS `guild_position`;
-CREATE TABLE `guild_position` (
-  `guild_id` int(9) unsigned NOT NULL default '0',
-  `position` tinyint(6) unsigned NOT NULL default '0',
-  `name` varchar(24) NOT NULL default '',
-  `mode` tinyint(11) unsigned NOT NULL default '0',
-  `exp_mode` tinyint(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`guild_id`,`position`),
-  KEY `guild_id` (`guild_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `guild_skill`
---
-
-DROP TABLE IF EXISTS `guild_skill`;
-CREATE TABLE `guild_skill` (
-  `guild_id` int(11) unsigned NOT NULL default '0',
-  `id` smallint(11) unsigned NOT NULL default '0',
-  `lv` tinyint(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`guild_id`,`id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `guild_storage`
---
-
-DROP TABLE IF EXISTS `guild_storage`;
-CREATE TABLE `guild_storage` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `guild_id` int(11) unsigned NOT NULL default '0',
-  `nameid` int(11) unsigned NOT NULL default '0',
-  `amount` int(11) unsigned NOT NULL default '0',
-  `equip` mediumint(8) unsigned NOT NULL default '0',
-  `identify` smallint(6) unsigned NOT NULL default '0',
-  `refine` tinyint(3) unsigned NOT NULL default '0',
-  `attribute` tinyint(4) unsigned NOT NULL default '0',
-  `card0` smallint(11) NOT NULL default '0',
-  `card1` smallint(11) NOT NULL default '0',
-  `card2` smallint(11) NOT NULL default '0',
-  `card3` smallint(11) NOT NULL default '0',
-  PRIMARY KEY  (`id`),
-  KEY `guild_id` (`guild_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `homunculus`
---
-
-DROP TABLE IF EXISTS `homunculus`;
-CREATE TABLE `homunculus` (
-  `homun_id` int(11) NOT NULL auto_increment,
-  `char_id` int(11) NOT NULL,
-  `class` mediumint(9) unsigned NOT NULL default '0',
-  `name` varchar(24) NOT NULL default '',
-  `level` smallint(4) NOT NULL default '0',
-  `exp` int(12) NOT NULL default '0',
-  `intimacy` int(12) NOT NULL default '0',
-  `hunger` smallint(4) NOT NULL default '0',
-  `str` smallint(4) unsigned NOT NULL default '0',
-  `agi` smallint(4) unsigned NOT NULL default '0',
-  `vit` smallint(4) unsigned NOT NULL default '0',
-  `int` smallint(4) unsigned NOT NULL default '0',
-  `dex` smallint(4) unsigned NOT NULL default '0',
-  `luk` smallint(4) unsigned NOT NULL default '0',
-  `hp` int(12) NOT NULL default '1',
-  `max_hp` int(12) NOT NULL default '1',
-  `sp` int(12) NOT NULL default '1',
-  `max_sp` int(12) NOT NULL default '1',
-  `skill_point` smallint(4) unsigned NOT NULL default '0',
-  `alive` tinyint(2) NOT NULL default '1',
-  `rename_flag` tinyint(2) NOT NULL default '0',
-  `vaporize` tinyint(2) NOT NULL default '0',
-  PRIMARY KEY  (`homun_id`)
-) TYPE=MyISAM;
-
--- 
--- Table structure for table `interlog`
---
-
-DROP TABLE IF EXISTS `interlog`;
-CREATE TABLE `interlog` (
-  `time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `log` varchar(255) NOT NULL default ''
-) TYPE=MyISAM; 
-
---
--- Table structure for table `inventory`
---
-
-DROP TABLE IF EXISTS `inventory`;
-CREATE TABLE `inventory` (
-  `id` int(11) unsigned NOT NULL auto_increment,
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `nameid` int(11) unsigned NOT NULL default '0',
-  `amount` int(11) unsigned NOT NULL default '0',
-  `equip` mediumint(8) unsigned NOT NULL default '0',
-  `identify` smallint(6) NOT NULL default '0',
-  `refine` tinyint(3) unsigned NOT NULL default '0',
-  `attribute` tinyint(4) unsigned NOT NULL default '0',
-  `card0` smallint(11) NOT NULL default '0',
-  `card1` smallint(11) NOT NULL default '0',
-  `card2` smallint(11) NOT NULL default '0',
-  `card3` smallint(11) NOT NULL default '0',
-  PRIMARY KEY  (`id`),
-  KEY `char_id` (`char_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `ipbanlist`
---
-
-DROP TABLE IF EXISTS `ipbanlist`;
-CREATE TABLE `ipbanlist` (
-  `list` varchar(255) NOT NULL default '',
-  `btime` datetime NOT NULL default '0000-00-00 00:00:00',
-  `rtime` datetime NOT NULL default '0000-00-00 00:00:00',
-  `reason` varchar(255) NOT NULL default '',
-  KEY (`list`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `login`
---
-
-DROP TABLE IF EXISTS `login`;
-CREATE TABLE `login` (
-  `account_id` int(11) unsigned NOT NULL auto_increment,
-  `userid` varchar(255) NOT NULL default '',
-  `user_pass` varchar(32) NOT NULL default '',
-  `lastlogin` datetime NOT NULL default '0000-00-00 00:00:00',
-  `sex` char(1) NOT NULL default 'M',
-  `logincount` mediumint(9) unsigned NOT NULL default '0',
-  `email` varchar(60) NOT NULL default '',
-  `level` tinyint(3) NOT NULL default '0',
-  `error_message` smallint(11) unsigned NOT NULL default '0',
-  `connect_until` int(11) unsigned NOT NULL default '0',
-  `last_ip` varchar(100) NOT NULL default '',
-  `memo` smallint(11) unsigned NOT NULL default '0',
-  `ban_until` int(11) unsigned NOT NULL default '0',
-  `state` int(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`account_id`),
-  KEY `name` (`userid`)
-) TYPE=MyISAM AUTO_INCREMENT=2000000; 
-
--- added standard accounts for servers, VERY INSECURE!!!
--- inserted into the table called login which is above
-
-INSERT INTO `login` (`account_id`, `userid`, `user_pass`, `sex`, `email`) VALUES ('1', 's1', 'p1', 'S','athena@athena.com');
-
---
--- Table structure for table `mapreg`
---
-
-DROP TABLE IF EXISTS `mapreg`;
-CREATE TABLE `mapreg` (
-  `varname` varchar(32) NOT NULL,
-  `index` int(11) unsigned NOT NULL default '0',
-  `value` varchar(255) NOT NULL,
-  KEY `varname` (`varname`),
-  KEY `index` (`index`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `sc_data`
---
-
-DROP TABLE IF EXISTS `sc_data`;
-CREATE TABLE `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`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `loginlog`
---
-
-DROP TABLE IF EXISTS `loginlog`;
-CREATE TABLE `loginlog` (
-  `time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `ip` int(10) unsigned NOT NULL default '0',
-  `user` varchar(32) NOT NULL default '',
-  `rcode` tinyint(4) NOT NULL default '0',
-  `log` varchar(255) NOT NULL default '',
-  INDEX (`ip`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `memo`
---
-
-DROP TABLE IF EXISTS `memo`;
-CREATE TABLE `memo` (
-  `memo_id` int(11) unsigned NOT NULL auto_increment,
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `map` varchar(255) NOT NULL default '',
-  `x` smallint(9) unsigned NOT NULL default '0',
-  `y` smallint(9) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`memo_id`),
-  KEY `char_id` (`char_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `party`
---
-
-DROP TABLE IF EXISTS `party`;
-CREATE TABLE `party` (
-  `party_id` int(11) unsigned NOT NULL auto_increment,
-  `name` char(100) NOT NULL default '',
-  `exp` tinyint(11) unsigned NOT NULL default '0',
-  `item` tinyint(11) unsigned NOT NULL default '0',
-  `leader_id` int(11) unsigned NOT NULL default '0',
-  `leader_char` int(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`party_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `pet`
---
-
-DROP TABLE IF EXISTS `pet`;
-CREATE TABLE `pet` (
-  `pet_id` int(11) unsigned NOT NULL auto_increment,
-  `class` mediumint(9) unsigned NOT NULL default '0',
-  `name` varchar(24) NOT NULL default '',
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `level` smallint(4) unsigned NOT NULL default '0',
-  `egg_id` smallint(11) unsigned NOT NULL default '0',
-  `equip` mediumint(8) unsigned NOT NULL default '0',
-  `intimate` smallint(9) unsigned NOT NULL default '0',
-  `hungry` smallint(9) unsigned NOT NULL default '0',
-  `rename_flag` tinyint(4) unsigned NOT NULL default '0',
-  `incuvate` int(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`pet_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `ragsrvinfo`
---
-
-DROP TABLE IF EXISTS `ragsrvinfo`;
-CREATE TABLE `ragsrvinfo` (
-  `index` int(11) NOT NULL default '0',
-  `name` varchar(255) NOT NULL default '',
-  `exp` int(11) unsigned NOT NULL default '0',
-  `jexp` int(11) unsigned NOT NULL default '0',
-  `drop` int(11) unsigned NOT NULL default '0',
-  `motd` varchar(255) NOT NULL default ''
-) TYPE=MyISAM;
-
---
--- Table structure for table `skill`
---
-
-DROP TABLE IF EXISTS `skill`;
-CREATE TABLE `skill` (
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `id` smallint(11) unsigned NOT NULL default '0',
-  `lv` tinyint(4) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`char_id`,`id`),
-  KEY `char_id` (`char_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `skill_homunculus`
---
-
-DROP TABLE IF EXISTS `skill_homunculus`;
-CREATE TABLE `skill_homunculus` (
-  `homun_id` int(11) NOT NULL,
-  `id` int(11) NOT NULL,
-  `lv` smallint(6) NOT NULL,
-  PRIMARY KEY  (`homun_id`,`id`),
-  KEY `homun_id` (`homun_id`)
-) TYPE=MyISAM;
-
---
--- Table structure for table `sstatus`
---
-
-DROP TABLE IF EXISTS `sstatus`;
-CREATE TABLE `sstatus` (
-  `index` tinyint(4) unsigned NOT NULL default '0',
-  `name` varchar(255) NOT NULL default '',
-  `user` int(11) unsigned NOT NULL default '0'
-) TYPE=MyISAM;
-
---
--- Table structure for table `storage`
---
-
-DROP TABLE IF EXISTS `storage`;
-CREATE TABLE `storage` (
-  `id` int(11) unsigned NOT NULL auto_increment,
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `nameid` int(11) unsigned NOT NULL default '0',
-  `amount` smallint(11) unsigned NOT NULL default '0',
-  `equip` mediumint(8) unsigned NOT NULL default '0',
-  `identify` smallint(6) unsigned NOT NULL default '0',
-  `refine` tinyint(3) unsigned NOT NULL default '0',
-  `attribute` tinyint(4) unsigned NOT NULL default '0',
-  `card0` smallint(11) NOT NULL default '0',
-  `card1` smallint(11) NOT NULL default '0',
-  `card2` smallint(11) NOT NULL default '0',
-  `card3` smallint(11) NOT NULL default '0',
-  PRIMARY KEY  (`id`),
-  KEY `account_id` (`account_id`)
-) TYPE=MyISAM;
+-- MySQL dump 9.11
+-- Server version	4.0.24
+
+--
+-- Table structure for table `cart_inventory`
+--
+
+DROP TABLE IF EXISTS `cart_inventory`;
+CREATE TABLE `cart_inventory` (
+  `id` int(11) NOT NULL auto_increment,
+  `char_id` int(11) NOT NULL default '0',
+  `nameid` int(11) NOT NULL default '0',
+  `amount` int(11) NOT NULL default '0',
+  `equip` mediumint(8) unsigned NOT NULL default '0',
+  `identify` smallint(6) NOT NULL default '0',
+  `refine` tinyint(3) unsigned NOT NULL default '0',
+  `attribute` tinyint(4) NOT NULL default '0',
+  `card0` int(11) NOT NULL default '0',
+  `card1` int(11) NOT NULL default '0',
+  `card2` int(11) NOT NULL default '0',
+  `card3` int(11) NOT NULL default '0',
+  PRIMARY KEY  (`id`),
+  KEY `char_id` (`char_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `char`
+--
+
+DROP TABLE IF EXISTS `char`;
+CREATE TABLE `char` (
+  `char_id` int(11) unsigned NOT NULL auto_increment,
+  `account_id` int(11) unsigned NOT NULL default '0',
+  `char_num` tinyint(1) NOT NULL default '0',
+  `name` varchar(30) NOT NULL default '',
+  `class` smallint(6) unsigned NOT NULL default '0',
+  `base_level` smallint(6) unsigned NOT NULL default '1',
+  `job_level` smallint(6) unsigned NOT NULL default '1',
+  `base_exp` bigint(20) unsigned NOT NULL default '0',
+  `job_exp` bigint(20) unsigned NOT NULL default '0',
+  `zeny` int(11) unsigned NOT NULL default '0',
+  `str` smallint(4) unsigned NOT NULL default '0',
+  `agi` smallint(4) unsigned NOT NULL default '0',
+  `vit` smallint(4) unsigned NOT NULL default '0',
+  `int` smallint(4) unsigned NOT NULL default '0',
+  `dex` smallint(4) unsigned NOT NULL default '0',
+  `luk` smallint(4) unsigned NOT NULL default '0',
+  `max_hp` mediumint(8) unsigned NOT NULL default '0',
+  `hp` mediumint(8) unsigned NOT NULL default '0',
+  `max_sp` mediumint(6) unsigned NOT NULL default '0',
+  `sp` mediumint(6) unsigned NOT NULL default '0',
+  `status_point` smallint(4) unsigned NOT NULL default '0',
+  `skill_point` smallint(4) unsigned NOT NULL default '0',
+  `option` int(11) NOT NULL default '0',
+  `karma` tinyint(3) NOT NULL default '0',
+  `manner` tinyint(3) NOT NULL default '0',
+  `party_id` int(11) unsigned NOT NULL default '0',
+  `guild_id` int(11) unsigned NOT NULL default '0',
+  `pet_id` int(11) unsigned NOT NULL default '0',
+  `homun_id` int(11) unsigned NOT NULL default '0',
+  `hair` tinyint(4) unsigned NOT NULL default '0',
+  `hair_color` smallint(5) unsigned NOT NULL default '0',
+  `clothes_color` smallint(5) unsigned NOT NULL default '0',
+  `weapon` smallint(6) unsigned NOT NULL default '1',
+  `shield` smallint(6) unsigned NOT NULL default '0',
+  `head_top` smallint(6) unsigned NOT NULL default '0',
+  `head_mid` smallint(6) unsigned NOT NULL default '0',
+  `head_bottom` smallint(6) unsigned NOT NULL default '0',
+  `last_map` varchar(20) NOT NULL default 'prontera.gat',
+  `last_x` smallint(4) unsigned NOT NULL default '53',
+  `last_y` smallint(4) unsigned NOT NULL default '111',
+  `save_map` varchar(20) NOT NULL default 'prontera.gat',
+  `save_x` smallint(4) unsigned NOT NULL default '53',
+  `save_y` smallint(4) unsigned NOT NULL default '111',
+  `partner_id` int(11) unsigned NOT NULL default '0',
+  `online` tinyint(2) NOT NULL default '0',
+  `father` int(11) unsigned NOT NULL default '0',
+  `mother` int(11) unsigned NOT NULL default '0',
+  `child` int(11) unsigned NOT NULL default '0',
+  `fame` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`char_id`),
+  KEY `account_id` (`account_id`),
+  KEY `party_id` (`party_id`),
+  KEY `guild_id` (`guild_id`),
+  KEY `name` (`name`),
+  KEY `online` (`online`)
+) TYPE=MyISAM AUTO_INCREMENT=150000; 
+
+--
+-- Table structure for table `charlog`
+--
+
+DROP TABLE IF EXISTS `charlog`;
+CREATE TABLE `charlog` (
+  `time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `char_msg` varchar(255) NOT NULL default 'char select',
+  `account_id` int(11) NOT NULL default '0',
+  `char_num` tinyint(4) NOT NULL default '0',
+  `name` varchar(255) NOT NULL default '',
+  `str` int(11) unsigned NOT NULL default '0',
+  `agi` int(11) unsigned NOT NULL default '0',
+  `vit` int(11) unsigned NOT NULL default '0',
+  `int` int(11) unsigned NOT NULL default '0',
+  `dex` int(11) unsigned NOT NULL default '0',
+  `luk` int(11) unsigned NOT NULL default '0',
+  `hair` tinyint(4) NOT NULL default '0',
+  `hair_color` int(11) NOT NULL default '0'
+) TYPE=MyISAM; 
+
+--
+-- Table structure for table `friends`
+--
+
+DROP TABLE IF EXISTS `friends`;
+CREATE TABLE `friends` (
+  `char_id` int(11) NOT NULL default '0',
+  `friend_account` int(11) NOT NULL default '0',
+  `friend_id` int(11) NOT NULL default '0',
+  KEY  `char_id` (`char_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `global_reg_value`
+--
+
+DROP TABLE IF EXISTS `global_reg_value`;
+CREATE TABLE `global_reg_value` (
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `str` varchar(255) NOT NULL default '',
+  `value` varchar(255) NOT NULL default '0',
+  `type` int(11) NOT NULL default '3',
+  `account_id` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`char_id`,`str`,`account_id`),
+  KEY `account_id` (`account_id`),
+  KEY `char_id` (`char_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `guild`
+--
+
+DROP TABLE IF EXISTS `guild`;
+CREATE TABLE `guild` (
+  `guild_id` int(11) unsigned NOT NULL auto_increment,
+  `name` varchar(24) NOT NULL default '',
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `master` varchar(24) NOT NULL default '',
+  `guild_lv` tinyint(6) unsigned NOT NULL default '0',
+  `connect_member` tinyint(6) unsigned NOT NULL default '0',
+  `max_member` tinyint(6) unsigned NOT NULL default '0',
+  `average_lv` smallint(6) unsigned NOT NULL default '1',
+  `exp` int(11) unsigned NOT NULL default '0',
+  `next_exp` int(11) unsigned NOT NULL default '0',
+  `skill_point` tinyint(11) unsigned NOT NULL default '0',
+  `mes1` varchar(60) NOT NULL default '',
+  `mes2` varchar(120) NOT NULL default '',
+  `emblem_len` int(11) unsigned NOT NULL default '0',
+  `emblem_id` int(11) unsigned NOT NULL default '0',
+  `emblem_data` blob,
+  PRIMARY KEY  (`guild_id`,`char_id`),
+  UNIQUE KEY `guild_id` (`guild_id`),
+  KEY `char_id` (`char_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `guild_alliance`
+--
+
+DROP TABLE IF EXISTS `guild_alliance`;
+CREATE TABLE `guild_alliance` (
+  `guild_id` int(11) unsigned NOT NULL default '0',
+  `opposition` int(11) unsigned NOT NULL default '0',
+  `alliance_id` int(11) unsigned NOT NULL default '0',
+  `name` varchar(24) NOT NULL default '',
+  PRIMARY KEY  (`guild_id`,`alliance_id`),
+  KEY `alliance_id` (`alliance_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `guild_castle`
+--
+
+DROP TABLE IF EXISTS `guild_castle`;
+CREATE TABLE `guild_castle` (
+  `castle_id` int(11) unsigned NOT NULL default '0',
+  `guild_id` int(11) unsigned NOT NULL default '0',
+  `economy` int(11) unsigned NOT NULL default '0',
+  `defense` int(11) unsigned NOT NULL default '0',
+  `triggerE` int(11) unsigned NOT NULL default '0',
+  `triggerD` int(11) unsigned NOT NULL default '0',
+  `nextTime` int(11) unsigned NOT NULL default '0',
+  `payTime` int(11) unsigned NOT NULL default '0',
+  `createTime` int(11) unsigned NOT NULL default '0',
+  `visibleC` int(11) unsigned NOT NULL default '0',
+  `visibleG0` int(11) unsigned NOT NULL default '0',
+  `visibleG1` int(11) unsigned NOT NULL default '0',
+  `visibleG2` int(11) unsigned NOT NULL default '0',
+  `visibleG3` int(11) unsigned NOT NULL default '0',
+  `visibleG4` int(11) unsigned NOT NULL default '0',
+  `visibleG5` int(11) unsigned NOT NULL default '0',
+  `visibleG6` int(11) unsigned NOT NULL default '0',
+  `visibleG7` int(11) unsigned NOT NULL default '0',
+  `gHP0` int(11) unsigned NOT NULL default '0',
+  `ghP1` int(11) unsigned NOT NULL default '0',
+  `gHP2` int(11) unsigned NOT NULL default '0',
+  `gHP3` int(11) unsigned NOT NULL default '0',
+  `gHP4` int(11) unsigned NOT NULL default '0',
+  `gHP5` int(11) unsigned NOT NULL default '0',
+  `gHP6` int(11) unsigned NOT NULL default '0',
+  `gHP7` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`castle_id`),
+  KEY `guild_id` (`guild_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `guild_expulsion`
+--
+
+DROP TABLE IF EXISTS `guild_expulsion`;
+CREATE TABLE `guild_expulsion` (
+  `guild_id` int(11) unsigned NOT NULL default '0',
+  `name` varchar(24) NOT NULL default '',
+  `mes` varchar(40) NOT NULL default '',
+  `acc` varchar(40) NOT NULL default '',
+  `account_id` int(11) unsigned NOT NULL default '0',
+  `rsv1` int(11) unsigned NOT NULL default '0',
+  `rsv2` int(11) unsigned NOT NULL default '0',
+  `rsv3` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`guild_id`,`name`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `guild_member`
+--
+
+DROP TABLE IF EXISTS `guild_member`;
+CREATE TABLE `guild_member` (
+  `guild_id` int(11) unsigned NOT NULL default '0',
+  `account_id` int(11) unsigned NOT NULL default '0',
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `hair` tinyint(6) unsigned NOT NULL default '0',
+  `hair_color` smallint(6) unsigned NOT NULL default '0',
+  `gender` tinyint(6) unsigned NOT NULL default '0',
+  `class` smallint(6) unsigned NOT NULL default '0',
+  `lv` smallint(6) unsigned NOT NULL default '0',
+  `exp` bigint(20) unsigned NOT NULL default '0',
+  `exp_payper` tinyint(11) unsigned NOT NULL default '0',
+  `online` tinyint(4) unsigned NOT NULL default '0',
+  `position` tinyint(6) unsigned NOT NULL default '0',
+  `rsv1` int(11) unsigned NOT NULL default '0',
+  `rsv2` int(11) unsigned NOT NULL default '0',
+  `name` varchar(24) NOT NULL default '',
+  PRIMARY KEY  (`guild_id`,`char_id`),
+  KEY `char_id` (`char_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `guild_position`
+--
+
+DROP TABLE IF EXISTS `guild_position`;
+CREATE TABLE `guild_position` (
+  `guild_id` int(9) unsigned NOT NULL default '0',
+  `position` tinyint(6) unsigned NOT NULL default '0',
+  `name` varchar(24) NOT NULL default '',
+  `mode` tinyint(11) unsigned NOT NULL default '0',
+  `exp_mode` tinyint(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`guild_id`,`position`),
+  KEY `guild_id` (`guild_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `guild_skill`
+--
+
+DROP TABLE IF EXISTS `guild_skill`;
+CREATE TABLE `guild_skill` (
+  `guild_id` int(11) unsigned NOT NULL default '0',
+  `id` smallint(11) unsigned NOT NULL default '0',
+  `lv` tinyint(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`guild_id`,`id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `guild_storage`
+--
+
+DROP TABLE IF EXISTS `guild_storage`;
+CREATE TABLE `guild_storage` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `guild_id` int(11) unsigned NOT NULL default '0',
+  `nameid` int(11) unsigned NOT NULL default '0',
+  `amount` int(11) unsigned NOT NULL default '0',
+  `equip` mediumint(8) unsigned NOT NULL default '0',
+  `identify` smallint(6) unsigned NOT NULL default '0',
+  `refine` tinyint(3) unsigned NOT NULL default '0',
+  `attribute` tinyint(4) unsigned NOT NULL default '0',
+  `card0` smallint(11) NOT NULL default '0',
+  `card1` smallint(11) NOT NULL default '0',
+  `card2` smallint(11) NOT NULL default '0',
+  `card3` smallint(11) NOT NULL default '0',
+  PRIMARY KEY  (`id`),
+  KEY `guild_id` (`guild_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `homunculus`
+--
+
+DROP TABLE IF EXISTS `homunculus`;
+CREATE TABLE `homunculus` (
+  `homun_id` int(11) NOT NULL auto_increment,
+  `char_id` int(11) NOT NULL,
+  `class` mediumint(9) unsigned NOT NULL default '0',
+  `name` varchar(24) NOT NULL default '',
+  `level` smallint(4) NOT NULL default '0',
+  `exp` int(12) NOT NULL default '0',
+  `intimacy` int(12) NOT NULL default '0',
+  `hunger` smallint(4) NOT NULL default '0',
+  `str` smallint(4) unsigned NOT NULL default '0',
+  `agi` smallint(4) unsigned NOT NULL default '0',
+  `vit` smallint(4) unsigned NOT NULL default '0',
+  `int` smallint(4) unsigned NOT NULL default '0',
+  `dex` smallint(4) unsigned NOT NULL default '0',
+  `luk` smallint(4) unsigned NOT NULL default '0',
+  `hp` int(12) NOT NULL default '1',
+  `max_hp` int(12) NOT NULL default '1',
+  `sp` int(12) NOT NULL default '1',
+  `max_sp` int(12) NOT NULL default '1',
+  `skill_point` smallint(4) unsigned NOT NULL default '0',
+  `alive` tinyint(2) NOT NULL default '1',
+  `rename_flag` tinyint(2) NOT NULL default '0',
+  `vaporize` tinyint(2) NOT NULL default '0',
+  PRIMARY KEY  (`homun_id`)
+) TYPE=MyISAM;
+
+-- 
+-- Table structure for table `interlog`
+--
+
+DROP TABLE IF EXISTS `interlog`;
+CREATE TABLE `interlog` (
+  `time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `log` varchar(255) NOT NULL default ''
+) TYPE=MyISAM; 
+
+--
+-- Table structure for table `inventory`
+--
+
+DROP TABLE IF EXISTS `inventory`;
+CREATE TABLE `inventory` (
+  `id` int(11) unsigned NOT NULL auto_increment,
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `nameid` int(11) unsigned NOT NULL default '0',
+  `amount` int(11) unsigned NOT NULL default '0',
+  `equip` mediumint(8) unsigned NOT NULL default '0',
+  `identify` smallint(6) NOT NULL default '0',
+  `refine` tinyint(3) unsigned NOT NULL default '0',
+  `attribute` tinyint(4) unsigned NOT NULL default '0',
+  `card0` smallint(11) NOT NULL default '0',
+  `card1` smallint(11) NOT NULL default '0',
+  `card2` smallint(11) NOT NULL default '0',
+  `card3` smallint(11) NOT NULL default '0',
+  PRIMARY KEY  (`id`),
+  KEY `char_id` (`char_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `ipbanlist`
+--
+
+DROP TABLE IF EXISTS `ipbanlist`;
+CREATE TABLE `ipbanlist` (
+  `list` varchar(255) NOT NULL default '',
+  `btime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `rtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `reason` varchar(255) NOT NULL default '',
+  KEY (`list`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `login`
+--
+
+DROP TABLE IF EXISTS `login`;
+CREATE TABLE `login` (
+  `account_id` int(11) unsigned NOT NULL auto_increment,
+  `userid` varchar(255) NOT NULL default '',
+  `user_pass` varchar(32) NOT NULL default '',
+  `lastlogin` datetime NOT NULL default '0000-00-00 00:00:00',
+  `sex` char(1) NOT NULL default 'M',
+  `logincount` mediumint(9) unsigned NOT NULL default '0',
+  `email` varchar(60) NOT NULL default '',
+  `level` tinyint(3) NOT NULL default '0',
+  `error_message` smallint(11) unsigned NOT NULL default '0',
+  `connect_until` int(11) unsigned NOT NULL default '0',
+  `last_ip` varchar(100) NOT NULL default '',
+  `memo` smallint(11) unsigned NOT NULL default '0',
+  `ban_until` int(11) unsigned NOT NULL default '0',
+  `state` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`account_id`),
+  KEY `name` (`userid`)
+) TYPE=MyISAM AUTO_INCREMENT=2000000; 
+
+-- added standard accounts for servers, VERY INSECURE!!!
+-- inserted into the table called login which is above
+
+INSERT INTO `login` (`account_id`, `userid`, `user_pass`, `sex`, `email`) VALUES ('1', 's1', 'p1', 'S','athena@athena.com');
+
+--
+-- Table structure for table `mapreg`
+--
+
+DROP TABLE IF EXISTS `mapreg`;
+CREATE TABLE `mapreg` (
+  `varname` varchar(32) NOT NULL,
+  `index` int(11) unsigned NOT NULL default '0',
+  `value` varchar(255) NOT NULL,
+  KEY `varname` (`varname`),
+  KEY `index` (`index`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `sc_data`
+--
+
+DROP TABLE IF EXISTS `sc_data`;
+CREATE TABLE `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`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `loginlog`
+--
+
+DROP TABLE IF EXISTS `loginlog`;
+CREATE TABLE `loginlog` (
+  `time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `ip` int(10) unsigned NOT NULL default '0',
+  `user` varchar(32) NOT NULL default '',
+  `rcode` tinyint(4) NOT NULL default '0',
+  `log` varchar(255) NOT NULL default '',
+  INDEX (`ip`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `memo`
+--
+
+DROP TABLE IF EXISTS `memo`;
+CREATE TABLE `memo` (
+  `memo_id` int(11) unsigned NOT NULL auto_increment,
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `map` varchar(255) NOT NULL default '',
+  `x` smallint(9) unsigned NOT NULL default '0',
+  `y` smallint(9) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`memo_id`),
+  KEY `char_id` (`char_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `party`
+--
+
+DROP TABLE IF EXISTS `party`;
+CREATE TABLE `party` (
+  `party_id` int(11) unsigned NOT NULL auto_increment,
+  `name` char(100) NOT NULL default '',
+  `exp` tinyint(11) unsigned NOT NULL default '0',
+  `item` tinyint(11) unsigned NOT NULL default '0',
+  `leader_id` int(11) unsigned NOT NULL default '0',
+  `leader_char` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`party_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `pet`
+--
+
+DROP TABLE IF EXISTS `pet`;
+CREATE TABLE `pet` (
+  `pet_id` int(11) unsigned NOT NULL auto_increment,
+  `class` mediumint(9) unsigned NOT NULL default '0',
+  `name` varchar(24) NOT NULL default '',
+  `account_id` int(11) unsigned NOT NULL default '0',
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `level` smallint(4) unsigned NOT NULL default '0',
+  `egg_id` smallint(11) unsigned NOT NULL default '0',
+  `equip` mediumint(8) unsigned NOT NULL default '0',
+  `intimate` smallint(9) unsigned NOT NULL default '0',
+  `hungry` smallint(9) unsigned NOT NULL default '0',
+  `rename_flag` tinyint(4) unsigned NOT NULL default '0',
+  `incuvate` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`pet_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `ragsrvinfo`
+--
+
+DROP TABLE IF EXISTS `ragsrvinfo`;
+CREATE TABLE `ragsrvinfo` (
+  `index` int(11) NOT NULL default '0',
+  `name` varchar(255) NOT NULL default '',
+  `exp` int(11) unsigned NOT NULL default '0',
+  `jexp` int(11) unsigned NOT NULL default '0',
+  `drop` int(11) unsigned NOT NULL default '0',
+  `motd` varchar(255) NOT NULL default ''
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `skill`
+--
+
+DROP TABLE IF EXISTS `skill`;
+CREATE TABLE `skill` (
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `id` smallint(11) unsigned NOT NULL default '0',
+  `lv` tinyint(4) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`char_id`,`id`),
+  KEY `char_id` (`char_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `skill_homunculus`
+--
+
+DROP TABLE IF EXISTS `skill_homunculus`;
+CREATE TABLE `skill_homunculus` (
+  `homun_id` int(11) NOT NULL,
+  `id` int(11) NOT NULL,
+  `lv` smallint(6) NOT NULL,
+  PRIMARY KEY  (`homun_id`,`id`),
+  KEY `homun_id` (`homun_id`)
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `sstatus`
+--
+
+DROP TABLE IF EXISTS `sstatus`;
+CREATE TABLE `sstatus` (
+  `index` tinyint(4) unsigned NOT NULL default '0',
+  `name` varchar(255) NOT NULL default '',
+  `user` int(11) unsigned NOT NULL default '0'
+) TYPE=MyISAM;
+
+--
+-- Table structure for table `storage`
+--
+
+DROP TABLE IF EXISTS `storage`;
+CREATE TABLE `storage` (
+  `id` int(11) unsigned NOT NULL auto_increment,
+  `account_id` int(11) unsigned NOT NULL default '0',
+  `nameid` int(11) unsigned NOT NULL default '0',
+  `amount` smallint(11) unsigned NOT NULL default '0',
+  `equip` mediumint(8) unsigned NOT NULL default '0',
+  `identify` smallint(6) unsigned NOT NULL default '0',
+  `refine` tinyint(3) unsigned NOT NULL default '0',
+  `attribute` tinyint(4) unsigned NOT NULL default '0',
+  `card0` smallint(11) NOT NULL default '0',
+  `card1` smallint(11) NOT NULL default '0',
+  `card2` smallint(11) NOT NULL default '0',
+  `card3` smallint(11) NOT NULL default '0',
+  PRIMARY KEY  (`id`),
+  KEY `account_id` (`account_id`)
+) TYPE=MyISAM;

+ 204 - 204
sql-files/oA2eA-rc5.sql

@@ -1,204 +1,204 @@
-//
-// When converting from oA to eA, my oA db was in ragnarok so I created
-// a new db called eragnarok and then ran the following commands...
-// 
-// /usr/local/mysql/bin/mysql -Deragnarok -u eragnarok -p< athena/sql-files/main.sql
-// /usr/local/mysql/bin/mysql -Deragnarok -u eragnarok -p< athena/sql-files/db_tables.sql
-// /usr/local/mysql/bin/mysql -Deragnarok -u eragnarok -p< athena/sql-files/mail.sql
-// /usr/local/mysql/bin/mysql -Deragnarok -u eragnarok -p< athena/sql-files/oA2eA-rc5.sql
-//
-// This creates a eragnarok database and fills everything in from the oA
-// database.
-// 
-//     -- MouseJstr
-
-CREATE TABLE `item_db` (
-  `id` smallint(5) unsigned NOT NULL default '0',
-  `name_english` varchar(24) NOT NULL default '',
-  `name_japanese` varchar(24) NOT NULL default '',
-  `type` tinyint(2) unsigned NOT NULL default '0',
-  `price_buy` int(10) unsigned default NULL,
-  `price_sell` int(10) unsigned default NULL,
-  `weight` int(10) unsigned NOT NULL default '0',
-  `attack` mediumint(9) unsigned default NULL,
-  `defence` mediumint(9) unsigned default NULL,
-  `range` tinyint(2) unsigned default NULL,
-  `slots` tinyint(1) unsigned default NULL,
-  `equip_jobs` mediumint(8) unsigned default NULL,
-  `equip_genders` tinyint(1) unsigned default NULL,
-  `equip_locations` smallint(4) unsigned default NULL,
-  `weapon_level` tinyint(1) unsigned default NULL,
-  `equip_level` tinyint(3) unsigned default NULL,
-  `view` tinyint(3) unsigned default NULL,
-  `script_use` text,
-  `script_equip` text,
-  PRIMARY KEY  (`id`)
-) TYPE=MyISAM;
-
-CREATE TABLE `mob_db` (
-  `ID` mediumint(9) NOT NULL default '0',
-  `Name` text NOT NULL,
-  `Name2` text NOT NULL,
-  `LV` smallint(6) NOT NULL default '0',
-  `HP` mediumint(9) NOT NULL default '0',
-  `SP` mediumint(9) NOT NULL default '0',
-  `EXP` mediumint(9) NOT NULL default '0',
-  `JEXP` mediumint(9) NOT NULL default '0',
-  `Range1` tinyint(4) NOT NULL default '0',
-  `ATK1` smallint(6) NOT NULL default '0',
-  `ATK2` smallint(6) NOT NULL default '0',
-  `DEF` smallint(6) NOT NULL default '0',
-  `MDEF` smallint(6) NOT NULL default '0',
-  `STR` tinyint(4) NOT NULL default '0',
-  `AGI` tinyint(4) NOT NULL default '0',
-  `VIT` tinyint(4) NOT NULL default '0',
-  `INT` tinyint(4) NOT NULL default '0',
-  `DEX` tinyint(4) NOT NULL default '0',
-  `LUK` tinyint(4) NOT NULL default '0',
-  `Range2` tinyint(4) NOT NULL default '0',
-  `Range3` tinyint(4) NOT NULL default '0',
-  `Scale` tinyint(4) NOT NULL default '0',
-  `Race` tinyint(4) NOT NULL default '0',
-  `Element` tinyint(4) NOT NULL default '0',
-  `Mode` smallint(6) NOT NULL default '0',
-  `Speed` smallint(6) NOT NULL default '0',
-  `ADelay` smallint(6) NOT NULL default '0',
-  `aMotion` smallint(6) NOT NULL default '0',
-  `dMotion` smallint(6) NOT NULL default '0',
-  `Drop1id` mediumint(9) NOT NULL default '0',
-  `Drop1per` mediumint(9) NOT NULL default '0',
-  `Drop2id` mediumint(9) NOT NULL default '0',
-  `Drop2per` mediumint(9) NOT NULL default '0',
-  `Drop3id` mediumint(9) NOT NULL default '0',
-  `Drop3per` mediumint(9) NOT NULL default '0',
-  `Drop4id` mediumint(9) NOT NULL default '0',
-  `Drop4per` mediumint(9) NOT NULL default '0',
-  `Drop5id` mediumint(9) NOT NULL default '0',
-  `Drop5per` mediumint(9) NOT NULL default '0',
-  `Drop6id` mediumint(9) NOT NULL default '0',
-  `Drop6per` mediumint(9) NOT NULL default '0',
-  `Drop7id` mediumint(9) NOT NULL default '0',
-  `Drop7per` mediumint(9) NOT NULL default '0',
-  `Drop8id` mediumint(9) NOT NULL default '0',
-  `Drop8per` mediumint(9) NOT NULL default '0',
-  `MEXP` mediumint(9) NOT NULL default '0',
-  `ExpPer` mediumint(9) NOT NULL default '0',
-  `MVP1id` mediumint(9) NOT NULL default '0',
-  `MVP1per` mediumint(9) NOT NULL default '0',
-  `MVP2id` mediumint(9) NOT NULL default '0',
-  `MVP2per` mediumint(9) NOT NULL default '0',
-  `MVP3id` mediumint(9) NOT NULL default '0',
-  `MVP3per` mediumint(9) NOT NULL default '0'
-) TYPE=MyISAM;
-
-INSERT INTO eragnarok.storage(`id`, `account_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`) SELECT `id`, `account_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3` from ragnarok.storage;
-
- INSERT INTO eragnarok.cart_inventory(`id`, `char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken`) SELECT `id`, `char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken` from ragnarok.cart_inventory;
-
-INSERT INTO eragnarok.char( `char_id`, `account_id`, `char_num`, `name`, `class`, `base_level`, `job_level`, `base_exp`, `job_exp`, `zeny`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`, `max_sp`, `sp`, `status_point`, `skill_point`, `option`, `karma`, `manner`, `party_id`, `guild_id`, `pet_id`, `hair`, `hair_color`, `clothes_color`, `weapon`, `shield`, `head_top`, `head_mid`, `head_bottom`, `last_map`, `last_x`, `last_y`, `save_map`, `save_x`, `save_y`, `partner_id`, `online`) SELECT  `char_id`, `account_id`, `char_num`, `name`, `class`, `base_level`, `job_level`, `base_exp`, `job_exp`, `zeny`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`, `max_sp`, `sp`, `status_point`, `skill_point`, `option`, `karma`, `manner`, `party_id`, `guild_id`, `pet_id`, `hair`, `hair_color`, `clothes_color`, `weapon`, `shield`, `head_top`, `head_mid`, `head_bottom`, `last_map`, `last_x`, `last_y`, `save_map`, `save_x`, `save_y`, `partner_id`, `online` from ragnarok.char;
-
-INSERT INTO eragnarok.charlog( `time`, `char_msg`, `account_id`, `char_num`, `name`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `hair`, `hair_color` ) SELECT  `time`, `char_msg`, `account_id`, `char_num`, `name`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `hair`, `hair_color`  from ragnarok.charlog;
-
-INSERT INTO eragnarok.global_reg_value ( `char_id`, `str`, `value`, `type`, `account_id`) SELECT  `char_id`, `str`, `value`, `type`, `account_id` from ragnarok.global_reg_value ;
-
-INSERT INTO eragnarok.guild( `guild_id`, `name`, `master`, `guild_lv`, `connect_member`, `max_member`, `average_lv`, `exp`, `next_exp`, `skill_point`, `castle_id`, `mes1`, `mes2`, `emblem_len`, `emblem_id`, `emblem_data` ) SELECT  `guild_id`, `name`, `master`, `guild_lv`, `connect_member`, `max_member`, `average_lv`, `exp`, `next_exp`, `skill_point`, `castle_id`, `mes1`, `mes2`, `emblem_len`, `emblem_id`, `emblem_data`  from ragnarok.guild;
-
-INSERT INTO eragnarok.guild_alliance ( `guild_id`, `opposition`, `alliance_id`, `name` ) SELECT  `guild_id`, `opposition`, `alliance_id`, `name`  from ragnarok.guild_alliance ;
-
-INSERT INTO eragnarok.guild_castle ( `castle_id`, `guild_id`, `economy`, `defense`, `triggerE`, `triggerD`, `nextTime`, `payTime`, `createTime`, `visibleC`, `visibleG0`, `visibleG1`, `visibleG2`, `visibleG3`, `visibleG4`, `visibleG5`, `visibleG6`, `visibleG7` ) SELECT  `castle_id`, `guild_id`, `economy`, `defense`, `triggerE`, `triggerD`, `nextTime`, `payTime`, `createTime`, `visibleC`, `visibleG0`, `visibleG1`, `visibleG2`, `visibleG3`, `visibleG4`, `visibleG5`, `visibleG6`, `visibleG7`  from ragnarok.guild_castle ;
-
-INSERT INTO eragnarok.guild_expulsion ( `guild_id`, `name`, `mes`, `acc`, `account_id`, `rsv1`, `rsv2`, `rsv3` ) SELECT  `guild_id`, `name`, `mes`, `acc`, `account_id`, `rsv1`, `rsv2`, `rsv3`  from ragnarok.guild_expulsion ;
-
-INSERT INTO eragnarok.guild_member ( `guild_id`, `account_id`, `char_id`, `hair`, `hair_color`, `gender`, `class`, `lv`, `exp`, `exp_payper`, `online`, `position`, `rsv1`, `rsv2`, `name` ) SELECT  `guild_id`, `account_id`, `char_id`, `hair`, `hair_color`, `gender`, `class`, `lv`, `exp`, `exp_payper`, `online`, `position`, `rsv1`, `rsv2`, `name`  from ragnarok.guild_member ;
-
-INSERT INTO eragnarok.guild_position ( `guild_id`, `position`, `name`, `mode`, `exp_mode` ) SELECT  `guild_id`, `position`, `name`, `mode`, `exp_mode`  from ragnarok.guild_position ;
-
-INSERT INTO eragnarok.guild_skill ( `guild_id`, `id`, `lv` ) SELECT  `guild_id`, `id`, `lv`  from ragnarok.guild_skill ;
-
-INSERT INTO eragnarok.guild_storage ( `id`, `guild_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3` ) SELECT  `id`, `guild_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`  from ragnarok.guild_storage ;
-
-INSERT INTO eragnarok.interlog ( `time`, `log` ) SELECT  `time`, `log`  from ragnarok.interlog ;
-
-INSERT INTO eragnarok.inventory ( `id`, `char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3` ) SELECT  `id`, `char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`  from ragnarok.inventory ;
-
-INSERT INTO eragnarok.ipbanlist ( `list`, `btime`, `rtime`, `reason` ) SELECT  `list`, `btime`, `rtime`, `reason`  from ragnarok.ipbanlist ;
-
-
-# INSERT INTO eragnarok.login_error ( `err_id`, `reason` ) SELECT  `err_id`, `reason`  from ragnarok.login_error ;
-
-INSERT INTO eragnarok.loginlog ( `time`, `ip`, `user`, `rcode`, `log` ) SELECT  `time`, `ip`, `user`, `rcode`, `log`  from ragnarok.loginlog ;
-
-INSERT INTO eragnarok.memo ( `memo_id`, `char_id`, `map`, `x`, `y` ) SELECT  `memo_id`, `char_id`, `map`, `x`, `y`  from ragnarok.memo ;
-
-INSERT INTO eragnarok.party ( `party_id`, `name`, `exp`, `item`, `leader_id` ) SELECT  `party_id`, `name`, `exp`, `item`, `leader_id`  from ragnarok.party ;
-
-INSERT INTO eragnarok.pet ( `pet_id`, `class`, `name`, `account_id`, `char_id`, `level`, `egg_id`, `equip`, `intimate`, `hungry`, `rename_flag`, `incuvate` ) SELECT  `pet_id`, `class`, `name`, `account_id`, `char_id`, `level`, `egg_id`, `equip`, `intimate`, `hungry`, `rename_flag`, `incuvate`  from ragnarok.pet ;
-
-INSERT INTO eragnarok.ragsrvinfo ( `index`, `name`, `exp`, `jexp`, `drop` ) SELECT  `index`, `name`, `exp`, `jexp`, `drop`  from ragnarok.ragsrvinfo ;
-
-INSERT INTO eragnarok.skill ( `char_id`, `id`, `lv` ) SELECT  `char_id`, `id`, `lv`  from ragnarok.skill ;
-
-INSERT INTO eragnarok.sstatus ( `index`, `name`, `user` ) SELECT  `index`, `name`, `user`  from ragnarok.sstatus ;
-
-
-# INSERT INTO eragnarok.abra_db ( `ID`, `Dummy`, `Req_Lvl`, `Per`, `Comment`) SELECT `ID`, `Dummy`, `Req_Lvl`, `Per`, `Comment` from ragnarok.abra_db;
-
-# INSERT INTO eragnarok.attr_fix ( `Level`, `None`, `Water`, `Earth`, `Fire`, `Wind`, `Poison`, `Saint`, `Darkness`, `Sense`, `Immortality`, `Comment`) SELECT `Level`, `None`, `Water`, `Earth`, `Fire`, `Wind`, `Poison`, `Saint`, `Darkness`, `Sense`, `Immortality`, `Comment` from ragnarok.attr_fix;
-
-# INSERT INTO eragnarok.cast_db (  `ID`, `Cast_List`, `Delay_List`, `Upkeep_Time`, `Upkeep_Time2`, `Comment` ) SELECT  `ID`, `Cast_List`, `Delay_List`, `Upkeep_Time`, `Upkeep_Time2`, `Comment`  from ragnarok.cast_db;
-
-#INSERT INTO eragnarok.castle_db (  `CastleID`, `map_name`, `castle_name`, `switch_flag`, `Comment` ) SELECT  `CastleID`, `map_name`, `castle_name`, `switch_flag`, `Comment`  from ragnarok.castle_db;
-
-#INSERT INTO eragnarok.create_arrow_db (  `SourceID`, `MakeID1`, `MakeNum1`, `MakeID2`, `MakeNum2`, `MakeID3`, `MakeNum3`, `MakeID4`, `MakeNum4`, `MakeID5`, `MakeNum5`, `Comment` ) SELECT  `SourceID`, `MakeID1`, `MakeNum1`, `MakeID2`, `MakeNum2`, `MakeID3`, `MakeNum3`, `MakeID4`, `MakeNum4`, `MakeID5`, `MakeNum5`, `Comment`  from ragnarok.create_arrow_db;
-
-#INSERT INTO eragnarok.exp (  `EXP1`, `EXP2`, `EXP3`, `EXP4`, `EXP5`, `EXP6`, `EXP7`, `EXP8`, `EXP9`, `EXP10`, `EXP11`, `EXP12`, `EXP13`, `EXP14` ) SELECT  `EXP1`, `EXP2`, `EXP3`, `EXP4`, `EXP5`, `EXP6`, `EXP7`, `EXP8`, `EXP9`, `EXP10`, `EXP11`, `EXP12`, `EXP13`, `EXP14`  from ragnarok.exp;
-
-#INSERT INTO eragnarok.exp_guild (  `Level`, `EXP`, `Comment` ) SELECT  `Level`, `EXP`, `Comment`  from ragnarok.exp_guild;
-
-#INSERT INTO eragnarok.item_bluebox (  `NameID`, `item_name`, `rate`, `Comment` ) SELECT  `NameID`, `item_name`, `rate`, `Comment`  from ragnarok.item_bluebox;
-
-#INSERT INTO eragnarok.item_cardalbum (  `NameID`, `item_name`, `rate`, `Comment` ) SELECT  `NameID`, `item_name`, `rate`, `Comment`  from ragnarok.item_cardalbum;
-
-INSERT INTO eragnarok.item_db2 (  `ID`, `Name`, `Name2`, `Type`, `Price`, `Sell`, `Weight`, `ATK`, `DEF`, `Range`, `Slot`, `Job`, `Gender`, `Loc`, `wLV`, `eLV`, `View`, `UseScript`, `EquipScript`, `Comment` ) SELECT  `ID`, `Name`, `Name2`, `Type`, `Price`, `Sell`, `Weight`, `ATK`, `DEF`, `Range`, `Slot`, `Job`, `Gender`, `Loc`, `wLV`, `eLV`, `View`, `UseScript`, `EquipScript`, `Comment`  from ragnarok.item_db2;
-
-# INSERT INTO eragnarok.item_giftbox (  `NameID`, `item_name`, `rate`, `Comment` ) SELECT  `NameID`, `item_name`, `rate`, `Comment`  from ragnarok.item_giftbox;
-
-#INSERT INTO eragnarok.item_scroll (  `NameID`, `item_name`, `rate`, `Comment` ) SELECT  `NameID`, `item_name`, `rate`, `Comment`  from ragnarok.item_scroll;
-
-#INSERT INTO eragnarok.item_violetbox (  `NameID`, `item_name`, `rate`, `Comment` ) SELECT  `NameID`, `item_name`, `rate`, `Comment`  from ragnarok.item_violetbox;
-
-#INSERT INTO eragnarok.job_db1 (  `Class_ID`, `Weight`, `HP`, `HP2`, `SP`, `Empty`, `Dagger`, `Sword`, `Two_Handed_Sword`, `Spear`, `Two_Handed_Spear`, `Axe`, `Two_Handed_Axe`, `Rod`, `Club`, `Stick`, `Bow`, `Fist`, `Musical`, `Whip`, `Book`, `Katar`, `Comment` ) SELECT  `Class_ID`, `Weight`, `HP`, `HP2`, `SP`, `Empty`, `Dagger`, `Sword`, `Two_Handed_Sword`, `Spear`, `Two_Handed_Spear`, `Axe`, `Two_Handed_Axe`, `Rod`, `Club`, `Stick`, `Bow`, `Fist`, `Musical`, `Whip`, `Book`, `Katar`, `Comment`  from ragnarok.job_db1;
-
-INSERT INTO eragnarok.mob_boss (  `MobID`, `MobName`, `Rate`, `Comment` ) SELECT  `MobID`, `MobName`, `Rate`, `Comment`  from ragnarok.mob_boss;
-
-INSERT INTO eragnarok.mob_branch (  `MobID`, `MobName`, `Rate`, `Comment` ) SELECT  `MobID`, `MobName`, `Rate`, `Comment`  from ragnarok.mob_branch;
-
-INSERT INTO eragnarok.mob_db2 (  `ID`, `Name`, `Name2`, `LV`, `HP`, `SP`, `EXP`, `JEXP`, `Range1`, `ATK1`, `ATK2`, `DEF`, `MDEF`, `STR`, `AGI`, `VIT`, `INT`, `DEX`, `LUK`, `Range2`, `Range3`, `Scale`, `Race`, `Element`, `Mode`, `Speed`, `ADelay`, `aMotion`, `dMotion`, `Drop1id`, `Drop1per`, `Drop2id`, `Drop2per`, `Drop3id`, `Drop3per`, `Drop4id`, `Drop4per`, `Drop5id`, `Drop5per`, `Drop6id`, `Drop6per`, `Drop7d`, `Drop7per`, `Drop8id`, `Drop8per`, `Item1`, `Item2`, `MEXP`, `ExpPer`, `MVP1id`, `MVP1per`, `MVP2id`, `MVP2per`, `MVP3id`, `MVP3per`, `Comment` ) SELECT  `ID`, `Name`, `Name2`, `LV`, `HP`, `SP`, `EXP`, `JEXP`, `Range1`, `ATK1`, `ATK2`, `DEF`, `MDEF`, `STR`, `AGI`, `VIT`, `INT`, `DEX`, `LUK`, `Range2`, `Range3`, `Scale`, `Race`, `Element`, `Mode`, `Speed`, `ADelay`, `aMotion`, `dMotion`, `Drop1id`, `Drop1per`, `Drop2id`, `Drop2per`, `Drop3id`, `Drop3per`, `Drop4id`, `Drop4per`, `Drop5id`, `Drop5per`, `Drop6id`, `Drop6per`, `Drop7d`, `Drop7per`, `Drop8id`, `Drop8per`, `Item1`, `Item2`, `MEXP`, `ExpPer`, `MVP1id`, `MVP1per`, `MVP2id`, `MVP2per`, `MVP3id`, `MVP3per`, `Comment`  from ragnarok.mob_db2;
-
-INSERT INTO eragnarok.mob_poring (  `MobID`, `MobName`, `Rate`, `Comment` ) SELECT  `MobID`, `MobName`, `Rate`, `Comment`  from ragnarok.mob_poring;
-
-INSERT INTO eragnarok.mob_skill_db (  `Mob_ID`, `Dummy`, `State`, `Skill_ID`, `Skill_LV`, `Use_Rate`, `Cast_Time`, `Delay`, `Disturbance`, `Target`, `Condition_Type`, `Condition_Value`, `Value1`, `Value2`, `Value3`, `Value4`, `Value5`, `Comment` ) SELECT  `Mob_ID`, `Dummy`, `State`, `Skill_ID`, `Skill_LV`, `Use_Rate`, `Cast_Time`, `Delay`, `Disturbance`, `Target`, `Condition_Type`, `Condition_Value`, `Value1`, `Value2`, `Value3`, `Value4`, `Value5`, `Comment`  from ragnarok.mob_skill_db;
-
-#INSERT INTO eragnarok.pet_db (  `MobID`, `Name`, `JName`, `ItemID`, `EggID`, `AcceID`, `FoodID`, `Fullness`, `HungryDeray`, `R_Hungry`, `R_Full`, `Intimate`, `Die`, `Capture`, `Speed`, `S_Performance`, `Talk_Convert_Class`, `Attack_Rate`, `Defence_Attack_Rate`, `Change_Target_Rate`, `Pet_Script`, `Comment` ) SELECT  `MobID`, `Name`, `JName`, `ItemID`, `EggID`, `AcceID`, `FoodID`, `Fullness`, `HungryDeray`, `R_Hungry`, `R_Full`, `Intimate`, `Die`, `Capture`, `Speed`, `S_Performance`, `Talk_Convert_Class`, `Attack_Rate`, `Defence_Attack_Rate`, `Change_Target_Rate`, `Pet_Script`, `Comment`  from ragnarok.pet_db;
-
-#INSERT INTO eragnarok.produce_db (  `ID`, `ItemLV`, `RequireSkill`, `MaterialID1`, `MaterialAmount1`, `MaterialID2`, `MaterialAmount2`, `MaterialID3`, `MaterialAmount3`, `MaterialID4`, `MaterialAmount4`, `MaterialID5`, `MaterialAmount5`, `Comment` ) SELECT  `ID`, `ItemLV`, `RequireSkill`, `MaterialID1`, `MaterialAmount1`, `MaterialID2`, `MaterialAmount2`, `MaterialID3`, `MaterialAmount3`, `MaterialID4`, `MaterialAmount4`, `MaterialID5`, `MaterialAmount5`, `Comment`  from ragnarok.produce_db;
-
-#INSERT INTO eragnarok.refine_db (  `Refine_Bonus`, `Danger_Bonus`, `Safe_Limit`, `RefineChance1`, `RefineChance2`, `RefineChance3`, `RefineChance4`, `RefineChance5`, `RefineChance6`, `RefineChance7`, `RefineChance8`, `RefineChance9`, `RefineChance10`, `Comment` ) SELECT  `Refine_Bonus`, `Danger_Bonus`, `Safe_Limit`, `RefineChance1`, `RefineChance2`, `RefineChance3`, `RefineChance4`, `RefineChance5`, `RefineChance6`, `RefineChance7`, `RefineChance8`, `RefineChance9`, `RefineChance10`, `Comment`  from ragnarok.refine_db;
-
-#INSERT INTO eragnarok.size_fix (  `Element`, `Dagger`, `Sword`, `Two_Handed_Sword`, `Spear`, `Two_Handed_Spear`, `Axe`, `Two_Handed_Axe`, `Club`, `Whip`, `Stick`, `Bow`, `Fist`, `Musical`, `Rod`, `Book`, `Katar`, `Comment` ) SELECT  `Element`, `Dagger`, `Sword`, `Two_Handed_Sword`, `Spear`, `Two_Handed_Spear`, `Axe`, `Two_Handed_Axe`, `Club`, `Whip`, `Stick`, `Bow`, `Fist`, `Musical`, `Rod`, `Book`, `Katar`, `Comment`  from ragnarok.size_fix;
-
-#INSERT INTO eragnarok.skill_db (  `ID`, `Range`, `Hit`, `inf`, `nk`, `max`, `list_num`, `castcancel`, `cast_defence_rate`, `inf2`, `maxcount`, `skill_type`, `blow_count`, `Comment` ) SELECT  `ID`, `Range`, `Hit`, `inf`, `nk`, `max`, `list_num`, `castcancel`, `cast_defence_rate`, `inf2`, `maxcount`, `skill_type`, `blow_count`, `Comment`  from ragnarok.skill_db;
-
-#INSERT INTO eragnarok.skill_require_db (  `ID`, `List_HP`, `List_SP`, `List_HP_Rate`, `List_SP_Rate`, `List_Zeny`, `List_Weapon`, `State`, `Spiritball`, `ItemID1`, `Amount1`, `ItemID2`, `Amount2`, `ItemID3`, `Amount3`, `ItemID4`, `Amount4`, `ItemID5`, `Amount5`, `ItemID6`, `Amount6`, `ItemID7`, `Amount7`, `ItemID8`, `Amount8`, `ItemID9`, `Amount9`, `ItemID10`, `Amount10`, `Comment` ) SELECT  `ID`, `List_HP`, `List_SP`, `List_HP_Rate`, `List_SP_Rate`, `List_Zeny`, `List_Weapon`, `State`, `Spiritball`, `ItemID1`, `Amount1`, `ItemID2`, `Amount2`, `ItemID3`, `Amount3`, `ItemID4`, `Amount4`, `ItemID5`, `Amount5`, `ItemID6`, `Amount6`, `ItemID7`, `Amount7`, `ItemID8`, `Amount8`, `ItemID9`, `Amount9`, `ItemID10`, `Amount10`, `Comment`  from ragnarok.skill_require_db;
-
-#INSERT INTO eragnarok.skill_tree (  `Upper`, `JobNo`, `Skill_ID`, `MaxLV`, `Skill_ID_Require1`, `Skill_LV_Require1`, `Skill_ID_Require2`, `Skill_LV_Require2`, `Skill_ID_Require3`, `Skill_LV_Require3`, `Skill_ID_Require4`, `Skill_LV_Require4`, `Skill_ID_Require5`, `Skill_LV_Require5`, `Comment` ) SELECT  `Upper`, `JobNo`, `Skill_ID`, `MaxLV`, `Skill_ID_Require1`, `Skill_LV_Require1`, `Skill_ID_Require2`, `Skill_LV_Require2`, `Skill_ID_Require3`, `Skill_LV_Require3`, `Skill_ID_Require4`, `Skill_LV_Require4`, `Skill_ID_Require5`, `Skill_LV_Require5`, `Comment`  from ragnarok.skill_tree;
-    
-INSERT INTO eragnarok.item_db (  `id`, `name_english`, `name_japanese`, `type`, `price_buy`, `price_sell`, `weight`, `attack`, `defence`, `range`, `slots`, `equip_jobs`, `equip_genders`, `equip_locations`, `weapon_level`, `equip_level`, `view`, `script_use`, `script_equip` ) SELECT  `id`, `Name`, `Name2`, `type`, `Price`, `Sell`, `Weight`, `Atk`, `Def`, `range`, `Slot`, `Job`, `Gender`, `Loc`, `wLV`, `eLV`, `view`, `UseScript`, `EquipScript`  from ragnarok.item_db;
-
-UPDATE item_db SET price_sell = price_buy/2;
-
-INSERT INTO eragnarok.mob_db (`ID`, `Name`, `Name2`, `LV`, `HP`, `SP`, `EXP`, `JEXP`, `Range1`, `ATK1`, `ATK2`, `DEF`, `MDEF`, `STR`, `AGI`, `VIT`, `INT`, `DEX`, `LUK`, `Range2`, `Range3`, `Scale`, `Race`, `Element`, `Mode`, `Speed`, `ADelay`, `aMotion`, `dMotion`, `Drop1id`, `Drop1per`, `Drop2id`, `Drop2per`, `Drop3id`, `Drop3per`, `Drop4id`, `Drop4per`, `Drop5id`, `Drop5per`, `Drop6id`, `Drop6per`, `Drop7id`, `Drop7per`, `Drop8id`, `Drop8per`, `MEXP`, `ExpPer`, `MVP1id`, `MVP1per`, `MVP2id`, `MVP2per`, `MVP3id`, `MVP3per`) SELECT `ID`, `Name`, `Name2`, `LV`, `HP`, `SP`, `EXP`, `JEXP`, `Range1`, `ATK1`, `ATK2`, `DEF`, `MDEF`, `STR`, `AGI`, `VIT`, `INT`, `DEX`, `LUK`, `Range2`, `Range3`, `Scale`, `Race`, `Element`, `Mode`, `Speed`, `ADelay`, `aMotion`, `dMotion`, `Drop1id`, `Drop1per`, `Drop2id`, `Drop2per`, `Drop3id`, `Drop3per`, `Drop4id`, `Drop4per`, `Drop5id`, `Drop5per`, `Drop6id`, `Drop6per`, `Drop7id`, `Drop7per`, `Drop8id`, `Drop8per`, `MEXP`, `ExpPer`, `MVP1id`, `MVP1per`, `MVP2id`, `MVP2per`, `MVP3id`, `MVP3per` from ragnarok.mob_db;
-
-DELETE FROM eragnarok.login;
-
-INSERT INTO eragnarok.login ( `account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level` ) SELECT  `account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level`  from ragnarok.login ;
+//
+// When converting from oA to eA, my oA db was in ragnarok so I created
+// a new db called eragnarok and then ran the following commands...
+// 
+// /usr/local/mysql/bin/mysql -Deragnarok -u eragnarok -p< athena/sql-files/main.sql
+// /usr/local/mysql/bin/mysql -Deragnarok -u eragnarok -p< athena/sql-files/db_tables.sql
+// /usr/local/mysql/bin/mysql -Deragnarok -u eragnarok -p< athena/sql-files/mail.sql
+// /usr/local/mysql/bin/mysql -Deragnarok -u eragnarok -p< athena/sql-files/oA2eA-rc5.sql
+//
+// This creates a eragnarok database and fills everything in from the oA
+// database.
+// 
+//     -- MouseJstr
+
+CREATE TABLE `item_db` (
+  `id` smallint(5) unsigned NOT NULL default '0',
+  `name_english` varchar(24) NOT NULL default '',
+  `name_japanese` varchar(24) NOT NULL default '',
+  `type` tinyint(2) unsigned NOT NULL default '0',
+  `price_buy` int(10) unsigned default NULL,
+  `price_sell` int(10) unsigned default NULL,
+  `weight` int(10) unsigned NOT NULL default '0',
+  `attack` mediumint(9) unsigned default NULL,
+  `defence` mediumint(9) unsigned default NULL,
+  `range` tinyint(2) unsigned default NULL,
+  `slots` tinyint(1) unsigned default NULL,
+  `equip_jobs` mediumint(8) unsigned default NULL,
+  `equip_genders` tinyint(1) unsigned default NULL,
+  `equip_locations` smallint(4) unsigned default NULL,
+  `weapon_level` tinyint(1) unsigned default NULL,
+  `equip_level` tinyint(3) unsigned default NULL,
+  `view` tinyint(3) unsigned default NULL,
+  `script_use` text,
+  `script_equip` text,
+  PRIMARY KEY  (`id`)
+) TYPE=MyISAM;
+
+CREATE TABLE `mob_db` (
+  `ID` mediumint(9) NOT NULL default '0',
+  `Name` text NOT NULL,
+  `Name2` text NOT NULL,
+  `LV` smallint(6) NOT NULL default '0',
+  `HP` mediumint(9) NOT NULL default '0',
+  `SP` mediumint(9) NOT NULL default '0',
+  `EXP` mediumint(9) NOT NULL default '0',
+  `JEXP` mediumint(9) NOT NULL default '0',
+  `Range1` tinyint(4) NOT NULL default '0',
+  `ATK1` smallint(6) NOT NULL default '0',
+  `ATK2` smallint(6) NOT NULL default '0',
+  `DEF` smallint(6) NOT NULL default '0',
+  `MDEF` smallint(6) NOT NULL default '0',
+  `STR` tinyint(4) NOT NULL default '0',
+  `AGI` tinyint(4) NOT NULL default '0',
+  `VIT` tinyint(4) NOT NULL default '0',
+  `INT` tinyint(4) NOT NULL default '0',
+  `DEX` tinyint(4) NOT NULL default '0',
+  `LUK` tinyint(4) NOT NULL default '0',
+  `Range2` tinyint(4) NOT NULL default '0',
+  `Range3` tinyint(4) NOT NULL default '0',
+  `Scale` tinyint(4) NOT NULL default '0',
+  `Race` tinyint(4) NOT NULL default '0',
+  `Element` tinyint(4) NOT NULL default '0',
+  `Mode` smallint(6) NOT NULL default '0',
+  `Speed` smallint(6) NOT NULL default '0',
+  `ADelay` smallint(6) NOT NULL default '0',
+  `aMotion` smallint(6) NOT NULL default '0',
+  `dMotion` smallint(6) NOT NULL default '0',
+  `Drop1id` mediumint(9) NOT NULL default '0',
+  `Drop1per` mediumint(9) NOT NULL default '0',
+  `Drop2id` mediumint(9) NOT NULL default '0',
+  `Drop2per` mediumint(9) NOT NULL default '0',
+  `Drop3id` mediumint(9) NOT NULL default '0',
+  `Drop3per` mediumint(9) NOT NULL default '0',
+  `Drop4id` mediumint(9) NOT NULL default '0',
+  `Drop4per` mediumint(9) NOT NULL default '0',
+  `Drop5id` mediumint(9) NOT NULL default '0',
+  `Drop5per` mediumint(9) NOT NULL default '0',
+  `Drop6id` mediumint(9) NOT NULL default '0',
+  `Drop6per` mediumint(9) NOT NULL default '0',
+  `Drop7id` mediumint(9) NOT NULL default '0',
+  `Drop7per` mediumint(9) NOT NULL default '0',
+  `Drop8id` mediumint(9) NOT NULL default '0',
+  `Drop8per` mediumint(9) NOT NULL default '0',
+  `MEXP` mediumint(9) NOT NULL default '0',
+  `ExpPer` mediumint(9) NOT NULL default '0',
+  `MVP1id` mediumint(9) NOT NULL default '0',
+  `MVP1per` mediumint(9) NOT NULL default '0',
+  `MVP2id` mediumint(9) NOT NULL default '0',
+  `MVP2per` mediumint(9) NOT NULL default '0',
+  `MVP3id` mediumint(9) NOT NULL default '0',
+  `MVP3per` mediumint(9) NOT NULL default '0'
+) TYPE=MyISAM;
+
+INSERT INTO eragnarok.storage(`id`, `account_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`) SELECT `id`, `account_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3` from ragnarok.storage;
+
+ INSERT INTO eragnarok.cart_inventory(`id`, `char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken`) SELECT `id`, `char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken` from ragnarok.cart_inventory;
+
+INSERT INTO eragnarok.char( `char_id`, `account_id`, `char_num`, `name`, `class`, `base_level`, `job_level`, `base_exp`, `job_exp`, `zeny`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`, `max_sp`, `sp`, `status_point`, `skill_point`, `option`, `karma`, `manner`, `party_id`, `guild_id`, `pet_id`, `hair`, `hair_color`, `clothes_color`, `weapon`, `shield`, `head_top`, `head_mid`, `head_bottom`, `last_map`, `last_x`, `last_y`, `save_map`, `save_x`, `save_y`, `partner_id`, `online`) SELECT  `char_id`, `account_id`, `char_num`, `name`, `class`, `base_level`, `job_level`, `base_exp`, `job_exp`, `zeny`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`, `max_sp`, `sp`, `status_point`, `skill_point`, `option`, `karma`, `manner`, `party_id`, `guild_id`, `pet_id`, `hair`, `hair_color`, `clothes_color`, `weapon`, `shield`, `head_top`, `head_mid`, `head_bottom`, `last_map`, `last_x`, `last_y`, `save_map`, `save_x`, `save_y`, `partner_id`, `online` from ragnarok.char;
+
+INSERT INTO eragnarok.charlog( `time`, `char_msg`, `account_id`, `char_num`, `name`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `hair`, `hair_color` ) SELECT  `time`, `char_msg`, `account_id`, `char_num`, `name`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `hair`, `hair_color`  from ragnarok.charlog;
+
+INSERT INTO eragnarok.global_reg_value ( `char_id`, `str`, `value`, `type`, `account_id`) SELECT  `char_id`, `str`, `value`, `type`, `account_id` from ragnarok.global_reg_value ;
+
+INSERT INTO eragnarok.guild( `guild_id`, `name`, `master`, `guild_lv`, `connect_member`, `max_member`, `average_lv`, `exp`, `next_exp`, `skill_point`, `castle_id`, `mes1`, `mes2`, `emblem_len`, `emblem_id`, `emblem_data` ) SELECT  `guild_id`, `name`, `master`, `guild_lv`, `connect_member`, `max_member`, `average_lv`, `exp`, `next_exp`, `skill_point`, `castle_id`, `mes1`, `mes2`, `emblem_len`, `emblem_id`, `emblem_data`  from ragnarok.guild;
+
+INSERT INTO eragnarok.guild_alliance ( `guild_id`, `opposition`, `alliance_id`, `name` ) SELECT  `guild_id`, `opposition`, `alliance_id`, `name`  from ragnarok.guild_alliance ;
+
+INSERT INTO eragnarok.guild_castle ( `castle_id`, `guild_id`, `economy`, `defense`, `triggerE`, `triggerD`, `nextTime`, `payTime`, `createTime`, `visibleC`, `visibleG0`, `visibleG1`, `visibleG2`, `visibleG3`, `visibleG4`, `visibleG5`, `visibleG6`, `visibleG7` ) SELECT  `castle_id`, `guild_id`, `economy`, `defense`, `triggerE`, `triggerD`, `nextTime`, `payTime`, `createTime`, `visibleC`, `visibleG0`, `visibleG1`, `visibleG2`, `visibleG3`, `visibleG4`, `visibleG5`, `visibleG6`, `visibleG7`  from ragnarok.guild_castle ;
+
+INSERT INTO eragnarok.guild_expulsion ( `guild_id`, `name`, `mes`, `acc`, `account_id`, `rsv1`, `rsv2`, `rsv3` ) SELECT  `guild_id`, `name`, `mes`, `acc`, `account_id`, `rsv1`, `rsv2`, `rsv3`  from ragnarok.guild_expulsion ;
+
+INSERT INTO eragnarok.guild_member ( `guild_id`, `account_id`, `char_id`, `hair`, `hair_color`, `gender`, `class`, `lv`, `exp`, `exp_payper`, `online`, `position`, `rsv1`, `rsv2`, `name` ) SELECT  `guild_id`, `account_id`, `char_id`, `hair`, `hair_color`, `gender`, `class`, `lv`, `exp`, `exp_payper`, `online`, `position`, `rsv1`, `rsv2`, `name`  from ragnarok.guild_member ;
+
+INSERT INTO eragnarok.guild_position ( `guild_id`, `position`, `name`, `mode`, `exp_mode` ) SELECT  `guild_id`, `position`, `name`, `mode`, `exp_mode`  from ragnarok.guild_position ;
+
+INSERT INTO eragnarok.guild_skill ( `guild_id`, `id`, `lv` ) SELECT  `guild_id`, `id`, `lv`  from ragnarok.guild_skill ;
+
+INSERT INTO eragnarok.guild_storage ( `id`, `guild_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3` ) SELECT  `id`, `guild_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`  from ragnarok.guild_storage ;
+
+INSERT INTO eragnarok.interlog ( `time`, `log` ) SELECT  `time`, `log`  from ragnarok.interlog ;
+
+INSERT INTO eragnarok.inventory ( `id`, `char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3` ) SELECT  `id`, `char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`  from ragnarok.inventory ;
+
+INSERT INTO eragnarok.ipbanlist ( `list`, `btime`, `rtime`, `reason` ) SELECT  `list`, `btime`, `rtime`, `reason`  from ragnarok.ipbanlist ;
+
+
+# INSERT INTO eragnarok.login_error ( `err_id`, `reason` ) SELECT  `err_id`, `reason`  from ragnarok.login_error ;
+
+INSERT INTO eragnarok.loginlog ( `time`, `ip`, `user`, `rcode`, `log` ) SELECT  `time`, `ip`, `user`, `rcode`, `log`  from ragnarok.loginlog ;
+
+INSERT INTO eragnarok.memo ( `memo_id`, `char_id`, `map`, `x`, `y` ) SELECT  `memo_id`, `char_id`, `map`, `x`, `y`  from ragnarok.memo ;
+
+INSERT INTO eragnarok.party ( `party_id`, `name`, `exp`, `item`, `leader_id` ) SELECT  `party_id`, `name`, `exp`, `item`, `leader_id`  from ragnarok.party ;
+
+INSERT INTO eragnarok.pet ( `pet_id`, `class`, `name`, `account_id`, `char_id`, `level`, `egg_id`, `equip`, `intimate`, `hungry`, `rename_flag`, `incuvate` ) SELECT  `pet_id`, `class`, `name`, `account_id`, `char_id`, `level`, `egg_id`, `equip`, `intimate`, `hungry`, `rename_flag`, `incuvate`  from ragnarok.pet ;
+
+INSERT INTO eragnarok.ragsrvinfo ( `index`, `name`, `exp`, `jexp`, `drop` ) SELECT  `index`, `name`, `exp`, `jexp`, `drop`  from ragnarok.ragsrvinfo ;
+
+INSERT INTO eragnarok.skill ( `char_id`, `id`, `lv` ) SELECT  `char_id`, `id`, `lv`  from ragnarok.skill ;
+
+INSERT INTO eragnarok.sstatus ( `index`, `name`, `user` ) SELECT  `index`, `name`, `user`  from ragnarok.sstatus ;
+
+
+# INSERT INTO eragnarok.abra_db ( `ID`, `Dummy`, `Req_Lvl`, `Per`, `Comment`) SELECT `ID`, `Dummy`, `Req_Lvl`, `Per`, `Comment` from ragnarok.abra_db;
+
+# INSERT INTO eragnarok.attr_fix ( `Level`, `None`, `Water`, `Earth`, `Fire`, `Wind`, `Poison`, `Saint`, `Darkness`, `Sense`, `Immortality`, `Comment`) SELECT `Level`, `None`, `Water`, `Earth`, `Fire`, `Wind`, `Poison`, `Saint`, `Darkness`, `Sense`, `Immortality`, `Comment` from ragnarok.attr_fix;
+
+# INSERT INTO eragnarok.cast_db (  `ID`, `Cast_List`, `Delay_List`, `Upkeep_Time`, `Upkeep_Time2`, `Comment` ) SELECT  `ID`, `Cast_List`, `Delay_List`, `Upkeep_Time`, `Upkeep_Time2`, `Comment`  from ragnarok.cast_db;
+
+#INSERT INTO eragnarok.castle_db (  `CastleID`, `map_name`, `castle_name`, `switch_flag`, `Comment` ) SELECT  `CastleID`, `map_name`, `castle_name`, `switch_flag`, `Comment`  from ragnarok.castle_db;
+
+#INSERT INTO eragnarok.create_arrow_db (  `SourceID`, `MakeID1`, `MakeNum1`, `MakeID2`, `MakeNum2`, `MakeID3`, `MakeNum3`, `MakeID4`, `MakeNum4`, `MakeID5`, `MakeNum5`, `Comment` ) SELECT  `SourceID`, `MakeID1`, `MakeNum1`, `MakeID2`, `MakeNum2`, `MakeID3`, `MakeNum3`, `MakeID4`, `MakeNum4`, `MakeID5`, `MakeNum5`, `Comment`  from ragnarok.create_arrow_db;
+
+#INSERT INTO eragnarok.exp (  `EXP1`, `EXP2`, `EXP3`, `EXP4`, `EXP5`, `EXP6`, `EXP7`, `EXP8`, `EXP9`, `EXP10`, `EXP11`, `EXP12`, `EXP13`, `EXP14` ) SELECT  `EXP1`, `EXP2`, `EXP3`, `EXP4`, `EXP5`, `EXP6`, `EXP7`, `EXP8`, `EXP9`, `EXP10`, `EXP11`, `EXP12`, `EXP13`, `EXP14`  from ragnarok.exp;
+
+#INSERT INTO eragnarok.exp_guild (  `Level`, `EXP`, `Comment` ) SELECT  `Level`, `EXP`, `Comment`  from ragnarok.exp_guild;
+
+#INSERT INTO eragnarok.item_bluebox (  `NameID`, `item_name`, `rate`, `Comment` ) SELECT  `NameID`, `item_name`, `rate`, `Comment`  from ragnarok.item_bluebox;
+
+#INSERT INTO eragnarok.item_cardalbum (  `NameID`, `item_name`, `rate`, `Comment` ) SELECT  `NameID`, `item_name`, `rate`, `Comment`  from ragnarok.item_cardalbum;
+
+INSERT INTO eragnarok.item_db2 (  `ID`, `Name`, `Name2`, `Type`, `Price`, `Sell`, `Weight`, `ATK`, `DEF`, `Range`, `Slot`, `Job`, `Gender`, `Loc`, `wLV`, `eLV`, `View`, `UseScript`, `EquipScript`, `Comment` ) SELECT  `ID`, `Name`, `Name2`, `Type`, `Price`, `Sell`, `Weight`, `ATK`, `DEF`, `Range`, `Slot`, `Job`, `Gender`, `Loc`, `wLV`, `eLV`, `View`, `UseScript`, `EquipScript`, `Comment`  from ragnarok.item_db2;
+
+# INSERT INTO eragnarok.item_giftbox (  `NameID`, `item_name`, `rate`, `Comment` ) SELECT  `NameID`, `item_name`, `rate`, `Comment`  from ragnarok.item_giftbox;
+
+#INSERT INTO eragnarok.item_scroll (  `NameID`, `item_name`, `rate`, `Comment` ) SELECT  `NameID`, `item_name`, `rate`, `Comment`  from ragnarok.item_scroll;
+
+#INSERT INTO eragnarok.item_violetbox (  `NameID`, `item_name`, `rate`, `Comment` ) SELECT  `NameID`, `item_name`, `rate`, `Comment`  from ragnarok.item_violetbox;
+
+#INSERT INTO eragnarok.job_db1 (  `Class_ID`, `Weight`, `HP`, `HP2`, `SP`, `Empty`, `Dagger`, `Sword`, `Two_Handed_Sword`, `Spear`, `Two_Handed_Spear`, `Axe`, `Two_Handed_Axe`, `Rod`, `Club`, `Stick`, `Bow`, `Fist`, `Musical`, `Whip`, `Book`, `Katar`, `Comment` ) SELECT  `Class_ID`, `Weight`, `HP`, `HP2`, `SP`, `Empty`, `Dagger`, `Sword`, `Two_Handed_Sword`, `Spear`, `Two_Handed_Spear`, `Axe`, `Two_Handed_Axe`, `Rod`, `Club`, `Stick`, `Bow`, `Fist`, `Musical`, `Whip`, `Book`, `Katar`, `Comment`  from ragnarok.job_db1;
+
+INSERT INTO eragnarok.mob_boss (  `MobID`, `MobName`, `Rate`, `Comment` ) SELECT  `MobID`, `MobName`, `Rate`, `Comment`  from ragnarok.mob_boss;
+
+INSERT INTO eragnarok.mob_branch (  `MobID`, `MobName`, `Rate`, `Comment` ) SELECT  `MobID`, `MobName`, `Rate`, `Comment`  from ragnarok.mob_branch;
+
+INSERT INTO eragnarok.mob_db2 (  `ID`, `Name`, `Name2`, `LV`, `HP`, `SP`, `EXP`, `JEXP`, `Range1`, `ATK1`, `ATK2`, `DEF`, `MDEF`, `STR`, `AGI`, `VIT`, `INT`, `DEX`, `LUK`, `Range2`, `Range3`, `Scale`, `Race`, `Element`, `Mode`, `Speed`, `ADelay`, `aMotion`, `dMotion`, `Drop1id`, `Drop1per`, `Drop2id`, `Drop2per`, `Drop3id`, `Drop3per`, `Drop4id`, `Drop4per`, `Drop5id`, `Drop5per`, `Drop6id`, `Drop6per`, `Drop7d`, `Drop7per`, `Drop8id`, `Drop8per`, `Item1`, `Item2`, `MEXP`, `ExpPer`, `MVP1id`, `MVP1per`, `MVP2id`, `MVP2per`, `MVP3id`, `MVP3per`, `Comment` ) SELECT  `ID`, `Name`, `Name2`, `LV`, `HP`, `SP`, `EXP`, `JEXP`, `Range1`, `ATK1`, `ATK2`, `DEF`, `MDEF`, `STR`, `AGI`, `VIT`, `INT`, `DEX`, `LUK`, `Range2`, `Range3`, `Scale`, `Race`, `Element`, `Mode`, `Speed`, `ADelay`, `aMotion`, `dMotion`, `Drop1id`, `Drop1per`, `Drop2id`, `Drop2per`, `Drop3id`, `Drop3per`, `Drop4id`, `Drop4per`, `Drop5id`, `Drop5per`, `Drop6id`, `Drop6per`, `Drop7d`, `Drop7per`, `Drop8id`, `Drop8per`, `Item1`, `Item2`, `MEXP`, `ExpPer`, `MVP1id`, `MVP1per`, `MVP2id`, `MVP2per`, `MVP3id`, `MVP3per`, `Comment`  from ragnarok.mob_db2;
+
+INSERT INTO eragnarok.mob_poring (  `MobID`, `MobName`, `Rate`, `Comment` ) SELECT  `MobID`, `MobName`, `Rate`, `Comment`  from ragnarok.mob_poring;
+
+INSERT INTO eragnarok.mob_skill_db (  `Mob_ID`, `Dummy`, `State`, `Skill_ID`, `Skill_LV`, `Use_Rate`, `Cast_Time`, `Delay`, `Disturbance`, `Target`, `Condition_Type`, `Condition_Value`, `Value1`, `Value2`, `Value3`, `Value4`, `Value5`, `Comment` ) SELECT  `Mob_ID`, `Dummy`, `State`, `Skill_ID`, `Skill_LV`, `Use_Rate`, `Cast_Time`, `Delay`, `Disturbance`, `Target`, `Condition_Type`, `Condition_Value`, `Value1`, `Value2`, `Value3`, `Value4`, `Value5`, `Comment`  from ragnarok.mob_skill_db;
+
+#INSERT INTO eragnarok.pet_db (  `MobID`, `Name`, `JName`, `ItemID`, `EggID`, `AcceID`, `FoodID`, `Fullness`, `HungryDeray`, `R_Hungry`, `R_Full`, `Intimate`, `Die`, `Capture`, `Speed`, `S_Performance`, `Talk_Convert_Class`, `Attack_Rate`, `Defence_Attack_Rate`, `Change_Target_Rate`, `Pet_Script`, `Comment` ) SELECT  `MobID`, `Name`, `JName`, `ItemID`, `EggID`, `AcceID`, `FoodID`, `Fullness`, `HungryDeray`, `R_Hungry`, `R_Full`, `Intimate`, `Die`, `Capture`, `Speed`, `S_Performance`, `Talk_Convert_Class`, `Attack_Rate`, `Defence_Attack_Rate`, `Change_Target_Rate`, `Pet_Script`, `Comment`  from ragnarok.pet_db;
+
+#INSERT INTO eragnarok.produce_db (  `ID`, `ItemLV`, `RequireSkill`, `MaterialID1`, `MaterialAmount1`, `MaterialID2`, `MaterialAmount2`, `MaterialID3`, `MaterialAmount3`, `MaterialID4`, `MaterialAmount4`, `MaterialID5`, `MaterialAmount5`, `Comment` ) SELECT  `ID`, `ItemLV`, `RequireSkill`, `MaterialID1`, `MaterialAmount1`, `MaterialID2`, `MaterialAmount2`, `MaterialID3`, `MaterialAmount3`, `MaterialID4`, `MaterialAmount4`, `MaterialID5`, `MaterialAmount5`, `Comment`  from ragnarok.produce_db;
+
+#INSERT INTO eragnarok.refine_db (  `Refine_Bonus`, `Danger_Bonus`, `Safe_Limit`, `RefineChance1`, `RefineChance2`, `RefineChance3`, `RefineChance4`, `RefineChance5`, `RefineChance6`, `RefineChance7`, `RefineChance8`, `RefineChance9`, `RefineChance10`, `Comment` ) SELECT  `Refine_Bonus`, `Danger_Bonus`, `Safe_Limit`, `RefineChance1`, `RefineChance2`, `RefineChance3`, `RefineChance4`, `RefineChance5`, `RefineChance6`, `RefineChance7`, `RefineChance8`, `RefineChance9`, `RefineChance10`, `Comment`  from ragnarok.refine_db;
+
+#INSERT INTO eragnarok.size_fix (  `Element`, `Dagger`, `Sword`, `Two_Handed_Sword`, `Spear`, `Two_Handed_Spear`, `Axe`, `Two_Handed_Axe`, `Club`, `Whip`, `Stick`, `Bow`, `Fist`, `Musical`, `Rod`, `Book`, `Katar`, `Comment` ) SELECT  `Element`, `Dagger`, `Sword`, `Two_Handed_Sword`, `Spear`, `Two_Handed_Spear`, `Axe`, `Two_Handed_Axe`, `Club`, `Whip`, `Stick`, `Bow`, `Fist`, `Musical`, `Rod`, `Book`, `Katar`, `Comment`  from ragnarok.size_fix;
+
+#INSERT INTO eragnarok.skill_db (  `ID`, `Range`, `Hit`, `inf`, `nk`, `max`, `list_num`, `castcancel`, `cast_defence_rate`, `inf2`, `maxcount`, `skill_type`, `blow_count`, `Comment` ) SELECT  `ID`, `Range`, `Hit`, `inf`, `nk`, `max`, `list_num`, `castcancel`, `cast_defence_rate`, `inf2`, `maxcount`, `skill_type`, `blow_count`, `Comment`  from ragnarok.skill_db;
+
+#INSERT INTO eragnarok.skill_require_db (  `ID`, `List_HP`, `List_SP`, `List_HP_Rate`, `List_SP_Rate`, `List_Zeny`, `List_Weapon`, `State`, `Spiritball`, `ItemID1`, `Amount1`, `ItemID2`, `Amount2`, `ItemID3`, `Amount3`, `ItemID4`, `Amount4`, `ItemID5`, `Amount5`, `ItemID6`, `Amount6`, `ItemID7`, `Amount7`, `ItemID8`, `Amount8`, `ItemID9`, `Amount9`, `ItemID10`, `Amount10`, `Comment` ) SELECT  `ID`, `List_HP`, `List_SP`, `List_HP_Rate`, `List_SP_Rate`, `List_Zeny`, `List_Weapon`, `State`, `Spiritball`, `ItemID1`, `Amount1`, `ItemID2`, `Amount2`, `ItemID3`, `Amount3`, `ItemID4`, `Amount4`, `ItemID5`, `Amount5`, `ItemID6`, `Amount6`, `ItemID7`, `Amount7`, `ItemID8`, `Amount8`, `ItemID9`, `Amount9`, `ItemID10`, `Amount10`, `Comment`  from ragnarok.skill_require_db;
+
+#INSERT INTO eragnarok.skill_tree (  `Upper`, `JobNo`, `Skill_ID`, `MaxLV`, `Skill_ID_Require1`, `Skill_LV_Require1`, `Skill_ID_Require2`, `Skill_LV_Require2`, `Skill_ID_Require3`, `Skill_LV_Require3`, `Skill_ID_Require4`, `Skill_LV_Require4`, `Skill_ID_Require5`, `Skill_LV_Require5`, `Comment` ) SELECT  `Upper`, `JobNo`, `Skill_ID`, `MaxLV`, `Skill_ID_Require1`, `Skill_LV_Require1`, `Skill_ID_Require2`, `Skill_LV_Require2`, `Skill_ID_Require3`, `Skill_LV_Require3`, `Skill_ID_Require4`, `Skill_LV_Require4`, `Skill_ID_Require5`, `Skill_LV_Require5`, `Comment`  from ragnarok.skill_tree;
+    
+INSERT INTO eragnarok.item_db (  `id`, `name_english`, `name_japanese`, `type`, `price_buy`, `price_sell`, `weight`, `attack`, `defence`, `range`, `slots`, `equip_jobs`, `equip_genders`, `equip_locations`, `weapon_level`, `equip_level`, `view`, `script_use`, `script_equip` ) SELECT  `id`, `Name`, `Name2`, `type`, `Price`, `Sell`, `Weight`, `Atk`, `Def`, `range`, `Slot`, `Job`, `Gender`, `Loc`, `wLV`, `eLV`, `view`, `UseScript`, `EquipScript`  from ragnarok.item_db;
+
+UPDATE item_db SET price_sell = price_buy/2;
+
+INSERT INTO eragnarok.mob_db (`ID`, `Name`, `Name2`, `LV`, `HP`, `SP`, `EXP`, `JEXP`, `Range1`, `ATK1`, `ATK2`, `DEF`, `MDEF`, `STR`, `AGI`, `VIT`, `INT`, `DEX`, `LUK`, `Range2`, `Range3`, `Scale`, `Race`, `Element`, `Mode`, `Speed`, `ADelay`, `aMotion`, `dMotion`, `Drop1id`, `Drop1per`, `Drop2id`, `Drop2per`, `Drop3id`, `Drop3per`, `Drop4id`, `Drop4per`, `Drop5id`, `Drop5per`, `Drop6id`, `Drop6per`, `Drop7id`, `Drop7per`, `Drop8id`, `Drop8per`, `MEXP`, `ExpPer`, `MVP1id`, `MVP1per`, `MVP2id`, `MVP2per`, `MVP3id`, `MVP3per`) SELECT `ID`, `Name`, `Name2`, `LV`, `HP`, `SP`, `EXP`, `JEXP`, `Range1`, `ATK1`, `ATK2`, `DEF`, `MDEF`, `STR`, `AGI`, `VIT`, `INT`, `DEX`, `LUK`, `Range2`, `Range3`, `Scale`, `Race`, `Element`, `Mode`, `Speed`, `ADelay`, `aMotion`, `dMotion`, `Drop1id`, `Drop1per`, `Drop2id`, `Drop2per`, `Drop3id`, `Drop3per`, `Drop4id`, `Drop4per`, `Drop5id`, `Drop5per`, `Drop6id`, `Drop6per`, `Drop7id`, `Drop7per`, `Drop8id`, `Drop8per`, `MEXP`, `ExpPer`, `MVP1id`, `MVP1per`, `MVP2id`, `MVP2per`, `MVP3id`, `MVP3per` from ragnarok.mob_db;
+
+DELETE FROM eragnarok.login;
+
+INSERT INTO eragnarok.login ( `account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level` ) SELECT  `account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level`  from ragnarok.login ;

+ 13 - 13
sql-files/update_logs.sql

@@ -1,13 +1,13 @@
-#ZenyLog types (M)onsters,(T)rade,(V)ending Sell/Buy,(S)hop Sell/Buy,(N)PC Change amount,(A)dministrators
-#Database: log
-#Table: zenylog
-CREATE TABLE `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` set('M','T','V','S','N','A') NOT NULL default 'S',
-  `amount` int(11) NOT NULL default '0',
-  `map` varchar(20) NOT NULL default 'prontera.gat',
-  PRIMARY KEY  (`id`)
-) TYPE=MyISAM AUTO_INCREMENT=1 ;
+#ZenyLog types (M)onsters,(T)rade,(V)ending Sell/Buy,(S)hop Sell/Buy,(N)PC Change amount,(A)dministrators
+#Database: log
+#Table: zenylog
+CREATE TABLE `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` set('M','T','V','S','N','A') NOT NULL default 'S',
+  `amount` int(11) NOT NULL default '0',
+  `map` varchar(20) NOT NULL default 'prontera.gat',
+  PRIMARY KEY  (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;

+ 1 - 1
sql-files/upgrade_0.5.2_database.sql

@@ -1 +1 @@
-# Upgrade database tables for eAthena 0.5.2 to 1.0 RC 2
+# Upgrade database tables for eAthena 0.5.2 to 1.0 RC 2

+ 62 - 62
sql-files/upgrade_0.5.2_main.sql

@@ -1,62 +1,62 @@
-# Upgrade login and character server tables for eAthena 0.5.2 to 1.0 RC 2
-
-ALTER TABLE `cart_inventory` ADD `broken` int(11) NOT NULL default '0';
-
-ALTER TABLE `char` MODIFY `base_level` bigint(20) unsigned NOT NULL default '1';
-ALTER TABLE `char` MODIFY `job_level` bigint(20) unsigned NOT NULL default '1';
-ALTER TABLE `char` MODIFY `base_exp` bigint(20) NOT NULL default '0';
-ALTER TABLE `char` MODIFY `job_exp` bigint(20) NOT NULL default '0';
-ALTER TABLE `char` ADD `partner_id` int(11) NOT NULL default '0';
-
-ALTER TABLE `charlog` MODIFY `str` int(11) unsigned NOT NULL default '0';
-ALTER TABLE `charlog` MODIFY `agi` int(11) unsigned NOT NULL default '0';
-ALTER TABLE `charlog` MODIFY `vit` int(11) unsigned NOT NULL default '0';
-ALTER TABLE `charlog` MODIFY `int` int(11) unsigned NOT NULL default '0';
-ALTER TABLE `charlog` MODIFY `dex` int(11) unsigned NOT NULL default '0';
-ALTER TABLE `charlog` MODIFY `luk` int(11) unsigned NOT NULL default '0';
-
-ALTER TABLE `global_reg_value` MODIFY `value` varchar(255) NOT NULL default '0';
-ALTER TABLE `global_reg_value` ADD PRIMARY KEY (`char_id`, `str`, `account_id`);
-ALTER TABLE `global_reg_value` DROP INDEX `account_id`;
-ALTER TABLE `global_reg_value` ADD INDEX `account_id` (`account_id`);
-
-ALTER TABLE `guild_castle` ADD `gHP0` int(11) NOT NULL default '0';
-ALTER TABLE `guild_castle` ADD `gHP1` int(11) NOT NULL default '0';
-ALTER TABLE `guild_castle` ADD `gHP2` int(11) NOT NULL default '0';
-ALTER TABLE `guild_castle` ADD `gHP3` int(11) NOT NULL default '0';
-ALTER TABLE `guild_castle` ADD `gHP4` int(11) NOT NULL default '0';
-ALTER TABLE `guild_castle` ADD `gHP5` int(11) NOT NULL default '0';
-ALTER TABLE `guild_castle` ADD `gHP6` int(11) NOT NULL default '0';
-ALTER TABLE `guild_castle` ADD `gHP7` int(11) NOT NULL default '0';
-
-ALTER TABLE `guild_member` MODIFY `exp` bigint(20) NOT NULL default '0';
-
-ALTER TABLE `guild_storage` ADD `broken` int(11) NOT NULL default '0';
-
-ALTER TABLE `inventory` ADD `broken` int(11) NOT NULL default '0';
-
-ALTER TABLE `login` MODIFY `account_id` int(11) NOT NULL default '0' AUTO_INCREMENT, AUTO_INCREMENT=1000057;
-ALTER TABLE `login` MODIFY `userid` varchar(255) NOT NULL default '';
-ALTER TABLE `login` MODIFY `user_pass` varchar(32) NOT NULL default '';
-ALTER TABLE `login` ADD `error_message` int(11) NOT NULL default '0';
-ALTER TABLE `login` ADD `connect_until` int(11) NOT NULL default '0';
-ALTER TABLE `login` ADD `last_ip` varchar(100) NOT NULL default '';
-ALTER TABLE `login` ADD `memo` int(11) NOT NULL default '0';
-ALTER TABLE `login` ADD `ban_until` int(11) NOT NULL default '0';
-ALTER TABLE `login` ADD `state` int(11) NOT NULL default '0';
-ALTER TABLE `login` DROP INDEX `account_id`;
-ALTER TABLE `login` DROP INDEX `userid`;
-ALTER TABLE `login` ADD PRIMARY KEY (`account_id`), ADD INDEX `name` (`userid`);
-
-CREATE TABLE `login_error` (
-  `err_id` int(11) NOT NULL default '0',
-  `reason` varchar(100) NOT NULL default 'Unknown',
-  PRIMARY KEY  (`err_id`)
-) TYPE=MyISAM; 
-
-ALTER TABLE `ragsrvinfo` DROP `type`, DROP `text1`, DROP `text2`, DROP `text3`, DROP `text4`;
-ALTER TABLE `ragsrvinfo` ADD `motd` varchar(255) NOT NULL default '';
-
-ALTER TABLE `skill` ADD PRIMARY KEY (`char_id`,`id`);
-
-ALTER TABLE `storage` ADD `broken` int(11) NOT NULL default '0';
+# Upgrade login and character server tables for eAthena 0.5.2 to 1.0 RC 2
+
+ALTER TABLE `cart_inventory` ADD `broken` int(11) NOT NULL default '0';
+
+ALTER TABLE `char` MODIFY `base_level` bigint(20) unsigned NOT NULL default '1';
+ALTER TABLE `char` MODIFY `job_level` bigint(20) unsigned NOT NULL default '1';
+ALTER TABLE `char` MODIFY `base_exp` bigint(20) NOT NULL default '0';
+ALTER TABLE `char` MODIFY `job_exp` bigint(20) NOT NULL default '0';
+ALTER TABLE `char` ADD `partner_id` int(11) NOT NULL default '0';
+
+ALTER TABLE `charlog` MODIFY `str` int(11) unsigned NOT NULL default '0';
+ALTER TABLE `charlog` MODIFY `agi` int(11) unsigned NOT NULL default '0';
+ALTER TABLE `charlog` MODIFY `vit` int(11) unsigned NOT NULL default '0';
+ALTER TABLE `charlog` MODIFY `int` int(11) unsigned NOT NULL default '0';
+ALTER TABLE `charlog` MODIFY `dex` int(11) unsigned NOT NULL default '0';
+ALTER TABLE `charlog` MODIFY `luk` int(11) unsigned NOT NULL default '0';
+
+ALTER TABLE `global_reg_value` MODIFY `value` varchar(255) NOT NULL default '0';
+ALTER TABLE `global_reg_value` ADD PRIMARY KEY (`char_id`, `str`, `account_id`);
+ALTER TABLE `global_reg_value` DROP INDEX `account_id`;
+ALTER TABLE `global_reg_value` ADD INDEX `account_id` (`account_id`);
+
+ALTER TABLE `guild_castle` ADD `gHP0` int(11) NOT NULL default '0';
+ALTER TABLE `guild_castle` ADD `gHP1` int(11) NOT NULL default '0';
+ALTER TABLE `guild_castle` ADD `gHP2` int(11) NOT NULL default '0';
+ALTER TABLE `guild_castle` ADD `gHP3` int(11) NOT NULL default '0';
+ALTER TABLE `guild_castle` ADD `gHP4` int(11) NOT NULL default '0';
+ALTER TABLE `guild_castle` ADD `gHP5` int(11) NOT NULL default '0';
+ALTER TABLE `guild_castle` ADD `gHP6` int(11) NOT NULL default '0';
+ALTER TABLE `guild_castle` ADD `gHP7` int(11) NOT NULL default '0';
+
+ALTER TABLE `guild_member` MODIFY `exp` bigint(20) NOT NULL default '0';
+
+ALTER TABLE `guild_storage` ADD `broken` int(11) NOT NULL default '0';
+
+ALTER TABLE `inventory` ADD `broken` int(11) NOT NULL default '0';
+
+ALTER TABLE `login` MODIFY `account_id` int(11) NOT NULL default '0' AUTO_INCREMENT, AUTO_INCREMENT=1000057;
+ALTER TABLE `login` MODIFY `userid` varchar(255) NOT NULL default '';
+ALTER TABLE `login` MODIFY `user_pass` varchar(32) NOT NULL default '';
+ALTER TABLE `login` ADD `error_message` int(11) NOT NULL default '0';
+ALTER TABLE `login` ADD `connect_until` int(11) NOT NULL default '0';
+ALTER TABLE `login` ADD `last_ip` varchar(100) NOT NULL default '';
+ALTER TABLE `login` ADD `memo` int(11) NOT NULL default '0';
+ALTER TABLE `login` ADD `ban_until` int(11) NOT NULL default '0';
+ALTER TABLE `login` ADD `state` int(11) NOT NULL default '0';
+ALTER TABLE `login` DROP INDEX `account_id`;
+ALTER TABLE `login` DROP INDEX `userid`;
+ALTER TABLE `login` ADD PRIMARY KEY (`account_id`), ADD INDEX `name` (`userid`);
+
+CREATE TABLE `login_error` (
+  `err_id` int(11) NOT NULL default '0',
+  `reason` varchar(100) NOT NULL default 'Unknown',
+  PRIMARY KEY  (`err_id`)
+) TYPE=MyISAM; 
+
+ALTER TABLE `ragsrvinfo` DROP `type`, DROP `text1`, DROP `text2`, DROP `text3`, DROP `text4`;
+ALTER TABLE `ragsrvinfo` ADD `motd` varchar(255) NOT NULL default '';
+
+ALTER TABLE `skill` ADD PRIMARY KEY (`char_id`,`id`);
+
+ALTER TABLE `storage` ADD `broken` int(11) NOT NULL default '0';

+ 3 - 3
sql-files/upgrade_1.0.0-rc1_main.sql

@@ -1,3 +1,3 @@
-# Upgrade login and character server tables for eAthena 1.0 RC 1 to 1.0 RC 2
-
-ALTER TABLE `login` MODIFY `account_id` INT(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2000000;
+# Upgrade login and character server tables for eAthena 1.0 RC 1 to 1.0 RC 2
+
+ALTER TABLE `login` MODIFY `account_id` INT(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2000000;

+ 4 - 4
sql-files/upgrade_1.0.0-rc2_database.sql

@@ -1,4 +1,4 @@
-# Upgrade database tables for eAthena 1.0 RC2
-
-ALTER TABLE `item_db` MODIFY `name_english` varchar(28); 
-ALTER TABLE `item_db` MODIFY `name_japanese` varchar(28);
+# Upgrade database tables for eAthena 1.0 RC2
+
+ALTER TABLE `item_db` MODIFY `name_english` varchar(28); 
+ALTER TABLE `item_db` MODIFY `name_japanese` varchar(28);

+ 4 - 4
sql-files/upgrade_1.0.0-rc5_database.sql

@@ -1,4 +1,4 @@
-# Upgrade database tables for eAthena 1.0 RC2
-
-ALTER TABLE `item_db` MODIFY `name_english` varchar(24); 
-ALTER TABLE `item_db` MODIFY `name_japanese` varchar(24);
+# Upgrade database tables for eAthena 1.0 RC2
+
+ALTER TABLE `item_db` MODIFY `name_english` varchar(24); 
+ALTER TABLE `item_db` MODIFY `name_japanese` varchar(24);

+ 18 - 18
sql-files/upgrade_svn1759.sql

@@ -1,18 +1,18 @@
-
-CREATE TABLE `chatlog` (
-  `id` bigint(20) NOT NULL auto_increment,
-  `time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `type` enum('W','P','G') NOT NULL default 'W',
-  `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(17) NOT NULL default '',
-  `src_map_x` tinyint(4) NOT NULL default '0',
-  `src_map_y` tinyint(4) NOT NULL default '0',
-  `dst_charname` varchar(25) NOT NULL default '',
-  `message` varchar(150) NOT NULL default '',
-  PRIMARY KEY  (`id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1 ;
-
-
-
+
+CREATE TABLE `chatlog` (
+  `id` bigint(20) NOT NULL auto_increment,
+  `time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `type` enum('W','P','G') NOT NULL default 'W',
+  `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(17) NOT NULL default '',
+  `src_map_x` tinyint(4) NOT NULL default '0',
+  `src_map_y` tinyint(4) NOT NULL default '0',
+  `dst_charname` varchar(25) NOT NULL default '',
+  `message` varchar(150) NOT NULL default '',
+  PRIMARY KEY  (`id`)
+) ENGINE=MyISAM AUTO_INCREMENT=1 ;
+
+
+

+ 7 - 7
sql-files/upgrade_svn1863.sql

@@ -1,7 +1,7 @@
-ALTER TABLE item_db ADD `refineable` tinyint(1) default NULL AFTER `equip_level`;
-ALTER TABLE item_db2 ADD `refineable` tinyint(1) default NULL AFTER `equip_level`;
-UPDATE item_db SET refineable=1 where type=4 or type=5;
-UPDATE item_db2 SET refineable=1 where type=4 or type=5;
-UPDATE item_db SET refineable = 0 where id = 1243 OR id = 1530 OR id = 2110 OR id = 2112 OR id = 2250 OR id = 2253 OR id = 2264 OR id = 2271 OR id = 2279 OR id = 2282 OR id = 2289 OR id = 2290 OR id = 2293 OR id = 2298 OR id = 2352 OR id = 2410 OR id = 2413 OR id = 2414 OR id = 2509 OR id = 2510 OR id = 5008 OR id = 5015 OR id = 5037 OR id = 5039 OR id = 5046 OR id = 5049 OR id = 5050 OR id = 5053 OR id = 5055 OR id = 5058 OR id = 5098;
-UPDATE item_db SET refineable = 0 where equip_locations = 513 OR equip_locations = 512 OR equip_locations = 136 OR equip_locations = 1;
-UPDATE item_db2 SET refineable = 0 where equip_locations = 513 OR equip_locations = 512 OR equip_locations = 136 OR equip_locations = 1;
+ALTER TABLE item_db ADD `refineable` tinyint(1) default NULL AFTER `equip_level`;
+ALTER TABLE item_db2 ADD `refineable` tinyint(1) default NULL AFTER `equip_level`;
+UPDATE item_db SET refineable=1 where type=4 or type=5;
+UPDATE item_db2 SET refineable=1 where type=4 or type=5;
+UPDATE item_db SET refineable = 0 where id = 1243 OR id = 1530 OR id = 2110 OR id = 2112 OR id = 2250 OR id = 2253 OR id = 2264 OR id = 2271 OR id = 2279 OR id = 2282 OR id = 2289 OR id = 2290 OR id = 2293 OR id = 2298 OR id = 2352 OR id = 2410 OR id = 2413 OR id = 2414 OR id = 2509 OR id = 2510 OR id = 5008 OR id = 5015 OR id = 5037 OR id = 5039 OR id = 5046 OR id = 5049 OR id = 5050 OR id = 5053 OR id = 5055 OR id = 5058 OR id = 5098;
+UPDATE item_db SET refineable = 0 where equip_locations = 513 OR equip_locations = 512 OR equip_locations = 136 OR equip_locations = 1;
+UPDATE item_db2 SET refineable = 0 where equip_locations = 513 OR equip_locations = 512 OR equip_locations = 136 OR equip_locations = 1;

+ 3 - 3
sql-files/upgrade_svn2068.sql

@@ -1,3 +1,3 @@
-update mob_db set aMotion="185" where id=1275;
-update mob_db set aMotion="160" where id=1200;
-update mob_db set aMotion="160" where id=1482;
+update mob_db set aMotion="185" where id=1275;
+update mob_db set aMotion="160" where id=1200;
+update mob_db set aMotion="160" where id=1482;

+ 14 - 14
sql-files/upgrade_svn2252.sql

@@ -1,14 +1,14 @@
-################################
-# NEW friend table             #
-# NOTE -> if you dont write a  #
-# converter, all your friends  #
-# will be deleted              #
-################################
-
-DROP TABLE `friends`;
-
-CREATE TABLE `friends` (
-  `char_id` int(11) NOT NULL default '0',
-  `friend_id` int(11) NOT NULL default '0'
-) TYPE=MyISAM;
-
+################################
+# NEW friend table             #
+# NOTE -> if you dont write a  #
+# converter, all your friends  #
+# will be deleted              #
+################################
+
+DROP TABLE `friends`;
+
+CREATE TABLE `friends` (
+  `char_id` int(11) NOT NULL default '0',
+  `friend_id` int(11) NOT NULL default '0'
+) TYPE=MyISAM;
+

+ 3 - 3
sql-files/upgrade_svn2331.sql

@@ -1,3 +1,3 @@
-ALTER TABLE guild_position 
-ADD CONSTRAINT `guild_position_ibfk_1` FOREIGN KEY (`guild_id`) 
-REFERENCES `guild` (`guild_id`) ON DELETE CASCADE
+ALTER TABLE guild_position 
+ADD CONSTRAINT `guild_position_ibfk_1` FOREIGN KEY (`guild_id`) 
+REFERENCES `guild` (`guild_id`) ON DELETE CASCADE

+ 2 - 2
sql-files/upgrade_svn2574.sql

@@ -1,2 +1,2 @@
-ALTER TABLE friends ADD `friend_account` int(11) NOT NULL default 0 AFTER `char_id`;
-UPDATE friends, `char` SET friends.friend_account=`char`.account_id where friends.friend_id=`char`.char_id;
+ALTER TABLE friends ADD `friend_account` int(11) NOT NULL default 0 AFTER `char_id`;
+UPDATE friends, `char` SET friends.friend_account=`char`.account_id where friends.friend_id=`char`.char_id;

+ 12 - 12
sql-files/upgrade_svn3273.sql

@@ -1,12 +1,12 @@
-CREATE TABLE `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',
-  CONSTRAINT `scdata_ibfk_1` FOREIGN KEY (`account_id`) REFERENCES `login` (`account_id`) ON DELETE CASCADE,
-  CONSTRAINT `scdata_ibfk_2` FOREIGN KEY (`char_id`) REFERENCES `char` (`char_id`) ON DELETE CASCADE
-) TYPE=InnoDB;
+CREATE TABLE `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',
+  CONSTRAINT `scdata_ibfk_1` FOREIGN KEY (`account_id`) REFERENCES `login` (`account_id`) ON DELETE CASCADE,
+  CONSTRAINT `scdata_ibfk_2` FOREIGN KEY (`char_id`) REFERENCES `char` (`char_id`) ON DELETE CASCADE
+) TYPE=InnoDB;

+ 1 - 1
sql-files/upgrade_svn3746.sql

@@ -1 +1 @@
-ALTER TABLE `char` MODIFY `manner` tinyint(11) NOT NULL default '0';
+ALTER TABLE `char` MODIFY `manner` tinyint(11) NOT NULL default '0';

+ 9 - 9
sql-files/upgrade_svn4367.sql

@@ -1,9 +1,9 @@
-DROP TABLE IF EXISTS `mapreg`;
-CREATE TABLE `mapreg` (
-  `varname` char(32) NOT NULL,
-  `index` int(11) unsigned NOT NULL default '0',
-  `value` char(255) NOT NULL
-) TYPE=MyISAM;
-
-ALTER TABLE `mapreg` ADD INDEX ( `varname` );
-ALTER TABLE `mapreg` ADD INDEX ( `index` );
+DROP TABLE IF EXISTS `mapreg`;
+CREATE TABLE `mapreg` (
+  `varname` char(32) NOT NULL,
+  `index` int(11) unsigned NOT NULL default '0',
+  `value` char(255) NOT NULL
+) TYPE=MyISAM;
+
+ALTER TABLE `mapreg` ADD INDEX ( `varname` );
+ALTER TABLE `mapreg` ADD INDEX ( `index` );

+ 5 - 5
sql-files/upgrade_svn4941.sql

@@ -1,6 +1,6 @@
-ALTER TABLE `char` MODIFY `last_map` varchar(20) NOT NULL default 'prontera.gat';
-ALTER TABLE `char` MODIFY `last_x` smallint(11) unsigned NOT NULL default '53';
-ALTER TABLE `char` MODIFY `last_y` smallint(11) unsigned NOT NULL default '111';
-ALTER TABLE `char` MODIFY `save_map` varchar(20) NOT NULL default 'prontera.gat';
-ALTER TABLE `char` MODIFY `save_x` smallint(11) unsigned NOT NULL default '53';
+ALTER TABLE `char` MODIFY `last_map` varchar(20) NOT NULL default 'prontera.gat';
+ALTER TABLE `char` MODIFY `last_x` smallint(11) unsigned NOT NULL default '53';
+ALTER TABLE `char` MODIFY `last_y` smallint(11) unsigned NOT NULL default '111';
+ALTER TABLE `char` MODIFY `save_map` varchar(20) NOT NULL default 'prontera.gat';
+ALTER TABLE `char` MODIFY `save_x` smallint(11) unsigned NOT NULL default '53';
 ALTER TABLE `char` MODIFY `save_y` smallint(11) unsigned NOT NULL default '111';

+ 1 - 1
sql-files/upgrade_svn5311.sql

@@ -1 +1 @@
-ALTER TABLE `party` MODIFY `party_id` int(11) unsigned NOT NULL auto_increment;
+ALTER TABLE `party` MODIFY `party_id` int(11) unsigned NOT NULL auto_increment;

+ 1 - 1
sql-files/upgrade_svn5322.sql

@@ -1 +1 @@
-ALTER TABLE `guild` MODIFY `guild_id` int(11) unsigned NOT NULL auto_increment;
+ALTER TABLE `guild` MODIFY `guild_id` int(11) unsigned NOT NULL auto_increment;

+ 2 - 2
sql-files/upgrade_svn5455.sql

@@ -1,2 +1,2 @@
-ALTER TABLE `char` MODIFY `karma` tinyint(3) NOT NULL default '0';
-ALTER TABLE `char` MODIFY `manner` tinyint(3) NOT NULL default '0';
+ALTER TABLE `char` MODIFY `karma` tinyint(3) NOT NULL default '0';
+ALTER TABLE `char` MODIFY `manner` tinyint(3) NOT NULL default '0';

+ 1 - 1
sql-files/upgrade_svn5607.sql

@@ -1 +1 @@
-ALTER TABLE `guild` MODIFY `average_lv` smallint(6) unsigned NOT NULL default '1';
+ALTER TABLE `guild` MODIFY `average_lv` smallint(6) unsigned NOT NULL default '1';

+ 1 - 1
sql-files/upgrade_svn5834.sql

@@ -1 +1 @@
-UPDATE `item_db` SET `view`=1 where `type` = 10;
+UPDATE `item_db` SET `view`=1 where `type` = 10;

+ 14 - 14
sql-files/upgrade_svn5902.sql

@@ -1,14 +1,14 @@
-update `char` set `class`='7' where `class`='13';
-update `char` set `class`='14' where `class`='21';
-update `char` set `class`='4008' where `class`='4014';
-update `char` set `class`='4015' where `class`='4022';
-update `char` set `class`='4030' where `class`='4036';
-update `char` set `class`='4037' where `class`='4044';
-update `char` set `class`='4047' where `class`='4048';
-update `guild_member` set `class`='7' where `class`='13';
-update `guild_member` set `class`='14' where `class`='21';
-update `guild_member` set `class`='4008' where `class`='4014';
-update `guild_member` set `class`='4015' where `class`='4022';
-update `guild_member` set `class`='4030' where `class`='4036';
-update `guild_member` set `class`='4037' where `class`='4044';
-update `guild_member` set `class`='4047' where `class`='4048';
+update `char` set `class`='7' where `class`='13';
+update `char` set `class`='14' where `class`='21';
+update `char` set `class`='4008' where `class`='4014';
+update `char` set `class`='4015' where `class`='4022';
+update `char` set `class`='4030' where `class`='4036';
+update `char` set `class`='4037' where `class`='4044';
+update `char` set `class`='4047' where `class`='4048';
+update `guild_member` set `class`='7' where `class`='13';
+update `guild_member` set `class`='14' where `class`='21';
+update `guild_member` set `class`='4008' where `class`='4014';
+update `guild_member` set `class`='4015' where `class`='4022';
+update `guild_member` set `class`='4030' where `class`='4036';
+update `guild_member` set `class`='4037' where `class`='4044';
+update `guild_member` set `class`='4047' where `class`='4048';

+ 2 - 2
sql-files/upgrade_svn6533.sql

@@ -1,2 +1,2 @@
-ALTER TABLE `loginlog` CHANGE `ip` `ip` CHAR( 15 ) NOT NULL;
-ALTER TABLE `loginlog` ADD INDEX ( `ip` ( 15 ) );
+ALTER TABLE `loginlog` CHANGE `ip` `ip` CHAR( 15 ) NOT NULL;
+ALTER TABLE `loginlog` ADD INDEX ( `ip` ( 15 ) );

+ 1 - 1
sql-files/upgrade_svn6868.sql

@@ -1,2 +1,2 @@
-UPDATE `loginlog` SET `ip` = inet_aton(`ip`);
+UPDATE `loginlog` SET `ip` = inet_aton(`ip`);
 ALTER TABLE `loginlog` CHANGE `ip` `ip` INT( 10 ) UNSIGNED ZEROFILL NOT NULL DEFAULT '0';

+ 1 - 1
sql-files/upgrade_svn7146.sql

@@ -1 +1 @@
-ALTER TABLE `char` ADD INDEX ( `account_id` );
+ALTER TABLE `char` ADD INDEX ( `account_id` );

+ 2 - 2
sql-files/upgrade_svn7580.sql

@@ -1,2 +1,2 @@
-ALTER TABLE `char` MODIFY `party_id` int(11) unsigned NOT NULL default '0';
-ALTER TABLE `char` MODIFY `guild_id` int(11) unsigned NOT NULL default '0';
+ALTER TABLE `char` MODIFY `party_id` int(11) unsigned NOT NULL default '0';
+ALTER TABLE `char` MODIFY `guild_id` int(11) unsigned NOT NULL default '0';

+ 36 - 36
sql-files/upgrade_svn7706.sql

@@ -1,36 +1,36 @@
-ALTER TABLE `char` ADD `homun_id` int(11) unsigned NOT NULL default '0' AFTER `pet_id`;
-
-DROP TABLE IF EXISTS `homunculus`;
-CREATE TABLE `homunculus` (
-  `homun_id` int(11) NOT NULL auto_increment,
-  `char_id` int(11) NOT NULL,
-  `class` mediumint(9) unsigned NOT NULL default '0',
-  `name` varchar(24) NOT NULL default '',
-  `level` smallint(4) NOT NULL default '0',
-  `exp` int(12) NOT NULL default '0',
-  `intimacy` int(12) NOT NULL default '0',
-  `hunger` smallint(4) NOT NULL default '0',
-  `str` smallint(4) unsigned NOT NULL default '0',
-  `agi` smallint(4) unsigned NOT NULL default '0',
-  `vit` smallint(4) unsigned NOT NULL default '0',
-  `int` smallint(4) unsigned NOT NULL default '0',
-  `dex` smallint(4) unsigned NOT NULL default '0',
-  `luk` smallint(4) unsigned NOT NULL default '0',
-  `hp` int(12) NOT NULL default '1',
-  `max_hp` int(12) NOT NULL default '1',
-  `sp` int(12) NOT NULL default '1',
-  `max_sp` int(12) NOT NULL default '1',
-  `skill_point` smallint(4) unsigned NOT NULL default '0',
-  `alive` tinyint(2) NOT NULL default '1',
-  `rename_flag` tinyint(2) NOT NULL default '0',
-  `vaporize` tinyint(2) NOT NULL default '0',
-  PRIMARY KEY  (`homun_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-
-
-CREATE TABLE `skill_homunculus` (
-  `homun_id` int(11) NOT NULL,
-  `id` int(11) NOT NULL,
-  `lv` smallint(6) NOT NULL,
-  PRIMARY KEY  (`homun_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+ALTER TABLE `char` ADD `homun_id` int(11) unsigned NOT NULL default '0' AFTER `pet_id`;
+
+DROP TABLE IF EXISTS `homunculus`;
+CREATE TABLE `homunculus` (
+  `homun_id` int(11) NOT NULL auto_increment,
+  `char_id` int(11) NOT NULL,
+  `class` mediumint(9) unsigned NOT NULL default '0',
+  `name` varchar(24) NOT NULL default '',
+  `level` smallint(4) NOT NULL default '0',
+  `exp` int(12) NOT NULL default '0',
+  `intimacy` int(12) NOT NULL default '0',
+  `hunger` smallint(4) NOT NULL default '0',
+  `str` smallint(4) unsigned NOT NULL default '0',
+  `agi` smallint(4) unsigned NOT NULL default '0',
+  `vit` smallint(4) unsigned NOT NULL default '0',
+  `int` smallint(4) unsigned NOT NULL default '0',
+  `dex` smallint(4) unsigned NOT NULL default '0',
+  `luk` smallint(4) unsigned NOT NULL default '0',
+  `hp` int(12) NOT NULL default '1',
+  `max_hp` int(12) NOT NULL default '1',
+  `sp` int(12) NOT NULL default '1',
+  `max_sp` int(12) NOT NULL default '1',
+  `skill_point` smallint(4) unsigned NOT NULL default '0',
+  `alive` tinyint(2) NOT NULL default '1',
+  `rename_flag` tinyint(2) NOT NULL default '0',
+  `vaporize` tinyint(2) NOT NULL default '0',
+  PRIMARY KEY  (`homun_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+
+CREATE TABLE `skill_homunculus` (
+  `homun_id` int(11) NOT NULL,
+  `id` int(11) NOT NULL,
+  `lv` smallint(6) NOT NULL,
+  PRIMARY KEY  (`homun_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;

+ 7 - 7
sql-files/upgrade_svn7768.sql

@@ -1,8 +1,8 @@
-DROP TABLE IF EXISTS `skill_homunculus`;
-CREATE TABLE `skill_homunculus` (
-  `homun_id` int(11) NOT NULL,
-  `id` int(11) NOT NULL,
-  `lv` smallint(6) NOT NULL,
-  PRIMARY KEY  (`homun_id`,`id`),
-  KEY `homun_id` (`homun_id`)
+DROP TABLE IF EXISTS `skill_homunculus`;
+CREATE TABLE `skill_homunculus` (
+  `homun_id` int(11) NOT NULL,
+  `id` int(11) NOT NULL,
+  `lv` smallint(6) NOT NULL,
+  PRIMARY KEY  (`homun_id`,`id`),
+  KEY `homun_id` (`homun_id`)
 ) TYPE=MyISAM;

+ 1 - 1
sql-files/upgrade_svn8630.sql

@@ -1 +1 @@
-ALTER TABLE `login` MODIFY `connect_until` int(11) unsigned NOT NULL default '0';
+ALTER TABLE `login` MODIFY `connect_until` int(11) unsigned NOT NULL default '0';

+ 1 - 1
sql-files/upgrade_svn8675.sql

@@ -1 +1 @@
-ALTER TABLE `guild` MODIFY `emblem_data` blob;
+ALTER TABLE `guild` MODIFY `emblem_data` blob;

+ 4 - 4
sql-files/upgrade_svn8728.sql

@@ -1,4 +1,4 @@
-ALTER TABLE `friends` ADD INDEX ( `char_id` );
-ALTER TABLE `memo` ADD INDEX ( `char_id` );
-ALTER TABLE `char` ADD INDEX ( `name` );
-ALTER TABLE `char` ADD INDEX ( `online` );
+ALTER TABLE `friends` ADD INDEX ( `char_id` );
+ALTER TABLE `memo` ADD INDEX ( `char_id` );
+ALTER TABLE `char` ADD INDEX ( `name` );
+ALTER TABLE `char` ADD INDEX ( `online` );

+ 6 - 6
sql-files/upgrade_svn9050.sql

@@ -1,6 +1,6 @@
-ALTER TABLE `picklog` ADD INDEX (`type`);
-ALTER TABLE `zenylog` ADD INDEX (`type`);
-ALTER TABLE `branchlog` ADD INDEX (`account_id`), ADD INDEX (`char_id`);
-ALTER TABLE `atcommandlog` ADD INDEX (`account_id`), ADD INDEX (`char_id`);
-ALTER TABLE `npclog` ADD INDEX (`account_id`), ADD INDEX (`char_id`);
-ALTER TABLE `chatlog` ADD INDEX (`src_accountid`), ADD INDEX (`src_charid`);
+ALTER TABLE `picklog` ADD INDEX (`type`);
+ALTER TABLE `zenylog` ADD INDEX (`type`);
+ALTER TABLE `branchlog` ADD INDEX (`account_id`), ADD INDEX (`char_id`);
+ALTER TABLE `atcommandlog` ADD INDEX (`account_id`), ADD INDEX (`char_id`);
+ALTER TABLE `npclog` ADD INDEX (`account_id`), ADD INDEX (`char_id`);
+ALTER TABLE `chatlog` ADD INDEX (`src_accountid`), ADD INDEX (`src_charid`);

+ 1 - 1
sql-files/upgrade_svn9135.sql

@@ -1,2 +1,2 @@
-alter table `item_db` modify `view` smallint(3) unsigned default null;
+alter table `item_db` modify `view` smallint(3) unsigned default null;
 alter table `item_db2` modify `view` smallint(3) unsigned default null;

+ 1 - 0
src/map/script.c

@@ -9058,6 +9058,7 @@ static int buildin_maprespawnguildid_sub_mob(struct block_list *bl,va_list ap)
 
 	if(!md->guardian_data && md->class_ != MOBID_EMPERIUM)
 		status_kill(bl);
+
 	return 0;
 }
 

+ 982 - 982
src/tool/grfio.c

@@ -1,982 +1,982 @@
-// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
-// For more information, see LICENCE in the main folder
-
-/*********************************************************************
- *
- *		Ragnarok Online Emulator : grfio.c -- grf file I/O Module
- *--------------------------------------------------------------------
- *		special need library : zlib
- *********************************************************************
- *	$Id: grfio.c,v 1.2 2004/09/29 17:31:49 kalaspuff Exp $
- *
- *	2002/12/18... the original edition
- *	2003/01/23 ... Code correction
- *	2003/02/01 ... An addition and decryption processing are improved for LocalFile and two or more GRF(s) check processing.
- *	2003/02/02 ... Even if there is no grf it does not stop -- as -- correction
- *	2003/02/02... grf reading specification can be added later -- as -- correction (grfio_add function addition)
- *	2003/02 / 03... at the time of grfio_resourcecheck processing the entry addition processing method -- correction
- *	2003/02/05... change of the processing in grfio_init
- *	2003/02/23... a local file check -- GRFIO_LOCAL -- switch (Defoe -- Function Off)
- * 2003/10/21 ... The data of alpha client was read.
- *	2003/11/10 ... Ready new grf format.
- *	2003/11/11 ... version check fix & bug fix
- * 2006/04/16 ... fixed crash grfio_find_file when file is not found.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <malloc.h>
-#include <sys/stat.h>
-
-#include "grfio.h"
-#include "../common/mmo.h"
-#include "../zlib/unzip.h"
-
-#define CHUNK 16384
-
-#ifdef __WIN32
-	#include "../zlib/zlib.h"
-	#include "../zlib/iowin32.h"
-#else
-	#ifndef __FREEBSD__
-		#include <zlib.h>
-	#endif
-#endif
-
-typedef	unsigned char	BYTE;
-typedef	unsigned short	WORD;
-typedef	unsigned long	DWORD;
-
-static char data_dir[1024] = "";	// "../";
-
-//----------------------------
-//	file entry table struct
-//----------------------------
-typedef struct {
-	int 	srclen;				// compressed size
-	int		srclen_aligned;		//
-	int		declen;				// original size
-	int		srcpos;
-	short	next;
-	int	cycle;
-	char	type;
-	char	fn[128-4*5];		// file name
-	char	*fnd;
-	signed char	gentry;				// read grf file select
-} FILELIST;
-//gentry ... 0    : It acquires from a local file.
-//             It acquires from the resource file of 1>=:gentry_table[gentry-1].
-//             1<=: Check a local file.
-//                    If it is, after re-setting to 0, it acquires from a local file.
-//                    If there is nothing, mark reversal will be carried out, and it will re-set, and will acquire from a resource file as well as 1>=.
-
-//Since char defines *FILELIST.gentry, the maximum which can be added by grfio_add becomes by 127 pieces.
-
-#define	GENTRY_LIMIT	512
-#define	FILELIST_LIMIT	1048576	// temporary maximum, and a theory top maximum are 2G.
-
-static FILELIST *filelist		= NULL;
-static int	filelist_entrys		= 0;
-static int	filelist_maxentry	= 0;
-
-static char **gentry_table		= NULL;
-static int gentry_entrys		= 0;
-static int gentry_maxentry		= 0;
-
-//----------------------------
-//	file list hash table
-//----------------------------
-static int filelist_hash[256];
-
-//----------------------------
-//	grf decode data table
-//----------------------------
-static unsigned char BitMaskTable[8] = {
-	0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01
-};
-
-static char	BitSwapTable1[64] = {
-	58, 50, 42, 34, 26, 18, 10,  2, 60, 52, 44, 36, 28, 20, 12,  4,
-	62, 54, 46, 38, 30, 22, 14,  6, 64, 56, 48, 40, 32, 24, 16,  8,
-	57, 49, 41, 33, 25, 17,  9,  1, 59, 51, 43, 35, 27, 19, 11,  3,
-	61, 53, 45, 37, 29, 21, 13,  5, 63, 55, 47, 39, 31, 23, 15,  7
-};
-static char	BitSwapTable2[64] = {
-	40,  8, 48, 16, 56, 24, 64, 32, 39,  7, 47, 15, 55, 23, 63, 31,
-	38,  6, 46, 14, 54, 22, 62, 30, 37,  5, 45, 13, 53, 21, 61, 29,
-	36,  4, 44, 12, 52, 20, 60, 28, 35,  3, 43, 11, 51, 19, 59, 27,
-	34,  2, 42, 10, 50, 18, 58, 26, 33,  1, 41,  9, 49, 17, 57, 25
-};
-static char	BitSwapTable3[32] = {
-	16,  7, 20, 21, 29, 12, 28, 17,  1, 15, 23, 26,  5, 18, 31, 10,
-     2,  8, 24, 14, 32, 27,  3,  9, 19, 13, 30,  6, 22, 11,  4, 25
-};
-
-static unsigned char NibbleData[4][64]={
-	{
-		0xef, 0x03, 0x41, 0xfd, 0xd8, 0x74, 0x1e, 0x47,  0x26, 0xef, 0xfb, 0x22, 0xb3, 0xd8, 0x84, 0x1e,
-		0x39, 0xac, 0xa7, 0x60, 0x62, 0xc1, 0xcd, 0xba,  0x5c, 0x96, 0x90, 0x59, 0x05, 0x3b, 0x7a, 0x85,
-		0x40, 0xfd, 0x1e, 0xc8, 0xe7, 0x8a, 0x8b, 0x21,  0xda, 0x43, 0x64, 0x9f, 0x2d, 0x14, 0xb1, 0x72,
-		0xf5, 0x5b, 0xc8, 0xb6, 0x9c, 0x37, 0x76, 0xec,  0x39, 0xa0, 0xa3, 0x05, 0x52, 0x6e, 0x0f, 0xd9,
-	}, {
-		0xa7, 0xdd, 0x0d, 0x78, 0x9e, 0x0b, 0xe3, 0x95,  0x60, 0x36, 0x36, 0x4f, 0xf9, 0x60, 0x5a, 0xa3,
-		0x11, 0x24, 0xd2, 0x87, 0xc8, 0x52, 0x75, 0xec,  0xbb, 0xc1, 0x4c, 0xba, 0x24, 0xfe, 0x8f, 0x19,
-		0xda, 0x13, 0x66, 0xaf, 0x49, 0xd0, 0x90, 0x06,  0x8c, 0x6a, 0xfb, 0x91, 0x37, 0x8d, 0x0d, 0x78,
-		0xbf, 0x49, 0x11, 0xf4, 0x23, 0xe5, 0xce, 0x3b,  0x55, 0xbc, 0xa2, 0x57, 0xe8, 0x22, 0x74, 0xce,
-	}, {
-		0x2c, 0xea, 0xc1, 0xbf, 0x4a, 0x24, 0x1f, 0xc2,  0x79, 0x47, 0xa2, 0x7c, 0xb6, 0xd9, 0x68, 0x15,
-		0x80, 0x56, 0x5d, 0x01, 0x33, 0xfd, 0xf4, 0xae,  0xde, 0x30, 0x07, 0x9b, 0xe5, 0x83, 0x9b, 0x68,
-		0x49, 0xb4, 0x2e, 0x83, 0x1f, 0xc2, 0xb5, 0x7c,  0xa2, 0x19, 0xd8, 0xe5, 0x7c, 0x2f, 0x83, 0xda,
-		0xf7, 0x6b, 0x90, 0xfe, 0xc4, 0x01, 0x5a, 0x97,  0x61, 0xa6, 0x3d, 0x40, 0x0b, 0x58, 0xe6, 0x3d,
-	}, {
-		0x4d, 0xd1, 0xb2, 0x0f, 0x28, 0xbd, 0xe4, 0x78,  0xf6, 0x4a, 0x0f, 0x93, 0x8b, 0x17, 0xd1, 0xa4,
-		0x3a, 0xec, 0xc9, 0x35, 0x93, 0x56, 0x7e, 0xcb,  0x55, 0x20, 0xa0, 0xfe, 0x6c, 0x89, 0x17, 0x62,
-		0x17, 0x62, 0x4b, 0xb1, 0xb4, 0xde, 0xd1, 0x87,  0xc9, 0x14, 0x3c, 0x4a, 0x7e, 0xa8, 0xe2, 0x7d,
-		0xa0, 0x9f, 0xf6, 0x5c, 0x6a, 0x09, 0x8d, 0xf0,  0x0f, 0xe3, 0x53, 0x25, 0x95, 0x36, 0x28, 0xcb,
-	}
-};
-/*-----------------
- *	long data get
- */
-static unsigned int getlong(unsigned char *p)
-{
-	return   p[0]
-		| p[1] << 0x08
-		| p[2] << 0x10
-		| p[3] << 0x18; // Shinomori
-}
-
-/*==========================================
- *	Grf data decode : Subs
- *------------------------------------------
- */
-static void NibbleSwap(BYTE *Src, int len)
-{
-	for(;0<len;len--,Src++) {
-		*Src = (*Src>>4) | (*Src<<4);
-	}
-}
-
-static void BitConvert(BYTE *Src,char *BitSwapTable)
-{
-	int lop,prm;
-	BYTE tmp[8];
-	memset(tmp,0,8);
-	for(lop=0;lop!=64;lop++) {
-		prm = BitSwapTable[lop]-1;
-		if (Src[(prm >> 3) & 7] & BitMaskTable[prm & 7]) {
-			tmp[(lop >> 3) & 7] |= BitMaskTable[lop & 7];
-		}
-	}
-	memcpy(Src,tmp,8);
-}
-
-static void BitConvert4(BYTE *Src)
-{
-	int lop,prm;
-	BYTE tmp[8];
-	tmp[0] = ((Src[7]<<5) | (Src[4]>>3)) & 0x3f;	// ..0 vutsr
-	tmp[1] = ((Src[4]<<1) | (Src[5]>>7)) & 0x3f;	// ..srqpo n
-	tmp[2] = ((Src[4]<<5) | (Src[5]>>3)) & 0x3f;	// ..o nmlkj
-	tmp[3] = ((Src[5]<<1) | (Src[6]>>7)) & 0x3f;	// ..kjihg f
-	tmp[4] = ((Src[5]<<5) | (Src[6]>>3)) & 0x3f;	// ..g fedcb
-	tmp[5] = ((Src[6]<<1) | (Src[7]>>7)) & 0x3f;	// ..cba98 7
-	tmp[6] = ((Src[6]<<5) | (Src[7]>>3)) & 0x3f;	// ..8 76543
-	tmp[7] = ((Src[7]<<1) | (Src[4]>>7)) & 0x3f;	// ..43210 v
-
-	for(lop=0;lop!=4;lop++) {
-		tmp[lop] = (NibbleData[lop][tmp[lop*2]] & 0xf0)
-		         | (NibbleData[lop][tmp[lop*2+1]] & 0x0f);
-	}
-
-	*(DWORD*)(tmp+4)=0;
-	for(lop=0;lop!=32;lop++) {
-		prm = BitSwapTable3[lop]-1;
-		if (tmp[prm >> 3] & BitMaskTable[prm & 7]) {
-			tmp[(lop >> 3) + 4] |= BitMaskTable[lop & 7];
-		}
-	}
-	Src[0] ^= tmp[4];
-	Src[1] ^= tmp[5];
-	Src[2] ^= tmp[6];
-	Src[3] ^= tmp[7];
-}
-
-static void decode_des_etc(BYTE *buf,int len,int type,int cycle)
-{
-	int lop,cnt=0;
-	if(cycle<3) cycle=3;
-	else if(cycle<5) cycle++;
-	else if(cycle<7) cycle+=9;
-	else cycle+=15;
-
-	for(lop=0;lop*8<len;lop++,buf+=8) {
-		if(lop<20 || (type==0 && lop%cycle==0)){ // des
-			BitConvert(buf,BitSwapTable1);
-			BitConvert4(buf);
-			BitConvert(buf,BitSwapTable2);
-		} else {
-			if(cnt==7 && type==0){
-				int a;
-				BYTE tmp[8];
-				*(DWORD*)tmp     = *(DWORD*)buf;
-				*(DWORD*)(tmp+4) = *(DWORD*)(buf+4);
-				cnt=0;
-				buf[0]=tmp[3];
-				buf[1]=tmp[4];
-				buf[2]=tmp[6];
-				buf[3]=tmp[0];
-				buf[4]=tmp[1];
-				buf[5]=tmp[2];
-				buf[6]=tmp[5];
-				a=tmp[7];
-				if(a==0x00) a=0x2b;
-				else if(a==0x2b) a=0x00;
-				else if(a==0x01) a=0x68;
-				else if(a==0x68) a=0x01;
-				else if(a==0x48) a=0x77;
-				else if(a==0x77) a=0x48;
-				else if(a==0x60) a=0xff;
-				else if(a==0xff) a=0x60;
-				else if(a==0x6c) a=0x80;
-				else if(a==0x80) a=0x6c;
-				else if(a==0xb9) a=0xc0;
-				else if(a==0xc0) a=0xb9;
-				else if(a==0xeb) a=0xfe;
-				else if(a==0xfe) a=0xeb;
-				buf[7]=a;
-			}
-			cnt++;
-		}
-	}
-}
-/*==========================================
- *	Grf data decode sub : zip
- *------------------------------------------
- */
-int decode_zip(unsigned char *dest, unsigned long* destLen, const unsigned char* source, unsigned long sourceLen)
-{
-	z_stream stream;
-	int err;
-
-	stream.next_in = (Bytef*)source;
-	stream.avail_in = (uInt)sourceLen;
-	/* Check for source > 64K on 16-bit machine: */
-	if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
-	stream.next_out = (Bytef*) dest;
-	stream.avail_out = (uInt)*destLen;
-	if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
-
-	stream.zalloc = (alloc_func)0;
-	stream.zfree = (free_func)0;
-
-	err = inflateInit(&stream);
-	if (err != Z_OK) return err;
-
-	err = inflate(&stream, Z_FINISH);
-	if (err != Z_STREAM_END) {
-		inflateEnd(&stream);
-		return err == Z_OK ? Z_BUF_ERROR : err;
-	}
-	*destLen = stream.total_out;
-
-	err = inflateEnd(&stream);
-	return err;
-}
-
-int encode_zip(unsigned char *dest, unsigned long* destLen, const unsigned char* source, unsigned long sourceLen) {
-	z_stream stream;
-	int err;
-	memset(&stream, 0, sizeof(stream));
-	stream.next_in = (Bytef*)source;
-	stream.avail_in = (uInt)sourceLen;
-	/* Check for source > 64K on 16-bit machine: */
-	if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
-	stream.next_out = (Bytef*) dest;
-	stream.avail_out = (uInt)*destLen;
-	if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
-
-	stream.zalloc = (alloc_func)0;
-	stream.zfree = (free_func)0;
-
-	err = deflateInit(&stream,Z_DEFAULT_COMPRESSION);
-	if (err != Z_OK) return err;
-
-	err = deflate(&stream, Z_FINISH);
-	if (err != Z_STREAM_END) {
-		inflateEnd(&stream);
-		return err == Z_OK ? Z_BUF_ERROR : err;
-	}
-	*destLen = stream.total_out;
-
-	err = deflateEnd(&stream);
-	return err;
-}
-
-/* ===================================
-* Unzips a file. 1: success, 0: error
-* Adapted from miniunz.c [Celest]
-* Version 1.01b, May 30th, 2004
-* Copyright (C) 1998-2004 Gilles Vollant
-* -------------------------------------
-*/
-int deflate_file (const char *source, const char *filename)
-{
-#ifdef _WIN32
-	zlib_filefunc_def ffunc;
-#endif
-	unzFile uf = NULL;
-	int err = UNZ_OK;
-	uInt size_buf = 8192;
-	FILE *fout = NULL;
-	void *buf;
-
-#ifdef _WIN32
-	fill_win32_filefunc(&ffunc);
-	uf = unzOpen2(source, &ffunc);
-#else
-	uf = unzOpen(source);
-#endif
-
-	if (uf == NULL)
-		return 0;
-
-	if (unzLocateFile(uf, filename, 0) != UNZ_OK)
-		return 0;
-
-	err = unzOpenCurrentFilePassword(uf, NULL);
-
-	fout = fopen(filename,"wb");
-	if (fout == NULL)
-		return 0;
-
-	buf = (void *)malloc(size_buf);
-	do {
-		err = unzReadCurrentFile(uf, buf, size_buf);
-		if (err < 0)
-			break;
-		if (err > 0 &&
-			fwrite(buf, err, 1, fout)!=1)
-		{
-			err = UNZ_ERRNO;
-			break;
-		}
-	} while (err > 0);
-	
-	if (fout) fclose(fout);
-
-	if (err == UNZ_OK) {
-		err = unzCloseCurrentFile (uf);
-		free(buf);
-		return (err == UNZ_OK);
-	}
-	
-	unzCloseCurrentFile(uf); /* don't lose the error */
-
-	return 0;
-}
-
-unsigned long grfio_crc32 (const unsigned char *buf, unsigned int len)
-{
-	return crc32(crc32(0L, Z_NULL, 0), buf, len);
-}
-
-/***********************************************************
- ***                File List Subroutines                ***
- ***********************************************************/
-
-/*==========================================
- *	File List : Hash make
- *------------------------------------------
- */
-static int filehash(unsigned char *fname)
-{
-	unsigned int hash=0;
-	while(*fname) {
-		hash = ((hash<<1)+(hash>>7)*9+tolower(*fname));
-		fname++;
-	}
-	return hash & 255;
-}
-
-/*==========================================
- *	File List : Hash initalize
- *------------------------------------------
- */
-static void hashinit(void)
-{
-	int lop;
-	for (lop = 0; lop < 256; lop++)
-		filelist_hash[lop] = -1;
-}
-
-/*==========================================
- *	File List : File find
- *------------------------------------------
- */
-static FILELIST *filelist_find(char *fname)
-{
-	int hash;
-
-	if (!filelist)
-		return NULL;
-
-	for (hash = filelist_hash[filehash((unsigned char *) fname)]; hash >= 0; hash = filelist[hash].next) {
-		if(strcmpi(filelist[hash].fn, fname) == 0)
-			break;
-	}
-
-	return (hash >= 0) ? &filelist[hash] : NULL;
-}
-
-char *grfio_find_file(char *fname){
-	FILELIST *filelist = filelist_find(fname);
-	if (!filelist) return NULL;
-	return (!filelist->fnd?filelist->fn:filelist->fnd);
-}
-
-/*==========================================
- *	File List : Filelist add
- *------------------------------------------
- */
-#define	FILELIST_ADDS	1024	// number increment of file lists `
-
-static FILELIST* filelist_add(FILELIST *entry)
-{
-	int hash;
-
-	if (filelist_entrys >= FILELIST_LIMIT) {
-		printf("GRF filelist limit reached!\n");
-		exit(1);
-	}
-
-	if (filelist_entrys >= filelist_maxentry) {
-		filelist = (FILELIST *)realloc(filelist, (filelist_maxentry + FILELIST_ADDS) * sizeof(FILELIST));
-		memset(filelist + filelist_maxentry, '\0', FILELIST_ADDS * sizeof(FILELIST));
-		filelist_maxentry += FILELIST_ADDS;
-	}
-
-	memcpy (&filelist[filelist_entrys], entry, sizeof(FILELIST));
-
-	hash = filehash((unsigned char *) entry->fn);
-	filelist[filelist_entrys].next = filelist_hash[hash];
-	filelist_hash[hash] = filelist_entrys;
-
-	filelist_entrys++;
-
-	return &filelist[filelist_entrys - 1];
-}
-
-static FILELIST* filelist_modify(FILELIST *entry)
-{
-	FILELIST *fentry;
-	if ((fentry = filelist_find(entry->fn)) != NULL) {
-		int tmp = fentry->next;
-		memcpy(fentry, entry, sizeof(FILELIST));
-		fentry->next = tmp;
-	} else {
-		fentry = filelist_add(entry);
-	}
-	return fentry;
-}
-
-/*==========================================
- *	File List : filelist size adjust
- *------------------------------------------
- */
-static void filelist_adjust(void)
-{
-	if (filelist != NULL) {
-		if (filelist_maxentry > filelist_entrys) {
-			filelist = (FILELIST *)realloc(
-				filelist, filelist_entrys * sizeof(FILELIST));
-			filelist_maxentry = filelist_entrys;
-		}
-	}
-}
-
-/***********************************************************
- ***                  Grfio Sobroutines                  ***
- ***********************************************************/
-
-/*==========================================
- *	Grfio : Resource file size get
- *------------------------------------------
- */
-int grfio_size(char *fname)
-{
-	FILELIST *entry;
-
-	entry = filelist_find(fname);
-
-	if (entry == NULL || entry->gentry < 0) {	// LocalFileCheck
-		char lfname[256], *p;
-		FILELIST lentry;
-		struct stat st;
-
-		sprintf(lfname, "%s%s", data_dir, fname);
-
-		for (p = &lfname[0]; *p != 0; p++)
-			if (*p=='\\') *p = '/';	// * At the time of Unix
-
-		if (stat(lfname, &st) == 0) {
-			strncpy(lentry.fn, fname, sizeof(lentry.fn) - 1);
-			lentry.fnd = NULL;
-			lentry.declen = st.st_size;
-			lentry.gentry = 0;	// 0:LocalFile
-			entry = filelist_modify(&lentry);
-		} else if (entry == NULL) {
-			printf("%s not found (grfio_size)\n", fname);
-			//exit(1);
-			return -1;
-		}
-	}
-	return entry->declen;
-}
-
-/*==========================================
- *	Grfio : Resource file read & size get
- *------------------------------------------
- */
-void* grfio_reads(char *fname, int *size)
-{
-	FILE *in;
-	FILELIST *entry;
-	unsigned char *buf2 = NULL;
-
-	entry = filelist_find(fname);
-
-	if (entry == NULL || entry->gentry <= 0) {	// LocalFileCheck
-		char lfname[256], *p;
-		FILELIST lentry;
-
-		sprintf(lfname, "%s%s", data_dir, fname);
-		
-		for (p = &lfname[0]; *p != 0; p++)
-			if (*p == '\\') *p = '/';	// * At the time of Unix
-
-		in = fopen(lfname, "rb");
-		if (in != NULL) {
-			if (entry != NULL && entry->gentry == 0) {
-				lentry.declen = entry->declen;
-			} else {
-				fseek(in,0,2);	// SEEK_END
-				lentry.declen = ftell(in);
-			}
-			fseek(in,0,0);	// SEEK_SET
-			buf2 = (unsigned char *)malloc(lentry.declen + 1024);
-			fread(buf2, 1, lentry.declen, in);
-			fclose(in);
-			strncpy(lentry.fn, fname, sizeof(lentry.fn) - 1);
-			lentry.fnd = NULL;
-			lentry.gentry = 0;	// 0:LocalFile
-			entry = filelist_modify(&lentry);
-		} else {
-			if (entry != NULL && entry->gentry < 0) {
-				entry->gentry = -entry->gentry;	// local file checked
-			} else {
-				printf("%s not found (grfio_reads - local file %s)\n", fname, lfname);
-				return NULL;
-			}
-		}
-	}
-	if (entry != NULL && entry->gentry > 0) {	// Archive[GRF] File Read
-		char *gfname = gentry_table[entry->gentry - 1];
-		in = fopen(gfname, "rb");
-		if(in != NULL) {
-			unsigned char *buf = (unsigned char *)malloc(entry->srclen_aligned + 1024);
-			fseek(in, entry->srcpos, 0);
-			fread(buf, 1, entry->srclen_aligned, in);
-			fclose(in);
-			buf2 = (unsigned char *)malloc(entry->declen + 1024);
-			if (entry->type == 1 || entry->type == 3 || entry->type == 5) {
-				uLongf len;
-				if (entry->cycle >= 0)
-					decode_des_etc(buf, entry->srclen_aligned, entry->cycle == 0, entry->cycle);
-				len = entry->declen;
-				decode_zip(buf2, &len, buf, entry->srclen);
-				if (len != entry->declen) {
-					printf("decode_zip size mismatch err: %d != %d\n", (int)len, entry->declen);
-					free(buf);
-					free(buf2);
-					return NULL;
-				}
-			} else {
-				memcpy(buf2, buf, entry->declen);
-			}
-			free(buf);
-		} else {
-			printf("%s not found (grfio_reads - GRF file %s)\n", fname, gfname);
-			return NULL;
-		}
-	}
-	if (size != NULL && entry != NULL)
-		*size = entry->declen;
-
-	return buf2;
-}
-
-/*==========================================
- *	Resource filename decode
- *------------------------------------------
- */
-static char * decode_filename(unsigned char *buf,int len)
-{
-	int lop;
-	for(lop=0;lop<len;lop+=8) {
-		NibbleSwap(&buf[lop],8);
-		BitConvert(&buf[lop],BitSwapTable1);
-		BitConvert4(&buf[lop]);
-		BitConvert(&buf[lop],BitSwapTable2);
-	}
-	return (char*)buf;
-}
-
-/*==========================================
- * Grfio : Entry table read
- *------------------------------------------
- */
-static int grfio_entryread(char *gfname,int gentry)
-{
-	FILE *fp;
-	long grf_size,list_size;
-	unsigned char grf_header[0x2e];
-	int lop,entry,entrys,ofs,grf_version;
-	char *fname;
-	unsigned char *grf_filelist;
-
-	fp = fopen(gfname, "rb");
-	if (fp == NULL) {
-		printf("GRF data file not found: '%s'.\n",gfname);
-		return 1;	// 1:not found error
-	}
-
-	fseek(fp,0,2);	// SEEK_END
-	grf_size = ftell(fp);
-	fseek(fp,0,0);	// SEEK_SET
-	fread(grf_header,1,0x2e,fp);
-	if (strcmp((const char *) grf_header,"Master of Magic") ||
-		fseek(fp,getlong(grf_header+0x1e),1))	// SEEK_CUR
-	{
-		fclose(fp);
-		printf("GRF %s read error\n",gfname);
-		return 2;	// 2:file format error
-	}
-
-	grf_version = getlong(grf_header+0x2a) >> 8;
-
-	if (grf_version == 0x01) {	//****** Grf version 01xx ******
-		list_size = grf_size - ftell(fp);
-		grf_filelist = (unsigned char *) malloc(list_size);
-		fread(grf_filelist,1,list_size,fp);
-		fclose(fp);
-
-		entrys = getlong(grf_header+0x26) - getlong(grf_header+0x22) - 7;
-
-		// Get an entry
-		for (entry = 0,ofs = 0; entry < entrys; entry++) {
-			int ofs2, srclen, srccount, type;
-			char *period_ptr;
-			FILELIST aentry;
-
-			ofs2 = ofs+getlong(grf_filelist+ofs)+4;
-			type = grf_filelist[ofs2+12];
-			if (type != 0) {	// Directory Index ... skip
-				fname = decode_filename(grf_filelist+ofs+6, grf_filelist[ofs]-6);
-				if (strlen(fname) > sizeof(aentry.fn) - 1) {
-					printf("GRF file name %s is too long\n", fname);
-					free(grf_filelist);
-					exit(1);
-				}
-				srclen = 0;
-				if ((period_ptr = strrchr(fname, '.')) != NULL) {
-					for(lop = 0; lop < 4; lop++) {
-						if (strcmpi(period_ptr, ".gnd\0.gat\0.act\0.str"+lop*5) == 0)
-							break;
-					}
-					srclen = getlong(grf_filelist+ofs2) - getlong(grf_filelist+ofs2+8) - 715;
-					if(lop == 4) {
-						for(lop = 10, srccount = 1; srclen >= lop; lop = lop * 10, srccount++);
-					} else {
-						srccount = 0;
-					}
-				} else {
-					srccount = 0;
-				}
-
-				aentry.srclen         = srclen;
-				aentry.srclen_aligned = getlong(grf_filelist+ofs2+4)-37579;
-				aentry.declen         = getlong(grf_filelist+ofs2+8);
-				aentry.srcpos         = getlong(grf_filelist+ofs2+13)+0x2e;
-				aentry.cycle          = srccount;
-				aentry.type           = type;
-				strncpy(aentry.fn, fname,sizeof(aentry.fn)-1);
-				aentry.fnd			  = NULL;
-#ifdef	GRFIO_LOCAL
-				aentry.gentry         = -(gentry+1);	// As Flag for making it a negative number carrying out the first time LocalFileCheck
-#else
-				aentry.gentry         = gentry+1;		// With no first time LocalFileCheck
-#endif
-				filelist_modify(&aentry);
-			}
-			ofs = ofs2 + 17;
-		}
-		free(grf_filelist);
-
-	} else if (grf_version == 0x02) {	//****** Grf version 02xx ******
-		unsigned char eheader[8];
-		unsigned char *rBuf;
-		uLongf rSize, eSize;
-
-		fread(eheader,1,8,fp);
-		rSize = getlong(eheader);	// Read Size
-		eSize = getlong(eheader+4);	// Extend Size
-
-		if ((long)rSize > grf_size-ftell(fp)) { // Warning fix [Lance]
-			fclose(fp);
-			printf("Illegal data format: GRF compress entry size\n");
-			return 4;
-		}
-
-		rBuf = (unsigned char *)malloc(rSize);	// Get a Read Size
-		grf_filelist = (unsigned char *)malloc(eSize);	// Get a Extend Size
-		fread(rBuf,1,rSize,fp);
-		fclose(fp);
-		decode_zip(grf_filelist, &eSize, rBuf, rSize);	// Decode function
-		list_size = eSize;
-		free(rBuf);
-
-		entrys = getlong(grf_header+0x26) - 7;
-
-		// Get an entry
-		for(entry = 0, ofs = 0; entry < entrys; entry++){
-			int ofs2, srclen, srccount, type;
-			FILELIST aentry;
-
-			fname = (char*)(grf_filelist+ofs);
-			if (strlen(fname) > sizeof(aentry.fn)-1) {
-				printf("GRF file name %s is too long\n", fname);
-				free(grf_filelist);
-				exit(1);
-			}
-			//ofs2 = ofs+strlen((char*)(grf_filelist+ofs))+1;
-			ofs2 = ofs + strlen(fname)+1;
-			type = grf_filelist[ofs2+12];
-			if (type == 1 || type == 3 || type == 5) {
-				srclen = getlong(grf_filelist+ofs2);
-				if (grf_filelist[ofs2+12] == 3) {
-					for (lop = 10, srccount = 1; srclen >= lop; lop = lop * 10, srccount++);
-				} else if (grf_filelist[ofs2+12] == 5) {
-					srccount = 0;
-				} else {	// if (grf_filelist[ofs2+12]==1) {
-					srccount = -1;
-				}
-
-				aentry.srclen         = srclen;
-				aentry.srclen_aligned = getlong(grf_filelist+ofs2+4);
-				aentry.declen         = getlong(grf_filelist+ofs2+8);
-				aentry.srcpos         = getlong(grf_filelist+ofs2+13)+0x2e;
-				aentry.cycle          = srccount;
-				aentry.type           = type;
-				strncpy(aentry.fn,fname,sizeof(aentry.fn)-1);
-				aentry.fnd			  = NULL;
-#ifdef	GRFIO_LOCAL
-				aentry.gentry         = -(gentry+1);	// As Flag for making it a negative number carrying out the first time LocalFileCheck
-#else
-				aentry.gentry         = gentry+1;		// With no first time LocalFileCheck
-#endif
-				filelist_modify(&aentry);
-			}
-			ofs = ofs2 + 17;
-		}
-		free(grf_filelist);
-
-	} else {	//****** Grf Other version ******
-		fclose(fp);
-		printf("GRF version %04x not supported\n",getlong(grf_header+0x2a));
-		return 4;
-	}
-
-	filelist_adjust();	// Unnecessary area release of filelist
-
-	return 0;	// 0:no error
-}
-
-/*==========================================
- * Grfio : Resource file check
- *------------------------------------------
- */
-static void grfio_resourcecheck(void)
-{
-	char w1[256], w2[256], src[256], dst[256], restable[256], line[256];
-	char *ptr, *buf;
-	FILELIST *entry;
-	int size, i = 0;
-	FILE *fp;
-
-	// read resnametable from data directory and return if successful
-	sprintf(restable, "%sdata\\resnametable.txt", data_dir);
-	for (ptr = &restable[0]; *ptr != 0; ptr++)
-		if (*ptr == '\\') *ptr = '/';
-
-	fp = fopen(restable,"rb");
-	if (fp) {
-		while (fgets(line, sizeof(line) - 1, fp)) {
-			if (sscanf(line, "%[^#]#%[^#]#", w1, w2) == 2 &&
-				// we only need the maps' GAT and RSW files
-				(strstr(w2, ".gat") || strstr(w2, ".rsw")))
-			{
-				sprintf(src, "data\\%s", w1);
-				sprintf(dst, "data\\%s", w2);
-				entry = filelist_find(dst);
-				// create new entries reusing the original's info
-				if (entry != NULL) {
-					FILELIST fentry;
-					memcpy(&fentry, entry, sizeof(FILELIST));
-					strncpy(fentry.fn, src, sizeof(fentry.fn) - 1);
-					fentry.fnd = grfio_alloc_ptr(dst);
-					filelist_modify(&fentry);
-					i++;
-				}
-			}
-		}
-		fclose(fp);
-		return;	// we're done here!
-	}
-	
-	// read resnametable from loaded GRF's, only if it cannot be
-	// loaded from the data directory
-	buf = (char *)grfio_reads("data\\resnametable.txt", &size);
-	if (buf) {
-		buf[size] = 0;
-		ptr = buf;
-
-		while (ptr - buf < size) {
-			if (sscanf(ptr, "%[^#]#%[^#]#", w1, w2) == 2 &&
-				(strstr(w2, ".gat") || strstr(w2, ".rsw")))
-			{
-				sprintf(src, "data\\%s", w1);
-				sprintf(dst, "data\\%s", w2);
-				entry = filelist_find(dst);
-				if (entry != NULL) {
-					FILELIST fentry;
-					memcpy(&fentry, entry, sizeof(FILELIST));
-					strncpy(fentry.fn, src, sizeof(fentry.fn) - 1);
-					fentry.fnd = grfio_alloc_ptr(dst);
-					filelist_modify(&fentry);
-					i++;
-				}
-			}
-			ptr = strchr(ptr,'\n');	// Next line
-			if (!ptr) break;
-			ptr++;
-		}
-		free(buf);
-		return;
-	}
-
-}
-
-/*==========================================
- * Grfio : Resource add
- *------------------------------------------
- */
-#define	GENTRY_ADDS	4	// The number increment of gentry_table entries
-
-static int grfio_add(char *fname)
-{
-	grfio_alloc_ptr(fname);
-
-	return grfio_entryread(fname, gentry_entrys - 1);
-}
-
-char *grfio_alloc_ptr(char *fname)
-{
-	int len;
-	char *buf;
-
-	if (gentry_entrys >= GENTRY_LIMIT) {
-		printf("GRF file entry limit reached!\n");
-		exit(1);
-	}
-
-	if (gentry_entrys >= gentry_maxentry) {
-		gentry_maxentry += GENTRY_ADDS;
-		gentry_table = (char**)realloc(gentry_table, gentry_maxentry * sizeof(char*));
-		memset(gentry_table + (gentry_maxentry - GENTRY_ADDS), 0, sizeof(char*) * GENTRY_ADDS);
-	}
-	len = strlen( fname );
-	buf = (char*)malloc(len + 1);
-	strcpy(buf, fname);
-	gentry_table[gentry_entrys++] = buf;
-
-	return buf;
-}
-
-/*==========================================
- * Grfio : Finalize
- *------------------------------------------
- */
-void grfio_final(void)
-{
-	if (filelist != NULL)
-		free(filelist);
-
-	filelist_entrys = filelist_maxentry = 0;
-
-	if (gentry_table != NULL) {
-		int lop;
-		for (lop = 0; lop < gentry_entrys; lop++) {
-			if (gentry_table[lop] != NULL)
-				free(gentry_table[lop]);
-		}
-		free(gentry_table);
-	}
-	gentry_table = NULL;
-	gentry_entrys = gentry_maxentry = 0;
-}
-
-/*==========================================
- * Grfio : Initialize
- *------------------------------------------
- */
-void grfio_init(char *fname)
-{
-	FILE *data_conf;
-	char line[1024], w1[1024], w2[1024];
-	int grf_num = 0;
-
-	hashinit();	// hash table initialization
-
-	data_conf = fopen(fname, "r");
-	// It will read, if there is grf-files.txt.
-	if (data_conf) {
-		while(fgets(line, sizeof(line) - 1, data_conf)) {
-			if (line[0] == '/' && line[1] == '/')
-				continue;
-			if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
-				continue;
-			// Entry table reading
-			if(strcmp(w1, "grf") == 0)	// GRF file
-				grf_num += (grfio_add(w2) == 0);
-			else if(strcmp(w1,"data_dir") == 0)	// Data directory
-				strcpy(data_dir, w2);
-		}
-		fclose(data_conf);
-	} // end of reading grf-files.txt
-
-	if (grf_num == 0) {
-		printf("No GRF loaded, using default data directory\n");
-	}
-
-	// Unnecessary area release of filelist
-	filelist_adjust();
-	// Resource check
-	grfio_resourcecheck();
-
-	return;
-}
+// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
+// For more information, see LICENCE in the main folder
+
+/*********************************************************************
+ *
+ *		Ragnarok Online Emulator : grfio.c -- grf file I/O Module
+ *--------------------------------------------------------------------
+ *		special need library : zlib
+ *********************************************************************
+ *	$Id: grfio.c,v 1.2 2004/09/29 17:31:49 kalaspuff Exp $
+ *
+ *	2002/12/18... the original edition
+ *	2003/01/23 ... Code correction
+ *	2003/02/01 ... An addition and decryption processing are improved for LocalFile and two or more GRF(s) check processing.
+ *	2003/02/02 ... Even if there is no grf it does not stop -- as -- correction
+ *	2003/02/02... grf reading specification can be added later -- as -- correction (grfio_add function addition)
+ *	2003/02 / 03... at the time of grfio_resourcecheck processing the entry addition processing method -- correction
+ *	2003/02/05... change of the processing in grfio_init
+ *	2003/02/23... a local file check -- GRFIO_LOCAL -- switch (Defoe -- Function Off)
+ * 2003/10/21 ... The data of alpha client was read.
+ *	2003/11/10 ... Ready new grf format.
+ *	2003/11/11 ... version check fix & bug fix
+ * 2006/04/16 ... fixed crash grfio_find_file when file is not found.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <malloc.h>
+#include <sys/stat.h>
+
+#include "grfio.h"
+#include "../common/mmo.h"
+#include "../zlib/unzip.h"
+
+#define CHUNK 16384
+
+#ifdef __WIN32
+	#include "../zlib/zlib.h"
+	#include "../zlib/iowin32.h"
+#else
+	#ifndef __FREEBSD__
+		#include <zlib.h>
+	#endif
+#endif
+
+typedef	unsigned char	BYTE;
+typedef	unsigned short	WORD;
+typedef	unsigned long	DWORD;
+
+static char data_dir[1024] = "";	// "../";
+
+//----------------------------
+//	file entry table struct
+//----------------------------
+typedef struct {
+	int 	srclen;				// compressed size
+	int		srclen_aligned;		//
+	int		declen;				// original size
+	int		srcpos;
+	short	next;
+	int	cycle;
+	char	type;
+	char	fn[128-4*5];		// file name
+	char	*fnd;
+	signed char	gentry;				// read grf file select
+} FILELIST;
+//gentry ... 0    : It acquires from a local file.
+//             It acquires from the resource file of 1>=:gentry_table[gentry-1].
+//             1<=: Check a local file.
+//                    If it is, after re-setting to 0, it acquires from a local file.
+//                    If there is nothing, mark reversal will be carried out, and it will re-set, and will acquire from a resource file as well as 1>=.
+
+//Since char defines *FILELIST.gentry, the maximum which can be added by grfio_add becomes by 127 pieces.
+
+#define	GENTRY_LIMIT	512
+#define	FILELIST_LIMIT	1048576	// temporary maximum, and a theory top maximum are 2G.
+
+static FILELIST *filelist		= NULL;
+static int	filelist_entrys		= 0;
+static int	filelist_maxentry	= 0;
+
+static char **gentry_table		= NULL;
+static int gentry_entrys		= 0;
+static int gentry_maxentry		= 0;
+
+//----------------------------
+//	file list hash table
+//----------------------------
+static int filelist_hash[256];
+
+//----------------------------
+//	grf decode data table
+//----------------------------
+static unsigned char BitMaskTable[8] = {
+	0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01
+};
+
+static char	BitSwapTable1[64] = {
+	58, 50, 42, 34, 26, 18, 10,  2, 60, 52, 44, 36, 28, 20, 12,  4,
+	62, 54, 46, 38, 30, 22, 14,  6, 64, 56, 48, 40, 32, 24, 16,  8,
+	57, 49, 41, 33, 25, 17,  9,  1, 59, 51, 43, 35, 27, 19, 11,  3,
+	61, 53, 45, 37, 29, 21, 13,  5, 63, 55, 47, 39, 31, 23, 15,  7
+};
+static char	BitSwapTable2[64] = {
+	40,  8, 48, 16, 56, 24, 64, 32, 39,  7, 47, 15, 55, 23, 63, 31,
+	38,  6, 46, 14, 54, 22, 62, 30, 37,  5, 45, 13, 53, 21, 61, 29,
+	36,  4, 44, 12, 52, 20, 60, 28, 35,  3, 43, 11, 51, 19, 59, 27,
+	34,  2, 42, 10, 50, 18, 58, 26, 33,  1, 41,  9, 49, 17, 57, 25
+};
+static char	BitSwapTable3[32] = {
+	16,  7, 20, 21, 29, 12, 28, 17,  1, 15, 23, 26,  5, 18, 31, 10,
+     2,  8, 24, 14, 32, 27,  3,  9, 19, 13, 30,  6, 22, 11,  4, 25
+};
+
+static unsigned char NibbleData[4][64]={
+	{
+		0xef, 0x03, 0x41, 0xfd, 0xd8, 0x74, 0x1e, 0x47,  0x26, 0xef, 0xfb, 0x22, 0xb3, 0xd8, 0x84, 0x1e,
+		0x39, 0xac, 0xa7, 0x60, 0x62, 0xc1, 0xcd, 0xba,  0x5c, 0x96, 0x90, 0x59, 0x05, 0x3b, 0x7a, 0x85,
+		0x40, 0xfd, 0x1e, 0xc8, 0xe7, 0x8a, 0x8b, 0x21,  0xda, 0x43, 0x64, 0x9f, 0x2d, 0x14, 0xb1, 0x72,
+		0xf5, 0x5b, 0xc8, 0xb6, 0x9c, 0x37, 0x76, 0xec,  0x39, 0xa0, 0xa3, 0x05, 0x52, 0x6e, 0x0f, 0xd9,
+	}, {
+		0xa7, 0xdd, 0x0d, 0x78, 0x9e, 0x0b, 0xe3, 0x95,  0x60, 0x36, 0x36, 0x4f, 0xf9, 0x60, 0x5a, 0xa3,
+		0x11, 0x24, 0xd2, 0x87, 0xc8, 0x52, 0x75, 0xec,  0xbb, 0xc1, 0x4c, 0xba, 0x24, 0xfe, 0x8f, 0x19,
+		0xda, 0x13, 0x66, 0xaf, 0x49, 0xd0, 0x90, 0x06,  0x8c, 0x6a, 0xfb, 0x91, 0x37, 0x8d, 0x0d, 0x78,
+		0xbf, 0x49, 0x11, 0xf4, 0x23, 0xe5, 0xce, 0x3b,  0x55, 0xbc, 0xa2, 0x57, 0xe8, 0x22, 0x74, 0xce,
+	}, {
+		0x2c, 0xea, 0xc1, 0xbf, 0x4a, 0x24, 0x1f, 0xc2,  0x79, 0x47, 0xa2, 0x7c, 0xb6, 0xd9, 0x68, 0x15,
+		0x80, 0x56, 0x5d, 0x01, 0x33, 0xfd, 0xf4, 0xae,  0xde, 0x30, 0x07, 0x9b, 0xe5, 0x83, 0x9b, 0x68,
+		0x49, 0xb4, 0x2e, 0x83, 0x1f, 0xc2, 0xb5, 0x7c,  0xa2, 0x19, 0xd8, 0xe5, 0x7c, 0x2f, 0x83, 0xda,
+		0xf7, 0x6b, 0x90, 0xfe, 0xc4, 0x01, 0x5a, 0x97,  0x61, 0xa6, 0x3d, 0x40, 0x0b, 0x58, 0xe6, 0x3d,
+	}, {
+		0x4d, 0xd1, 0xb2, 0x0f, 0x28, 0xbd, 0xe4, 0x78,  0xf6, 0x4a, 0x0f, 0x93, 0x8b, 0x17, 0xd1, 0xa4,
+		0x3a, 0xec, 0xc9, 0x35, 0x93, 0x56, 0x7e, 0xcb,  0x55, 0x20, 0xa0, 0xfe, 0x6c, 0x89, 0x17, 0x62,
+		0x17, 0x62, 0x4b, 0xb1, 0xb4, 0xde, 0xd1, 0x87,  0xc9, 0x14, 0x3c, 0x4a, 0x7e, 0xa8, 0xe2, 0x7d,
+		0xa0, 0x9f, 0xf6, 0x5c, 0x6a, 0x09, 0x8d, 0xf0,  0x0f, 0xe3, 0x53, 0x25, 0x95, 0x36, 0x28, 0xcb,
+	}
+};
+/*-----------------
+ *	long data get
+ */
+static unsigned int getlong(unsigned char *p)
+{
+	return   p[0]
+		| p[1] << 0x08
+		| p[2] << 0x10
+		| p[3] << 0x18; // Shinomori
+}
+
+/*==========================================
+ *	Grf data decode : Subs
+ *------------------------------------------
+ */
+static void NibbleSwap(BYTE *Src, int len)
+{
+	for(;0<len;len--,Src++) {
+		*Src = (*Src>>4) | (*Src<<4);
+	}
+}
+
+static void BitConvert(BYTE *Src,char *BitSwapTable)
+{
+	int lop,prm;
+	BYTE tmp[8];
+	memset(tmp,0,8);
+	for(lop=0;lop!=64;lop++) {
+		prm = BitSwapTable[lop]-1;
+		if (Src[(prm >> 3) & 7] & BitMaskTable[prm & 7]) {
+			tmp[(lop >> 3) & 7] |= BitMaskTable[lop & 7];
+		}
+	}
+	memcpy(Src,tmp,8);
+}
+
+static void BitConvert4(BYTE *Src)
+{
+	int lop,prm;
+	BYTE tmp[8];
+	tmp[0] = ((Src[7]<<5) | (Src[4]>>3)) & 0x3f;	// ..0 vutsr
+	tmp[1] = ((Src[4]<<1) | (Src[5]>>7)) & 0x3f;	// ..srqpo n
+	tmp[2] = ((Src[4]<<5) | (Src[5]>>3)) & 0x3f;	// ..o nmlkj
+	tmp[3] = ((Src[5]<<1) | (Src[6]>>7)) & 0x3f;	// ..kjihg f
+	tmp[4] = ((Src[5]<<5) | (Src[6]>>3)) & 0x3f;	// ..g fedcb
+	tmp[5] = ((Src[6]<<1) | (Src[7]>>7)) & 0x3f;	// ..cba98 7
+	tmp[6] = ((Src[6]<<5) | (Src[7]>>3)) & 0x3f;	// ..8 76543
+	tmp[7] = ((Src[7]<<1) | (Src[4]>>7)) & 0x3f;	// ..43210 v
+
+	for(lop=0;lop!=4;lop++) {
+		tmp[lop] = (NibbleData[lop][tmp[lop*2]] & 0xf0)
+		         | (NibbleData[lop][tmp[lop*2+1]] & 0x0f);
+	}
+
+	*(DWORD*)(tmp+4)=0;
+	for(lop=0;lop!=32;lop++) {
+		prm = BitSwapTable3[lop]-1;
+		if (tmp[prm >> 3] & BitMaskTable[prm & 7]) {
+			tmp[(lop >> 3) + 4] |= BitMaskTable[lop & 7];
+		}
+	}
+	Src[0] ^= tmp[4];
+	Src[1] ^= tmp[5];
+	Src[2] ^= tmp[6];
+	Src[3] ^= tmp[7];
+}
+
+static void decode_des_etc(BYTE *buf,int len,int type,int cycle)
+{
+	int lop,cnt=0;
+	if(cycle<3) cycle=3;
+	else if(cycle<5) cycle++;
+	else if(cycle<7) cycle+=9;
+	else cycle+=15;
+
+	for(lop=0;lop*8<len;lop++,buf+=8) {
+		if(lop<20 || (type==0 && lop%cycle==0)){ // des
+			BitConvert(buf,BitSwapTable1);
+			BitConvert4(buf);
+			BitConvert(buf,BitSwapTable2);
+		} else {
+			if(cnt==7 && type==0){
+				int a;
+				BYTE tmp[8];
+				*(DWORD*)tmp     = *(DWORD*)buf;
+				*(DWORD*)(tmp+4) = *(DWORD*)(buf+4);
+				cnt=0;
+				buf[0]=tmp[3];
+				buf[1]=tmp[4];
+				buf[2]=tmp[6];
+				buf[3]=tmp[0];
+				buf[4]=tmp[1];
+				buf[5]=tmp[2];
+				buf[6]=tmp[5];
+				a=tmp[7];
+				if(a==0x00) a=0x2b;
+				else if(a==0x2b) a=0x00;
+				else if(a==0x01) a=0x68;
+				else if(a==0x68) a=0x01;
+				else if(a==0x48) a=0x77;
+				else if(a==0x77) a=0x48;
+				else if(a==0x60) a=0xff;
+				else if(a==0xff) a=0x60;
+				else if(a==0x6c) a=0x80;
+				else if(a==0x80) a=0x6c;
+				else if(a==0xb9) a=0xc0;
+				else if(a==0xc0) a=0xb9;
+				else if(a==0xeb) a=0xfe;
+				else if(a==0xfe) a=0xeb;
+				buf[7]=a;
+			}
+			cnt++;
+		}
+	}
+}
+/*==========================================
+ *	Grf data decode sub : zip
+ *------------------------------------------
+ */
+int decode_zip(unsigned char *dest, unsigned long* destLen, const unsigned char* source, unsigned long sourceLen)
+{
+	z_stream stream;
+	int err;
+
+	stream.next_in = (Bytef*)source;
+	stream.avail_in = (uInt)sourceLen;
+	/* Check for source > 64K on 16-bit machine: */
+	if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+
+	stream.next_out = (Bytef*) dest;
+	stream.avail_out = (uInt)*destLen;
+	if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+	stream.zalloc = (alloc_func)0;
+	stream.zfree = (free_func)0;
+
+	err = inflateInit(&stream);
+	if (err != Z_OK) return err;
+
+	err = inflate(&stream, Z_FINISH);
+	if (err != Z_STREAM_END) {
+		inflateEnd(&stream);
+		return err == Z_OK ? Z_BUF_ERROR : err;
+	}
+	*destLen = stream.total_out;
+
+	err = inflateEnd(&stream);
+	return err;
+}
+
+int encode_zip(unsigned char *dest, unsigned long* destLen, const unsigned char* source, unsigned long sourceLen) {
+	z_stream stream;
+	int err;
+	memset(&stream, 0, sizeof(stream));
+	stream.next_in = (Bytef*)source;
+	stream.avail_in = (uInt)sourceLen;
+	/* Check for source > 64K on 16-bit machine: */
+	if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+
+	stream.next_out = (Bytef*) dest;
+	stream.avail_out = (uInt)*destLen;
+	if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+	stream.zalloc = (alloc_func)0;
+	stream.zfree = (free_func)0;
+
+	err = deflateInit(&stream,Z_DEFAULT_COMPRESSION);
+	if (err != Z_OK) return err;
+
+	err = deflate(&stream, Z_FINISH);
+	if (err != Z_STREAM_END) {
+		inflateEnd(&stream);
+		return err == Z_OK ? Z_BUF_ERROR : err;
+	}
+	*destLen = stream.total_out;
+
+	err = deflateEnd(&stream);
+	return err;
+}
+
+/* ===================================
+* Unzips a file. 1: success, 0: error
+* Adapted from miniunz.c [Celest]
+* Version 1.01b, May 30th, 2004
+* Copyright (C) 1998-2004 Gilles Vollant
+* -------------------------------------
+*/
+int deflate_file (const char *source, const char *filename)
+{
+#ifdef _WIN32
+	zlib_filefunc_def ffunc;
+#endif
+	unzFile uf = NULL;
+	int err = UNZ_OK;
+	uInt size_buf = 8192;
+	FILE *fout = NULL;
+	void *buf;
+
+#ifdef _WIN32
+	fill_win32_filefunc(&ffunc);
+	uf = unzOpen2(source, &ffunc);
+#else
+	uf = unzOpen(source);
+#endif
+
+	if (uf == NULL)
+		return 0;
+
+	if (unzLocateFile(uf, filename, 0) != UNZ_OK)
+		return 0;
+
+	err = unzOpenCurrentFilePassword(uf, NULL);
+
+	fout = fopen(filename,"wb");
+	if (fout == NULL)
+		return 0;
+
+	buf = (void *)malloc(size_buf);
+	do {
+		err = unzReadCurrentFile(uf, buf, size_buf);
+		if (err < 0)
+			break;
+		if (err > 0 &&
+			fwrite(buf, err, 1, fout)!=1)
+		{
+			err = UNZ_ERRNO;
+			break;
+		}
+	} while (err > 0);
+	
+	if (fout) fclose(fout);
+
+	if (err == UNZ_OK) {
+		err = unzCloseCurrentFile (uf);
+		free(buf);
+		return (err == UNZ_OK);
+	}
+	
+	unzCloseCurrentFile(uf); /* don't lose the error */
+
+	return 0;
+}
+
+unsigned long grfio_crc32 (const unsigned char *buf, unsigned int len)
+{
+	return crc32(crc32(0L, Z_NULL, 0), buf, len);
+}
+
+/***********************************************************
+ ***                File List Subroutines                ***
+ ***********************************************************/
+
+/*==========================================
+ *	File List : Hash make
+ *------------------------------------------
+ */
+static int filehash(unsigned char *fname)
+{
+	unsigned int hash=0;
+	while(*fname) {
+		hash = ((hash<<1)+(hash>>7)*9+tolower(*fname));
+		fname++;
+	}
+	return hash & 255;
+}
+
+/*==========================================
+ *	File List : Hash initalize
+ *------------------------------------------
+ */
+static void hashinit(void)
+{
+	int lop;
+	for (lop = 0; lop < 256; lop++)
+		filelist_hash[lop] = -1;
+}
+
+/*==========================================
+ *	File List : File find
+ *------------------------------------------
+ */
+static FILELIST *filelist_find(char *fname)
+{
+	int hash;
+
+	if (!filelist)
+		return NULL;
+
+	for (hash = filelist_hash[filehash((unsigned char *) fname)]; hash >= 0; hash = filelist[hash].next) {
+		if(strcmpi(filelist[hash].fn, fname) == 0)
+			break;
+	}
+
+	return (hash >= 0) ? &filelist[hash] : NULL;
+}
+
+char *grfio_find_file(char *fname){
+	FILELIST *filelist = filelist_find(fname);
+	if (!filelist) return NULL;
+	return (!filelist->fnd?filelist->fn:filelist->fnd);
+}
+
+/*==========================================
+ *	File List : Filelist add
+ *------------------------------------------
+ */
+#define	FILELIST_ADDS	1024	// number increment of file lists `
+
+static FILELIST* filelist_add(FILELIST *entry)
+{
+	int hash;
+
+	if (filelist_entrys >= FILELIST_LIMIT) {
+		printf("GRF filelist limit reached!\n");
+		exit(1);
+	}
+
+	if (filelist_entrys >= filelist_maxentry) {
+		filelist = (FILELIST *)realloc(filelist, (filelist_maxentry + FILELIST_ADDS) * sizeof(FILELIST));
+		memset(filelist + filelist_maxentry, '\0', FILELIST_ADDS * sizeof(FILELIST));
+		filelist_maxentry += FILELIST_ADDS;
+	}
+
+	memcpy (&filelist[filelist_entrys], entry, sizeof(FILELIST));
+
+	hash = filehash((unsigned char *) entry->fn);
+	filelist[filelist_entrys].next = filelist_hash[hash];
+	filelist_hash[hash] = filelist_entrys;
+
+	filelist_entrys++;
+
+	return &filelist[filelist_entrys - 1];
+}
+
+static FILELIST* filelist_modify(FILELIST *entry)
+{
+	FILELIST *fentry;
+	if ((fentry = filelist_find(entry->fn)) != NULL) {
+		int tmp = fentry->next;
+		memcpy(fentry, entry, sizeof(FILELIST));
+		fentry->next = tmp;
+	} else {
+		fentry = filelist_add(entry);
+	}
+	return fentry;
+}
+
+/*==========================================
+ *	File List : filelist size adjust
+ *------------------------------------------
+ */
+static void filelist_adjust(void)
+{
+	if (filelist != NULL) {
+		if (filelist_maxentry > filelist_entrys) {
+			filelist = (FILELIST *)realloc(
+				filelist, filelist_entrys * sizeof(FILELIST));
+			filelist_maxentry = filelist_entrys;
+		}
+	}
+}
+
+/***********************************************************
+ ***                  Grfio Sobroutines                  ***
+ ***********************************************************/
+
+/*==========================================
+ *	Grfio : Resource file size get
+ *------------------------------------------
+ */
+int grfio_size(char *fname)
+{
+	FILELIST *entry;
+
+	entry = filelist_find(fname);
+
+	if (entry == NULL || entry->gentry < 0) {	// LocalFileCheck
+		char lfname[256], *p;
+		FILELIST lentry;
+		struct stat st;
+
+		sprintf(lfname, "%s%s", data_dir, fname);
+
+		for (p = &lfname[0]; *p != 0; p++)
+			if (*p=='\\') *p = '/';	// * At the time of Unix
+
+		if (stat(lfname, &st) == 0) {
+			strncpy(lentry.fn, fname, sizeof(lentry.fn) - 1);
+			lentry.fnd = NULL;
+			lentry.declen = st.st_size;
+			lentry.gentry = 0;	// 0:LocalFile
+			entry = filelist_modify(&lentry);
+		} else if (entry == NULL) {
+			printf("%s not found (grfio_size)\n", fname);
+			//exit(1);
+			return -1;
+		}
+	}
+	return entry->declen;
+}
+
+/*==========================================
+ *	Grfio : Resource file read & size get
+ *------------------------------------------
+ */
+void* grfio_reads(char *fname, int *size)
+{
+	FILE *in;
+	FILELIST *entry;
+	unsigned char *buf2 = NULL;
+
+	entry = filelist_find(fname);
+
+	if (entry == NULL || entry->gentry <= 0) {	// LocalFileCheck
+		char lfname[256], *p;
+		FILELIST lentry;
+
+		sprintf(lfname, "%s%s", data_dir, fname);
+		
+		for (p = &lfname[0]; *p != 0; p++)
+			if (*p == '\\') *p = '/';	// * At the time of Unix
+
+		in = fopen(lfname, "rb");
+		if (in != NULL) {
+			if (entry != NULL && entry->gentry == 0) {
+				lentry.declen = entry->declen;
+			} else {
+				fseek(in,0,2);	// SEEK_END
+				lentry.declen = ftell(in);
+			}
+			fseek(in,0,0);	// SEEK_SET
+			buf2 = (unsigned char *)malloc(lentry.declen + 1024);
+			fread(buf2, 1, lentry.declen, in);
+			fclose(in);
+			strncpy(lentry.fn, fname, sizeof(lentry.fn) - 1);
+			lentry.fnd = NULL;
+			lentry.gentry = 0;	// 0:LocalFile
+			entry = filelist_modify(&lentry);
+		} else {
+			if (entry != NULL && entry->gentry < 0) {
+				entry->gentry = -entry->gentry;	// local file checked
+			} else {
+				printf("%s not found (grfio_reads - local file %s)\n", fname, lfname);
+				return NULL;
+			}
+		}
+	}
+	if (entry != NULL && entry->gentry > 0) {	// Archive[GRF] File Read
+		char *gfname = gentry_table[entry->gentry - 1];
+		in = fopen(gfname, "rb");
+		if(in != NULL) {
+			unsigned char *buf = (unsigned char *)malloc(entry->srclen_aligned + 1024);
+			fseek(in, entry->srcpos, 0);
+			fread(buf, 1, entry->srclen_aligned, in);
+			fclose(in);
+			buf2 = (unsigned char *)malloc(entry->declen + 1024);
+			if (entry->type == 1 || entry->type == 3 || entry->type == 5) {
+				uLongf len;
+				if (entry->cycle >= 0)
+					decode_des_etc(buf, entry->srclen_aligned, entry->cycle == 0, entry->cycle);
+				len = entry->declen;
+				decode_zip(buf2, &len, buf, entry->srclen);
+				if (len != entry->declen) {
+					printf("decode_zip size mismatch err: %d != %d\n", (int)len, entry->declen);
+					free(buf);
+					free(buf2);
+					return NULL;
+				}
+			} else {
+				memcpy(buf2, buf, entry->declen);
+			}
+			free(buf);
+		} else {
+			printf("%s not found (grfio_reads - GRF file %s)\n", fname, gfname);
+			return NULL;
+		}
+	}
+	if (size != NULL && entry != NULL)
+		*size = entry->declen;
+
+	return buf2;
+}
+
+/*==========================================
+ *	Resource filename decode
+ *------------------------------------------
+ */
+static char * decode_filename(unsigned char *buf,int len)
+{
+	int lop;
+	for(lop=0;lop<len;lop+=8) {
+		NibbleSwap(&buf[lop],8);
+		BitConvert(&buf[lop],BitSwapTable1);
+		BitConvert4(&buf[lop]);
+		BitConvert(&buf[lop],BitSwapTable2);
+	}
+	return (char*)buf;
+}
+
+/*==========================================
+ * Grfio : Entry table read
+ *------------------------------------------
+ */
+static int grfio_entryread(char *gfname,int gentry)
+{
+	FILE *fp;
+	long grf_size,list_size;
+	unsigned char grf_header[0x2e];
+	int lop,entry,entrys,ofs,grf_version;
+	char *fname;
+	unsigned char *grf_filelist;
+
+	fp = fopen(gfname, "rb");
+	if (fp == NULL) {
+		printf("GRF data file not found: '%s'.\n",gfname);
+		return 1;	// 1:not found error
+	}
+
+	fseek(fp,0,2);	// SEEK_END
+	grf_size = ftell(fp);
+	fseek(fp,0,0);	// SEEK_SET
+	fread(grf_header,1,0x2e,fp);
+	if (strcmp((const char *) grf_header,"Master of Magic") ||
+		fseek(fp,getlong(grf_header+0x1e),1))	// SEEK_CUR
+	{
+		fclose(fp);
+		printf("GRF %s read error\n",gfname);
+		return 2;	// 2:file format error
+	}
+
+	grf_version = getlong(grf_header+0x2a) >> 8;
+
+	if (grf_version == 0x01) {	//****** Grf version 01xx ******
+		list_size = grf_size - ftell(fp);
+		grf_filelist = (unsigned char *) malloc(list_size);
+		fread(grf_filelist,1,list_size,fp);
+		fclose(fp);
+
+		entrys = getlong(grf_header+0x26) - getlong(grf_header+0x22) - 7;
+
+		// Get an entry
+		for (entry = 0,ofs = 0; entry < entrys; entry++) {
+			int ofs2, srclen, srccount, type;
+			char *period_ptr;
+			FILELIST aentry;
+
+			ofs2 = ofs+getlong(grf_filelist+ofs)+4;
+			type = grf_filelist[ofs2+12];
+			if (type != 0) {	// Directory Index ... skip
+				fname = decode_filename(grf_filelist+ofs+6, grf_filelist[ofs]-6);
+				if (strlen(fname) > sizeof(aentry.fn) - 1) {
+					printf("GRF file name %s is too long\n", fname);
+					free(grf_filelist);
+					exit(1);
+				}
+				srclen = 0;
+				if ((period_ptr = strrchr(fname, '.')) != NULL) {
+					for(lop = 0; lop < 4; lop++) {
+						if (strcmpi(period_ptr, ".gnd\0.gat\0.act\0.str"+lop*5) == 0)
+							break;
+					}
+					srclen = getlong(grf_filelist+ofs2) - getlong(grf_filelist+ofs2+8) - 715;
+					if(lop == 4) {
+						for(lop = 10, srccount = 1; srclen >= lop; lop = lop * 10, srccount++);
+					} else {
+						srccount = 0;
+					}
+				} else {
+					srccount = 0;
+				}
+
+				aentry.srclen         = srclen;
+				aentry.srclen_aligned = getlong(grf_filelist+ofs2+4)-37579;
+				aentry.declen         = getlong(grf_filelist+ofs2+8);
+				aentry.srcpos         = getlong(grf_filelist+ofs2+13)+0x2e;
+				aentry.cycle          = srccount;
+				aentry.type           = type;
+				strncpy(aentry.fn, fname,sizeof(aentry.fn)-1);
+				aentry.fnd			  = NULL;
+#ifdef	GRFIO_LOCAL
+				aentry.gentry         = -(gentry+1);	// As Flag for making it a negative number carrying out the first time LocalFileCheck
+#else
+				aentry.gentry         = gentry+1;		// With no first time LocalFileCheck
+#endif
+				filelist_modify(&aentry);
+			}
+			ofs = ofs2 + 17;
+		}
+		free(grf_filelist);
+
+	} else if (grf_version == 0x02) {	//****** Grf version 02xx ******
+		unsigned char eheader[8];
+		unsigned char *rBuf;
+		uLongf rSize, eSize;
+
+		fread(eheader,1,8,fp);
+		rSize = getlong(eheader);	// Read Size
+		eSize = getlong(eheader+4);	// Extend Size
+
+		if ((long)rSize > grf_size-ftell(fp)) { // Warning fix [Lance]
+			fclose(fp);
+			printf("Illegal data format: GRF compress entry size\n");
+			return 4;
+		}
+
+		rBuf = (unsigned char *)malloc(rSize);	// Get a Read Size
+		grf_filelist = (unsigned char *)malloc(eSize);	// Get a Extend Size
+		fread(rBuf,1,rSize,fp);
+		fclose(fp);
+		decode_zip(grf_filelist, &eSize, rBuf, rSize);	// Decode function
+		list_size = eSize;
+		free(rBuf);
+
+		entrys = getlong(grf_header+0x26) - 7;
+
+		// Get an entry
+		for(entry = 0, ofs = 0; entry < entrys; entry++){
+			int ofs2, srclen, srccount, type;
+			FILELIST aentry;
+
+			fname = (char*)(grf_filelist+ofs);
+			if (strlen(fname) > sizeof(aentry.fn)-1) {
+				printf("GRF file name %s is too long\n", fname);
+				free(grf_filelist);
+				exit(1);
+			}
+			//ofs2 = ofs+strlen((char*)(grf_filelist+ofs))+1;
+			ofs2 = ofs + strlen(fname)+1;
+			type = grf_filelist[ofs2+12];
+			if (type == 1 || type == 3 || type == 5) {
+				srclen = getlong(grf_filelist+ofs2);
+				if (grf_filelist[ofs2+12] == 3) {
+					for (lop = 10, srccount = 1; srclen >= lop; lop = lop * 10, srccount++);
+				} else if (grf_filelist[ofs2+12] == 5) {
+					srccount = 0;
+				} else {	// if (grf_filelist[ofs2+12]==1) {
+					srccount = -1;
+				}
+
+				aentry.srclen         = srclen;
+				aentry.srclen_aligned = getlong(grf_filelist+ofs2+4);
+				aentry.declen         = getlong(grf_filelist+ofs2+8);
+				aentry.srcpos         = getlong(grf_filelist+ofs2+13)+0x2e;
+				aentry.cycle          = srccount;
+				aentry.type           = type;
+				strncpy(aentry.fn,fname,sizeof(aentry.fn)-1);
+				aentry.fnd			  = NULL;
+#ifdef	GRFIO_LOCAL
+				aentry.gentry         = -(gentry+1);	// As Flag for making it a negative number carrying out the first time LocalFileCheck
+#else
+				aentry.gentry         = gentry+1;		// With no first time LocalFileCheck
+#endif
+				filelist_modify(&aentry);
+			}
+			ofs = ofs2 + 17;
+		}
+		free(grf_filelist);
+
+	} else {	//****** Grf Other version ******
+		fclose(fp);
+		printf("GRF version %04x not supported\n",getlong(grf_header+0x2a));
+		return 4;
+	}
+
+	filelist_adjust();	// Unnecessary area release of filelist
+
+	return 0;	// 0:no error
+}
+
+/*==========================================
+ * Grfio : Resource file check
+ *------------------------------------------
+ */
+static void grfio_resourcecheck(void)
+{
+	char w1[256], w2[256], src[256], dst[256], restable[256], line[256];
+	char *ptr, *buf;
+	FILELIST *entry;
+	int size, i = 0;
+	FILE *fp;
+
+	// read resnametable from data directory and return if successful
+	sprintf(restable, "%sdata\\resnametable.txt", data_dir);
+	for (ptr = &restable[0]; *ptr != 0; ptr++)
+		if (*ptr == '\\') *ptr = '/';
+
+	fp = fopen(restable,"rb");
+	if (fp) {
+		while (fgets(line, sizeof(line) - 1, fp)) {
+			if (sscanf(line, "%[^#]#%[^#]#", w1, w2) == 2 &&
+				// we only need the maps' GAT and RSW files
+				(strstr(w2, ".gat") || strstr(w2, ".rsw")))
+			{
+				sprintf(src, "data\\%s", w1);
+				sprintf(dst, "data\\%s", w2);
+				entry = filelist_find(dst);
+				// create new entries reusing the original's info
+				if (entry != NULL) {
+					FILELIST fentry;
+					memcpy(&fentry, entry, sizeof(FILELIST));
+					strncpy(fentry.fn, src, sizeof(fentry.fn) - 1);
+					fentry.fnd = grfio_alloc_ptr(dst);
+					filelist_modify(&fentry);
+					i++;
+				}
+			}
+		}
+		fclose(fp);
+		return;	// we're done here!
+	}
+	
+	// read resnametable from loaded GRF's, only if it cannot be
+	// loaded from the data directory
+	buf = (char *)grfio_reads("data\\resnametable.txt", &size);
+	if (buf) {
+		buf[size] = 0;
+		ptr = buf;
+
+		while (ptr - buf < size) {
+			if (sscanf(ptr, "%[^#]#%[^#]#", w1, w2) == 2 &&
+				(strstr(w2, ".gat") || strstr(w2, ".rsw")))
+			{
+				sprintf(src, "data\\%s", w1);
+				sprintf(dst, "data\\%s", w2);
+				entry = filelist_find(dst);
+				if (entry != NULL) {
+					FILELIST fentry;
+					memcpy(&fentry, entry, sizeof(FILELIST));
+					strncpy(fentry.fn, src, sizeof(fentry.fn) - 1);
+					fentry.fnd = grfio_alloc_ptr(dst);
+					filelist_modify(&fentry);
+					i++;
+				}
+			}
+			ptr = strchr(ptr,'\n');	// Next line
+			if (!ptr) break;
+			ptr++;
+		}
+		free(buf);
+		return;
+	}
+
+}
+
+/*==========================================
+ * Grfio : Resource add
+ *------------------------------------------
+ */
+#define	GENTRY_ADDS	4	// The number increment of gentry_table entries
+
+static int grfio_add(char *fname)
+{
+	grfio_alloc_ptr(fname);
+
+	return grfio_entryread(fname, gentry_entrys - 1);
+}
+
+char *grfio_alloc_ptr(char *fname)
+{
+	int len;
+	char *buf;
+
+	if (gentry_entrys >= GENTRY_LIMIT) {
+		printf("GRF file entry limit reached!\n");
+		exit(1);
+	}
+
+	if (gentry_entrys >= gentry_maxentry) {
+		gentry_maxentry += GENTRY_ADDS;
+		gentry_table = (char**)realloc(gentry_table, gentry_maxentry * sizeof(char*));
+		memset(gentry_table + (gentry_maxentry - GENTRY_ADDS), 0, sizeof(char*) * GENTRY_ADDS);
+	}
+	len = strlen( fname );
+	buf = (char*)malloc(len + 1);
+	strcpy(buf, fname);
+	gentry_table[gentry_entrys++] = buf;
+
+	return buf;
+}
+
+/*==========================================
+ * Grfio : Finalize
+ *------------------------------------------
+ */
+void grfio_final(void)
+{
+	if (filelist != NULL)
+		free(filelist);
+
+	filelist_entrys = filelist_maxentry = 0;
+
+	if (gentry_table != NULL) {
+		int lop;
+		for (lop = 0; lop < gentry_entrys; lop++) {
+			if (gentry_table[lop] != NULL)
+				free(gentry_table[lop]);
+		}
+		free(gentry_table);
+	}
+	gentry_table = NULL;
+	gentry_entrys = gentry_maxentry = 0;
+}
+
+/*==========================================
+ * Grfio : Initialize
+ *------------------------------------------
+ */
+void grfio_init(char *fname)
+{
+	FILE *data_conf;
+	char line[1024], w1[1024], w2[1024];
+	int grf_num = 0;
+
+	hashinit();	// hash table initialization
+
+	data_conf = fopen(fname, "r");
+	// It will read, if there is grf-files.txt.
+	if (data_conf) {
+		while(fgets(line, sizeof(line) - 1, data_conf)) {
+			if (line[0] == '/' && line[1] == '/')
+				continue;
+			if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
+				continue;
+			// Entry table reading
+			if(strcmp(w1, "grf") == 0)	// GRF file
+				grf_num += (grfio_add(w2) == 0);
+			else if(strcmp(w1,"data_dir") == 0)	// Data directory
+				strcpy(data_dir, w2);
+		}
+		fclose(data_conf);
+	} // end of reading grf-files.txt
+
+	if (grf_num == 0) {
+		printf("No GRF loaded, using default data directory\n");
+	}
+
+	// Unnecessary area release of filelist
+	filelist_adjust();
+	// Resource check
+	grfio_resourcecheck();
+
+	return;
+}

+ 23 - 23
src/tool/grfio.h

@@ -1,23 +1,23 @@
-// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
-// For more information, see LICENCE in the main folder
-
-#ifndef	_GRFIO_H_
-#define	_GRFIO_H_
-
-void grfio_init(char*);			// GRFIO Initialize
-void grfio_final(void);			// GRFIO Finalize
-void* grfio_reads(char*,int*);	// GRFIO data file read & size get
-char *grfio_find_file(char *fname);
-char *grfio_alloc_ptr(char *fname);
-
-#define grfio_read(fn) grfio_reads(fn, NULL)
-
-int grfio_size(char*);			// GRFIO data file size get
-unsigned long grfio_crc32(const unsigned char *buf, unsigned int len);
-
-int decode_zip(unsigned char *dest, unsigned long* destLen, const unsigned char* source, unsigned long sourceLen);
-int encode_zip(unsigned char *dest, unsigned long* destLen, const unsigned char* source, unsigned long sourceLen);
-int deflate_file (const char *source, const char *filename);
-
-#endif /* _GRFIO_H_ */
-
+// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
+// For more information, see LICENCE in the main folder
+
+#ifndef	_GRFIO_H_
+#define	_GRFIO_H_
+
+void grfio_init(char*);			// GRFIO Initialize
+void grfio_final(void);			// GRFIO Finalize
+void* grfio_reads(char*,int*);	// GRFIO data file read & size get
+char *grfio_find_file(char *fname);
+char *grfio_alloc_ptr(char *fname);
+
+#define grfio_read(fn) grfio_reads(fn, NULL)
+
+int grfio_size(char*);			// GRFIO data file size get
+unsigned long grfio_crc32(const unsigned char *buf, unsigned int len);
+
+int decode_zip(unsigned char *dest, unsigned long* destLen, const unsigned char* source, unsigned long sourceLen);
+int encode_zip(unsigned char *dest, unsigned long* destLen, const unsigned char* source, unsigned long sourceLen);
+int deflate_file (const char *source, const char *filename);
+
+#endif /* _GRFIO_H_ */
+

+ 202 - 202
src/tool/mapcache.c

@@ -1,202 +1,202 @@
-// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
-// For more information, see LICENCE in the main folder
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <malloc.h>
-
-#ifndef _WIN32
-#include <unistd.h>
-#endif
-
-#include "grfio.h"
-
-char grf_list_file[256] = "tools/mapcache/grf_files.txt";
-char map_list_file[256] = "tools/mapcache/map_list.txt";
-char map_cache_file[256] = "map_cache.dat";
-
-#define MAP_NAME_LENGTH 16
-#define NO_WATER 1000000
-
-// Used internally, this structure contains the physical map cells
-struct map_data {
-	short xs;
-	short ys;
-	unsigned char *cells;
-};
-
-// This is the header appended before every compressed map cells info
-struct map_cache_info {
-	char name[MAP_NAME_LENGTH];
-	unsigned short index;
-	short xs;
-	short ys;
-	long len;
-};
-
-// This is the main header found at the very beginning of the file
-struct map_cache_head {
-	short sizeof_header;
-	short sizeof_mapinfo;
-	long filesize;
-	unsigned short map_count;
-} header;
-
-FILE *map_cache_fp;
-
-
-// Read map from GRF's GAT and RSW files
-int read_map(char *name, struct map_data *m)
-{
-	char filename[256];
-	char *gat, *rsw;
-	int water_height;
-	int x, y, xs, ys;
-	struct gat_cell {
-		float height[4];
-		int type;
-	} *p = NULL;
-
-	// Open map GAT
-	sprintf(filename,"data\\%s.gat", name);
-	gat = (char *)grfio_read(filename);
-	if (gat == NULL)
-		return 0;
-
-	// Open map RSW
-	sprintf(filename,"data\\%s.rsw", name);
-	rsw = (char *)grfio_read(filename);
-
-	// Read water height
-	if (rsw) { 
-		float temp = *(float*)(rsw+166);
-		water_height = (int)temp;
-		free(rsw);
-	} else
-		water_height = NO_WATER;
-
-	// Read map size and allocate needed memory
-	xs = m->xs = *(int*)(gat+6);
-	ys = m->ys = *(int*)(gat+10);
-	m->cells = (unsigned char *)malloc(xs*ys);
-
-	// Set cell properties
-	for (y = 0; y < ys; y++) {
-		p = (struct gat_cell*)(gat+14+y*xs*20);
-		for (x = 0; x < xs; x++) {
-			if (water_height != NO_WATER && p->type == 0 && (p->height[0] > water_height || p->height[1] > water_height || p->height[2] > water_height || p->height[3] > water_height))
-				m->cells[x+y*xs] = 3; // Cell is 0 (walkable) but under water level, set to 3 (walkable water)
-			else
-				m->cells[x+y*xs] = p->type;
-			p++;
-		}
-	}
-
-	free(gat);
-
-	return 1;
-}
-
-void cache_map(char *name, unsigned short index, struct map_data *m)
-{
-	struct map_cache_info info;
-	unsigned long len;
-	char *write_buf;
-
-	// Create an output buffer twice as big as the uncompressed map... this way we're sure it fits
-	len = m->xs*m->ys*2;
-	write_buf = (char *)malloc(len);
-	// Compress the cells and get the compressed length
-	encode_zip((unsigned char *)write_buf, &len, m->cells, m->xs*m->ys);
-
-	// Fill the map header
-	strncpy(info.name, name, MAP_NAME_LENGTH);
-	info.index = index;
-	info.xs = m->xs;
-	info.ys = m->ys;
-	info.len = len;
-
-	// Append map header then compressed cells at the end of the file
-	fseek(map_cache_fp, header.filesize, SEEK_SET);
-	fwrite(&info, sizeof(struct map_cache_info), 1, map_cache_fp);
-	fwrite(write_buf, 1, len, map_cache_fp);
-	header.map_count++;
-	header.filesize += header.sizeof_mapinfo + len;
-
-	free(write_buf);
-	free(m->cells);
-
-	return;
-}
-
-int main(int argc, char *argv[])
-{
-	FILE *list;
-	char line[1024];
-	struct map_data map;
-	char name[MAP_NAME_LENGTH];
-	unsigned short index = 1;
-
-	if(argc > 1)
-		strcpy(grf_list_file, argv[1]);
-	if(argc > 2)
-		strcpy(map_list_file, argv[2]);
-	if(argc > 3)
-		strcpy(map_cache_file, argv[3]);
-
-	printf("Initializing grfio with %s\n", grf_list_file);
-	grfio_init(grf_list_file);
-
-	printf("Opening map cache: %s\n", map_cache_file);
-	if(!(map_cache_fp = fopen(map_cache_file, "wb"))) {
-		printf("Failure when opening map cache file %s\n", map_cache_file);
-		exit(1);
-	}
-
-	printf("Opening map list: %s\n", map_list_file);
-	if(!(list = fopen(map_list_file, "r"))) {
-		printf("Failure when opening maps list file %s\n", map_list_file);
-		exit(1);
-	}
-
-	// Initialize the main header
-	header.sizeof_header = sizeof(struct map_cache_head);
-	header.sizeof_mapinfo = sizeof(struct map_cache_info);
-	header.map_count = 0;
-	header.filesize = sizeof(struct map_cache_head);
-
-	// Read and process the map list
-	while(fgets(line, 1020, list)){
-
-		if(line[0] == '/' && line[1] == '/')
-			continue;
-
-		if(sscanf(line, "%16s %hu", name, &index) > 0) { // No defines in strings, 16 is hardcoded here
-				printf("Index %d : %s\n", index, name);
-				if(read_map(name, &map))
-					cache_map(name, index, &map);
-				else
-					printf("Map file not found in GRF\n");
-				// If the 2nd argument is omitted at next line, we'll keep last used index + 1
-				index++;
-		} else
-				printf("Skipping incorrect line\n");
-	}
-
-	printf("Closing map list: %s\n", map_list_file);
-	fclose(list);
-
-	printf("Closing map cache: %s\n", map_cache_file);
-	// Write the main header and close the map cache
-	fseek(map_cache_fp, 0, SEEK_SET);
-	fwrite(&header, sizeof(struct map_cache_head), 1, map_cache_fp);
-	fclose(map_cache_fp);
-
-	printf("Finalizing grfio\n");
-	grfio_final();
-
-	printf("%d maps cached\n", header.map_count);
-
-	return 0;
-}
+// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
+// For more information, see LICENCE in the main folder
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <malloc.h>
+
+#ifndef _WIN32
+#include <unistd.h>
+#endif
+
+#include "grfio.h"
+
+char grf_list_file[256] = "tools/mapcache/grf_files.txt";
+char map_list_file[256] = "tools/mapcache/map_list.txt";
+char map_cache_file[256] = "map_cache.dat";
+
+#define MAP_NAME_LENGTH 16
+#define NO_WATER 1000000
+
+// Used internally, this structure contains the physical map cells
+struct map_data {
+	short xs;
+	short ys;
+	unsigned char *cells;
+};
+
+// This is the header appended before every compressed map cells info
+struct map_cache_info {
+	char name[MAP_NAME_LENGTH];
+	unsigned short index;
+	short xs;
+	short ys;
+	long len;
+};
+
+// This is the main header found at the very beginning of the file
+struct map_cache_head {
+	short sizeof_header;
+	short sizeof_mapinfo;
+	long filesize;
+	unsigned short map_count;
+} header;
+
+FILE *map_cache_fp;
+
+
+// Read map from GRF's GAT and RSW files
+int read_map(char *name, struct map_data *m)
+{
+	char filename[256];
+	char *gat, *rsw;
+	int water_height;
+	int x, y, xs, ys;
+	struct gat_cell {
+		float height[4];
+		int type;
+	} *p = NULL;
+
+	// Open map GAT
+	sprintf(filename,"data\\%s.gat", name);
+	gat = (char *)grfio_read(filename);
+	if (gat == NULL)
+		return 0;
+
+	// Open map RSW
+	sprintf(filename,"data\\%s.rsw", name);
+	rsw = (char *)grfio_read(filename);
+
+	// Read water height
+	if (rsw) { 
+		float temp = *(float*)(rsw+166);
+		water_height = (int)temp;
+		free(rsw);
+	} else
+		water_height = NO_WATER;
+
+	// Read map size and allocate needed memory
+	xs = m->xs = *(int*)(gat+6);
+	ys = m->ys = *(int*)(gat+10);
+	m->cells = (unsigned char *)malloc(xs*ys);
+
+	// Set cell properties
+	for (y = 0; y < ys; y++) {
+		p = (struct gat_cell*)(gat+14+y*xs*20);
+		for (x = 0; x < xs; x++) {
+			if (water_height != NO_WATER && p->type == 0 && (p->height[0] > water_height || p->height[1] > water_height || p->height[2] > water_height || p->height[3] > water_height))
+				m->cells[x+y*xs] = 3; // Cell is 0 (walkable) but under water level, set to 3 (walkable water)
+			else
+				m->cells[x+y*xs] = p->type;
+			p++;
+		}
+	}
+
+	free(gat);
+
+	return 1;
+}
+
+void cache_map(char *name, unsigned short index, struct map_data *m)
+{
+	struct map_cache_info info;
+	unsigned long len;
+	char *write_buf;
+
+	// Create an output buffer twice as big as the uncompressed map... this way we're sure it fits
+	len = m->xs*m->ys*2;
+	write_buf = (char *)malloc(len);
+	// Compress the cells and get the compressed length
+	encode_zip((unsigned char *)write_buf, &len, m->cells, m->xs*m->ys);
+
+	// Fill the map header
+	strncpy(info.name, name, MAP_NAME_LENGTH);
+	info.index = index;
+	info.xs = m->xs;
+	info.ys = m->ys;
+	info.len = len;
+
+	// Append map header then compressed cells at the end of the file
+	fseek(map_cache_fp, header.filesize, SEEK_SET);
+	fwrite(&info, sizeof(struct map_cache_info), 1, map_cache_fp);
+	fwrite(write_buf, 1, len, map_cache_fp);
+	header.map_count++;
+	header.filesize += header.sizeof_mapinfo + len;
+
+	free(write_buf);
+	free(m->cells);
+
+	return;
+}
+
+int main(int argc, char *argv[])
+{
+	FILE *list;
+	char line[1024];
+	struct map_data map;
+	char name[MAP_NAME_LENGTH];
+	unsigned short index = 1;
+
+	if(argc > 1)
+		strcpy(grf_list_file, argv[1]);
+	if(argc > 2)
+		strcpy(map_list_file, argv[2]);
+	if(argc > 3)
+		strcpy(map_cache_file, argv[3]);
+
+	printf("Initializing grfio with %s\n", grf_list_file);
+	grfio_init(grf_list_file);
+
+	printf("Opening map cache: %s\n", map_cache_file);
+	if(!(map_cache_fp = fopen(map_cache_file, "wb"))) {
+		printf("Failure when opening map cache file %s\n", map_cache_file);
+		exit(1);
+	}
+
+	printf("Opening map list: %s\n", map_list_file);
+	if(!(list = fopen(map_list_file, "r"))) {
+		printf("Failure when opening maps list file %s\n", map_list_file);
+		exit(1);
+	}
+
+	// Initialize the main header
+	header.sizeof_header = sizeof(struct map_cache_head);
+	header.sizeof_mapinfo = sizeof(struct map_cache_info);
+	header.map_count = 0;
+	header.filesize = sizeof(struct map_cache_head);
+
+	// Read and process the map list
+	while(fgets(line, 1020, list)){
+
+		if(line[0] == '/' && line[1] == '/')
+			continue;
+
+		if(sscanf(line, "%16s %hu", name, &index) > 0) { // No defines in strings, 16 is hardcoded here
+				printf("Index %d : %s\n", index, name);
+				if(read_map(name, &map))
+					cache_map(name, index, &map);
+				else
+					printf("Map file not found in GRF\n");
+				// If the 2nd argument is omitted at next line, we'll keep last used index + 1
+				index++;
+		} else
+				printf("Skipping incorrect line\n");
+	}
+
+	printf("Closing map list: %s\n", map_list_file);
+	fclose(list);
+
+	printf("Closing map cache: %s\n", map_cache_file);
+	// Write the main header and close the map cache
+	fseek(map_cache_fp, 0, SEEK_SET);
+	fwrite(&header, sizeof(struct map_cache_head), 1, map_cache_fp);
+	fclose(map_cache_fp);
+
+	printf("Finalizing grfio\n");
+	grfio_final();
+
+	printf("%d maps cached\n", header.map_count);
+
+	return 0;
+}

TEMPAT SAMPAH
src/zlib/zlib-1.2.3