GC-Proto/op.js

164 lines
4.6 KiB
JavaScript

// Removed useless files, to speed up build process and make it clearer.
const path = require("path");
const fs = require("fs");
const readline = require("readline");
// cmdid current version
const read_cmdid = "cmdid.csv";
const read_cmdid_output = "cmdid.json";
const read_cmdid_output_gc = "cmdid_gc.json";
const read_cmdid_output_gc_update = "cmdid_gc_update.json";
const read_cmdid_output_gc_nofound = "cmdid_gc_nofound.json";
console.log(process.cwd());
//(TODO: add input file)
// folder gc auto-generated proto
const folder_proto_gc_gen =
"../Grasscutter-Yuuki/src/generated/main/java/emu/grasscutter/net/proto/";
// file PacketOpcodes currently in use
const read_cmdid_gc =
"../Grasscutter-Yuuki/src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java";
//const read_cmdid = fs.readFileSync("cmdid.csv");
//const read_packetopcodes = fs.readFileSync("PacketOpcodes.java");
var data = [];
var data_gc = [];
var index_file_gen = 0;
var index_file_cmdid = 0;
var index_cmdid_gc = 0;
var index_cmdid_gc_out = 0;
function check_gen() {
fs.readdir(folder_proto_gc_gen, function (err, files) {
//handling error
if (err) {
return console.log("Unable to scan directory: " + err);
}
files.forEach(function (file) {
index_file_gen++;
});
console.log("file proto gen: " + index_file_gen);
});
}
// gen json file cmdid
function get_cmdid_json() {
const inputStreamcmdid = fs.createReadStream(read_cmdid);
var lineReadercmdid = readline.createInterface({
input: inputStreamcmdid,
terminal: false,
});
lineReadercmdid.on("line", function (line) {
var config = line.split(",");
var subdata = new Object();
subdata["name"] = config[0];
subdata["id"] = parseInt(config[1]);
data.push(subdata);
index_file_cmdid++;
});
lineReadercmdid.on("close", function () {
console.log("found cmd id " + index_file_cmdid);
save_json(data, read_cmdid_output);
});
}
// create cmdid from gc which comes from PacketOpcodes
function get_cmdid_gc() {
const inputStreamcmdid = fs.createReadStream(read_cmdid_gc);
var lineReadercmdid = readline.createInterface({
input: inputStreamcmdid,
terminal: false,
});
lineReadercmdid.on("line", function (line) {
var config = line.split(" = ");
var name = config[0];
var id = parseInt(config[1]);
if (name.includes("public static final int")) {
name = name.replace("\tpublic static final int ", "");
// skip 0 ?
if (id == 0) {
return;
}
var subdata = new Object();
subdata["name"] = name;
subdata["id"] = id;
data_gc.push(subdata);
//console.log(name);
index_cmdid_gc++;
} else {
index_cmdid_gc_out++;
}
});
lineReadercmdid.on("close", function () {
console.log(
"found cmd id " + index_cmdid_gc + " | no need " + index_cmdid_gc_out
);
save_json(data_gc, read_cmdid_output_gc);
});
}
var found_cmdid_new = 0;
var nofound_cmdid_new = 0;
var rename_name_cmdid = 0;
var noneed_rename_name_cmdid = 0;
var data_gc_cmdid_nofound = [];
function update_cmdid_gc() {
const cmd_last = fs.readFileSync(read_cmdid_output);
const cmd_old = fs.readFileSync(read_cmdid_output_gc);
const json_cmdid_last = JSON.parse(cmd_last);
const json_cmdid_old = JSON.parse(cmd_old);
json_cmdid_old.forEach(function (s) {
var id = s.id;
var name = s.name;
var found_id = json_cmdid_last.find((j) => j.id == id);
if (found_id) {
found_cmdid_new++;
if (name == found_id.name) {
noneed_rename_name_cmdid++;
} else {
rename_name_cmdid++;
//console.log("Wow rename -> ID: "+id+" | Name: "+name+" > "+found_id.name);
// rename json_cmdid_old
s.name = found_id.name;
}
} else {
//console.log("Wow nofound -> ID: " + id + " | Name: " + name);
data_gc_cmdid_nofound.push(s);
nofound_cmdid_new++;
}
});
console.log(
"found " +
found_cmdid_new +
" | no found " +
nofound_cmdid_new +
" | rename " +
rename_name_cmdid +
" | noneed rename " +
noneed_rename_name_cmdid
);
save_json(json_cmdid_old, read_cmdid_output_gc_update);
save_json(data_gc_cmdid_nofound, read_cmdid_output_gc_nofound);
}
// save json
function save_json(raw, file) {
var j = JSON.stringify(raw, null, 4);
fs.writeFile(file, j, "utf8", function (err) {
if (err) {
console.log("An error occured while writing JSON Object to File.");
return console.log(err);
}
console.log("JSON file has been saved.");
});
}
update_cmdid_gc();
//get_cmdid_gc();
//get_cmdid_json();
//check_gen();