Advertisement
klassekatze

pcutable node scrape

May 19th, 2023
1,302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. var STEAM_APPS = 'F:/SteamLibrary/steamapps/';
  3.  
  4.  
  5. var fs = require('fs');
  6. //var derp = fs.readFileSync('gps.txt').toString();
  7. var parser = require('fast-xml-parser');
  8. var he = require('he');
  9.  
  10.  
  11. var options = {
  12.     attributeNamePrefix : "@_",
  13.     attrNodeName: "attr", //default is 'false'
  14.     textNodeName : "#text",
  15.     ignoreAttributes : true,
  16.     ignoreNameSpace : false,
  17.     allowBooleanAttributes : false,
  18.     parseNodeValue : true,
  19.     parseAttributeValue : false,
  20.     trimValues: true,
  21.     cdataTagName: "__cdata", //default is 'false'
  22.     cdataPositionChar: "\\c",
  23.     parseTrueNumberOnly: false,
  24.     arrayMode: false, //"strict"
  25.     attrValueProcessor: (val, attrName) => he.decode(val, {isAttributeValue: true}),//default is a=>a
  26.     tagValueProcessor : (val, tagName) => he.decode(val), //default is a=>a
  27.     stopNodes: ["parse-me-as-string"]
  28. };
  29.  
  30. var PCUTable = {};
  31.  
  32.  
  33. var dbg = true;
  34. function scanFile(file)
  35. {
  36.     if(file.indexOf('CubeBlocks') != -1 || file.indexOf('ExpansePatch_') != -1)
  37.     {
  38.         var xmldata = fs.readFileSync(file).toString();
  39.         try
  40.         {
  41.             var json = parser.parse(xmldata,options, true);
  42.             console.log('parsed '+file);
  43.             /*if(dbg && file.indexOf('ExpansePatch_AryxLynxonEpsteinDrives_LargeCubeBlocks.sbc') != -1)
  44.             {
  45.                 //var x = xml2json.toJson(xmldata);
  46.                 var result = convert.xml2js(xmldata, {compact:true,alwaysArray:true});
  47.                
  48.                 dbg=false;
  49.                 fs.writeFileSync('test.json', ''+JSON.stringify(result, null, '\t'));
  50.             }*/
  51.            
  52.             try
  53.             {
  54.                 var defs = json.Definitions.CubeBlocks.Definition;
  55.                 for(var i =0; i < defs.length; i++)
  56.                 {
  57.                     var def = defs[i];
  58.                     if('Id' in def && 'PCU' in def)
  59.                     {
  60.                         var e = def.Id.TypeId+'/'+def.Id.SubtypeId;
  61.                         if(e in PCUTable)
  62.                         {
  63.                             if(PCUTable[e] < def.PCU)PCUTable[e] = def.PCU;
  64.                         }else PCUTable[e] = def.PCU;
  65.                     }
  66.                 }
  67.             }catch(e){}
  68.            
  69.         }catch(error)
  70.         {
  71.             console.log(error.message);
  72.         }
  73.     }
  74. }
  75.  
  76. function scanFolder(directory)
  77. {
  78.     fs.readdirSync(directory).forEach(function(iter)
  79.     {
  80.         var e = directory+'/'+iter;
  81.         var s = fs.statSync(e);
  82.         if(s.isDirectory())scanFolder(e);
  83.         else if(s.isFile())scanFile(e);
  84.     });
  85. }
  86.  
  87. scanFolder(STEAM_APPS+'common/SpaceEngineers/Content/Data/CubeBlocks');
  88. scanFolder(STEAM_APPS+'workshop/content/244850');
  89.  
  90.  
  91. var dict = 'Dictionary<string, int> PCUTable = new Dictionary<string, int>();\n\n';
  92.  
  93. for(var key in PCUTable)
  94. {
  95.     var pcu = PCUTable[key];
  96.     if(pcu > 1)
  97.     {
  98.         console.log(key+' = '+pcu);
  99.         dict += 'PCUTable["'+key+'"]='+pcu+';\n';
  100.     }
  101. }
  102. fs.writeFileSync('pcutable.cs', dict);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement