mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-14 23:24:52 +09:00
Updated research sync to handle infinite science and hopefully stop it from apply same research in a loop annoying everyone
This commit is contained in:
1 parent
1f8ac50950
commit
0afe35b67c
3 files changed
+40
-21
No files matched your search
@@ -3,7 +3,11 @@
|
||||
local data = {};
|
||||
|
||||
for _, tech in pairs(game.forces["player"].technologies) do
|
||||
table.insert(data, tech.name .. ":" .. tostring(tech.researched) .. ":" .. tostring(tech.level));
|
||||
if tech.prototype.max_level == 4294967295 then
|
||||
table.insert(data, tech.name .. ":" .. tostring(tech.researched) .. ":" .. tostring(tech.level) .. ":true");
|
||||
else
|
||||
table.insert(data, tech.name .. ":" .. tostring(tech.researched) .. ":" .. tostring(tech.level) .. ":false");
|
||||
end
|
||||
end
|
||||
|
||||
game.write_file("researchSync.txt", table.concat(data, "\n"), false, 0)
|
||||
@@ -1,14 +1,13 @@
|
||||
/silent-command
|
||||
if game.forces['player'].technologies['{tech_name}'] then
|
||||
if game.forces['player'].technologies['{tech_name}'].researched ~= {tech_researched} then
|
||||
game.forces['player'].technologies['{tech_name}'].researched = {tech_researched}
|
||||
end
|
||||
if game.forces['player'].technologies['{tech_name}'].level ~= {tech_level} then
|
||||
if 1 == {tech_infinite} then
|
||||
game.forces['player'].technologies['{tech_name}'].level = {tech_level}
|
||||
else
|
||||
game.forces['player'].technologies['{tech_name}'].researched = true
|
||||
end
|
||||
script.raise_event(defines.events.on_research_finished, {research=game.forces['player'].technologies['{tech_name}'], by_script=true})
|
||||
game.play_sound({path="utility/research_completed"})
|
||||
if game.forces['player'].technologies['{tech_name}'].researched == false then
|
||||
if 1 == {tech_infinite} then
|
||||
game.print("Technology {tech_name} synced at level {tech_level}")
|
||||
else
|
||||
game.print("Technology {tech_name} synced")
|
||||
|
||||
@@ -11,9 +11,11 @@ class ResearchSync {
|
||||
this.research = {};
|
||||
|
||||
setInterval(() => {
|
||||
this.pollResearch();
|
||||
setTimeout(this.doSync.bind(this), 2000);
|
||||
}, extras.researchSyncPollInterval || 5000);
|
||||
this.pollResearch();
|
||||
setTimeout(this.doSync.bind(this), 5000);
|
||||
},
|
||||
extras.researchSyncPollInterval || 30000
|
||||
);
|
||||
}
|
||||
|
||||
pollResearch() {
|
||||
@@ -44,19 +46,25 @@ class ResearchSync {
|
||||
let researchList = slaveData[instanceKey].meta.research;
|
||||
if(researchList){
|
||||
Object.keys(researchList).forEach(researchName => {
|
||||
if (isNaN(researchList[researchName].researched) || isNaN(researchList[researchName].level)) {
|
||||
if (isNaN(researchList[researchName].researched) || isNaN(researchList[researchName].level) || isNaN(researchList[researchName].infinite)) {
|
||||
return;
|
||||
}
|
||||
if (needResearch.hasOwnProperty(researchName)) {
|
||||
if (needResearch[researchName].researched === 0) {
|
||||
needResearch[researchName].researched = parseInt(researchList[researchName].researched);
|
||||
}
|
||||
if (needResearch[researchName].level < parseInt(researchList[researchName].level)) {
|
||||
if (needResearch[researchName].infinite === 1
|
||||
&& needResearch[researchName].level < parseInt(researchList[researchName].level))
|
||||
{
|
||||
needResearch[researchName].level = parseInt(researchList[researchName].level);
|
||||
} else if (needResearch[researchName].researched === 0
|
||||
&& parseInt(researchList[researchName].researched) === 1)
|
||||
{
|
||||
needResearch[researchName].researched = 1
|
||||
}
|
||||
}
|
||||
else {
|
||||
needResearch[researchName] = {researched: parseInt(researchList[researchName].researched), level: parseInt(researchList[researchName].level)};
|
||||
} else {
|
||||
needResearch[researchName] = {
|
||||
researched: parseInt(researchList[researchName].researched),
|
||||
level: parseInt(researchList[researchName].level),
|
||||
infinite: parseInt(researchList[researchName].infinite)
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -71,6 +79,7 @@ class ResearchSync {
|
||||
command = command.replace("{tech_name}", key);
|
||||
command = command.replace("{tech_researched}", difference[key].researched);
|
||||
command = command.replace("{tech_level}", difference[key].level);
|
||||
command = command.replace("{tech_infinite}", difference[key].infinite);
|
||||
}
|
||||
this.messageInterface(command);
|
||||
console.log('Unlocking '+ key + ': ' + (difference[key].researched === 0 ? 'false' : 'true') + ' and level ' + difference[key].level + ', was '+ (this.research[key].researched === 0 ? 'false' : 'true') + ' at level ' + this.research[key].level);
|
||||
@@ -93,9 +102,13 @@ class ResearchSync {
|
||||
let diff = {};
|
||||
Object.keys(localResearch).forEach((key) => {
|
||||
if (remoteResearch.hasOwnProperty(key)) {
|
||||
if ((localResearch[key].researched === 0 && localResearch[key].researched !== remoteResearch[key].researched) || localResearch[key].level < remoteResearch[key].level) {
|
||||
if (!isNaN(remoteResearch[key].researched) && !isNaN(remoteResearch[key].level)) {
|
||||
diff[key] = {researched: remoteResearch[key].researched, level: remoteResearch[key].level};
|
||||
if (
|
||||
(localResearch[key].infinite === 0 && localResearch[key].researched === 0 && remoteResearch[key].researched === 1)
|
||||
||
|
||||
(localResearch[key].infinite === 1 && localResearch[key].level < remoteResearch[key].level)
|
||||
) {
|
||||
if (!isNaN(remoteResearch[key].researched) && !isNaN(remoteResearch[key].level) && !isNaN(remoteResearch[key].infinite)) {
|
||||
diff[key] = {researched: remoteResearch[key].researched, level: remoteResearch[key].level, infinite: remoteResearch[key].infinite};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -120,8 +133,11 @@ class ResearchSync {
|
||||
? 0
|
||||
: 1);
|
||||
let level = parseInt(kv[2]);
|
||||
let infinite = ('true' !== kv[3]
|
||||
? 0
|
||||
: 1);
|
||||
if (!isNaN(level) && !isNaN(researched)) {
|
||||
this.research[name] = {researched: researched, level: level};
|
||||
this.research[name] = {researched: researched, level: level, infinite: infinite};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user