Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Read map data
- mk.devolve = function(data) {
- var xml
- var out = []
- var start = new Date().getTime()
- try {
- // xml = JSON.parse(data), would that this worked simply
- // bit of a hack!
- out = data.split('<environments>')
- //console.log(out)
- var env = out[1]
- out = out[0]
- //console.log(out)
- out = out.split('<rooms>')
- var rms = out[1]
- var ars = out[0]
- ars = ars.split('<areas>')
- ars = ars[1]
- // processing
- ars = ars.split('\\n')
- ars.pop()
- ars.pop()
- ars.shift()
- rms = rms.replace('</rooms>\n','')
- rms = rms.split('\\n')
- env = env.split('\\n')
- env.pop() // ''
- env.pop() // map
- env.pop() // environments
- env.shift()
- out = {}
- out.envs = mk.parseEnvs(env)
- out.areas = mk.parseAreas(ars)
- out.rooms = mk.parseRooms(rms)
- out.composite = mk.composite(out)
- mk.map = out
- // log(mapdb.map) // debugging
- var stop = new Date().getTime()
- var diff = Math.floor(stop - start)
- console.log('Performance[:] ' + Math.floor((stop - start)) + ' ms')
- mk.display('(map): Map loading done in ' + diff + ' ms!')
- start = new Date().getTime()
- // generate the hash for rooms and areas
- mk.map.hashrooms = mk.hash()
- mk.map.hashareas = mk.areahash()
- stop = new Date().getTime()
- diff = Math.floor(stop - start)
- mk.display('(map): Hash calculated for areas and rooms in ' + diff + ' ms.')
- } catch (err) {
- console.log(err)
- display_notice('(map): ' + err)
- }
- }
- mk.parseEnvs = function(env) {
- var idRegex = new RegExp(/id="\d+"/)
- var nameRegex = new RegExp(/name=".*?"/)
- var clRegex = new RegExp(/color="\d+"/)
- var hclRegex = new RegExp(/htmlcolor=".*?"/)
- var out = []
- for (var i=0; i<env.length; i++) {
- var e = env[i].replace(/\\/g,'')
- var t = {}
- var m = idRegex.exec(e)
- m = m[0]
- m = m.replace('id=','')
- m = m.replace('"','')
- m = parseInt(m)
- var n = nameRegex.exec(e)
- n = n[0]
- n = n.replace(/\"\$/,'')
- n = n.replace('name="','')
- var o = clRegex.exec(e)
- o = o[0]
- o = o.replace('color=','')
- o = o.replace('"','')
- o = parseInt(o)
- var p = hclRegex.exec(e)
- p = p[0]
- p = p.replace('htmlcolor=','')
- p = p.replace('"','')
- t.id = m
- t.name = n
- t.color = o
- t.htmlc = p
- out.push(t)
- }
- return out }
- mk.composite = function(arr) {
- var out = {}
- var a = arr.areas
- for (var i=0; i<a.length; i++) {
- var key = String(a[i].id)
- out[key] = {}
- out[key].name = a[i].name
- out[key].adjs = []
- }
- out.Unspecified = {}
- var r = arr.rooms
- for (var k in r) {
- var a = r[k].area || 'Unspecified'
- a = String(a)
- var v = String(r[k].id)
- var e = mk.queryAreaChange(r[k]) // compile area exits this room for its area meta
- if (out[a]) {
- out[a][v] = mk.clone(r[k])
- // merge area exits
- var es = out[a].adjs || []
- out[a].adjs = mk.uniarray(es.concat(e))
- } else {
- out.Unspecified[v] = mk.clone(r[k])
- }
- }
- return out
- }
- mk.queryAreaChange = function(thisroom) {
- var out = []
- var e = thisroom.exits
- for (var k in e) {
- if (e[k].tgarea != 0) {
- out.push(e[k].tgarea)
- }
- }
- return out
- }
- mk.parseRooms = function(rms) {
- var idRegex = new RegExp(/id="\d+"/)
- var areaRegex = new RegExp(/area="\d+"/)
- var titleRegex = new RegExp(/title=".*?"/)
- var envRegex = new RegExp(/environment="\d+"/)
- var xRegex = new RegExp(/x="(?:-)*\d+"/)
- var yRegex = new RegExp(/y="(?:-)*\d+"/)
- var zRegex = new RegExp(/z="(?:-)*\d+"/)
- var dirRegex = new RegExp(/direction=".*?"/)
- var tarRegex = new RegExp(/target="\d+"/)
- var doorRegex = new RegExp(/door="\d+"/)
- var tgareaRegex = new RegExp(/tgarea="\d+"/)
- var hiddenRegex = new RegExp(/hidden="\d+"/)
- var out = {}
- var r = {}
- // r.exits = []
- r.exits = {}
- for (var i=0; i<rms.length; i++) {
- var str = rms[i]
- str = str.replace(/\\/g,'')
- str = str.trim()
- // first line
- if (str.match('room id')) {
- var m = idRegex.exec(str)
- m = m[0]
- m = m.replace('id=','')
- m = m.replace('"','')
- m = parseInt(m)
- var n = areaRegex.exec(str)
- n = n[0]
- n = n.replace('area=','')
- n = n.replace('"','')
- n = parseInt(n)
- var o = titleRegex.exec(str)
- o = o[0]
- o = o.replace(/\"\$/,'')
- o = o.replace('title="','')
- var p = envRegex.exec(str)
- p = p[0]
- p = p.replace('environment=','')
- p = p.replace('"','')
- p = parseInt(p)
- r.id = m
- r.area = n
- r.title = o
- r.env = p
- }
- // second line
- if (str.match('coord x')) {
- var m = xRegex.exec(str)
- if (m) { m = m[0]; m = m.replace('x=',''); m = m.replace('"',''); m = parseInt(m) } else {
- m = 0
- }
- var n = yRegex.exec(str)
- if (n) { n = n[0]; n = n.replace('y=',''); n = n.replace('"',''); n = parseInt(n) } else {
- n = 0
- }
- var o = zRegex.exec(str)
- if (o) { o = o[0]; o = o.replace('z=',''); o = o.replace('"',''); o = parseInt(o) } else {
- o = 0
- }
- r.x = m
- r.y = n
- r.z = o
- }
- // exits
- if (str.match('exit direction')) {
- var m = dirRegex.exec(str)
- m = m[0]
- m = m.replace(/\"\$/,'')
- m = m.replace('direction="','')
- var n = tarRegex.exec(str)
- n = n[0]
- n = n.replace('target=','')
- n = n.replace('"','')
- n = parseInt(n)
- var o = doorRegex.exec(str)
- if (o) { o = o[0]; o = o.replace('door=',''); o = o.replace('"',''); o = parseInt(o) } else {
- o = 0
- }
- var p = tgareaRegex.exec(str)
- if (p) { p = p[0]; p = p.replace('tgarea=',''); p = p.replace('"',''); p = parseInt(p) } else {
- p = 0
- }
- var q = hiddenRegex.exec(str)
- if (q) { q = q[0]; q = q.replace('hidden=',''); q = q.replace('"',''); q = parseInt(q) } else {
- q = 0
- }
- // r.exits.push({dir: m, target: n, door : o, tgarea : p})
- // against better instinct!
- r.exits[m] = {dir: m, target: n, door: o, tgarea: p}
- }
- // last line
- if (str == '</room>') {
- // push it out
- var n = String(r.id)
- out[n] = mk.clone(r)
- r = {}
- r.exits = {}
- }
- }
- return out
- }
- mk.parseAreas = function(ars) {
- var idRegex = new RegExp(/id="\d+"/)
- var nameRegex = new RegExp(/name=".*?"/)
- var out = []
- for (var i=0; i<ars.length; i++) {
- if (ars[i] == '') {} else {
- var e = ars[i].replace(/\\/g,'')
- var t = {}
- var m = idRegex.exec(e)
- m = m[0]
- m = m.replace('id=','')
- m = m.replace('"','')
- m = parseInt(m)
- var n = nameRegex.exec(e)
- n = n[0]
- n = n.replace(/\"\$/,'')
- n = n.replace('name="','')
- t.id = m
- t.name = n
- out.push(t) }
- }
- return out
- }
- mk.hash = function() {
- var t = {}
- for (var k in mk.map.rooms) {
- var p = mk.map.rooms[k].exits
- var o = {}
- for (var j in p) {
- o[p[j].target] = 1
- }
- t[k] = o
- }
- return t
- }
- mk.areahash = function() {
- var t = {}
- for (var k in mk.map.composite) {
- var p = mk.map.composite[k].adjs
- var o = {}
- for (var j in p) {
- o[p[j]] = 1
- }
- t[k] = o
- }
- return t
- }
- mk.acquire()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement