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=) -{ - 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=) { - $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; +"; + } +}