Updated research dump and enabling with a fix for infinite-research

This commit is contained in:
psihius committed 2018-04-17 13:57:36 +03:00
1 parent 0dee243bf9
commit c7cd922541
4 files changed
+54 -45

No files matched your search

+3 -3
View File
@@ -1,9 +1,9 @@
/silent-command
local lines = "";
local data = {};
for _, tech in pairs(game.forces["player"].technologies) do
lines = lines .. tech.name .. ":" .. tostring(tech.researched) .. "\n";
table.insert(data, tech.name .. ":" .. tostring(tech.researched) .. ":" .. tostring(tech.level));
end
game.write_file("researchSync.txt",lines)
game.write_file("researchSync.txt", table.concat(data, "\n"))
@@ -1,5 +1,6 @@
/silent-command
if game.forces['player'].technologies['£key'] then
game.forces['player'].technologies['£key'].researched=true
game.print("researcSync enabled research: £key")
if game.forces['player'].technologies['{tech_name}'] then
game.forces['player'].technologies['{tech_name}}'].researched={tech_researched}
game.forces['player'].technologies['{tech_name}}'].level={tech_level}
game.print("researcSync enabled research: {tech_name} to level {tech_level}")
end
+32 -24
View File
@@ -33,7 +33,7 @@ class ResearchSync {
this.messageInterface("got error when calling getSlaveMeta", resp.statusCode, resp.body);
return;
}
var allmeta = JSON.parse(resp.body);
let allmeta = JSON.parse(resp.body);
let needResearch = {};
@@ -42,27 +42,34 @@ class ResearchSync {
let researchList = instance.research;
if(researchList){
Object.keys(researchList).forEach(researchName => {
let researched = researchList[researchName];
if(JSON.parse(researched)){
needResearch[researchName] = true;
}
if (needResearch.hasOwnProperty(researchName)) {
if (needResearch[researchName][0] !== false) {
needResearch[researchName][0] = researchList[researchName][0];
}
if (needResearch[researchName][1] < researchList[researchName][1]) {
needResearch[researchName][1] = researchList[researchName][1];
}
}
else {
needResearch[researchName] = researchList[researchName];
}
});
}
}
});
var difference = this.diff(this.research, needResearch);
let difference = this.filterResearchDiff(this.research, needResearch);
Object.keys(difference).forEach((key) => {
if (difference[key] == 1) {
let command = this.functions.enableResearch;
while(command.includes("£key")){
command = command.replace("£key", key);
}
this.messageInterface(command);
this.messageInterface("Unlocking research: "+key)
// this.messageInterface("/c game.forces['player'].technologies['" + key + "'].researched=true");
let command = this.functions.enableResearch;
while(command.includes("{tech_name}")){
command = command.replace("{tech_name}", key);
command = command.replace("{tech_researched}", difference[key][0]);
command = command.replace("{tech_level}", difference[key][1]);
}
})
if(Object.keys(difference).length > 0){
this.messageInterface(command);
this.messageInterface("Unlocking research: "+key);
// this.messageInterface("/c game.forces['player'].technologies['" + key + "'].researched=true");
});
if(Object.keys(difference).length > 0){
this.messageInterface("difference from other servers", JSON.stringify(difference));
}
needle.post(this.config.masterIP + ':' + this.config.masterPort + '/api/editSlaveMeta', {
@@ -75,11 +82,11 @@ class ResearchSync {
});
}
diff(array1, array2) {
var diff = {};
Object.keys(array2).forEach((element) => {
if (array2[element] != array1[element]){
diff[element] = array2[element];
filterResearchDiff(localResearch, remoteResearch) {
let diff = {};
Object.keys(localResearch).forEach((key) => {
if (localResearch[key][0] != remoteResearch[key][0] || localResearch[key][1] != remoteResearch[key][1]){
diff[key] = remoteResearch[key];
}
});
return diff;
@@ -99,11 +106,12 @@ class ResearchSync {
try {
let kv = data.split(":");
let name = kv[0];
let value = JSON.parse(kv[1]);
this.research[name] = value;
let researched = JSON.parse(kv[1]) === 'true' ? true : false;
let level = parseInt(kv[2]);
this.research[name] = [researched, level];
} catch (e) {
}
}
}
module.exports = ResearchSync;
module.exports = ResearchSync;
+15 -15
View File
@@ -9,28 +9,28 @@ describe("researchSync/index.js", ()=>{
assert.equal(typeof researchSync, "function");
});
describe("class researchSync()", ()=>{
it(".diff(object1, object2) returns key:value pairs that exist in object2 but not object1", ()=>{
it(".filterResearchDiff(object1, object2) returns research that needs enabling on the local instance", ()=>{
let reSync = new researchSync({}, function(){});
let obj1 = {
a:"str",
b:123,
c:console.log,
d:"apple cake",
}
a:[true, 0],
b:[true, 0],
c:[false, 0],
d:[false, 10],
};
let obj2 = {
a:"str",
b:9999,
c:console.log,
e:"truthy",
}
assert(typeof reSync.diff == "function");
a:[true, 0],
b:[true, 1],
c:[false, 0],
e:[false, 50],
};
assert(typeof reSync.filterResearchDiff == "function");
let diffResult = reSync.diff(obj1, obj2);
let diffResult = reSync.filterResearchDiff(obj1, obj2);
assert(diffResult.a === undefined);
assert(diffResult.b === 9999);
assert(diffResult.b === [true, 1]);
assert(diffResult.d === undefined);
assert(diffResult.e === "truthy");
assert(diffResult.e === [false, 50]);
});
it(".pollResearch() dumps a long Lua command", ()=>{
let reSync = new researchSync({}, io);