267 lines
10 KiB
JavaScript
267 lines
10 KiB
JavaScript
console.log("如果你能看到这个声明,证明你正在使用本地版本进行实验");
|
|
|
|
// ===== WebSocket 捕获钩子 (注入在游戏加载前) =====
|
|
/*(function() {
|
|
if (window.__ws_hooked__)
|
|
return;
|
|
window.__ws_hooked__ = true;
|
|
window.__ws_capture__ = [];
|
|
function toHex(b) {
|
|
var bytes = new Uint8Array(b);
|
|
var h = [];
|
|
for (var i = 0; i < bytes.length; i += 16) {
|
|
var c = bytes.slice(i, Math.min(i + 16, bytes.length));
|
|
var hp = Array.from(c).map(function(b) {
|
|
return b.toString(16).padStart(2, '0')
|
|
}).join(' ');
|
|
var ap = Array.from(c).map(function(b) {
|
|
return (b >= 32 && b < 127) ? String.fromCharCode(b) : '.'
|
|
}).join('');
|
|
h.push(i.toString(16).padStart(8, '0') + ' ' + hp.padEnd(48) + ' ' + ap)
|
|
}
|
|
return h.join('\n')
|
|
}
|
|
function toAB(d) {
|
|
if (d instanceof ArrayBuffer)
|
|
return d;
|
|
if (ArrayBuffer.isView(d))
|
|
return d.buffer.slice(d.byteOffset, d.byteOffset + d.byteLength);
|
|
if (typeof d === 'string')
|
|
return new TextEncoder().encode(d).buffer;
|
|
return d
|
|
}
|
|
var OW = window.WebSocket;
|
|
function HW(url, p) {
|
|
var ws = p ? new OW(url,p) : new OW(url);
|
|
var id = window.__ws_capture__.length;
|
|
var info = {
|
|
id: id,
|
|
url: url,
|
|
openTime: null,
|
|
messages: []
|
|
};
|
|
window.__ws_capture__.push(info);
|
|
var os = ws.send.bind(ws);
|
|
ws.send = function(d) {
|
|
var ab = toAB(d);
|
|
info.messages.push({
|
|
dir: 'send',
|
|
t: Date.now(),
|
|
sz: ab.byteLength,
|
|
hx: toHex(ab),
|
|
buf: ab
|
|
});
|
|
console.log('[WS#' + id + '] >>> ' + ab.byteLength + 'B:\n' + toHex(ab));
|
|
return os(d)
|
|
}
|
|
;
|
|
var oom = null;
|
|
Object.defineProperty(ws, 'onmessage', {
|
|
get: function() {
|
|
return oom
|
|
},
|
|
set: function(fn) {
|
|
oom = fn;
|
|
ws.addEventListener('message', function(e) {
|
|
var ab = toAB(e.data);
|
|
info.messages.push({
|
|
dir: 'recv',
|
|
t: Date.now(),
|
|
sz: ab.byteLength,
|
|
hx: toHex(ab),
|
|
buf: ab
|
|
});
|
|
console.log('[WS#' + id + '] <<< ' + ab.byteLength + 'B:\n' + toHex(ab))
|
|
})
|
|
}
|
|
});
|
|
ws.addEventListener('open', function() {
|
|
info.openTime = Date.now();
|
|
console.log('[WS#' + id + '] 已连接')
|
|
});
|
|
ws.addEventListener('close', function(e) {
|
|
console.log('[WS#' + id + '] 关闭 code=' + e.code)
|
|
});
|
|
ws.addEventListener('error', function(e) {
|
|
console.log('[WS#' + id + '] 错误', e)
|
|
});
|
|
return ws
|
|
}
|
|
HW.CONNECTING = OW.CONNECTING;
|
|
HW.OPEN = OW.OPEN;
|
|
HW.CLOSING = OW.CLOSING;
|
|
HW.CLOSED = OW.CLOSED;
|
|
HW.prototype = OW.prototype;
|
|
window.WebSocket = HW;
|
|
window.__dl_ws = function() {
|
|
var d = window.__ws_capture__.map(function(w) {
|
|
return {
|
|
id: w.id,
|
|
url: w.url,
|
|
t: w.openTime,
|
|
m: w.messages.map(function(m) {
|
|
var b = new Uint8Array(m.buf);
|
|
var s = '';
|
|
for (var i = 0; i < b.length; i++)
|
|
s += String.fromCharCode(b[i]);
|
|
return {
|
|
d: m.dir,
|
|
t: m.t,
|
|
s: m.sz,
|
|
h: m.hx,
|
|
b: btoa(s)
|
|
}
|
|
})
|
|
}
|
|
});
|
|
var bl = new Blob([JSON.stringify(d, null, 2)],{
|
|
type: 'application/json'
|
|
});
|
|
var u = URL.createObjectURL(bl);
|
|
var a = document.createElement('a');
|
|
a.href = u;
|
|
a.download = 'ws_capture_' + Date.now() + '.json';
|
|
a.click();
|
|
URL.revokeObjectURL(u);
|
|
console.log('[WS] 已下载 ' + d.length + ' 个连接')
|
|
}
|
|
;
|
|
console.log('[WS Hook] 已加载,用 __dl_ws() 下载')
|
|
})();*/
|
|
|
|
|
|
var __script_base_url__ = (typeof document !== "undefined" && document.currentScript && document.currentScript.src) ? document.currentScript.src.replace(/[^\/]+$/, "") : "./";
|
|
!function(t, n) {
|
|
"object" == typeof exports && "object" == typeof module ? module.exports = n() : "function" == typeof define && define.amd ? define([], n) : "object" == typeof exports ? exports.Launcher = n() : t.Launcher = n()
|
|
}(globalThis, async () => {
|
|
|
|
// ===== 切割版模块加载器 =====
|
|
window.__modules__ = {};
|
|
console.log("加载决定");
|
|
console.log(window.__modules__);
|
|
const __base_url__ = window.__script_base_url__ || './';
|
|
|
|
// 6.1 加载资源模块 (从 resources.json 批量注册)
|
|
const __resource_resp__ = await fetch(__base_url__ + 'unpacked/resources.json');
|
|
if (!__resource_resp__.ok)
|
|
throw new Error('resources.json load failed: HTTP ' + __resource_resp__.status);
|
|
const __resource_data__ = await __resource_resp__.json();
|
|
const __resource_map__ = __resource_data__.resourceMap;
|
|
for (const __id__ in __resource_map__) {
|
|
if (!Object.prototype.hasOwnProperty.call(__resource_map__, __id__))
|
|
continue;
|
|
const __path__ = __resource_map__[__id__];
|
|
const __id_num__ = Number(__id__);
|
|
window.__modules__[__id_num__] = (function(__p__) {
|
|
return (t, n, i) => {
|
|
"use strict";
|
|
t.exports = i.p + __p__;
|
|
}
|
|
;
|
|
}
|
|
)(__path__);
|
|
}
|
|
|
|
// 6.2 加载代码模块 (fetch + eval 独立文件)
|
|
const __code_ids__ = [806, 905, 1510, 1901, 3535, 3569, 7426, 7552, 7793, 9345, 9539, 9963, 10032, 10283, 10849, 12218, 13431, 13532, 13754, 14766, 15152, 15330, 15831, 16100, 17259, 17323, 18334, 19074, 19487, 21300, 21973, 24635, 24923, 25377, 26482, 27736, 28485, 29518, 29545, 29554, 30285, 31509, 31584, 31620, 31908, 32088, 36659, 36734, 37036, 37504, 38335, 40293, 41164, 42920, 43319, 44740, 44794, 45555, 45686, 47243, 48576, 50824, 51233, 51400, 51887, 52943, 54199, 55088, 55520, 55920, 56077, 57128, 57328, 58309, 59131, 59411, 60273, 60824, 61378, 61430, 61860, 63383, 64280, 64477, 65201, 66610, 67222, 69682, 70130, 70298, 71105, 71426, 72834, 73932, 74897, 75453, 76074, 77249, 77672, 78231, 78931, 79763, 80397, 80693, 81886, 82347, 84441, 85183, 85196, 85667, 85745, 87072, 88693, 89613, 89679, 89803, 90225, 90875, 92980, 94090, 94965, 96480, 97556, 97675, 99295, 99527];
|
|
await Promise.all(__code_ids__.map(async (__id__) => {
|
|
const __padded__ = typeof __id__ === 'number' ? String(__id__).padStart(5, '0') : __id__;
|
|
const __url__ = __base_url__ + 'unpacked/module_' + __padded__ + '.js';
|
|
const __resp__ = await fetch(__url__);
|
|
if (!__resp__.ok)
|
|
throw new Error('Module ' + __id__ + ' load failed: HTTP ' + __resp__.status + ' @ ' + __url__);
|
|
const __code__ = await __resp__.text();
|
|
(0,
|
|
eval)(__code__);
|
|
}
|
|
));
|
|
|
|
console.log(window.__modules__);
|
|
var __webpack_modules__ = window.__modules__;
|
|
|
|
// ===== 原 webpack runtime (一字未改) =====
|
|
;var __webpack_module_cache__ = {};
|
|
function __webpack_require__(t) {
|
|
var n = __webpack_module_cache__[t];
|
|
if (void 0 !== n)
|
|
return n.exports;
|
|
var i = __webpack_module_cache__[t] = {
|
|
id: t,
|
|
loaded: !1,
|
|
exports: {}
|
|
};
|
|
return __webpack_modules__[t].call(i.exports, i, i.exports, __webpack_require__),
|
|
i.loaded = !0,
|
|
i.exports
|
|
}
|
|
// ===== __webpack_require__ 由 module_13431.js 内部捕获到 window.__wp_require__ =====
|
|
__webpack_require__.n = t => {
|
|
var n = t && t.__esModule ? () => t.default : () => t;
|
|
return __webpack_require__.d(n, {
|
|
a: n
|
|
}),
|
|
n
|
|
}
|
|
,
|
|
__webpack_require__.d = (t, n) => {
|
|
for (var i in n)
|
|
__webpack_require__.o(n, i) && !__webpack_require__.o(t, i) && Object.defineProperty(t, i, {
|
|
enumerable: !0,
|
|
get: n[i]
|
|
})
|
|
}
|
|
,
|
|
__webpack_require__.g = function() {
|
|
if ("object" == typeof globalThis)
|
|
return globalThis;
|
|
try {
|
|
return this || new Function("return this")()
|
|
} catch (t) {
|
|
if ("object" == typeof window)
|
|
return window
|
|
}
|
|
}(),
|
|
__webpack_require__.hmd = t => ((t = Object.create(t)).children || (t.children = []),
|
|
Object.defineProperty(t, "exports", {
|
|
enumerable: !0,
|
|
set: () => {
|
|
throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: " + t.id)
|
|
}
|
|
}),
|
|
t),
|
|
__webpack_require__.o = (t, n) => Object.prototype.hasOwnProperty.call(t, n),
|
|
__webpack_require__.r = t => {
|
|
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {
|
|
value: "Module"
|
|
}),
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: !0
|
|
})
|
|
}
|
|
,
|
|
__webpack_require__.p = "/play/",
|
|
__webpack_require__(76074),
|
|
__webpack_require__(13431),
|
|
__webpack_require__(26482);
|
|
var __webpack_exports__ = __webpack_require__(78231);
|
|
|
|
// ===== 最后加载 hornet_bundle (自定义工具) =====
|
|
try {
|
|
const __hornet_url__ = __base_url__ + 'unpacked/hornet_bundle.js';
|
|
const __hornet_resp__ = await fetch(__hornet_url__);
|
|
if (__hornet_resp__.ok) {
|
|
const __hornet_code__ = await __hornet_resp__.text();
|
|
(0, eval)(__hornet_code__);
|
|
console.log('[Hornet] bundle 已加载');
|
|
} else {
|
|
console.warn('[Hornet] bundle 加载失败: HTTP ' + __hornet_resp__.status);
|
|
}
|
|
} catch(__hornet_err__) {
|
|
console.error('[Hornet] bundle 加载异常:', __hornet_err__);
|
|
}
|
|
|
|
return __webpack_exports__;
|
|
}
|
|
)
|
|
//# sourceMappingURL=main.b7114b43.js.map
|