mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-13 15:14:52 +09:00
inventory reports, work on #50
This commit is contained in:
1 parent
a0facf9ea8
commit
103f01b6a2
4 files changed
+93
No files matched your search
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
|
||||
This clusterio plugin is tasked to read your inventory and logistic request slots
|
||||
it will then attempt to fulfill those requests using items provided by the master
|
||||
server. There *should* be an in game GUI to toggle this.
|
||||
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
// Name of package. For display somewhere I guess.
|
||||
name: "inventoryImports",
|
||||
version: "1.0.0",
|
||||
// Binary entrypoint for plugin. Don't let it crash. Stdout is sent to game as server chat (run /c commands from here for interface)
|
||||
// Make sure its cross platform somehow.
|
||||
binary: "node",
|
||||
arguments: ["index.js"],
|
||||
description: "Clusterio plugin to fill character logistic slots with master imports",
|
||||
// We'll send everything in this file to your stdin. Beware.
|
||||
scriptOutputFileSubscription: "inventoryImports.txt",
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
const needle = require("needle");
|
||||
const isJson = require("./isJson.js");
|
||||
const pluginConfig = require("./config.js");
|
||||
|
||||
console.log("/silent-command game.print('UPSdisplay enabled')\n");
|
||||
|
||||
setInterval(function(){
|
||||
console.log("/silent-command game.write_file('UPSdisplay.txt', game.tick, true, 0)\n");
|
||||
},1000);
|
||||
var config = {};
|
||||
process.stdin.setEncoding('utf8');
|
||||
let historicalTicks = [];
|
||||
process.stdin.on('readable', () => {
|
||||
var chunk = process.stdin.read();
|
||||
if (chunk !== null && isNaN(chunk)){
|
||||
let inventory = "";
|
||||
// eval because my lua is writing a JS object instead of traditional JSON
|
||||
// this was done because I hate escaping strings and there are more quotes
|
||||
// in JSON than JS objects.
|
||||
eval("inventory = " + chunk);
|
||||
console.log(inventory);
|
||||
} else if(isJson(chunk) && JSON.parse(chunk).factorioPort){
|
||||
config = JSON.parse(chunk);
|
||||
}
|
||||
});
|
||||
process.stdin.on('end', () => {
|
||||
process.stdout.write('end');
|
||||
});
|
||||
|
||||
// poll inventories
|
||||
setInterval(function(){
|
||||
// TODO: Make it work for players other than myself, don't error when inventory does not exist, check logistic request slots
|
||||
console.log("/silent-command "+'local a=game.players["Danielv123"].get_inventory(defines.inventory.player_main).get_contents()local b=game.players["Danielv123"].get_quickbar().get_contents()local c={}local d="{inventory:{"for e,f in pairs(a)do d=d.."['+"'"+'"..e.."'+"'"+']:"..f..","end;for e,f in pairs(b)do d=d.."['+"'"+'"..e.."'+"'"+']:"..f..","end;d=d.."},requestSlots:{"for e,f in pairs(c)do d=d.."['+"'"+'"..e.."'+"'"+']:"..f..","end;d=d.."}}"game.write_file("'+pluginConfig.scriptOutputFileSubscription+'",d)');
|
||||
/*
|
||||
needle.post(config.masterIP+':'+config.masterPort+'/api/editSlaveMeta', {slaveID: config.unique, password: config.clientPassword, meta: {UPS:UPS}}, function(err, resp) {
|
||||
// success?
|
||||
});
|
||||
*/
|
||||
}, 10000);
|
||||
@@ -0,0 +1,9 @@
|
||||
module.exports = function(x){
|
||||
var isNotJson = false
|
||||
try{
|
||||
z = JSON.parse(x);
|
||||
} catch (e) {
|
||||
isNotJson = true;
|
||||
}
|
||||
return !isNotJson;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
-- Lua cheatsheet
|
||||
|
||||
/c game.write_file("test.txt",serpent.block(game.players["Danielv123"].get_quickbar().get_contents()))
|
||||
/c game.write_file("test.txt",serpent.block(game.players["Danielv123"].get_inventory(defines.inventory.player_main).get_contents()))
|
||||
|
||||
-- print JSON of entire inventory and request slots to file
|
||||
-- TODO: Get requester slot data as well
|
||||
/c
|
||||
local inventory = game.players["Danielv123"].get_inventory(defines.inventory.player_main).get_contents()
|
||||
local quickbar = game.players["Danielv123"].get_quickbar().get_contents()
|
||||
local requestSlots = {}
|
||||
local o = "{inventory:{"
|
||||
for k,v in pairs(inventory) do
|
||||
o = o.."['"..k.."']:"..v..","
|
||||
end
|
||||
for k,v in pairs(quickbar) do
|
||||
o = o.."['"..k.."']:"..v..","
|
||||
end
|
||||
o = o.."},requestSlots:{"
|
||||
for k,v in pairs(requestSlots) do
|
||||
o = o.."['"..k.."']:"..v..","
|
||||
end
|
||||
o = o.."}}"
|
||||
game.write_file("test.txt", o)
|
||||
|
||||
Reference in new issue
Block a user