Advertisement
Guest User

Untitled

a guest
Sep 4th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.19 KB | None | 0 0
  1.  
  2. // Read map data
  3. mk.devolve = function(data) {
  4. var xml
  5. var out = []
  6. var start = new Date().getTime()
  7. try {
  8. // xml = JSON.parse(data), would that this worked simply
  9. // bit of a hack!
  10. out = data.split('<environments>')
  11. //console.log(out)
  12. var env = out[1]
  13. out = out[0]
  14. //console.log(out)
  15. out = out.split('<rooms>')
  16. var rms = out[1]
  17. var ars = out[0]
  18. ars = ars.split('<areas>')
  19. ars = ars[1]
  20.  
  21. // processing
  22. ars = ars.split('\\n')
  23. ars.pop()
  24. ars.pop()
  25. ars.shift()
  26. rms = rms.replace('</rooms>\n','')
  27. rms = rms.split('\\n')
  28.  
  29. env = env.split('\\n')
  30. env.pop() // ''
  31. env.pop() // map
  32. env.pop() // environments
  33. env.shift()
  34.  
  35. out = {}
  36. out.envs = mk.parseEnvs(env)
  37. out.areas = mk.parseAreas(ars)
  38. out.rooms = mk.parseRooms(rms)
  39. out.composite = mk.composite(out)
  40. mk.map = out
  41. // log(mapdb.map) // debugging
  42. var stop = new Date().getTime()
  43. var diff = Math.floor(stop - start)
  44. console.log('Performance[:] ' + Math.floor((stop - start)) + ' ms')
  45. mk.display('(map): Map loading done in ' + diff + ' ms!')
  46. start = new Date().getTime()
  47. // generate the hash for rooms and areas
  48. mk.map.hashrooms = mk.hash()
  49. mk.map.hashareas = mk.areahash()
  50. stop = new Date().getTime()
  51. diff = Math.floor(stop - start)
  52. mk.display('(map): Hash calculated for areas and rooms in ' + diff + ' ms.')
  53. } catch (err) {
  54. console.log(err)
  55. display_notice('(map): ' + err)
  56. }
  57. }
  58.  
  59. mk.parseEnvs = function(env) {
  60. var idRegex = new RegExp(/id="\d+"/)
  61. var nameRegex = new RegExp(/name=".*?"/)
  62. var clRegex = new RegExp(/color="\d+"/)
  63. var hclRegex = new RegExp(/htmlcolor=".*?"/)
  64. var out = []
  65. for (var i=0; i<env.length; i++) {
  66. var e = env[i].replace(/\\/g,'')
  67. var t = {}
  68. var m = idRegex.exec(e)
  69. m = m[0]
  70. m = m.replace('id=','')
  71. m = m.replace('"','')
  72. m = parseInt(m)
  73. var n = nameRegex.exec(e)
  74. n = n[0]
  75. n = n.replace(/\"\$/,'')
  76. n = n.replace('name="','')
  77. var o = clRegex.exec(e)
  78. o = o[0]
  79. o = o.replace('color=','')
  80. o = o.replace('"','')
  81. o = parseInt(o)
  82. var p = hclRegex.exec(e)
  83. p = p[0]
  84. p = p.replace('htmlcolor=','')
  85. p = p.replace('"','')
  86. t.id = m
  87. t.name = n
  88. t.color = o
  89. t.htmlc = p
  90. out.push(t)
  91. }
  92. return out }
  93.  
  94. mk.composite = function(arr) {
  95. var out = {}
  96. var a = arr.areas
  97. for (var i=0; i<a.length; i++) {
  98. var key = String(a[i].id)
  99. out[key] = {}
  100. out[key].name = a[i].name
  101. out[key].adjs = []
  102. }
  103. out.Unspecified = {}
  104. var r = arr.rooms
  105. for (var k in r) {
  106. var a = r[k].area || 'Unspecified'
  107. a = String(a)
  108. var v = String(r[k].id)
  109. var e = mk.queryAreaChange(r[k]) // compile area exits this room for its area meta
  110. if (out[a]) {
  111. out[a][v] = mk.clone(r[k])
  112. // merge area exits
  113. var es = out[a].adjs || []
  114. out[a].adjs = mk.uniarray(es.concat(e))
  115. } else {
  116. out.Unspecified[v] = mk.clone(r[k])
  117. }
  118. }
  119. return out
  120. }
  121.  
  122. mk.queryAreaChange = function(thisroom) {
  123. var out = []
  124. var e = thisroom.exits
  125. for (var k in e) {
  126. if (e[k].tgarea != 0) {
  127. out.push(e[k].tgarea)
  128. }
  129. }
  130. return out
  131. }
  132.  
  133. mk.parseRooms = function(rms) {
  134. var idRegex = new RegExp(/id="\d+"/)
  135. var areaRegex = new RegExp(/area="\d+"/)
  136. var titleRegex = new RegExp(/title=".*?"/)
  137. var envRegex = new RegExp(/environment="\d+"/)
  138. var xRegex = new RegExp(/x="(?:-)*\d+"/)
  139. var yRegex = new RegExp(/y="(?:-)*\d+"/)
  140. var zRegex = new RegExp(/z="(?:-)*\d+"/)
  141. var dirRegex = new RegExp(/direction=".*?"/)
  142. var tarRegex = new RegExp(/target="\d+"/)
  143. var doorRegex = new RegExp(/door="\d+"/)
  144. var tgareaRegex = new RegExp(/tgarea="\d+"/)
  145. var hiddenRegex = new RegExp(/hidden="\d+"/)
  146. var out = {}
  147. var r = {}
  148. // r.exits = []
  149. r.exits = {}
  150. for (var i=0; i<rms.length; i++) {
  151. var str = rms[i]
  152. str = str.replace(/\\/g,'')
  153. str = str.trim()
  154. // first line
  155. if (str.match('room id')) {
  156. var m = idRegex.exec(str)
  157. m = m[0]
  158. m = m.replace('id=','')
  159. m = m.replace('"','')
  160. m = parseInt(m)
  161. var n = areaRegex.exec(str)
  162. n = n[0]
  163. n = n.replace('area=','')
  164. n = n.replace('"','')
  165. n = parseInt(n)
  166. var o = titleRegex.exec(str)
  167. o = o[0]
  168. o = o.replace(/\"\$/,'')
  169. o = o.replace('title="','')
  170. var p = envRegex.exec(str)
  171. p = p[0]
  172. p = p.replace('environment=','')
  173. p = p.replace('"','')
  174. p = parseInt(p)
  175. r.id = m
  176. r.area = n
  177. r.title = o
  178. r.env = p
  179. }
  180. // second line
  181. if (str.match('coord x')) {
  182. var m = xRegex.exec(str)
  183. if (m) { m = m[0]; m = m.replace('x=',''); m = m.replace('"',''); m = parseInt(m) } else {
  184. m = 0
  185. }
  186. var n = yRegex.exec(str)
  187. if (n) { n = n[0]; n = n.replace('y=',''); n = n.replace('"',''); n = parseInt(n) } else {
  188. n = 0
  189. }
  190. var o = zRegex.exec(str)
  191. if (o) { o = o[0]; o = o.replace('z=',''); o = o.replace('"',''); o = parseInt(o) } else {
  192. o = 0
  193. }
  194. r.x = m
  195. r.y = n
  196. r.z = o
  197. }
  198.  
  199. // exits
  200. if (str.match('exit direction')) {
  201. var m = dirRegex.exec(str)
  202. m = m[0]
  203. m = m.replace(/\"\$/,'')
  204. m = m.replace('direction="','')
  205. var n = tarRegex.exec(str)
  206. n = n[0]
  207. n = n.replace('target=','')
  208. n = n.replace('"','')
  209. n = parseInt(n)
  210. var o = doorRegex.exec(str)
  211. if (o) { o = o[0]; o = o.replace('door=',''); o = o.replace('"',''); o = parseInt(o) } else {
  212. o = 0
  213. }
  214. var p = tgareaRegex.exec(str)
  215. if (p) { p = p[0]; p = p.replace('tgarea=',''); p = p.replace('"',''); p = parseInt(p) } else {
  216. p = 0
  217. }
  218. var q = hiddenRegex.exec(str)
  219. if (q) { q = q[0]; q = q.replace('hidden=',''); q = q.replace('"',''); q = parseInt(q) } else {
  220. q = 0
  221. }
  222. // r.exits.push({dir: m, target: n, door : o, tgarea : p})
  223. // against better instinct!
  224. r.exits[m] = {dir: m, target: n, door: o, tgarea: p}
  225. }
  226.  
  227. // last line
  228. if (str == '</room>') {
  229. // push it out
  230. var n = String(r.id)
  231. out[n] = mk.clone(r)
  232. r = {}
  233. r.exits = {}
  234. }
  235. }
  236.  
  237. return out
  238. }
  239.  
  240. mk.parseAreas = function(ars) {
  241. var idRegex = new RegExp(/id="\d+"/)
  242. var nameRegex = new RegExp(/name=".*?"/)
  243. var out = []
  244. for (var i=0; i<ars.length; i++) {
  245. if (ars[i] == '') {} else {
  246. var e = ars[i].replace(/\\/g,'')
  247. var t = {}
  248. var m = idRegex.exec(e)
  249. m = m[0]
  250. m = m.replace('id=','')
  251. m = m.replace('"','')
  252. m = parseInt(m)
  253. var n = nameRegex.exec(e)
  254. n = n[0]
  255. n = n.replace(/\"\$/,'')
  256. n = n.replace('name="','')
  257. t.id = m
  258. t.name = n
  259. out.push(t) }
  260. }
  261. return out
  262. }
  263.  
  264. mk.hash = function() {
  265. var t = {}
  266. for (var k in mk.map.rooms) {
  267. var p = mk.map.rooms[k].exits
  268. var o = {}
  269. for (var j in p) {
  270. o[p[j].target] = 1
  271. }
  272. t[k] = o
  273. }
  274. return t
  275. }
  276.  
  277. mk.areahash = function() {
  278. var t = {}
  279. for (var k in mk.map.composite) {
  280. var p = mk.map.composite[k].adjs
  281. var o = {}
  282. for (var j in p) {
  283. o[p[j]] = 1
  284. }
  285. t[k] = o
  286. }
  287. return t
  288. }
  289.  
  290. mk.acquire()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement