2022-11-10 13:56:47 +03:00
|
|
|
// 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";
|
2022-11-10 14:40:49 +03:00
|
|
|
const read_cmdid_output_gc_update = "cmdid_gc_update.json";
|
|
|
|
const read_cmdid_output_gc_nofound = "cmdid_gc_nofound.json";
|
2022-11-10 13:56:47 +03:00
|
|
|
|
2022-11-10 17:07:19 +03:00
|
|
|
const write_op = "PacketOpcodes.java";
|
|
|
|
|
2022-11-10 13:56:47 +03:00
|
|
|
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";
|
|
|
|
|
2022-11-11 04:18:13 +03:00
|
|
|
const folder_packet_gc =
|
|
|
|
"../Grasscutter-Yuuki/src/main/java/emu/grasscutter/server/packet/";
|
|
|
|
|
2022-11-10 13:56:47 +03:00
|
|
|
//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);
|
2022-11-10 14:40:49 +03:00
|
|
|
save_json(data, read_cmdid_output);
|
2022-11-10 13:56:47 +03:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2022-11-10 14:40:49 +03:00
|
|
|
// create cmdid from gc which comes from PacketOpcodes
|
2022-11-10 13:56:47 +03:00
|
|
|
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")) {
|
2022-11-10 13:59:44 +03:00
|
|
|
name = name.replace("\tpublic static final int ", "");
|
2022-11-10 13:56:47 +03:00
|
|
|
// skip 0 ?
|
2022-11-10 14:40:49 +03:00
|
|
|
if (id == 0) {
|
2022-11-10 13:56:47 +03:00
|
|
|
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
|
|
|
|
);
|
2022-11-10 14:40:49 +03:00
|
|
|
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 = [];
|
|
|
|
|
2022-11-10 17:07:19 +03:00
|
|
|
var check_dunp_id = [];
|
2022-11-10 14:40:49 +03:00
|
|
|
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);
|
2022-11-10 17:07:19 +03:00
|
|
|
json_cmdid_old.forEach(function (s, index) {
|
2022-11-10 14:40:49 +03:00
|
|
|
var id = s.id;
|
2022-11-10 18:24:11 +03:00
|
|
|
var name = s.name.trim();
|
2022-11-10 14:40:49 +03:00
|
|
|
|
|
|
|
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
|
2022-11-11 04:18:13 +03:00
|
|
|
s.replace = s.name;
|
2022-11-10 14:40:49 +03:00
|
|
|
s.name = found_id.name;
|
2022-11-10 13:56:47 +03:00
|
|
|
}
|
2022-11-10 14:40:49 +03:00
|
|
|
} else {
|
2022-11-10 17:07:19 +03:00
|
|
|
console.log("Wow nofound -> ID: " + id + " | Name: " + name);
|
2022-11-10 14:40:49 +03:00
|
|
|
data_gc_cmdid_nofound.push(s);
|
|
|
|
nofound_cmdid_new++;
|
|
|
|
}
|
2022-11-10 17:07:19 +03:00
|
|
|
|
|
|
|
// find dump by id
|
|
|
|
var found_id = check_dunp_id.find((j) => j.id == id);
|
|
|
|
if (found_id) {
|
|
|
|
console.log(
|
|
|
|
"Wow dup -> ID: " +
|
|
|
|
id +
|
|
|
|
" (ADD " +
|
|
|
|
found_id.id +
|
|
|
|
") | Name Remove: " +
|
|
|
|
name +
|
|
|
|
" (ADD " +
|
|
|
|
found_id.name +
|
|
|
|
")"
|
|
|
|
);
|
|
|
|
// remove bad
|
|
|
|
json_cmdid_old.splice(index, 1);
|
|
|
|
} else {
|
|
|
|
check_dunp_id.push(s);
|
|
|
|
}
|
2022-11-10 14:40:49 +03:00
|
|
|
});
|
2022-11-10 17:07:19 +03:00
|
|
|
|
2022-11-10 18:24:11 +03:00
|
|
|
check_dunp_id = []; // clear
|
|
|
|
|
2022-11-10 17:07:19 +03:00
|
|
|
// I don't know why this happened but make sure to check again
|
2022-11-10 18:24:11 +03:00
|
|
|
var check_dunp_name = [];
|
2022-11-10 17:07:19 +03:00
|
|
|
json_cmdid_old.forEach(function (s, index) {
|
|
|
|
var id = s.id;
|
2022-11-10 18:24:11 +03:00
|
|
|
var name = s.name.trim();
|
|
|
|
|
|
|
|
var found_name = check_dunp_name.find((j) => j.name === name);
|
|
|
|
if (found_name) {
|
|
|
|
console.log(
|
|
|
|
"Wow dup -> ID: " +
|
|
|
|
id +
|
|
|
|
" (ADD " +
|
|
|
|
found_name.id +
|
|
|
|
") | Name Remove: " +
|
|
|
|
name +
|
|
|
|
" (ADD " +
|
|
|
|
found_name.name +
|
|
|
|
")"
|
|
|
|
);
|
|
|
|
// remove bad
|
|
|
|
json_cmdid_old.splice(index, 1);
|
|
|
|
} else {
|
|
|
|
check_dunp_name.push(s);
|
|
|
|
}
|
2022-11-10 17:07:19 +03:00
|
|
|
|
|
|
|
var found_id = json_cmdid_last.find((j) => j.id == id);
|
|
|
|
if (found_id) {
|
|
|
|
if (name != found_id.name) {
|
|
|
|
console.log(
|
|
|
|
"Wow why? -> ID: " + id + " | Name: " + name + " > " + found_id.name
|
|
|
|
);
|
|
|
|
s.name = found_id.name;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2022-11-10 18:24:11 +03:00
|
|
|
check_dunp_name = []; // clear
|
|
|
|
|
2022-11-10 14:40:49 +03:00
|
|
|
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);
|
2022-11-10 17:07:19 +03:00
|
|
|
save(j, file);
|
|
|
|
}
|
|
|
|
|
|
|
|
function save(raw, file) {
|
|
|
|
fs.writeFile(file, raw, "utf8", function (err) {
|
2022-11-10 14:40:49 +03:00
|
|
|
if (err) {
|
2022-11-10 17:07:19 +03:00
|
|
|
console.log("An error occured while writing to File.");
|
2022-11-10 14:40:49 +03:00
|
|
|
return console.log(err);
|
|
|
|
}
|
2022-11-11 04:18:13 +03:00
|
|
|
console.log("File has been saved: " + file);
|
2022-11-10 17:07:19 +03:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function cmdid_to_op() {
|
|
|
|
let melon =
|
|
|
|
"\
|
|
|
|
package emu.grasscutter.net.packet;\
|
|
|
|
\n\
|
|
|
|
\npublic class PacketOpcodes {\
|
|
|
|
\n// Empty\
|
|
|
|
\npublic static final int NONE = 0;\
|
|
|
|
\n\
|
|
|
|
\n// Opcodes\
|
|
|
|
";
|
|
|
|
|
|
|
|
const cmdidfix_raw = fs.readFileSync(read_cmdid_output_gc_update);
|
|
|
|
const json_cmdidfix_raw = JSON.parse(cmdidfix_raw);
|
|
|
|
json_cmdidfix_raw.forEach(function (s) {
|
|
|
|
melon += "\npublic static final int " + s.name + " = " + s.id + ";";
|
2022-11-10 13:56:47 +03:00
|
|
|
});
|
2022-11-10 17:07:19 +03:00
|
|
|
|
|
|
|
melon += "\n}";
|
|
|
|
save(melon, write_op); // use "npx prettier --write PacketOpcodes.java" for better Formatter
|
|
|
|
}
|
|
|
|
|
2022-11-11 04:18:13 +03:00
|
|
|
var index_file_packet = 0;
|
|
|
|
var index_file_packet_found = 0;
|
|
|
|
var index_file_packet_nofound = 0;
|
|
|
|
var index_file_packet_rename = 0;
|
|
|
|
var index_file_packet_norename = 0;
|
|
|
|
var index_file_packet_renamemulti = 0;
|
|
|
|
function fix_packet(p = "recv", saveit = false) {
|
|
|
|
var path = folder_packet_gc + p;
|
|
|
|
fs.readdir(path, function (err, files) {
|
|
|
|
//handling error
|
|
|
|
if (err) {
|
|
|
|
return console.log("Unable to scan directory: " + err);
|
|
|
|
}
|
|
|
|
|
|
|
|
const cmd_last = fs.readFileSync(read_cmdid_output);
|
|
|
|
const cmd_old = fs.readFileSync(read_cmdid_output_gc);
|
|
|
|
const cmdidfix_raw = fs.readFileSync(read_cmdid_output_gc_update);
|
|
|
|
const json_cmdid_last = JSON.parse(cmd_last);
|
|
|
|
const json_cmdid_old = JSON.parse(cmd_old);
|
|
|
|
const json_cmdidfix_raw = JSON.parse(cmdidfix_raw);
|
|
|
|
|
|
|
|
files.forEach(function (file) {
|
|
|
|
var f = path + "/" + file;
|
|
|
|
const read = fs.readFileSync(f);
|
|
|
|
var real = read.toString();
|
|
|
|
var r = real.match(/\(.*?\)/g).map((x) => x.replace(/[()]/g, ""));
|
|
|
|
|
|
|
|
var name;
|
|
|
|
r.forEach(function (s, index) {
|
|
|
|
if (s.match("PacketOpcodes.")) {
|
|
|
|
name = s.split("PacketOpcodes.")[1];
|
|
|
|
if (name.match(",")) {
|
|
|
|
name = name.split(",")[0];
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
if (!name) {
|
|
|
|
console.log("no found");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//var name = c[1];
|
|
|
|
|
|
|
|
//console.log(r);
|
|
|
|
|
|
|
|
var found_old = json_cmdid_old.find((j) => j.name === name);
|
|
|
|
if (found_old) {
|
|
|
|
//console.log(found_old);
|
|
|
|
index_file_packet_found++;
|
|
|
|
var found_new = json_cmdid_last.find((j) => j.id == found_old.id);
|
|
|
|
if (found_new) {
|
|
|
|
if (found_new.name != found_old.name) {
|
|
|
|
index_file_packet_rename++;
|
|
|
|
console.log(
|
|
|
|
"Found need rename: " + found_old.name + " > " + found_new.name
|
|
|
|
);
|
|
|
|
|
|
|
|
// rename all
|
|
|
|
json_cmdidfix_raw.forEach(function (s) {
|
|
|
|
var r = s.replace;
|
|
|
|
if (r) {
|
|
|
|
// var notify = HomeNewUnlockedBgmIdListNotify.Unk2700_MEBFPBDNPGO_ServerNotify
|
|
|
|
// var notify = Unk2700MEBFPBDNPGOServerNotify.HomeNewUnlockedBgmIdListNotify
|
|
|
|
|
|
|
|
// Unk2700MEBFPBDNPGOServerNotify to HomeNewUnlockedBgmIdListNotifyOuterClass
|
|
|
|
// Unk2700OGHMHELMBNNServerRsp to HomeChangeBgmRspOuterClass
|
|
|
|
|
|
|
|
// - Need More Auto like -
|
|
|
|
// addUnk2700ELJPLMIHNIP to addNewUnlockedBgmIdList (this should be found inside gen proto)
|
|
|
|
// setUnk2700BJHAMKKECEI to
|
|
|
|
if (r.match("Unk")) {
|
|
|
|
//console.log(r);
|
|
|
|
var x = r.split("_");
|
|
|
|
var tr = x.join("");
|
|
|
|
var realneed = tr;
|
|
|
|
|
|
|
|
if (tr.match("ServerNotify")) {
|
|
|
|
//console.log("found: "+tr);
|
|
|
|
let re = new RegExp(`${tr}`, "g");
|
|
|
|
tr = tr.replace(re, `${s.name}OuterClass`);
|
|
|
|
//console.log("found: " + tr);
|
|
|
|
} else if(tr.match("ServerRsp")){
|
|
|
|
let re = new RegExp(`${tr}`, "g");
|
|
|
|
tr = tr.replace(re, `${s.name}OuterClass`);
|
|
|
|
} else {
|
|
|
|
let re = new RegExp(`${tr}`, "g");
|
|
|
|
tr = tr.replace(re, s.name);
|
|
|
|
//console.log("found: " + tr);
|
|
|
|
}
|
|
|
|
let re = new RegExp(`${realneed}`, "g");
|
|
|
|
real = real.replace(re, tr);
|
|
|
|
}
|
|
|
|
let re = new RegExp(`${r}`, "g");
|
|
|
|
real = real.replace(re, s.name);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// simpel rename
|
|
|
|
//let re = new RegExp(`${found_old.name}`, "g");
|
|
|
|
//real = real.replace(re, found_new.name);
|
|
|
|
|
|
|
|
//console.log(real);
|
|
|
|
if (saveit) {
|
|
|
|
save(real, f);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
index_file_packet_norename++;
|
|
|
|
//console.log("Same name "+name);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
index_file_packet_nofound++;
|
|
|
|
console.log("No found " + name);
|
|
|
|
}
|
|
|
|
|
|
|
|
//return;
|
|
|
|
index_file_packet++;
|
|
|
|
});
|
|
|
|
console.log(
|
|
|
|
"Index file: " +
|
|
|
|
index_file_packet +
|
|
|
|
" | found " +
|
|
|
|
index_file_packet_found +
|
|
|
|
" | No found " +
|
|
|
|
index_file_packet_nofound +
|
|
|
|
" | Rename " +
|
|
|
|
index_file_packet_rename +
|
|
|
|
" | NoRename " +
|
|
|
|
index_file_packet_norename
|
|
|
|
);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2022-11-10 17:07:19 +03:00
|
|
|
function isBlank(str) {
|
|
|
|
return !!!str || /^\s*$/.test(str);
|
2022-11-10 13:56:47 +03:00
|
|
|
}
|
|
|
|
|
2022-11-11 04:18:13 +03:00
|
|
|
fix_packet("send", false);
|
|
|
|
//fix_packet("recv");
|
|
|
|
//cmdid_to_op();
|
2022-11-10 17:07:19 +03:00
|
|
|
//update_cmdid_gc();
|
2022-11-10 14:40:49 +03:00
|
|
|
//get_cmdid_gc();
|
2022-11-10 13:56:47 +03:00
|
|
|
//get_cmdid_json();
|
|
|
|
//check_gen();
|