From 1d0d9765bdb7ce058ab5f37c64637cebe22b3dc7 Mon Sep 17 00:00:00 2001 From: Danielv123 Date: Fri, 13 Apr 2018 20:18:47 +0200 Subject: [PATCH] researchSync: Fixed importing research --- master.js | 4 ++- sharedPlugins/researchSync/dumpResearch.lua | 5 +-- sharedPlugins/researchSync/index.js | 38 ++++++++++----------- sharedPlugins/researchSync/index.spec.js | 33 +++++++++++------- 4 files changed, 43 insertions(+), 37 deletions(-) diff --git a/master.js b/master.js index 976834b1..25b065b5 100644 --- a/master.js +++ b/master.js @@ -238,7 +238,9 @@ app.post("/api/editSlaveMeta", function(req,res) { slaves[req.body.instanceID].meta = {}; } slaves[req.body.instanceID].meta = deepmerge(slaves[req.body.instanceID].meta, req.body.meta, {clone:true}); - console.log("Updating slave: " + slaves[req.body.instanceID].mac + " : " + slaves[req.body.instanceID].serverPort+" at " + slaves[req.body.instanceID].publicIP, req.body.meta); + let metaPortion = JSON.stringify(req.body.meta); + if(metaPortion.length > 50) metaPortion = metaPortion.substring(0,20) + "..."; + console.log("Updating slave "+slaves[req.body.instanceID].instanceName+": " + slaves[req.body.instanceID].mac + " : " + slaves[req.body.instanceID].serverPort+" at " + slaves[req.body.instanceID].publicIP, metaPortion); } else { res.send("ERROR: Invalid instanceID or password") } diff --git a/sharedPlugins/researchSync/dumpResearch.lua b/sharedPlugins/researchSync/dumpResearch.lua index fd4bc2c1..970def0d 100644 --- a/sharedPlugins/researchSync/dumpResearch.lua +++ b/sharedPlugins/researchSync/dumpResearch.lua @@ -3,10 +3,7 @@ local lines = ""; for _, tech in pairs(game.forces["player"].technologies) do - local dict = {}; - dict[tech.name] = tech.researched; - lines = lines .. serpent.line(dict) .. "\n"; + lines = lines .. tech.name .. ":" .. tostring(tech.researched) .. "\n"; end game.write_file("researchSync.txt",lines) - diff --git a/sharedPlugins/researchSync/index.js b/sharedPlugins/researchSync/index.js index 4659ff5b..2b6a6bb8 100644 --- a/sharedPlugins/researchSync/index.js +++ b/sharedPlugins/researchSync/index.js @@ -35,17 +35,20 @@ class ResearchSync { let needResearch = {}; - Object.entries(allmeta).map((instance) => { - if (instance[1] == null || instance[1].research == null) return; - Object.entries(instance[1].research).map((research) => { - if (research[1] == 1) { - needResearch[research[0]] = 1; - } - }); - }) - + allmeta.forEach(instance => { + if(instance){ + let researchList = instance.research; + if(researchList){ + Object.keys(researchList).forEach(researchName => { + let researched = researchList[researchName]; + if(JSON.parse(researched)){ + needResearch[researchName] = true; + } + }); + } + } + }); var difference = this.diff(this.research, needResearch); - Object.keys(difference).forEach((key) => { if (difference[key] == 1) { let command = this.functions.enableResearch; @@ -53,6 +56,7 @@ class ResearchSync { command = command.replace("£key", key); } this.messageInterface(command); + this.messageInterface("Unlocking research: "+key) // this.messageInterface("/c game.forces['player'].technologies['" + key + "'].researched=true"); } }) @@ -91,16 +95,10 @@ class ResearchSync { } scriptOutput(data){ try { - // remove Lua table junk - let currentResearch = data.replace("=",":").replace("[","").replace("]","").replace('"', "").replace('"', ""); - // add first " before key - currentResearch = '{"' + currentResearch.slice(1); - // add second " after the key to make it a string - currentResearch = currentResearch.split(" ")[0] + '"' + currentResearch.slice(currentResearch.split(" ")[0].length); - // turn our constructed JSON string into an object - currentResearch = JSON.parse(currentResearch); - // console.log(currentResearch) - this.research = Object.assign(this.research, currentResearch); + let kv = data.split(":"); + let name = kv[0]; + let value = JSON.parse(kv[1]); + this.research[name] = value; } catch (e) { } } diff --git a/sharedPlugins/researchSync/index.spec.js b/sharedPlugins/researchSync/index.spec.js index 59027d36..261f92f3 100644 --- a/sharedPlugins/researchSync/index.spec.js +++ b/sharedPlugins/researchSync/index.spec.js @@ -47,23 +47,32 @@ describe("researchSync/index.js", ()=>{ assert(ioRecieved); }); describe(".scriptOutput(data) handles file writes from factorio", ()=>{ - it("wants a Lua table of a single research, parses and saves it", ()=>{ + it("wants a key:value pair of a single research, parses and saves it", ()=>{ let reSync = new researchSync({hi:"hello"}, console.log); let researches = [ - '{automation = false}', - '{["automation-2"] = false}', - '{["automation-3"] = false}', - '{electronics = false}', - '{["advanced-electronics"] = false}', - '{["advanced-electronics-2"] = false}', - '{["circuit-network"] = false}', - '{explosives = false}', - '{logistics = false}', - '{["logistics-2"] = false}', + 'automation:false', + 'automation-2:false', + 'automation-3:false', + 'electronics:false', + 'advanced-electronics:false', + 'advanced-electronics-2:false', + 'circuit-network:false', + 'explosives:false', + 'logistics:false', + 'logistics-2:false', + 'logistics-3:false', + 'optics:false', + 'laser:false', + 'solar-energy:false', + 'turrets:false', + 'laser-turrets:false', + 'stone-walls:false', + 'gates:false', + 'engine:false', ] researches.forEach(research => { reSync.scriptOutput(research); - assert(isFactorioCommand("/c x = "+research)); + assert(!isFactorioCommand("/c x = "+research)); }); assert(Object.keys(reSync.research).length == researches.length); });