> Item Database SQL update: Part 1 (tid:83703)
* Updated tools/item_db.pl to convert both the Pre-Renewal and Renewal item databases. (credits: Lighta) * Current SQL databases item_db.sql and item_db_re.sql replaced with converted files. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17371 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
dda3f76534
commit
5d00e98927
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
300
tools/item_db.pl
300
tools/item_db.pl
@ -1,15 +1,173 @@
|
|||||||
#!/usr/bin/perl
|
#!/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`
|
|
||||||
#
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `item_db`;
|
# To run this file:
|
||||||
CREATE TABLE `item_db` (
|
# item_db.pl --i=../db/pre-re/item_db.txt --o=../sql-files/item_db.sql --t=pre
|
||||||
|
# item_db.pl --i=../db/re/item_db.txt --o=../sql-files/item_db_re.sql --t=re
|
||||||
|
# For a list of options:
|
||||||
|
# item_db.pl --help
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Getopt::Long;
|
||||||
|
|
||||||
|
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;
|
||||||
|
my @defaults = ();
|
||||||
|
|
||||||
|
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 options are supplied.
|
||||||
|
my $sValidTarget = "Re|Pre";
|
||||||
|
|
||||||
|
if( $sHelp ) {
|
||||||
|
print "Incorrect option specified. Available options:\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 "ERROR: Filename_in and Filename_out are required to continue.\n";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
unless($sTarget =~ /$sValidTarget/i){
|
||||||
|
print "ERROR: Incorrect target specified. Available targets:\n"
|
||||||
|
."\t --target => target (specify which setup to run [$sValidTarget])\n";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub Main {
|
||||||
|
GetArgs();
|
||||||
|
BuildDataForType($sTarget);
|
||||||
|
ConvertFile($sFilein,$sFileout);
|
||||||
|
print "Conversion ended.\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 "ERROR: Can't read or locate $sFilein.\n";
|
||||||
|
open $sFHout,">$sFileout" or die "ERROR: Can't write $sFileout.\n";
|
||||||
|
|
||||||
|
printf $sFHout ("%s\n",$create_table);
|
||||||
|
while(my $ligne=<FHIN>)
|
||||||
|
{
|
||||||
|
if ($ligne =~ /[^\r\n]+/)
|
||||||
|
{
|
||||||
|
$ligne = $&;
|
||||||
|
if ($ligne =~ /^\/\//)
|
||||||
|
{
|
||||||
|
printf $sFHout ("#");
|
||||||
|
$ligne = substr($ligne, 2);
|
||||||
|
}
|
||||||
|
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";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub printField { my ($sFHout,$str, $suffix, $idCol) = @_;
|
||||||
|
# Remove first { and last }
|
||||||
|
if ($str =~ /{.*}/)
|
||||||
|
{
|
||||||
|
$str = substr($&,1,-1);
|
||||||
|
}
|
||||||
|
# If nothing, put NULL
|
||||||
|
if ($str eq "") {
|
||||||
|
my $sDef;
|
||||||
|
if(scalar(@defaults)) { $sDef = $defaults[$idCol]; } #Use default in array.
|
||||||
|
else { $sDef = "NULL" unless($sDef); } #Let SQL handle the default.
|
||||||
|
print $sFHout "$sDef$suffix";
|
||||||
|
} else {
|
||||||
|
my $flag = 0;
|
||||||
|
# Search if it's a string column?
|
||||||
|
foreach my $col (@str_col)
|
||||||
|
{
|
||||||
|
if ($col == $idCol)
|
||||||
|
{
|
||||||
|
$flag |= 1;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$flag |= 2 if($idCol >= $nb_columns-3);
|
||||||
|
|
||||||
|
if ($flag & 3)
|
||||||
|
{
|
||||||
|
# String column, so escape , remove trailing and add ''
|
||||||
|
my $string;
|
||||||
|
$string = escape($str,"'","\\'") if($flag & 1) ;
|
||||||
|
$string =~ s/\s+$//; #Remove trailing spaces.
|
||||||
|
$string =~ s/^\s+//; #Remove leading spaces.
|
||||||
|
$string = escape($string,'\\\"','\\\\\"') if($flag & 2) ;
|
||||||
|
printf $sFHout ("'%s'%s", $string, $suffix);
|
||||||
|
} else {
|
||||||
|
# Not a string column.
|
||||||
|
printf $sFHout ("%s%s", $str,$suffix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub escape { my ($str,$sregex,$sreplace) = @_;
|
||||||
|
my @str_splitted = split($sregex, $str);
|
||||||
|
my $result = "";
|
||||||
|
for (my $i=0; $i<=$#str_splitted; $i++)
|
||||||
|
{
|
||||||
|
if ($i == 0) {
|
||||||
|
$result = @str_splitted[0];
|
||||||
|
} else {
|
||||||
|
$result = $result.$sreplace.@str_splitted[$i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $result
|
||||||
|
}
|
||||||
|
|
||||||
|
sub BuildDataForType{ my($sType) = @_;
|
||||||
|
print "Starting BuildDataForType with: \n\t type=$sTarget \n";
|
||||||
|
|
||||||
|
if($sType =~ /Pre/i){
|
||||||
|
$db = $stable;
|
||||||
|
$db = "item_db" unless($db);
|
||||||
|
$nb_columns = 22;
|
||||||
|
@str_col = (1,2,19,20,21);
|
||||||
|
$line_format = "([^\,]*),"x($nb_columns-3)."(\{.*\}),"x(2)."(\{.*\})"; #Last 3 columns 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',
|
`id` smallint(5) unsigned NOT NULL default '0',
|
||||||
`name_english` varchar(50) NOT NULL default '',
|
`name_english` varchar(50) NOT NULL default '',
|
||||||
`name_japanese` varchar(50) NOT NULL default '',
|
`name_japanese` varchar(50) NOT NULL default '',
|
||||||
@ -18,7 +176,7 @@ CREATE TABLE `item_db` (
|
|||||||
`price_sell` mediumint(10) unsigned default NULL,
|
`price_sell` mediumint(10) unsigned default NULL,
|
||||||
`weight` smallint(5) unsigned NOT NULL default '0',
|
`weight` smallint(5) unsigned NOT NULL default '0',
|
||||||
`attack` smallint(3) unsigned default NULL,
|
`attack` smallint(3) unsigned default NULL,
|
||||||
`defence` tinyint(3) unsigned default NULL,
|
`defence` smallint(5) NULL default NULL,
|
||||||
`range` tinyint(2) unsigned default NULL,
|
`range` tinyint(2) unsigned default NULL,
|
||||||
`slots` tinyint(2) unsigned default NULL,
|
`slots` tinyint(2) unsigned default NULL,
|
||||||
`equip_jobs` int(12) unsigned default NULL,
|
`equip_jobs` int(12) unsigned default NULL,
|
||||||
@ -35,82 +193,48 @@ CREATE TABLE `item_db` (
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=MyISAM;
|
) ENGINE=MyISAM;
|
||||||
";
|
";
|
||||||
printf("%s\n",$create_table);
|
#NOTE: These do not match the table struct defaults.
|
||||||
while ($ligne=<STDIN>)
|
@defaults = ('0','\'\'','\'\'','0','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL');
|
||||||
{
|
}
|
||||||
if ($ligne =~ /[^\r\n]+/)
|
elsif($sType =~ /Re/i){
|
||||||
{
|
$db = $stable;
|
||||||
$ligne = $&;
|
$db = "item_db_re" unless($db);
|
||||||
if ($ligne =~ /^\/\//)
|
$nb_columns = 22;
|
||||||
{
|
@str_col = (1,2,7,16,19,20,21);
|
||||||
printf("# ");
|
$line_format = "([^\,]*),"x($nb_columns-3)."(\{.*\}),"x(2)."(\{.*\})"; #Last 3 columns are scripts.
|
||||||
$ligne = substr($ligne, 2);
|
$create_table = "
|
||||||
}
|
#
|
||||||
if ($ligne =~ $line_format) {
|
# Table structure for table `$db`
|
||||||
@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 = ();
|
DROP TABLE IF EXISTS `$db`;
|
||||||
}
|
CREATE TABLE `$db` (
|
||||||
if ($#champ != $nb_columns - 1)
|
`id` smallint(5) unsigned NOT NULL default '0',
|
||||||
{
|
`name_english` varchar(50) NOT NULL default '',
|
||||||
# Can't parse, it's a real comment
|
`name_japanese` varchar(50) NOT NULL default '',
|
||||||
printf ("%s\n", $ligne);
|
`type` tinyint(2) unsigned NOT NULL default '0',
|
||||||
} else {
|
`price_buy` mediumint(10) unsigned default NULL,
|
||||||
printf("REPLACE INTO `%s` VALUES (", $db);
|
`price_sell` mediumint(10) unsigned default NULL,
|
||||||
for ($i=0; $i<$#champ; $i++)
|
`weight` smallint(5) unsigned NOT NULL default '0',
|
||||||
{
|
`atk:matk` varchar(11) default '',
|
||||||
printField($champ[$i],",",$i);
|
`defence` smallint(5) NULL default NULL,
|
||||||
}
|
`range` tinyint(2) unsigned default NULL,
|
||||||
printField($champ[$#champ],");\n",$#champ);
|
`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;
|
||||||
|
";
|
||||||
|
#NOTE: These do not match the table struct defaults.
|
||||||
|
@defaults = ('0','\'\'','\'\'','0','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print("\n");
|
|
||||||
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user