Index: tools/item_db.pl
===================================================================
--- tools/item_db.pl (revision 17366)
+++ tools/item_db.pl (working copy)
@@ -1,75 +1,96 @@
#!/usr/bin/perl
-$db = "item_db";
-$nb_columns = 22;
-@str_col = (1,2,7,19,20,21);
-$line_format = "([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),([^\,]*),(\{.*\}),(\{.*\}),(\{.*\})";
-#$line_format = ;
-$create_table = "#
-# Table structure for table `item_db`
-#
+use strict;
+use Getopt::Long;
-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` smallint(3) unsigned default NULL,
- `script` text,
- `equip_script` text,
- `unequip_script` text,
- PRIMARY KEY (`id`)
-) ENGINE=MyISAM;
-";
-printf("%s\n",$create_table);
-while ($ligne=<STDIN>)
-{
- if ($ligne =~ /[^\r\n]+/)
+my $sFilein = "";
+my $sFileout = "";
+my $sTarget = "";
+my $sHelp = 0;
+my $stable = "";
+
+my $db;
+my $nb_columns;
+my @str_col = ();
+my $line_format;
+my $create_table;
+
+Main();
+
+sub GetArgs {
+ GetOptions(
+ 'i=s' => \$sFilein, #output file
+ 'o=s' => \$sFileout, #input file
+ 't=s' => \$sTarget, # re/pre-re
+ 'table=s' => \$stable,
+ 'help!' => \$sHelp,
+ ) or $sHelp=1; #display help if invalid option
+ my $sValidTarget = "Re|Pre";
+
+ if( $sHelp ) {
+ print "Incorect option specified, available option are:\n"
+ ."\t --o=filename => output filename \n"
+ ."\t --i=filename => intput filename \n"
+ ."\t --table=tablename => tablename to create \n"
+ ."\t --t=type => specify target type ([$sValidTarget]) \n";
+ exit;
+ }
+ unless($sFilein or $sFileout){
+ print "Filename_in and Filename_out are required to continue\n";
+ exit;
+ }
+ unless($sTarget =~ /$sValidTarget/i){
+ print "Incorect target specified, available target are:\n"
+ ."\t --target => target (specify wich setup to run [$sValidTarget])\n";
+ exit;
+ }
+}
+
+sub Main {
+ GetArgs();
+ BuildDataForType($sTarget);
+ ConvertFile($sFilein,$sFileout);
+ print "End Converting\n";
+}
+
+sub ConvertFile { my($sFilein,$sFileout)=@_;
+ my $sFHout;
+ print "Starting ConvertFile with : \n\t filein=$sFilein \n\t fileout=$sFileout \n";
+ open FHIN,"$sFilein" or die "Can't read/found $sFilein\n";
+ open $sFHout,">$sFileout" or die "Can't writte $sFileout\n";
+
+ printf $sFHout ("%s\n",$create_table);
+ while(my $ligne=<FHIN>)
{
- $ligne = $&;
- if ($ligne =~ /^\/\//)
+ if ($ligne =~ /[^\r\n]+/)
{
- printf("# ");
- $ligne = substr($ligne, 2);
- }
- if ($ligne =~ $line_format) {
- @champ = ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22);
- } else {
- @champ = ();
- }
- if ($#champ != $nb_columns - 1)
- {
- # Can't parse, it's a real comment
- printf ("%s\n", $ligne);
- } else {
- printf("REPLACE INTO `%s` VALUES (", $db);
- for ($i=0; $i<$#champ; $i++)
+ $ligne = $&;
+ if ($ligne =~ /^\/\//)
{
- printField($champ[$i],",",$i);
+ printf $sFHout ("# ");
+ $ligne = substr($ligne, 2);
}
- printField($champ[$#champ],");\n",$#champ);
+ my @champ = ();
+ if ($ligne =~ $line_format) {
+ @champ = ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22);
+ }
+ if ($#champ != $nb_columns - 1)
+ {
+ # Can't parse, it's a real comment
+ printf $sFHout ("%s\n", $ligne);
+ } else {
+ printf $sFHout ("REPLACE INTO `%s` VALUES (", $db);
+ for (my $i=0; $i<$#champ; $i++)
+ {
+ printField($sFHout,$champ[$i],",",$i);
+ }
+ printField($sFHout,$champ[$#champ],");\n",$#champ);
+ }
}
}
+ print $sFHout "\n";
}
-print("\n");
-
-sub printField {
- my ($str, $suffix, $idCol) = @_;
+sub printField { my ($sFHout,$str, $suffix, $idCol) = @_;
# Remove first { and last }
if ($str =~ /{.*}/)
{
@@ -77,31 +98,30 @@
}
# If nothing, put NULL
if ($str eq "") {
- printf("NULL%s", $suffix);
+ printf $sFHout ("NULL%s", $suffix);
} else {
my $flag = 0;
# Search if it's a string column ?
- foreach $col (@str_col)
+ foreach my $col (@str_col)
{
if ($col == $idCol)
{
$flag = 1;
- break;
+ last;
}
}
if ($flag == 1)
{
# String column, so escape and add ''
- printf("'%s'%s", escape($str), $suffix);
+ printf $sFHout ("'%s'%s", escape($str), $suffix);
} else {
# Not a string column
- printf("%s%s", $str,$suffix);
+ printf $sFHout ("%s%s", $str,$suffix);
}
}
}
-sub escape {
- my ($str) = @_;
+sub escape { my ($str) = @_;
my @str_splitted = split("'", $str);
my $result = "";
for (my $i=0; $i<=$#str_splitted; $i++)
@@ -114,3 +134,87 @@
}
return $result
}
+
+sub BuildDataForType{ my($sType) = @_;
+ print "Starting BuildDataForType with : \n\t type=$sTarget \n";
+
+ if($sType =~ /Pre/i){
+ print "Entering Pre type\n";
+ $db = $stable;
+ $db = "item_db" unless($db);
+ $nb_columns = 22;
+ @str_col = (1,2,7,19,20,21);
+ $line_format = "([^\,]*),"x($nb_columns-3)."(\{.*\}),"x(2)."(\{.*\})"; #last 3column are scripts
+ $create_table = "
+#
+# Table structure for table `$db`
+#
+DROP TABLE IF EXISTS `$db`;
+CREATE TABLE `$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` smallint(3) unsigned default NULL,
+ `script` text,
+ `equip_script` text,
+ `unequip_script` text,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM;
+";
+ }
+ elsif($sType =~ /Re/i){
+ print "Entering Re type\n";
+ $db = $stable;
+ $db = "item_db_re" unless($db);
+ $nb_columns = 22;
+ @str_col = (1,2,7,15,19,20,21);
+ $line_format = "([^\,]*),"x($nb_columns-3)."(\{.*\}),"x(2)."(\{.*\})"; #last 3column are scripts
+ $create_table = "
+#
+# Table structure for table `$db`
+#
+
+DROP TABLE IF EXISTS `$db`;
+CREATE TABLE `$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',
+ `atk:matk` varchar(11) default '',
+ `defence` smallint(5) NULL 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` varchar(10) default '',
+ `refineable` tinyint(1) unsigned default NULL,
+ `view` smallint(3) unsigned default NULL,
+ `script` text,
+ `equip_script` text,
+ `unequip_script` text,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM;
+";
+ }
+}