From 90d466716c46d8861d85dcf377981a412a2e2267 Mon Sep 17 00:00:00 2001 From: skotlex Date: Tue, 25 Jul 2006 18:43:42 +0000 Subject: - Added Toms's perl scripts item_db.pl and mob_db.pl (they are in tools/), they convert the txt databases into sql. - Usage: "script" < "input file" > "output file". eg: ./tools/item_db.pl < db/item_db.txt > sql-files/item_db.sql - Updated the sql files since now it's easy :D git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@7879 54d463be-8e91-2dee-dedb-b68131a5f0ec --- tools/item_db.pl | 108 ++++++++++++++++++++++++++++++++++++++++ tools/mob_db.pl | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 257 insertions(+) create mode 100755 tools/item_db.pl create mode 100755 tools/mob_db.pl (limited to 'tools') diff --git a/tools/item_db.pl b/tools/item_db.pl new file mode 100755 index 000000000..f176a949f --- /dev/null +++ b/tools/item_db.pl @@ -0,0 +1,108 @@ +#!/usr/bin/perl +$db = "item_db"; +$nb_columns = 22; +@str_col = (1,2,19,20,21); +$create_table = "# +# Table structure for table `item_db` +# + +DROP TABLE IF EXISTS `item_db`; +CREATE TABLE `item_db` ( + `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` tinyint(3) unsigned default NULL, + `script` text, + `equip_script` text, + `unequip_script` text, + PRIMARY KEY (`id`) +) TYPE=MyISAM; +"; +printf("%s\n",$create_table); +while ($ligne=) +{ + if ($ligne =~ /[^\r\n]+/) + { + $ligne = $&; + if ($ligne =~ /^\/\//) + { + printf("# %s\n", $ligne); + } else { + @champ = split (",(?![^{]*[})])",$ligne); + if ($#champ != $nb_columns - 1) + { + printf ("# WARNING BAD LINE : %d (%s)\n", $#champ, $ligne); + printf STDERR ("Warning : can't parse %s\n", $ligne); + } else { + printf("REPLACE INTO `%s` VALUES (", $db); + for ($i=0; $i<$#champ; $i++) + { + printField($champ[$i],",",$i); + } + printField($champ[$#champ],");\n",$#champ); + } + } + } +} + +sub printField { + my ($str, $suffix, $idCol) = @_; + # Remove first { and last } + if ($str =~ /{.*}/) + { + $str = substr($&,1,-1); + } + # If nothing, put NULL + if ($str eq "") { + printf("NULL%s", $suffix); + } else { + my $flag = 0; + # Search if it's a string column ? + foreach $col (@str_col) + { + if ($col == $idCol) + { + $flag = 1; + break; + } + } + if ($flag == 1) + { + # String column, so escape and add '' + printf("'%s'%s", escape($str), $suffix); + } else { + # Not a string column + printf("%s%s", $str,$suffix); + } + } +} + +sub escape { + my ($str) = @_; + my @str_splitted = split("'", $str); + my $result = ""; + for (my $i=0; $i<=$#str_splitted; $i++) + { + if ($i == 0) { + $result = @str_splitted[0]; + } else { + $result = $result."\\'".@str_splitted[$i]; + } + } + return $result +} diff --git a/tools/mob_db.pl b/tools/mob_db.pl new file mode 100755 index 000000000..2ddd5c584 --- /dev/null +++ b/tools/mob_db.pl @@ -0,0 +1,149 @@ +#!/usr/bin/perl +$db = "mob_db"; +$nb_columns = 58; +@str_col = (1,2,3); +$create_table = "# +# Table structure for table `mob_db` +# + +DROP TABLE IF EXISTS `mob_db`; +CREATE TABLE `mob_db` ( + `ID` mediumint(9) unsigned NOT NULL default '0', + `Sprite` text NOT NULL, + `kName` text NOT NULL, + `iName` text NOT NULL, + `LV` tinyint(6) unsigned NOT NULL default '0', + `HP` int(9) unsigned NOT NULL default '0', + `SP` mediumint(9) unsigned NOT NULL default '0', + `EXP` mediumint(9) unsigned NOT NULL default '0', + `JEXP` mediumint(9) unsigned NOT NULL default '0', + `Range1` tinyint(4) unsigned NOT NULL default '0', + `ATK1` smallint(6) unsigned NOT NULL default '0', + `ATK2` smallint(6) unsigned NOT NULL default '0', + `DEF` smallint(6) unsigned NOT NULL default '0', + `MDEF` smallint(6) unsigned NOT NULL default '0', + `STR` tinyint(4) unsigned NOT NULL default '0', + `AGI` tinyint(4) unsigned NOT NULL default '0', + `VIT` tinyint(4) unsigned NOT NULL default '0', + `INT` tinyint(4) unsigned NOT NULL default '0', + `DEX` tinyint(4) unsigned NOT NULL default '0', + `LUK` tinyint(4) unsigned NOT NULL default '0', + `Range2` tinyint(4) unsigned NOT NULL default '0', + `Range3` tinyint(4) unsigned NOT NULL default '0', + `Scale` tinyint(4) unsigned NOT NULL default '0', + `Race` tinyint(4) unsigned NOT NULL default '0', + `Element` tinyint(4) unsigned NOT NULL default '0', + `Mode` smallint(6) unsigned NOT NULL default '0', + `Speed` smallint(6) unsigned NOT NULL default '0', + `ADelay` smallint(6) unsigned NOT NULL default '0', + `aMotion` smallint(6) unsigned NOT NULL default '0', + `dMotion` smallint(6) unsigned NOT NULL default '0', + `MEXP` mediumint(9) unsigned NOT NULL default '0', + `ExpPer` smallint(9) unsigned NOT NULL default '0', + `MVP1id` smallint(9) unsigned NOT NULL default '0', + `MVP1per` smallint(9) unsigned NOT NULL default '0', + `MVP2id` smallint(9) unsigned NOT NULL default '0', + `MVP2per` smallint(9) unsigned NOT NULL default '0', + `MVP3id` smallint(9) unsigned NOT NULL default '0', + `MVP3per` smallint(9) unsigned NOT NULL default '0', + `Drop1id` smallint(9) unsigned NOT NULL default '0', + `Drop1per` smallint(9) unsigned NOT NULL default '0', + `Drop2id` smallint(9) unsigned NOT NULL default '0', + `Drop2per` smallint(9) unsigned NOT NULL default '0', + `Drop3id` smallint(9) unsigned NOT NULL default '0', + `Drop3per` smallint(9) unsigned NOT NULL default '0', + `Drop4id` smallint(9) unsigned NOT NULL default '0', + `Drop4per` smallint(9) unsigned NOT NULL default '0', + `Drop5id` smallint(9) unsigned NOT NULL default '0', + `Drop5per` smallint(9) unsigned NOT NULL default '0', + `Drop6id` smallint(9) unsigned NOT NULL default '0', + `Drop6per` smallint(9) unsigned NOT NULL default '0', + `Drop7id` smallint(9) unsigned NOT NULL default '0', + `Drop7per` smallint(9) unsigned NOT NULL default '0', + `Drop8id` smallint(9) unsigned NOT NULL default '0', + `Drop8per` smallint(9) unsigned NOT NULL default '0', + `Drop9id` smallint(9) unsigned NOT NULL default '0', + `Drop9per` smallint(9) unsigned NOT NULL default '0', + `DropCardid` smallint(9) unsigned NOT NULL default '0', + `DropCardper` smallint(9) unsigned NOT NULL default '0', + PRIMARY KEY (`ID`) +) TYPE=MyISAM; +"; +printf("%s\n",$create_table); +while ($ligne=) +{ + if ($ligne =~ /[^\r\n]+/) + { + $ligne = $&; + if ($ligne =~ /^\/\//) + { + printf("# %s\n", $ligne); + } else { + @champ = split (",(?![^{]*[})])",$ligne); + if ($#champ != $nb_columns - 1) + { + printf ("# WARNING BAD LINE : %d (%s)\n", $#champ, $ligne); + printf STDERR ("Warning : can't parse %s\n", $ligne); + } else { + printf("REPLACE INTO `%s` VALUES (", $db); + for ($i=0; $i<$#champ; $i++) + { + printField($champ[$i],",",$i); + } + printField($champ[$#champ],");\n",$#champ); + } + } + } +} + +sub printField { + my ($str, $suffix, $idCol) = @_; + # Remove first { and last } + if ($str =~ /{.*}/) + { + $str = substr($&,1,-1); + } + # Remove comment at end of line + if ($str =~ /[^\/]*\/\//) + { + $str = substr($&,0,-2); + } + # If nothing, put NULL + if ($str eq "") { + printf("NULL%s", $suffix); + } else { + my $flag = 0; + # Search if it's a string column ? + foreach $col (@str_col) + { + if ($col == $idCol) + { + $flag = 1; + break; + } + } + if ($flag == 1) + { + # String column, so escape and add '' + printf("'%s'%s", escape($str), $suffix); + } else { + # Not a string column + printf("%s%s", $str,$suffix); + } + } +} + +sub escape { + my ($str) = @_; + my @str_splitted = split("'", $str); + my $result = ""; + for (my $i=0; $i<=$#str_splitted; $i++) + { + if ($i == 0) { + $result = @str_splitted[0]; + } else { + $result = $result."\\'".@str_splitted[$i]; + } + } + return $result +} -- cgit v1.2.3-70-g09d2