Guest User

importAMCMap.js

a guest
Oct 10th, 2016
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. function readZones(filepath) {
  3.     var doc = new ActiveXObject("Msxml.DOMDocument");
  4.     doc.async = false;
  5.     doc.resolveExternals = false;
  6.     doc.validateOnParse = false;
  7.     doc.load(filepath);
  8.     return doc;
  9. }
  10.  
  11. total_rooms = 0;
  12. total_zones = 0;
  13. function loadAMCZonesFile(filepath) {
  14.     var zones = readZones(filepath).selectNodes('Zone');
  15.     if (zones == null || zones.length == 0) {
  16.         jmc.Showme("Can't find any zone in " + filepath);
  17.         return;
  18.     }
  19.    
  20.     for (var i = 0; i < zones.length; i++) {
  21.         var zone_name = zones[i].getAttribute("Name");
  22.         var rooms = zones[i].selectNodes('Rooms/Room');
  23.         if (rooms == null || rooms.length == 0)
  24.             continue;
  25.         total_zones++;
  26.         total_rooms += rooms.length;
  27.         jmc.Showme("Zone " + zone_name + " [" + filepath + "]: " + rooms.length + " room(s) (" + total_rooms + " total)");
  28.         for (var j = 0; j < rooms.length; j++) {
  29.             var id = rooms[j].getAttribute("Id");
  30.             var name = rooms[j].getAttribute("Name");
  31.            
  32.             var descr = "";
  33.             //var descr_node = rooms[j].selectSingleNode('Description');
  34.             //if (descr_node != null)
  35.             //    descr = descr_node.text;
  36.            
  37.             jmc.parse(jmc.CommandChar + "mapper add room " + id + " {" + name + "} {" + descr + "} {} {} {}");
  38.            
  39.             var exits_nodes = rooms[j].selectNodes('Exits/RoomExit');
  40.             if (exits_nodes != null)
  41.                 for (var k = 0; k < exits_nodes.length; k++) {
  42.                     var to_id = exits_nodes[k].getAttribute("RoomId");
  43.                     var cmd = exits_nodes[k].getAttribute("Direction");
  44.                     jmc.parse(jmc.CommandChar + "mapper add exit " + id + " {" + cmd.toLowerCase() + "} " + to_id);
  45.                 }
  46.         }
  47.     }
  48. }
  49.  
  50. function importAMCMap(dir) {
  51.     total_rooms = 0;
  52.     total_zones = 0;
  53.    
  54.     jmc.parse(jmc.CommandChar + "mapper clear");
  55.     jmc.parse(jmc.CommandChar + "mapper add direction {север,с,north,n} 0 1 0 {юг,ю,south,s}");
  56.     jmc.parse(jmc.CommandChar + "mapper add direction {восток,в,east,e} 1 0 0 {запад,з,west,w}");
  57.     jmc.parse(jmc.CommandChar + "mapper add direction {вверх,вв,up,u} 1 1 0 {вниз,вн,down,d}");
  58.  
  59.     FSO = new ActiveXObject("Scripting.FileSystemObject")
  60.     var folder = FSO.GetFolder("./" + dir);
  61.     var it_files = new Enumerator(folder.Files);
  62.     var mask = /(.*\.xml.*)/;
  63.     for (; !it_files.atEnd(); it_files.moveNext()) {
  64.         var match = mask.exec(it_files.item());
  65.         if (match != null) {
  66.             loadAMCZonesFile(match[1]);
  67.         }
  68.     }
  69.     jmc.Showme("Total: " + total_rooms + " room(s) in " + total_zones + " zone(s)");
  70. }
  71.  
  72. /* usage:
  73.    - copy importAMCMap.js to ./settings
  74.    - copy decryptet (A5Ub5T7j5cYg40v) XML-files from MapGenerator/MapResults/ to ./amc
  75.    - execute in jmc:
  76.      #use importAMCMap.js
  77.      #scri importAMCMap("amc")
  78.      #mapper write amc.map
  79.    - in case some zones have names in wrong encoding, correct contents of appropriate xml manually (some could have "windows-1251" at first line, but actual encoding is koi8-r in all cases)
  80. */
Add Comment
Please, Sign In to add comment