aboutsummaryrefslogtreecommitdiff
path: root/util/minetestmapper.py
diff options
context:
space:
mode:
Diffstat (limited to 'util/minetestmapper.py')
-rwxr-xr-xutil/minetestmapper.py73
1 files changed, 69 insertions, 4 deletions
diff --git a/util/minetestmapper.py b/util/minetestmapper.py
index e13a1bdc3..c7ec0774e 100755
--- a/util/minetestmapper.py
+++ b/util/minetestmapper.py
@@ -85,6 +85,13 @@ def int_to_hex4(i):
return "%04X" % i
+def getBlockAsInteger(p):
+ return p[2]*16777216 + p[1]*4096 + p[0]
+
+def getIntegerAsBlock(i):
+ return i%4096, int(i/4096)%4096, int(i/16777216)%4096
+
+
def limit(i, l, h):
if(i > h):
i = h
@@ -169,6 +176,30 @@ zlist = []
# List all sectors to memory and calculate the width and heigth of the
# resulting picture.
+
+conn = None
+cur = None
+if os.path.exists(path + "map.sqlite"):
+ import sqlite3
+ conn = sqlite3.connect(path + "map.sqlite")
+ cur = conn.cursor()
+
+ cur.execute("SELECT `pos` FROM `blocks`")
+ while True:
+ r = cur.fetchone()
+ if not r:
+ break
+
+ x, y, z = getIntegerAsBlock (r[0])
+
+ if x < sector_xmin or x > sector_xmax:
+ continue
+ if z < sector_zmin or z > sector_zmax:
+ continue
+
+ xlist.append(x)
+ zlist.append(z)
+
if os.path.exists(path + "sectors2"):
for filename in os.listdir(path + "sectors2"):
for filename2 in os.listdir(path + "sectors2/" + filename):
@@ -305,6 +336,16 @@ for n in range(len(xlist)):
sectortype = ""
+ if cur:
+ ps = getBlockAsInteger((xpos, 0, zpos))
+ cur.execute("SELECT `pos` FROM `blocks` WHERE `pos`>=? AND `pos`<?", (ps, ps + 4096))
+ while True:
+ r = cur.fetchone()
+ if not r:
+ break
+ pos = getIntegerAsBlock(r[0])[1]
+ ylist.append(pos)
+ sectortype = "sqlite"
try:
for filename in os.listdir(path + "sectors/" + sector1):
if(filename != "meta"):
@@ -316,7 +357,7 @@ for n in range(len(xlist)):
except OSError:
pass
- if sectortype != "old":
+ if sectortype == "":
try:
for filename in os.listdir(path + "sectors2/" + sector2):
if(filename != "meta"):
@@ -348,10 +389,21 @@ for n in range(len(xlist)):
yhex = int_to_hex4(ypos)
filename = ""
- if sectortype == "old":
- filename = path + "sectors/" + sector1 + "/" + yhex.lower()
+ if sectortype == "sqlite":
+ ps = getBlockAsInteger((xpos, ypos, zpos))
+ cur.execute("SELECT `data` FROM `blocks` WHERE `pos`==? LIMIT 1", (ps,))
+ r = cur.fetchone()
+ if not r:
+ continue
+ filename = "mtm_tmp"
+ f = file(filename, 'wb')
+ f.write(r[0])
+ f.close()
else:
- filename = path + "sectors2/" + sector2 + "/" + yhex.lower()
+ if sectortype == "old":
+ filename = path + "sectors/" + sector1 + "/" + yhex.lower()
+ else:
+ filename = path + "sectors2/" + sector2 + "/" + yhex.lower()
f = file(filename, "rb")
@@ -374,6 +426,16 @@ for n in range(len(xlist)):
if len(pixellist) > 0:
for (ypos, filename) in ylist2:
+ ps = getBlockAsInteger((xpos, ypos, zpos))
+ cur.execute("SELECT `data` FROM `blocks` WHERE `pos`==? LIMIT 1", (ps,))
+ r = cur.fetchone()
+ if not r:
+ continue
+ filename = "mtm_tmp"
+ f = file(filename, 'wb')
+ f.write(r[0])
+ f.close()
+
f = file(filename, "rb")
version = ord(f.read(1))
@@ -495,5 +557,8 @@ if drawplayers:
except OSError:
pass
+if os.path.isfile("mtm_tmp"):
+ os.remove("mtm_tmp")
+
print "Saving"
im.save(output)