Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Gravenet
/
ffxi-db-converter
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
9d920992
authored
2016-10-01 00:55:09 +0000
by
Gravenet
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Update convert.py
1 parent
03ad19d5
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
39 additions
and
13 deletions
convert.py
convert.py
View file @
9d92099
...
...
@@ -13,26 +13,44 @@ import shlex
field_list
=
{
"items-armor.xml"
:
[
"id"
,
"flags"
,
"name"
,
"description"
,
"level"
,
"iLevel"
,
"slots"
,
"races"
],
{
"fields"
:
[
"id"
,
"flags"
,
"stack-size"
,
"valid-targets"
,
"name"
,
"description"
,
"log-name-singular"
,
"log-name-plural"
,
"level"
,
"iLevel"
,
"slots"
,
"races"
,
"jobs"
,
"superior-level"
,
"shield-size"
,
"max-charges"
,
"casting-time"
,
"use-delay"
,
"reuse-delay"
],
"calculated"
:
{
"jobs"
:
"divide_hex_by_2"
}},
"items-armor2.xml"
:
[
"id"
,
"flags"
,
"name"
,
"description"
,
"level"
,
"iLevel"
,
"slots"
,
"races"
],
{
"fields"
:
[
"id"
,
"flags"
,
"stack-size"
,
"valid-targets"
,
"name"
,
"description"
,
"log-name-singular"
,
"log-name-plural"
,
"level"
,
"iLevel"
,
"slots"
,
"races"
,
"jobs"
,
"superior-level"
,
"shield-size"
,
"max-charges"
,
"casting-time"
,
"use-delay"
,
"reuse-delay"
],
"calculated"
:
{
"jobs"
:
"divide_hex_by_2"
}},
"items-currency.xml"
:
[
"id"
,
"flags"
,
"name"
,
"description"
,
"log-name-singular"
,
"log-name-plural"
],
{
"fields"
:
[
"id"
,
"flags"
,
"name"
,
"description"
,
"log-name-singular"
,
"log-name-plural"
],
"calculated"
:
{}},
"items-general.xml"
:
[
"id"
,
"flags"
,
"name"
,
"description"
],
{
"fields"
:
[
"id"
,
"flags"
,
"stack-size"
,
"valid-targets"
,
"name"
,
"description"
,
"log-name-singular"
,
"log-name-plural"
,
"element"
,
"storage-slots"
],
"calculated"
:
{}},
"items-general2.xml"
:
[
"id"
,
"flags"
,
"name"
,
"description"
],
{
"fields"
:
[
"id"
,
"flags"
,
"stack-size"
,
"valid-targets"
,
"name"
,
"description"
,
"log-name-singular"
,
"log-name-plural"
,
"element"
,
"storage-slots"
],
"calculated"
:
{}},
"items-puppet.xml"
:
[
"id"
,
"flags"
,
"name"
,
"description"
,
"puppet-slot"
,
"element-charge"
],
{
"fields"
:
[
"id"
,
"flags"
,
"stack-size"
,
"valid-targets"
,
"name"
,
"description"
,
"log-name-singular"
,
"log-name-plural"
,
"puppet-slot"
,
"element-charge"
],
"calculated"
:
{}},
"items-usable.xml"
:
[
"id"
,
"flags"
,
"name"
,
"description"
,
"activation-time"
],
{
"fields"
:
[
"id"
,
"flags"
,
"stack-size"
,
"valid-targets"
,
"name"
,
"description"
,
"log-name-singular"
,
"log-name-plural"
,
"activation-time"
],
"calculated"
:
{}},
"items-voucher-slip.xml"
:
[
"id"
,
"flags"
,
"name"
,
"description"
,
"valid-targets"
],
{
"fields"
:
[
"id"
,
"flags"
,
"stack-size"
,
"valid-targets"
,
"name"
,
"description"
,
"log-name-singular"
,
"log-name-plural"
],
"calculated"
:
{}},
"items-weapons.xml"
:
[
"id"
,
"flags"
,
"name"
,
"description"
,
"level"
,
"iLevel"
,
"slots"
,
"races"
,
"damage"
],
{
"fields"
:
[
"id"
,
"flags"
,
"stack-size"
,
"valid-targets"
,
"name"
,
"description"
,
"log-name-singular"
,
"log-name-plural"
,
"level"
,
"iLevel"
,
"slots"
,
"races"
,
"jobs"
,
"superior-level"
,
"damage"
,
"delay"
,
"dps"
,
"skill"
,
"jug-size"
,
"max-charges"
,
"casting-time"
,
"use-delay"
,
"reuse-delay"
],
"calculated"
:
{
"jobs"
:
"divide_hex_by_2"
}},
}
# Takes in a hex string in the formats: 0xDEADBEEF or DEADBEEF
# Outputs integer of the hex string divided by 2
def
divide_hex_by_2
(
hexstring
):
return
int
(
hexstring
,
16
)
/
2
#print(divide_hex_by_2("0xDEADBEEF"))
#print(divide_hex_by_2("00080BE6"))
#quit()
parser
=
argparse
.
ArgumentParser
()
parser
.
add_argument
(
'-s'
,
'--sourcexml'
,
required
=
True
,
help
=
"Source XML Directory"
)
parser
.
add_argument
(
'-o'
,
'--outputdb'
,
required
=
True
,
help
=
"Destination SQLite Database"
)
...
...
@@ -47,9 +65,8 @@ c = conn.cursor()
for
filename
in
os
.
listdir
(
args
.
sourcexml
):
if
filename
.
endswith
(
".xml"
):
try
:
fields
=
(
', '
.
join
(
'"'
+
item
+
'"'
for
item
in
field_list
[
filename
]))
fields
=
(
', '
.
join
(
'"'
+
item
+
'"'
for
item
in
field_list
[
filename
]
[
"fields"
]
))
query
=
"CREATE TABLE
\"
%
s
\"
(
%
s)"
%
(
filename
,
fields
)
#print (query)
c
.
execute
(
query
)
conn
.
commit
()
except
sqlite3
.
OperationalError
:
...
...
@@ -59,10 +76,19 @@ for filename in os.listdir(args.sourcexml):
doc
=
untangle
.
parse
(
source_file
)
for
item
in
doc
.
thing_list
.
thing
:
row
=
[]
for
field_name
in
field_list
[
filename
][
"fields"
]:
field_set
=
False
for
field
in
item
.
children
:
if
field
[
'name'
]
in
field_list
[
filename
]:
if
field
[
'name'
]
==
field_name
:
if
field
[
'name'
]
in
field_list
[
filename
][
'calculated'
]:
function_name
=
field_list
[
filename
][
'calculated'
][
field
[
'name'
]]
function
=
locals
()[
function_name
]
row
.
append
(
function
(
field
.
cdata
))
else
:
row
.
append
(
field
.
cdata
)
field_set
=
True
if
not
field_set
:
row
.
append
(
0
)
query
=
"INSERT INTO
\"
%
s
\"
VALUES(
%
s)"
%
(
filename
,
','
.
join
(
'?'
*
len
(
row
)))
c
.
execute
(
query
,
row
)
conn
.
commit
()
...
...
Please
register
or
sign in
to post a comment