mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-12 07:04:52 +09:00
Updated research dump and enabling with a fix for infinite-research
This commit is contained in:
1 parent
0dee243bf9
commit
c7cd922541
4 files changed
+54
-45
No files matched your search
@@ -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
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user