From 7c5cd12d0e8fe7f599c455bae9207089e2cd3a72 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Wed, 3 Sep 2025 17:29:17 +0800 Subject: [PATCH 1/8] =?UTF-8?q?chore:=20=E6=89=93=E5=8C=85=E6=97=B6?= =?UTF-8?q?=E5=B0=86=20bg.jpg=20=E4=B9=9F=E6=89=93=E5=8C=85=E8=BF=9B?= =?UTF-8?q?=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/build-game.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/script/build-game.ts b/script/build-game.ts index cca350c..bef646f 100644 --- a/script/build-game.ts +++ b/script/build-game.ts @@ -1,7 +1,7 @@ import { build, loadConfigFromFile, mergeConfig, UserConfig } from 'vite'; import legacy from '@vitejs/plugin-legacy'; import { resolve } from 'path'; -import { copy, emptyDir, ensureDir } from 'fs-extra'; +import { copy, emptyDir, ensureDir, pathExists } from 'fs-extra'; import { OutputAsset, OutputChunk, RollupOutput } from 'rollup'; import Fontmin from 'fontmin'; import { readdir, readFile, rmdir, stat, writeFile } from 'fs/promises'; @@ -597,6 +597,15 @@ async function buildGame() { resolve(process.cwd(), 'script/template/启动服务.exe'), resolve(distDir, '启动服务.exe') ); + + const bgPath = 'project/images/bg.jpg'; + + if (await pathExists(resolve(tempDir, 'client', bgPath))) { + await copy( + resolve(tempDir, 'client', bgPath), + resolve(distDir, bgPath) + ); + } } catch (e) { logProgress(6, ProgressStatus.Fail); process.stderr.write(String(e)); From f5fa802d7a97459d00c370c254ee4f38b4b4bfd3 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Thu, 4 Sep 2025 13:21:01 +0800 Subject: [PATCH 2/8] =?UTF-8?q?fix:=20=E5=9B=BE=E6=A0=87=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=94=99=E8=AF=AF=20&=20=E5=B7=A5=E5=85=B7=E6=A0=8F=E6=B5=8F?= =?UTF-8?q?=E8=A7=88=E5=9C=B0=E5=9B=BE=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages-user/client-modules/src/render/components/icons.tsx | 4 ++-- packages-user/client-modules/src/render/ui/toolbar.tsx | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages-user/client-modules/src/render/components/icons.tsx b/packages-user/client-modules/src/render/components/icons.tsx index 62152a1..dc5a251 100644 --- a/packages-user/client-modules/src/render/components/icons.tsx +++ b/packages-user/client-modules/src/render/components/icons.tsx @@ -277,10 +277,10 @@ export const PauseIcon = defineIcon(1, (loc, pad) => { export const DoubleArrow = defineIcon(1, (loc, pad) => { const path = new Path2D(); const path2 = new Path2D(); - const [, , width, height, cx, cy] = loc; + const [, , , height, cx, cy] = loc; const [left, right, top, bottom] = pad(5); path.moveTo(left, top + height / 12); - path.lineTo(cx + width / 8, cy); + path.lineTo(cx, cy); path.lineTo(left, bottom - height / 12); path.closePath(); path2.moveTo(cx, top + height / 12); diff --git a/packages-user/client-modules/src/render/ui/toolbar.tsx b/packages-user/client-modules/src/render/ui/toolbar.tsx index db19245..31d3847 100644 --- a/packages-user/client-modules/src/render/ui/toolbar.tsx +++ b/packages-user/client-modules/src/render/ui/toolbar.tsx @@ -25,6 +25,7 @@ import { saveSave, saveLoad } from './save'; import { mainUIController } from './controller'; import { MAIN_WIDTH, MAIN_HEIGHT } from '../shared'; import { openSettings } from './settings'; +import { openViewMap } from './viewmap'; interface ToolbarProps extends DefaultProps { loc?: ElementLocator; @@ -110,9 +111,7 @@ export const PlayingToolbar = defineComponent< const redo = () => core.doSL('autoSave', 'reload'); const numpad = () => emit('numpad'); const view = () => { - if (core.isPlaying() && !core.isMoving() && !core.status.lockControl) { - core.ui._drawViewMaps(); - } + openViewMap(mainUIController, [0, 0, MAIN_WIDTH, MAIN_HEIGHT]); }; const danmaku = () => requestAnimationFrame(openDanmakuPoster); const replay = () => core.ui._drawReplay(); From ee87e34380c4c4617598d6575be71539c79e2b75 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Thu, 4 Sep 2025 13:25:42 +0800 Subject: [PATCH 3/8] =?UTF-8?q?fix:=20=E6=B5=8F=E8=A7=88=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E5=90=8D=E6=98=BE=E7=A4=BA=E5=8F=8D=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client-modules/src/render/components/floorSelect.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages-user/client-modules/src/render/components/floorSelect.tsx b/packages-user/client-modules/src/render/components/floorSelect.tsx index d2561b3..b769acf 100644 --- a/packages-user/client-modules/src/render/components/floorSelect.tsx +++ b/packages-user/client-modules/src/render/components/floorSelect.tsx @@ -51,7 +51,7 @@ export const FloorSelector = defineComponent< const scrollRef = ref(); const floors = computed(() => props.floors.toReversed()); - const floorId = computed(() => floors.value[now.value]); + const floorId = computed(() => props.floors[now.value]); const floorName = computed(() => core.floors[floorId.value].title); watch( From 4ff30359932fe74b895046b18444cc6a954bcc0f Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Thu, 4 Sep 2025 14:07:37 +0800 Subject: [PATCH 4/8] =?UTF-8?q?fix:=20getRemainEnemyString=20=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=20extern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages-user/legacy-plugin-data/src/enemy/checkblock.ts | 4 ++-- packages-user/legacy-plugin-data/src/enemy/index.ts | 6 ++++-- packages-user/legacy-plugin-data/src/index.ts | 3 +++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages-user/legacy-plugin-data/src/enemy/checkblock.ts b/packages-user/legacy-plugin-data/src/enemy/checkblock.ts index a430c12..777bc33 100644 --- a/packages-user/legacy-plugin-data/src/enemy/checkblock.ts +++ b/packages-user/legacy-plugin-data/src/enemy/checkblock.ts @@ -1,6 +1,6 @@ import { has, ofDir } from '@user/data-utils'; -export function init() { +export function createCheckBlock() { // 伤害弹出 // 复写阻激夹域检测 control.prototype.checkBlock = function (forceMockery: boolean = false) { @@ -52,7 +52,7 @@ function checkMockery(loc: string, force: boolean = false) { action.push({ type: 'forbidSave', forbid: true }); action.push({ type: 'changePos', direction: dir }); const blocks = core.getMapBlocksObj(); - while (1) { + while (true) { x += dx; y += dy; const block = blocks[`${x},${y}`]; diff --git a/packages-user/legacy-plugin-data/src/enemy/index.ts b/packages-user/legacy-plugin-data/src/enemy/index.ts index 15277bf..d770bdc 100644 --- a/packages-user/legacy-plugin-data/src/enemy/index.ts +++ b/packages-user/legacy-plugin-data/src/enemy/index.ts @@ -1,6 +1,8 @@ -import { init as initCheckBlock } from './checkblock'; +import { createCheckBlock } from './checkblock'; -initCheckBlock(); +export function createEnemy() { + createCheckBlock(); +} export * from './checkblock'; export * from './remainEnemy'; diff --git a/packages-user/legacy-plugin-data/src/index.ts b/packages-user/legacy-plugin-data/src/index.ts index de47c95..8869b9d 100644 --- a/packages-user/legacy-plugin-data/src/index.ts +++ b/packages-user/legacy-plugin-data/src/index.ts @@ -4,10 +4,12 @@ import { initFiveLayer } from './fiveLayer'; import { createHook } from './hook'; import { initReplay } from './replay'; import { initUI } from './ui'; +import { createEnemy } from './enemy'; export function createLegacy() { initFallback(); loading.once('coreInit', () => { + createEnemy(); initFiveLayer(); createHook(); initReplay(); @@ -15,6 +17,7 @@ export function createLegacy() { }); } +export * from './enemy'; export * from './chase'; export * from './fallback'; export * from './fiveLayer'; From 6f199bc6f8d690b952ca9748abd122c5ea58f1e1 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Thu, 4 Sep 2025 16:16:40 +0800 Subject: [PATCH 5/8] =?UTF-8?q?fix:=20=E5=BD=95=E5=83=8F=E5=9B=9E=E6=94=BE?= =?UTF-8?q?=E4=B8=AD=E5=AD=98=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages-user/client-modules/src/index.ts | 2 +- packages-user/client-modules/src/render/ui/toolbar.tsx | 4 +++- public/libs/actions.js | 8 +++++--- public/libs/control.js | 4 ---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages-user/client-modules/src/index.ts b/packages-user/client-modules/src/index.ts index 543ed0c..65061e4 100644 --- a/packages-user/client-modules/src/index.ts +++ b/packages-user/client-modules/src/index.ts @@ -4,8 +4,8 @@ import { patchAll } from './fallback'; import { createGameRenderer, createRender } from './render'; export function create() { - createAudio(); patchAll(); + createAudio(); createRender(); loading.once('coreInit', () => { createGameRenderer(); diff --git a/packages-user/client-modules/src/render/ui/toolbar.tsx b/packages-user/client-modules/src/render/ui/toolbar.tsx index 31d3847..65df6cb 100644 --- a/packages-user/client-modules/src/render/ui/toolbar.tsx +++ b/packages-user/client-modules/src/render/ui/toolbar.tsx @@ -182,7 +182,9 @@ export const ReplayingToolbar = defineComponent(props => { const speedDown = () => core.speedDownReplay(); const speedUp = () => core.speedUpReplay(); const book = () => core.openBook(true); - const save = () => core.save(true); + const save = () => { + saveSave(mainUIController, [0, 0, MAIN_WIDTH, MAIN_HEIGHT]); + }; const view = () => { if (core.isPlaying() && !core.isMoving() && !core.status.lockControl) { core.ui._drawViewMaps(); diff --git a/public/libs/actions.js b/public/libs/actions.js index 033ef41..a4508b3 100644 --- a/public/libs/actions.js +++ b/public/libs/actions.js @@ -241,10 +241,12 @@ actions.prototype._sys_onkeyUp_replay = function (e) { else if (e.keyCode == 65) // A core.rewindReplay(); - else if (e.keyCode == 83) + else if (e.keyCode == 83) { // S - core.control._replay_SL(); - else if (e.keyCode == 88) + const { saveSave, mainUIController, MAIN_WIDTH, MAIN_HEIGHT } = + Mota.require('@user/client-modules'); + saveSave(mainUIController, [0, 0, MAIN_WIDTH, MAIN_HEIGHT]); + } else if (e.keyCode == 88) // X core.control._replay_book(); else if (e.keyCode == 33 || e.keyCode == 34) diff --git a/public/libs/control.js b/public/libs/control.js index b390f0e..16448fd 100644 --- a/public/libs/control.js +++ b/public/libs/control.js @@ -1275,10 +1275,6 @@ control.prototype.startReplay = function (list) { core.setOpacity('replay', 0.6); this._replay_drawProgress(); core.updateStatusBar(false, true); - // Mota.Plugin.require('utils_r').tip( - // 'warn', - // '由于不可抗力,录像播放过程中将没有勇士移动动画' - // ); Mota.require('@user/data-base').hook.emit('replayStatus', false); this.replay(); }; From 351ede39963d8380621bd753af57837454c4283d Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Thu, 4 Sep 2025 17:10:08 +0800 Subject: [PATCH 6/8] =?UTF-8?q?fix:=20=E4=B8=BB=E5=8A=A8=E6=8A=80=E8=83=BD?= =?UTF-8?q?=E6=8A=A5=E9=94=99=20&=20=E9=81=97=E7=95=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/render/elements/layer.ts | 12 +++--- .../client-modules/src/render/index.tsx | 2 + .../client-modules/src/render/legacy/index.ts | 2 + .../data-state/src/mechanism/skillTree.ts | 5 ++- .../legacy-plugin-client/src/dev/hotReload.ts | 8 ++-- .../legacy-plugin-data/src/replay.ts | 7 +++- packages/legacy-ui/src/data/achievement.json | 38 ++++++------------- public/project/floors/MT12.js | 2 +- public/project/floors/MT16.js | 6 +-- public/project/floors/MT17.js | 2 +- public/project/floors/MT21.js | 2 +- public/project/floors/MT32.js | 2 +- public/project/floors/MT35.js | 2 +- public/project/floors/MT41.js | 2 +- public/project/floors/MT6.js | 2 +- public/project/floors/tower7.js | 4 +- public/project/functions.js | 2 +- public/project/items.js | 28 +++++++------- 18 files changed, 62 insertions(+), 66 deletions(-) diff --git a/packages-user/client-modules/src/render/elements/layer.ts b/packages-user/client-modules/src/render/elements/layer.ts index d92d347..8f43ff6 100644 --- a/packages-user/client-modules/src/render/elements/layer.ts +++ b/packages-user/client-modules/src/render/elements/layer.ts @@ -1545,7 +1545,7 @@ export function createLayer() { hook.on('setBlock', (x, y, floor, block) => { const isNow = floor === core.status.floorId; - LayerGroupFloorBinder.activedBinder.forEach(v => { + LayerGroupFloorBinder.activeBinder.forEach(v => { if (floor === v.floor || (isNow && v.bindThisFloor)) { v.setBlock('event', block, x, y); } @@ -1561,7 +1561,7 @@ export function createLayer() { hook.on('changingFloor', floor => { // 潜在隐患:如果putRenderData改成异步,那么会变成两帧后才能真正刷新并渲染 // 考虑到楼层转换一般不会同时执行很多次,因此这里改为立刻更新 - LayerGroupFloorBinder.activedBinder.forEach(v => { + LayerGroupFloorBinder.activeBinder.forEach(v => { if (v.bindThisFloor) v.updateBindData(); v.emit('floorChange', floor); }); @@ -1571,7 +1571,7 @@ export function createLayer() { }); hook.on('setBgFgBlock', (name, number, x, y, floor) => { const isNow = floor === core.status.floorId; - LayerGroupFloorBinder.activedBinder.forEach(v => { + LayerGroupFloorBinder.activeBinder.forEach(v => { if (floor === v.floor || (isNow && v.bindThisFloor)) { v.setBlock(name, number, x, y); } @@ -1612,7 +1612,7 @@ export class LayerGroupFloorBinder private needUpdate: boolean = false; - static activedBinder: Set = new Set(); + static activeBinder: Set = new Set(); /** * 绑定楼层为当前楼层,并跟随变化 @@ -1698,7 +1698,7 @@ export class LayerGroupFloorBinder for (const layer of group.layers.values()) { this.checkLayerExtends(layer); } - LayerGroupFloorBinder.activedBinder.add(this); + LayerGroupFloorBinder.activeBinder.add(this); } onLayerAdd(_group: LayerGroup, layer: Layer): void { @@ -1706,7 +1706,7 @@ export class LayerGroupFloorBinder } onDestroy(group: LayerGroup) { - LayerGroupFloorBinder.activedBinder.delete(this); + LayerGroupFloorBinder.activeBinder.delete(this); group.layers.forEach(v => { v.removeExtends('floor-binder'); }); diff --git a/packages-user/client-modules/src/render/index.tsx b/packages-user/client-modules/src/render/index.tsx index 6e0dafb..cc65342 100644 --- a/packages-user/client-modules/src/render/index.tsx +++ b/packages-user/client-modules/src/render/index.tsx @@ -48,6 +48,8 @@ export function createRender() { export * from './components'; export * from './elements'; +export * from './fx'; +export * from './legacy'; export * from './ui'; export * from './utils'; export * from './renderer'; diff --git a/packages-user/client-modules/src/render/legacy/index.ts b/packages-user/client-modules/src/render/legacy/index.ts index 1fec97a..768c449 100644 --- a/packages-user/client-modules/src/render/legacy/index.ts +++ b/packages-user/client-modules/src/render/legacy/index.ts @@ -5,3 +5,5 @@ export function createLegacy() { createGameCanvas(); createShadow(); } + +export * from './shadow'; diff --git a/packages-user/data-state/src/mechanism/skillTree.ts b/packages-user/data-state/src/mechanism/skillTree.ts index 39d7970..4125ea2 100644 --- a/packages-user/data-state/src/mechanism/skillTree.ts +++ b/packages-user/data-state/src/mechanism/skillTree.ts @@ -242,8 +242,9 @@ export function canUpgrade(skill: number) { if (consume > core.status.hero.mdef) return false; const level = getSkillLevel(skill); const s = getSkillFromIndex(skill); - if (level === s?.max) return false; - const front = s?.front ?? []; + if (!s) return false; + if (level >= s.max) return false; + const front = s.front; for (const [skill, level] of front) { if (getSkillLevel(skill) < level) return false; } diff --git a/packages-user/legacy-plugin-client/src/dev/hotReload.ts b/packages-user/legacy-plugin-client/src/dev/hotReload.ts index e4016ea..a0b980f 100644 --- a/packages-user/legacy-plugin-client/src/dev/hotReload.ts +++ b/packages-user/legacy-plugin-client/src/dev/hotReload.ts @@ -56,9 +56,11 @@ export {}; core.status.maps[data].enemy?.calRealAttribute(); core.updateStatusBar(true, true); } - Mota.require('@motajs/legacy-ui').Shadow.update(true); - const Binder = Mota.require('@motajs/render').LayerGroupFloorBinder; - Binder.activedBinder.forEach(v => { + Mota.require('@user/client-modules').Shadow.update(true); + const Binder = Mota.require( + '@user/client-modules' + ).LayerGroupFloorBinder; + Binder.activeBinder.forEach(v => { if (v.getFloor() === core.status.floorId) { v.updateBindData(); } diff --git a/packages-user/legacy-plugin-data/src/replay.ts b/packages-user/legacy-plugin-data/src/replay.ts index cbe946f..9a61d85 100644 --- a/packages-user/legacy-plugin-data/src/replay.ts +++ b/packages-user/legacy-plugin-data/src/replay.ts @@ -62,10 +62,15 @@ export function initReplay() { core.registerReplayAction('upgradeSkill', name => { if (!name.startsWith('skill:')) return false; const skill = parseInt(name.slice(6)); - upgradeSkill(skill); + const success = upgradeSkill(skill); const s = getSkillFromIndex(skill); const skillName = s?.title; core.status.route.push(name); + if (!success) { + const { tip } = Mota.require('@motajs/legacy-ui'); + tip('error', `升级技能:${skillName}失败`); + return false; + } tipAndWait(`升级技能:${skillName}`, 1000).then(() => { core.replay(); }); diff --git a/packages/legacy-ui/src/data/achievement.json b/packages/legacy-ui/src/data/achievement.json index a782b33..9e27d59 100644 --- a/packages/legacy-ui/src/data/achievement.json +++ b/packages/legacy-ui/src/data/achievement.json @@ -2,9 +2,7 @@ "normal": [ { "name": "虚惊一场", - "text": [ - "打完山洞门口的兽人后只剩一滴血" - ], + "text": ["打完山洞门口的兽人后只剩一滴血"], "point": 30 }, { @@ -18,44 +16,34 @@ "challenge": [ { "name": "逃出生天", - "text": [ - "通过山路追逐战的困难难度" - ], + "text": ["通过山路追逐战的困难难度"], "point": 20 }, { "name": "冰与火之舞", - "text": [ - "完成第二章音游特殊战的困难难度" - ], + "text": ["完成第二章音游特殊战的困难难度"], "point": 50 } ], "explore": [ { "name": "勇气巅峰", - "text": [ - "第一章完成度达到100%" - ], - "progress": "${Mota.Plugin.require('completion_r').getChapterCompletion(1)} / 100", + "text": ["第一章完成度达到100%"], + "progress": "${Mota.require('completion_r').getChapterCompletion(1)} / 100", "percent": true, "point": 50 }, { "name": "你是怎么办到的?!", - "text": [ - "与山路上的若干个神秘木牌对话" - ], + "text": ["与山路上的若干个神秘木牌对话"], "progress": "${core.getLocalStorage('mountSign', 0)} / 5", "hide": "该探索成就需要你自己探索如何达成", "point": 25 }, { "name": "智慧之心", - "text": [ - "第二章完成度达到100%" - ], - "progress": "${Mota.Plugin.require('completion_r').getChapterCompletion(2)} / 100", + "text": ["第二章完成度达到100%"], + "progress": "${Mota.require('completion_r').getChapterCompletion(2)} / 100", "percent": true, "point": 50 }, @@ -69,20 +57,16 @@ }, { "name": "学坏了", - "text": [ - "学习电摇嘲讽技能" - ], + "text": ["学习电摇嘲讽技能"], "hide": "该探索成就需要你自己探索如何达成", "point": 20 }, { "name": "满腹经纶", - "text": [ - "把第二章中所有能学习的技能都学一遍" - ], + "text": ["把第二章中所有能学习的技能都学一遍"], "hide": "该探索成就需要你自己探索如何达成", "progress": "", "point": 50 } ] -} \ No newline at end of file +} diff --git a/public/project/floors/MT12.js b/public/project/floors/MT12.js index f3468d5..231e8ec 100644 --- a/public/project/floors/MT12.js +++ b/public/project/floors/MT12.js @@ -39,7 +39,7 @@ main.floors.MT12= "手机端可以点击右下角的难度来切换下方工具栏至数字键", { "type": "function", - "function": "function(){\nconst HeroSkill = Mota.require('@user/data-state').Mechanism.HeroSkill;\nHeroSkill.learnSkill(HeroSkill.Jump);\n}" + "function": "function(){\nconst HeroSkill = Mota.require('@user/data-state').HeroSkill;\nHeroSkill.learnSkill(HeroSkill.Jump);\n}" }, { "type": "hide", diff --git a/public/project/floors/MT16.js b/public/project/floors/MT16.js index c571fc2..9c86d03 100644 --- a/public/project/floors/MT16.js +++ b/public/project/floors/MT16.js @@ -70,7 +70,7 @@ main.floors.MT16= }, { "type": "function", - "function": "function(){\ncore.status.maps.MT14.canFlyFrom = false;\nMota.Plugin.require('chase_g').chaseInit1();\n}" + "function": "function(){\ncore.status.maps.MT14.canFlyFrom = false;\nMota.require('chase_g').chaseInit1();\n}" }, { "type": "show", @@ -89,7 +89,7 @@ main.floors.MT16= "no": [ { "type": "function", - "function": "function(){\nMota.Plugin.require('replay_g').readyClip();\n}" + "function": "function(){\nMota.require('replay_g').readyClip();\n}" }, { "type": "choices", @@ -400,7 +400,7 @@ main.floors.MT16= }, { "type": "function", - "function": "function(){\nMota.Plugin.require('chase_r').start(false);\n}" + "function": "function(){\nMota.require('chase_r').start(false);\n}" }, { "type": "autoSave" diff --git a/public/project/floors/MT17.js b/public/project/floors/MT17.js index 5e805a3..921bbda 100644 --- a/public/project/floors/MT17.js +++ b/public/project/floors/MT17.js @@ -56,7 +56,7 @@ main.floors.MT17= "12,6": [ { "type": "function", - "function": "function(){\nif (core.status.hero.hp - flags.hphphp >= 150000) {\n\tMota.Plugin.require('achievement_r').completeAchievement('normal', 1);\n}\ndelete flags.hphphp;\n}" + "function": "function(){\nif (core.status.hero.hp - flags.hphphp >= 150000) {\n\tMota.require('achievement_r').completeAchievement('normal', 1);\n}\ndelete flags.hphphp;\n}" } ] }, diff --git a/public/project/floors/MT21.js b/public/project/floors/MT21.js index 887b314..6d913ad 100644 --- a/public/project/floors/MT21.js +++ b/public/project/floors/MT21.js @@ -157,7 +157,7 @@ main.floors.MT21= "\t[低级智人]\b[up,hero]或许智慧结晶会告诉我答案吧。", { "type": "function", - "function": "function(){\nif (!core.isReplaying()) Mota.require('@motajs/legacy-ui').fixedUi.open('chapter', { chapter: '第二章 智慧' });\nMota.Plugin.require('removeMap_g').removeMaps('tower1', 'tower7', true);\ndelete flags.tower1;\ndelete flags.wordsTimeOut;\ndelete flags.boom;\ndelete flags.booming;\n}" + "function": "function(){\nif (!core.isReplaying()) Mota.require('@motajs/legacy-ui').fixedUi.open('chapter', { chapter: '第二章 智慧' });\nMota.require('removeMap_g').removeMaps('tower1', 'tower7', true);\ndelete flags.tower1;\ndelete flags.wordsTimeOut;\ndelete flags.boom;\ndelete flags.booming;\n}" }, { "type": "setValue", diff --git a/public/project/floors/MT32.js b/public/project/floors/MT32.js index 8abb9ec..7c70297 100644 --- a/public/project/floors/MT32.js +++ b/public/project/floors/MT32.js @@ -16,7 +16,7 @@ main.floors.MT32= "firstArrive": [ { "type": "function", - "function": "function(){\nMota.Plugin.require('removeMap_g').removeMaps('MT17', 'MT21', true)\n}" + "function": "function(){\nMota.require('removeMap_g').removeMaps('MT17', 'MT21', true)\n}" } ], "eachArrive": [], diff --git a/public/project/floors/MT35.js b/public/project/floors/MT35.js index 7a23094..56d835e 100644 --- a/public/project/floors/MT35.js +++ b/public/project/floors/MT35.js @@ -101,7 +101,7 @@ main.floors.MT35= }, { "type": "function", - "function": "function(){\nMota.Plugin.require('removeMap_g').removeMaps('MT22', 'MT31', true);\n}" + "function": "function(){\nMota.require('removeMap_g').removeMaps('MT22', 'MT31', true);\n}" }, { "type": "changeFloor", diff --git a/public/project/floors/MT41.js b/public/project/floors/MT41.js index 31f33ab..38a7ae4 100644 --- a/public/project/floors/MT41.js +++ b/public/project/floors/MT41.js @@ -70,7 +70,7 @@ main.floors.MT41= "那我就送你回到标题界面吧!", { "type": "function", - "function": "function(){\nMota.Plugin.require('achievement_r').completeAchievement('explore', 0);\n}" + "function": "function(){\nMota.require('achievement_r').completeAchievement('explore', 0);\n}" }, { "type": "restart" diff --git a/public/project/floors/MT6.js b/public/project/floors/MT6.js index 0070106..0be7a84 100644 --- a/public/project/floors/MT6.js +++ b/public/project/floors/MT6.js @@ -124,7 +124,7 @@ main.floors.MT6= "4,12": [ { "type": "function", - "function": "function(){\nif (core.status.hero.hp === 1) {\n\tMota.Plugin.require('achievement_r').completeAchievement('normal', 0);\n}\n}" + "function": "function(){\nif (core.status.hero.hp === 1) {\n\tMota.require('achievement_r').completeAchievement('normal', 0);\n}\n}" } ] }, diff --git a/public/project/floors/tower7.js b/public/project/floors/tower7.js index 223d2c4..6fae1ef 100644 --- a/public/project/floors/tower7.js +++ b/public/project/floors/tower7.js @@ -123,7 +123,7 @@ main.floors.tower7= "下面,就让我们开始吧!", { "type": "function", - "function": "function(){\nMota.Plugin.require('replay_g').readyClip();\n}" + "function": "function(){\nMota.require('replay_g').readyClip();\n}" } ] }, @@ -168,7 +168,7 @@ main.floors.tower7= }, { "type": "function", - "function": "function(){\nMota.Plugin.require('boss_r').startTowerBoss();\n}" + "function": "function(){\nMota.require('boss_r').startTowerBoss();\n}" } ], "eachArrive": [], diff --git a/public/project/functions.js b/public/project/functions.js index ad35d99..a416c7f 100644 --- a/public/project/functions.js +++ b/public/project/functions.js @@ -218,7 +218,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { } } // if (!flags.debug && !main.replayChecking) - // Mota.Plugin.require('completion_r').checkVisitedFloor(); + // Mota.require('completion_r').checkVisitedFloor(); Mota.require('@user/data-base').hook.emit( 'afterChangeFloor', floorId diff --git a/public/project/items.js b/public/project/items.js index 4073701..c3fb032 100644 --- a/public/project/items.js +++ b/public/project/items.js @@ -40,8 +40,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "小绿宝石", "text": ",护盾+${core.values.greenGem}", - "itemEffect": "core.status.hero.mdef += Math.round(20 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", - "itemEffectTip": ",智慧+${Math.round(20 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", + "itemEffect": "core.status.hero.mdef += Math.round(20 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", + "itemEffectTip": ",智慧+${Math.round(20 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", "useItemEffect": "core.status.hero.mdef += core.values.greenGem", "canUseItemEffect": "true" }, @@ -626,8 +626,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "中绿宝石", "text": ",护盾+${core.values.greenGem}", - "itemEffect": "core.status.hero.mdef += Math.round(40 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", - "itemEffectTip": ",智慧+${Math.round(40 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", + "itemEffect": "core.status.hero.mdef += Math.round(40 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", + "itemEffectTip": ",智慧+${Math.round(40 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", "useItemEffect": "core.status.hero.mdef += core.values.greenGem", "canUseItemEffect": "true" }, @@ -729,8 +729,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "大绿宝石", "text": ",护盾+${core.values.greenGem}", - "itemEffect": "core.status.hero.mdef += Math.round(80 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", - "itemEffectTip": ",智慧+${Math.round(80 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", + "itemEffect": "core.status.hero.mdef += Math.round(80 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", + "itemEffectTip": ",智慧+${Math.round(80 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", "useItemEffect": "core.status.hero.mdef += core.values.greenGem", "canUseItemEffect": "true" }, @@ -896,8 +896,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "超大绿宝石", "text": ",护盾+${core.values.greenGem}", - "itemEffect": "core.status.hero.mdef += Math.round(160 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", - "itemEffectTip": ",智慧+${Math.round(160 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", + "itemEffect": "core.status.hero.mdef += Math.round(160 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", + "itemEffectTip": ",智慧+${Math.round(160 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", "useItemEffect": "core.status.hero.mdef += core.values.greenGem", "canUseItemEffect": "true" }, @@ -1019,8 +1019,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "璀璨绿宝石", "text": ",护盾+${core.values.greenGem}", - "itemEffect": "core.status.hero.mdef += Math.round(320 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", - "itemEffectTip": ",智慧+${Math.round(320 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", + "itemEffect": "core.status.hero.mdef += Math.round(320 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", + "itemEffectTip": ",智慧+${Math.round(320 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", "useItemEffect": "core.status.hero.mdef += core.values.greenGem", "canUseItemEffect": "true" }, @@ -1050,8 +1050,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "传奇绿宝石", "text": ",防御+${core.values.blueGem}", - "itemEffect": "core.status.hero.mdef += Math.round(640 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", - "itemEffectTip": ",智慧+${Math.round(640 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", + "itemEffect": "core.status.hero.mdef += Math.round(640 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", + "itemEffectTip": ",智慧+${Math.round(640 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", "useItemEffect": "core.status.hero.def += core.values.blueGem", "canUseItemEffect": "true" }, @@ -1071,8 +1071,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "史诗绿宝石", "text": ",护盾+${core.values.greenGem}", - "itemEffect": "core.status.hero.mdef += Math.round(1280 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", - "itemEffectTip": ",智慧+${Math.round(1280 * core.status.thisMap.ratio / (core.getFlag(\"hard\") + 1) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", + "itemEffect": "core.status.hero.mdef += Math.round(1280 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))", + "itemEffectTip": ",智慧+${Math.round(1280 * core.status.thisMap.ratio / (core.getFlag('hard')) * (Mota.require('@user/data-state').getSkillLevel(12) / 20 + 1))}", "useItemEffect": "core.status.hero.mdef += core.values.greenGem", "canUseItemEffect": "true" }, From 65855d1a64625798ca1378750a230fec855fa4cc Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Fri, 5 Sep 2025 13:10:38 +0800 Subject: [PATCH 7/8] =?UTF-8?q?fix:=20=E7=94=BB=E5=B8=83=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MotaOffscreenCanvas2D.md | 30 +++++++++---------- .../src/render/elements/block.ts | 12 +++++--- .../src/render/elements/damage.ts | 2 +- .../src/render/elements/layer.ts | 7 ++++- .../src/render/elements/misc.ts | 1 + .../src/boss/palaceBossProjectile.ts | 1 + packages/render-core/src/canvas2d.ts | 3 +- packages/render-core/src/item.ts | 12 ++++++-- public/project/floors/MT16.js | 4 +-- public/project/floors/MT17.js | 2 +- public/project/floors/MT41.js | 2 +- public/project/floors/MT6.js | 2 +- public/project/floors/tower7.js | 2 +- 13 files changed, 50 insertions(+), 30 deletions(-) diff --git a/docs/api/motajs-render-core/MotaOffscreenCanvas2D.md b/docs/api/motajs-render-core/MotaOffscreenCanvas2D.md index 09ea584..c56d1d6 100644 --- a/docs/api/motajs-render-core/MotaOffscreenCanvas2D.md +++ b/docs/api/motajs-render-core/MotaOffscreenCanvas2D.md @@ -48,10 +48,10 @@ function constructor( 创建一个新的离屏画布。 **参数** -- `alpha`: 是否启用透明度通道(默认为 `true`)。 -- `canvas`: 可指定现有画布,未提供时自动创建新画布。 - **注意** -- 在自定义渲染元素中,建议使用 `RenderItem.requireCanvas` 而非直接调用此构造函数。 +- `alpha`: 是否启用透明度通道(默认为 `true`)。 +- `canvas`: 可指定现有画布,未提供时自动创建新画布。 + **注意** +- 在自定义渲染元素中,建议使用 `RenderItem.requireCanvas` 而非直接调用此构造函数。之后如果不使用,再使用 `RenderItem.deleteCanvas` 删除。 --- @@ -67,11 +67,11 @@ function size(width: number, height: number): void; 设置画布的尺寸。 **参数** -- `width`: 逻辑宽度(最小为 1)。 -- `height`: 逻辑高度(最小为 1)。 - **行为** -- 自动计算缩放比例(考虑 `highResolution` 和 `autoScale`)。 -- 调整画布物理尺寸和样式尺寸。 +- `width`: 逻辑宽度(最小为 1)。 +- `height`: 逻辑高度(最小为 1)。 + **行为** +- 自动计算缩放比例(考虑 `highResolution` 和 `autoScale`)。 +- 调整画布物理尺寸和样式尺寸。 **示例** @@ -92,7 +92,7 @@ function withGameScale(auto: boolean): void; 设置画布是否跟随 `core.domStyle.scale` 自动缩放。 **参数** -- `auto`: 是否启用自动缩放。 +- `auto`: 是否启用自动缩放。 **示例** @@ -112,7 +112,7 @@ function setHD(hd: boolean): void; 设置是否为高清画布(基于设备像素比例)。 **参数** -- `hd`: 是否启用高清模式。 +- `hd`: 是否启用高清模式。 **示例** @@ -132,7 +132,7 @@ function setAntiAliasing(anti: boolean): void; 设置抗锯齿功能。 **参数** -- `anti`: 是否启用抗锯齿。 +- `anti`: 是否启用抗锯齿。 **示例** @@ -152,7 +152,7 @@ function clear(): void; 清空画布内容。 **注意** -- 冻结状态下调用此方法会触发警告。 +- 冻结状态下调用此方法会触发警告。 **示例** @@ -242,7 +242,7 @@ function clone(canvas: MotaOffscreenCanvas2D): MotaOffscreenCanvas2D; 复制一个画布对象,结果画布将被冻结。 **返回值** -- 复制的画布对象(不可修改属性,但可绘制)。 +- 复制的画布对象(不可修改属性,但可绘制)。 **示例** @@ -262,7 +262,7 @@ function refreshAll(force: boolean = false): void; 刷新所有已注册画布的尺寸(仅在窗口大小变化时自动调用)。 **参数** -- `force`: 是否强制刷新所有画布(默认仅刷新启用 `autoScale` 的画布)。 +- `force`: 是否强制刷新所有画布(默认仅刷新启用 `autoScale` 的画布)。 --- diff --git a/packages-user/client-modules/src/render/elements/block.ts b/packages-user/client-modules/src/render/elements/block.ts index 4ec87d0..5dde888 100644 --- a/packages-user/client-modules/src/render/elements/block.ts +++ b/packages-user/client-modules/src/render/elements/block.ts @@ -1,9 +1,10 @@ import { EventEmitter } from 'eventemitter3'; import { logger } from '@motajs/common'; -import { MotaOffscreenCanvas2D } from '@motajs/render-core'; +import { MotaOffscreenCanvas2D, RenderItem } from '@motajs/render-core'; interface BlockCacherEvent { split: []; + beforeClear: [index: number]; } interface BlockData { @@ -307,9 +308,12 @@ export interface ICanvasCacheItem extends IBlockCacheable { export class CanvasCacheItem implements ICanvasCacheItem { constructor( - public canvas: MotaOffscreenCanvas2D, - public symbol: number + public readonly canvas: MotaOffscreenCanvas2D, + public readonly symbol: number, + public readonly element: RenderItem ) {} - destroy(): void {} + destroy(): void { + this.element.deleteCanvas(this.canvas); + } } diff --git a/packages-user/client-modules/src/render/elements/damage.ts b/packages-user/client-modules/src/render/elements/damage.ts index 177f926..f9fb541 100644 --- a/packages-user/client-modules/src/render/elements/damage.ts +++ b/packages-user/client-modules/src/render/elements/damage.ts @@ -539,7 +539,7 @@ export class Damage extends RenderItem { }); ctx.drawImage(temp.canvas, px, py, size, size); - block.cache.set(v, new CanvasCacheItem(temp, temp.symbol)); + block.cache.set(v, new CanvasCacheItem(temp, temp.symbol, this)); }); ctx.restore(); // console.timeEnd('damage'); diff --git a/packages-user/client-modules/src/render/elements/layer.ts b/packages-user/client-modules/src/render/elements/layer.ts index 8f43ff6..81367cb 100644 --- a/packages-user/client-modules/src/render/elements/layer.ts +++ b/packages-user/client-modules/src/render/elements/layer.ts @@ -774,6 +774,7 @@ export class Layer extends Container { const num = this.background; const data = texture.getRenderable(num); + this.backImage.forEach(v => this.deleteCanvas(v)); this.backImage = []; if (!data) return; @@ -800,6 +801,7 @@ export class Layer extends Container { this.backImage.push(canvas); } + this.deleteCanvas(temp); for (const ex of this.extend.values()) { ex.onBackgroundGenerated?.(this, this.backImage); @@ -1239,7 +1241,10 @@ export class Layer extends Container { blockSize * cell, blockSize * cell ); - this.block.cache.set(index, new CanvasCacheItem(temp, temp.symbol)); + this.block.cache.set( + index, + new CanvasCacheItem(temp, temp.symbol, this) + ); }); } diff --git a/packages-user/client-modules/src/render/elements/misc.ts b/packages-user/client-modules/src/render/elements/misc.ts index 004a2f1..2bf78cf 100644 --- a/packages-user/client-modules/src/render/elements/misc.ts +++ b/packages-user/client-modules/src/render/elements/misc.ts @@ -211,6 +211,7 @@ export class Winskin extends RenderItem { Winskin.patternMap.set(this.imageName, winskinPattern); } this.patternCache = winskinPattern; + this.deleteCanvas(pattern); return winskinPattern; } diff --git a/packages-user/legacy-plugin-client/src/boss/palaceBossProjectile.ts b/packages-user/legacy-plugin-client/src/boss/palaceBossProjectile.ts index 403d9eb..0c9c3fe 100644 --- a/packages-user/legacy-plugin-client/src/boss/palaceBossProjectile.ts +++ b/packages-user/legacy-plugin-client/src/boss/palaceBossProjectile.ts @@ -73,6 +73,7 @@ export class SplittableBall extends Projectile { private splitted: boolean = false; static init(colors: Record) { + this.ball.forEach(v => mainRenderer.deleteCanvas(v)); this.ball.clear(); for (const [key, color] of Object.entries(colors)) { const canvas = mainRenderer.requireCanvas(); diff --git a/packages/render-core/src/canvas2d.ts b/packages/render-core/src/canvas2d.ts index 18f0093..a9c8067 100644 --- a/packages/render-core/src/canvas2d.ts +++ b/packages/render-core/src/canvas2d.ts @@ -24,7 +24,8 @@ export class MotaOffscreenCanvas2D extends EventEmitter { /** * 创建一个新的离屏画布\ - * **注意**:如果你在自定义渲染元素中使用,请避免使用此构造函数,而应该使用 `RenderItem.requireCanvas` + * **注意**:如果你在自定义渲染元素中使用,请避免使用此构造函数,而应该使用 `RenderItem.requireCanvas`, + * 之后如果不使用,再使用 `RenderItem.deleteCanvas` 删除。 * @param alpha 是否启用透明度通道 * @param canvas 指定画布,不指定时会自动创建一个新画布 */ diff --git a/packages/render-core/src/item.ts b/packages/render-core/src/item.ts index 6ba9c19..e20502b 100644 --- a/packages/render-core/src/item.ts +++ b/packages/render-core/src/item.ts @@ -348,10 +348,10 @@ export abstract class RenderItem /** 这个渲染元素使用到的所有画布 */ protected readonly canvases: Set = new Set(); /** 这个渲染元素每个画布的配置信息 */ - private readonly canvasMap: Map< + private readonly canvasMap: WeakMap< MotaOffscreenCanvas2D, RenderItemCanvasData - > = new Map(); + > = new WeakMap(); //#endregion //#region 交互事件 @@ -1305,6 +1305,14 @@ export abstract class RenderItem this.emit('destroy'); this.removeAllListeners(); this.canvases.clear(); + this.cache.clear(); + this.propagationStoped.clear(); + this.cachedEvent.clear(); + this.mouseId.clear(); + this.touchId.clear(); + this.children.clear(); + this._root = void 0; + this._parent = void 0; } } diff --git a/public/project/floors/MT16.js b/public/project/floors/MT16.js index 9c86d03..eb554a0 100644 --- a/public/project/floors/MT16.js +++ b/public/project/floors/MT16.js @@ -89,7 +89,7 @@ main.floors.MT16= "no": [ { "type": "function", - "function": "function(){\nMota.require('replay_g').readyClip();\n}" + "function": "function(){\nMota.require('@user/legacy-plugin-data').readyClip();\n}" }, { "type": "choices", @@ -400,7 +400,7 @@ main.floors.MT16= }, { "type": "function", - "function": "function(){\nMota.require('chase_r').start(false);\n}" + "function": "function(){\nMota.require('legacy-plugin-client').start(false);\n}" }, { "type": "autoSave" diff --git a/public/project/floors/MT17.js b/public/project/floors/MT17.js index 921bbda..9661681 100644 --- a/public/project/floors/MT17.js +++ b/public/project/floors/MT17.js @@ -56,7 +56,7 @@ main.floors.MT17= "12,6": [ { "type": "function", - "function": "function(){\nif (core.status.hero.hp - flags.hphphp >= 150000) {\n\tMota.require('achievement_r').completeAchievement('normal', 1);\n}\ndelete flags.hphphp;\n}" + "function": "function(){\nif (core.status.hero.hp - flags.hphphp >= 150000) {\n\t//Mota.require('achievement_r').completeAchievement('normal', 1);\n}\ndelete flags.hphphp;\n}" } ] }, diff --git a/public/project/floors/MT41.js b/public/project/floors/MT41.js index 38a7ae4..139c71a 100644 --- a/public/project/floors/MT41.js +++ b/public/project/floors/MT41.js @@ -70,7 +70,7 @@ main.floors.MT41= "那我就送你回到标题界面吧!", { "type": "function", - "function": "function(){\nMota.require('achievement_r').completeAchievement('explore', 0);\n}" + "function": "function(){\n//Mota.require('achievement_r').completeAchievement('explore', 0);\n}" }, { "type": "restart" diff --git a/public/project/floors/MT6.js b/public/project/floors/MT6.js index 0be7a84..94783cf 100644 --- a/public/project/floors/MT6.js +++ b/public/project/floors/MT6.js @@ -124,7 +124,7 @@ main.floors.MT6= "4,12": [ { "type": "function", - "function": "function(){\nif (core.status.hero.hp === 1) {\n\tMota.require('achievement_r').completeAchievement('normal', 0);\n}\n}" + "function": "function(){\nif (core.status.hero.hp === 1) {\n\t//Mota.require('achievement_r').completeAchievement('normal', 0);\n}\n}" } ] }, diff --git a/public/project/floors/tower7.js b/public/project/floors/tower7.js index 6fae1ef..9575239 100644 --- a/public/project/floors/tower7.js +++ b/public/project/floors/tower7.js @@ -123,7 +123,7 @@ main.floors.tower7= "下面,就让我们开始吧!", { "type": "function", - "function": "function(){\nMota.require('replay_g').readyClip();\n}" + "function": "function(){\nMota.require('@user/legacy-plugin-data').readyClip();\n}" } ] }, From 95288e741424ffc9939501204d40e3f070654970 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Fri, 5 Sep 2025 18:12:41 +0800 Subject: [PATCH 8/8] docs: update readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a8d8203..aa416ef 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ ## 开发环境 -- `node.js ^18.0.0 || ^20.0.0 || >=22.0.0` +- `node.js ^20.0.0 || >=22.0.0` - `pnpm >= 10.0.0` -- 任意支持 `ES2024` 特性的浏览器 +- 任意支持 `ESNext` 特性的浏览器 **建议使用 `vscode`,搭配 `prettier` `eslint` 插件** @@ -30,7 +30,7 @@ ## 构建说明 - `pnpm build:packages`: 构建所有 `packages` 文件夹下的内容,使用库模式。 -- `pnpm build:game`: 构建为可以直接部署构建包。 +- `pnpm build:game`: 构建为可以直接部署的构建包。 - `pnpm build:lib`: 构建所有 `packages` `packages-user` 文件夹下的内容,使用库模式。 ## 开发原则