fix: 构建后编辑器打不开

This commit is contained in:
unanmed 2025-09-02 14:41:24 +08:00
parent 0b611c897a
commit 0d98a6ce57
9 changed files with 190 additions and 72 deletions

View File

@ -1,9 +1,7 @@
import { Mota } from '@user/entry-data';
import * as Client from '@motajs/client';
import * as ClientBase from '@motajs/client-base';
import * as Common from '@motajs/common';
import * as LegacyClient from '@motajs/legacy-client';
import * as LegacyCommon from '@motajs/legacy-common';
import * as LegacySystem from '@motajs/legacy-system';
import * as LegacyUI from '@motajs/legacy-ui';
import * as Render from '@motajs/render';
@ -26,9 +24,7 @@ export function create() {
Mota.register('@motajs/client', Client);
Mota.register('@motajs/client-base', ClientBase);
Mota.register('@motajs/common', Common);
Mota.register('@motajs/legacy-client', LegacyClient);
Mota.register('@motajs/legacy-common', LegacyCommon);
Mota.register('@motajs/legacy-system', LegacySystem);
Mota.register('@motajs/legacy-ui', LegacyUI);
Mota.register('@motajs/render', Render);

View File

@ -1,4 +1,6 @@
import { Mota } from './mota';
import * as Common from '@motajs/common';
import * as LegacyCommon from '@motajs/legacy-common';
import * as DataBase from '@user/data-base';
import * as DataFallback from '@user/data-fallback';
import * as DataState from '@user/data-state';
@ -8,6 +10,8 @@ import * as LegacyPluginData from '@user/legacy-plugin-data';
export function create() {
DataBase.loading.once('registered', createModule);
Mota.register('@motajs/common', Common);
Mota.register('@motajs/legacy-common', LegacyCommon);
Mota.register('@user/data-base', DataBase);
Mota.register('@user/data-fallback', DataFallback);
Mota.register('@user/data-state', DataState);

View File

@ -610,16 +610,6 @@ export async function loadCompressedResource() {
});
const list: CompressedLoadList = JSON.parse(data.data);
// const d = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d;
// 对于bgm直接按照原来的方式加载即可
// d.main.bgms.forEach(v => {
// const res = LoadTask.add('audio', `audio/${v}`);
// Mota.r(() => {
// res.once('loadStart', res => {
// Mota.require('var', 'bgm').add(`bgms.${v}`, res.resource!);
// });
// });
// });
// 对于区域内容按照zip格式进行加载然后解压处理
const autotiles: Partial<Record<AllIdsOf<'autotile'>, HTMLImageElement>> =
{};
@ -716,7 +706,7 @@ export async function loadCompressedResource() {
document.fonts.add(
new FontFace(name.slice(0, -4), font)
);
} else if (usage === 'sound') {
} else if (usage === 'sound' && main.mode === 'play') {
const { soundPlayer } = Mota.require(
'@user/client-modules'
);

View File

@ -173,17 +173,7 @@ editor.prototype.init = function (callback) {
editor.airwallImg = new Image();
editor.airwallImg.src = './project/materials/airwall.png';
var xhr = new XMLHttpRequest();
xhr.open('GET', 'index.html', true);
xhr.onload = function () {
if (xhr.status != 200) {
alert("HTTP " + xhr.status);
return;
}
var str = xhr.response.split('<!-- injection -->');
if (str.length != 3) window.onerror("index.html格式不正确");
editor.dom.gameInject.innerHTML = str[1];
var execute = function() {
var cvs = ['bg', 'event', 'event2', 'fg'].map(function(e) {
return document.getElementById(e);
});
@ -197,7 +187,7 @@ editor.prototype.init = function (callback) {
var mainScript = document.createElement('script');
mainScript.onload = function() {
var useCompress = main.useCompress;
main.useCompress = false;
@ -303,17 +293,14 @@ editor.prototype.init = function (callback) {
mainScript.id = "mainScript";
mainScript.src = "main.js";
editor.dom.gameInject.appendChild(mainScript);
};
xhr.onabort = xhr.ontimeout = xhr.onerror = function () {
alert("无法访问index.html");
}
editor.config = new editor_config();
editor.config.load(function() {
var theme = editor.config.get('theme', 'editor_color');
document.getElementById('color_css').href = '_server/css/' + theme + '.css';
editor.dom.editorTheme.value = theme;
xhr.send();
execute();
});
}

View File

@ -450,7 +450,151 @@
</div>
<!-- <script>/* -->
<div id="gameInject" style='display: none'></div>
<div id="gameInject" style='display: none'>
<div id='gameGroup'>
<p id='mainTips'>请稍候...</p>
<img id='musicBtn'>
<div id='startPanel'>
<div id='startTop'>
<div id='startTopProgressBar'>
<div id='startTopProgress'></div>
</div>
<p id='startTopLoadTips'>资源即将开始加载</p>
<p id='startTopHint'>HTML5魔塔游戏平台享受更多魔塔游戏<br />https://h5mota.com/</p>
</div>
<img id='startBackground'>
<p id='startLogo'></p>
<div id='startButtonGroup'>
<div id='startButtons'>
<span class='startButton' id='playGame'>开始游戏</span>
<span class='startButton' id='loadGame'>载入游戏</span>
<span class='startButton' id='replayGame'>录像回放</span>
</div>
<div id='levelChooseButtons'></div>
</div>
</div>
<div id='floorMsgGroup'>
<p id='logoLabel'></p>
<p id='versionLabel'></p>
<p id='floorNameLabel'></p>
</div>
<div id='statusBar' class="clearfix">
<div class="status" id="floorCol">
<img id="img-floor">
<p class='statusLabel statusText' id='floor'></p>
</div>
<div class="status" id="nameCol">
<img id="img-name">
<p class='statusLabel statusText' id='name'></p>
</div>
<div class="status" id="lvCol">
<img id="img-lv">
<p class='statusLabel statusText' id='lv'></p>
</div>
<div class="status" id='hpmaxCol'>
<img id="img-hpmax">
<p class='statusLabel statusText' id='hpmax'></p>
</div>
<div class="status" id='hpCol'>
<img id="img-hp">
<p class='statusLabel statusText' id='hp'></p>
</div>
<div class="status" id='manaCol'>
<img id="img-mana">
<p class='statusLabel statusText' id='mana'></p>
</div>
<div class="status" id='atkCol'>
<img id="img-atk">
<p class='statusLabel statusText' id='atk'></p>
</div>
<div class="status" id='defCol'>
<img id="img-def">
<p class='statusLabel statusText' id='def'></p>
</div>
<div class="status" id="mdefCol">
<img id="img-mdef">
<p class='statusLabel statusText' id='mdef'></p>
</div>
<div class="status" id="moneyCol">
<img id="img-money">
<p class='statusLabel statusText' id='money'></p>
</div>
<div class="status" id="expCol">
<img id="img-exp">
<p class='statusLabel statusText' id='exp'></p>
</div>
<div class="status" id="upCol">
<img id="img-up">
<p class='statusLabel statusText' id='up'></p>
</div>
<div class="status" id="skillCol">
<img id="img-skill">
<p class='statusLabel statusText' id='skill' style='font-style: normal'></p>
</div>
<div class="status" id='keyCol'>
<span class='statusLabel' id='yellowKey' style="color:#FFCCAA"></span>
<span class='statusLabel' id='blueKey' style="color:#AAAADD"></span>
<span class='statusLabel' id='redKey' style="color:#FF8888"></span>
<span class='statusLabel' id='greenKey' style="color:#88FF88"></span>
</div>
<div class="status" id='pzfCol'>
<span class='statusLabel' id='pickaxe' style="color: #BC6E27"></span>
<span class='statusLabel' id='bomb' style="color: #FA14B9"></span>
<span class='statusLabel' id='fly' style="color: #8DB600"></span>
</div>
<div class="status" id="debuffCol">
<span class='statusLabel' id='poison' style="color: #AFFCA8;"></span>
<span class='statusLabel' id='weak' style="color: #FECCD0;"></span>
<span class='statusLabel' id='curse' style="color: #C2F4E7;"></span>
</div>
<!-- 状态栏canvas化 -->
<canvas id="statusCanvas" style="position: absolute; left: 0; top: 0;"></canvas>
</div>
<div id="toolBar" class="clearfix">
<img class="tools" id='img-book'>
<img class="tools" id='img-fly'>
<img class="tools" id='img-toolbox'>
<img class="tools" id='img-keyboard'>
<img class="tools" id='img-shop'>
<img class="tools" id='img-save'>
<img class="tools" id='img-load'>
<img class="tools" id='img-settings'>
<img class="tools" id='img-btn1' style='display:none'>
<img class="tools" id='img-btn2' style='display:none'>
<img class="tools" id='img-btn3' style='display:none'>
<img class="tools" id='img-btn4' style='display:none'>
<img class="tools" id='img-btn5' style='display:none'>
<img class="tools" id='img-btn6' style='display:none'>
<img class="tools" id='img-btn7' style='display:none'>
<img class="tools" id='img-btn8' style='display:none'>
<p class="statusLabel tools" id="hard"></p>
</div>
<div id="gameDraw">
<div id="gif"></div>
<div id="gif2"></div>
<canvas class='gameCanvas' id='bg'></canvas>
<canvas class='gameCanvas' id='event'></canvas>
<canvas class='gameCanvas' id='hero'></canvas>
<canvas class='gameCanvas' id='event2'></canvas>
<canvas class='gameCanvas' id='fg'></canvas>
<canvas class='gameCanvas' id='damage'></canvas>
<canvas class='gameCanvas' id='animate'></canvas>
<canvas class='gameCanvas' id='curtain'></canvas>
<canvas class='gameCanvas' id='ui'></canvas>
<canvas class='gameCanvas' id='data'>此浏览器不支持HTML5</canvas>
<div id="next"></div>
</div>
</div>
<div id='inputDiv'>
<div id='inputDialog'>
<p id="inputMessage">请输入文字...</p>
<input id='inputBox' type="text" autocomplete="off" />
<button id='inputYes'>确定</button>
<button id='inputNo'>取消</button>
</div>
</div>
</div>
<!-- UI预览 & 地图选点 -->
<div id='uieventDiv' style='display: none'>

View File

@ -267,10 +267,13 @@ function core() {
////// 初始化 //////
core.prototype.init = async function (coreData, callback) {
if (main.replayChecking) {
console.log(`core.init should be called when not replay checking!`);
}
this._forwardFuncs();
for (var key in coreData) core[key] = coreData[key];
await this._loadGameProcess();
await this._loadPluginAsync();
this._init_flags();
this._init_platform();
this._init_others();
@ -290,10 +293,21 @@ core.prototype.init = async function (coreData, callback) {
}
}
if (main.replayChecking || main.mode === 'editor') {
core.loader._load(function () {
if (main.mode === 'editor') {
if (main.scriptCompress) {
const { LoadTask, loadCompressedResource } = Mota.require(
'@motajs/legacy-common'
);
await loadCompressedResource();
await LoadTask.load();
core.loader._loadMaterials_afterLoad();
core._afterLoadResources(callback);
});
Mota.require('@user/data-base').loading.emit('loaded');
} else {
core.loader._load(function () {
core._afterLoadResources(callback);
});
}
} else {
if (main.renderLoaded)
Mota.require('@motajs/legacy-ui').fixedUi.open('load', {
@ -312,7 +326,6 @@ core.prototype.init = async function (coreData, callback) {
core.prototype.initSync = function (coreData, callback) {
this._forwardFuncs();
for (var key in coreData) core[key] = coreData[key];
this._loadGameProcessSync();
this._loadPluginSync();
this._init_flags();
this._init_platform();
@ -323,42 +336,21 @@ core.prototype.initSync = function (coreData, callback) {
});
};
core.prototype._loadPluginAsync = async function () {
if (!main.useCompress) {
await main.loadScript(`project/plugins.js?v=${main.version}`);
}
this._initPlugins();
};
core.prototype._loadPluginSync = function () {
if (main.useCompress) main.loadMod('project', 'project', () => 0);
else {
main.pureData.forEach(v => main.loadMod('project', v, () => 0));
}
this._initPlugins();
};
core.prototype._initPlugins = function () {
for (const [key, value] of Object.entries(
plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1
)) {
try {
value?.call(plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1);
} catch (e) {
console.error(`Plugin '${key}' init failed.`);
console.error(e);
}
}
};
core.prototype._loadGameProcess = async function () {
// 加载游戏进程代码
if (main.pluginUseCompress && main.replayChecking) {
await main.loadScript(`project/processG.min.js?v=${main.version}`);
if (main.scriptCompress && main.replayChecking) {
await main.loadScript(`data.process.js`);
} else {
if (main.mode === 'editor') {
if (main.pluginUseCompress) {
await main.loadScript(`project/processG.min.js`);
if (main.scriptCompress) {
await main.loadScript(`data.process.js`);
} else {
await main.loadScript(`esm?name=src/data.ts`, true);
}
@ -369,11 +361,6 @@ core.prototype._loadGameProcess = async function () {
}
};
core.prototype._loadGameProcessSync = function () {
if (main.useCompress) main.loadMod('project', 'processG', () => 0);
else main.loadMod('project', 'processG.min', () => 0);
};
core.prototype._init_flags = function () {
core.flags = core.clone(core.data.flags);
core.values = core.clone(core.data.values);

View File

@ -5,6 +5,7 @@ function main() {
this.version = '1.0.0'; // 游戏版本号如果更改了游戏内容建议修改此version以免造成缓存问题。
this.useCompress = false; // 是否使用压缩文件
this.scriptCompress = false; // 是否经过打包
this.skipResourcePackage = true; // 跳过资源打包
this.bgmRemote = false; // 是否采用远程BGM

View File

@ -121,7 +121,11 @@ main.floors.MT0=
"autoEvent": {},
"bgm": "cave.opus",
"beforeBattle": {},
"bg2map": [],
"fg2map": [],
"bg2map": [
],
"fg2map": [
],
"cannotMoveIn": {}
}

View File

@ -435,9 +435,13 @@ async function buildGame() {
);
}
const code = transformed.code;
const modifiedHead = head.replace(
'this.scriptCompress = false;',
'this.scriptCompress = true;'
);
await writeFile(
resolve(tempDir, 'common/main.js'),
head + '\n// >>>> body end\n' + code,
modifiedHead + '\n// >>>> body end\n' + code,
'utf-8'
);
} catch (e) {
@ -523,7 +527,8 @@ async function buildGame() {
'project/icons.js',
'project/items.js',
'project/maps.js',
'project/plugins.js'
'project/plugins.js',
'project/materials/airwall.png'
];
clientPackArr.forEach(v => {