提交subgame插件
This commit is contained in:
76
dist/package/PackageScript.js
vendored
Normal file
76
dist/package/PackageScript.js
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.PackageScript = void 0;
|
||||
const fs_1 = __importDefault(require("fs"));
|
||||
const path_1 = __importDefault(require("path"));
|
||||
const xxtea_node_1 = __importDefault(require("xxtea-node"));
|
||||
const pako_1 = __importDefault(require("pako"));
|
||||
const FileUtils_1 = __importDefault(require("../utils/FileUtils"));
|
||||
const SCRIPT_PACKAGE = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', '..', 'template', 'SCRIPT_PACKAGE.js')).toString();
|
||||
const SETTING_GOURPLIST_REGEXP = /groupList:\s*(\[['",a-zA-Z0-9\s]+])/mg;
|
||||
const SETTING_COLLISIONMATRIX_REGEXP = /collisionMatrix:\s*(\[[\[\],truefalse\s]+\])/mg;
|
||||
function PackageScript(key, buildPath, isolate = false, xxtea, ungzip = false) {
|
||||
const bundleDir = path_1.default.join(buildPath, 'assets', key);
|
||||
if (fs_1.default.existsSync(path_1.default.join(bundleDir, 'config.subgame.json'))) {
|
||||
console.warn(`Package [${key}] script packaged`);
|
||||
return;
|
||||
}
|
||||
console.log(`Package [${key}] find config`);
|
||||
const configPath = FileUtils_1.default.find(bundleDir, /config\.([a-zA-Z0-9\.]+\.)?json/);
|
||||
fs_1.default.renameSync(configPath, path_1.default.join(bundleDir, 'config.subgame.json'));
|
||||
console.log(`Package [${key}] config finded, renames`);
|
||||
console.log(`Package [${key}] find index script`);
|
||||
const scriptPath = FileUtils_1.default.find(bundleDir, /index\.([a-zA-Z0-9\.]+\.)?js/);
|
||||
const scriptEncrypt = path_1.default.extname(scriptPath) === '.jsc';
|
||||
let scriptBuffer = fs_1.default.readFileSync(scriptPath);
|
||||
let script;
|
||||
if (scriptEncrypt) {
|
||||
script = decryptJSC(scriptBuffer, xxtea, ungzip);
|
||||
console.log(`Package [${key}] index script decrypt result: ${script.substring(0, 100)}...`);
|
||||
}
|
||||
else {
|
||||
script = scriptBuffer.toString();
|
||||
}
|
||||
if (isolate) {
|
||||
console.log(`Package [${key}] find settings`);
|
||||
const settingPath = FileUtils_1.default.find(path_1.default.join(buildPath, 'src'), /settings\.([a-zA-Z0-9\.]+\.)?js/);
|
||||
const settingsBuffer = fs_1.default.readFileSync(settingPath);
|
||||
let settings;
|
||||
if (path_1.default.extname(settingPath) === '.jsc') {
|
||||
settings = decryptJSC(settingsBuffer, xxtea, ungzip);
|
||||
console.log(`Package [${key}] settings script decrypt result: ${settings.substring(0, 100)}...`);
|
||||
}
|
||||
else
|
||||
settings = settingsBuffer.toString();
|
||||
const groupList = SETTING_GOURPLIST_REGEXP.exec(settings)[1];
|
||||
const collisionMatrix = SETTING_COLLISIONMATRIX_REGEXP.exec(settings)[1];
|
||||
console.log(`Package [${key}] settings finded, saved`);
|
||||
script = SCRIPT_PACKAGE
|
||||
.replace('"%{subgame_key}"', key)
|
||||
.replace('"%{subgame_content}"', script)
|
||||
.replace('"%{subgame_group_list}"', groupList)
|
||||
.replace('"%{subgame_collision_matrix}"', collisionMatrix);
|
||||
console.log(`Package [${key}] class isolate`);
|
||||
}
|
||||
if (scriptEncrypt)
|
||||
fs_1.default.writeFileSync(scriptPath, encryptJS(script, xxtea, ungzip));
|
||||
else
|
||||
fs_1.default.writeFileSync(scriptPath, script);
|
||||
fs_1.default.renameSync(scriptPath, path_1.default.join(bundleDir, 'index.subgame' + path_1.default.extname(scriptPath)));
|
||||
console.log(`Package [${key}] index script packaged`);
|
||||
}
|
||||
exports.PackageScript = PackageScript;
|
||||
const decryptJSC = (data, key, ungzip = true) => {
|
||||
let res = xxtea_node_1.default.decrypt(data, xxtea_node_1.default.toBytes(key));
|
||||
res = pako_1.default.ungzip(res);
|
||||
return xxtea_node_1.default.toString(res);
|
||||
};
|
||||
const encryptJS = (data, key, ungzip = true) => {
|
||||
const res = pako_1.default.gzip(xxtea_node_1.default.toBytes(data), { level: 6 });
|
||||
const result = xxtea_node_1.default.encrypt(res, xxtea_node_1.default.toBytes(key));
|
||||
console.dir(result);
|
||||
return result;
|
||||
};
|
||||
Reference in New Issue
Block a user