Compare commits

...

3 Commits

Author SHA1 Message Date
0d98a6ce57 fix: 构建后编辑器打不开 2025-09-02 14:41:24 +08:00
0b611c897a fix: 构建后报错 2025-09-02 13:54:37 +08:00
b34de95c06 refactor: 删除 unplugin-vue-components 插件 2025-09-02 13:23:03 +08:00
28 changed files with 400 additions and 337 deletions

18
components.d.ts vendored
View File

@ -1,18 +0,0 @@
// generated by unplugin-vue-components
// We suggest you to commit this file into source control
// Read more: https://github.com/vuejs/core/pull/3399
import '@vue/runtime-core'
export {}
declare module '@vue/runtime-core' {
export interface GlobalComponents {
ADivider: typeof import('ant-design-vue/es')['Divider']
AInput: typeof import('ant-design-vue/es')['Input']
AProgress: typeof import('ant-design-vue/es')['Progress']
ASelect: typeof import('ant-design-vue/es')['Select']
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
ASlider: typeof import('ant-design-vue/es')['Slider']
ASwitch: typeof import('ant-design-vue/es')['Switch']
}
}

View File

@ -52,9 +52,9 @@
"@types/fontmin": "^0.9.5",
"@types/fs-extra": "^11.0.4",
"@types/lodash-es": "^4.17.12",
"@types/node": "^18.19.80",
"@types/node": "^22.18.0",
"@types/ws": "^8.18.0",
"@vitejs/plugin-legacy": "^6.0.2",
"@vitejs/plugin-legacy": "^7.2.1",
"@vitejs/plugin-vue": "^6.0.1",
"@vitejs/plugin-vue-jsx": "^5.1.1",
"archiver": "^7.0.1",
@ -62,7 +62,8 @@
"compressing": "^1.10.1",
"concurrently": "^9.1.2",
"eslint": "^9.22.0",
"eslint-plugin-prettier": "^5.5.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.4",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-vue": "^9.33.0",
"express": "^5.1.0",
@ -82,8 +83,7 @@
"tsx": "^4.20.5",
"typescript": "^5.9.2",
"typescript-eslint": "^8.27.0",
"unplugin-vue-components": "^0.22.12",
"vite": "^6.3.5",
"vite": "^7.0.0",
"vite-plugin-dts": "^4.5.4",
"vitepress": "^1.6.3",
"vitepress-plugin-mermaid": "^2.0.17",

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

@ -9,12 +9,12 @@
<Scroll class="column-left" :id="`column-left-${id}`">
<slot name="left"></slot>
</Scroll>
<a-divider
<Divider
class="divider"
dashed
style="border-color: #ddd4"
:type="isMobile ? 'horizontal' : 'vertical'"
></a-divider>
></Divider>
<Scroll class="column-right" :id="`column-right-${id}`"
><slot name="right"></slot
></Scroll>
@ -25,6 +25,7 @@
<script lang="ts" setup>
import { onMounted, onUpdated } from 'vue';
import { LeftOutlined } from '@ant-design/icons-vue';
import { Divider } from 'ant-design-vue';
import Scroll from './scroll.vue';
import { isMobile, requireUniqueSymbol } from '../use';
import { isNil } from 'lodash-es';

View File

@ -27,11 +27,11 @@
</div>
<div class="special-text" v-else>无属性</div>
</div>
<a-divider
<Divider
type="vertical"
dashed
style="height: 100%; margin: 0 3% 0 1%; border-color: #ddd4"
></a-divider>
></Divider>
<div class="rightbar">
<div class="detail">
<div class="detail-info">
@ -76,7 +76,6 @@
}}</span
>
</div>
<div class="detail-info">
<span style="color: lightsalmon"
>临界&nbsp;&nbsp;&nbsp;&nbsp;{{
@ -110,6 +109,7 @@
</template>
<script lang="ts" setup>
import { Divider } from 'ant-design-vue';
import BoxAnimate from '../components/boxAnimate.vue';
import { isMobile } from '../use';
import { ToShowEnemy } from '../tools/book';

View File

@ -5,11 +5,11 @@
<canvas ref="critical" class="chart"></canvas>
<div class="slider-div">
<span>加攻次数&nbsp;&nbsp;&nbsp;&nbsp;{{ addAtk }}</span>
<a-slider
<Slider
class="slider"
v-model:value="addAtk"
:max="ceil((originCri.at(-1)?.[0] ?? 2) / ratio) - 1"
></a-slider>
></Slider>
<span
>最大值&nbsp;&nbsp;&nbsp;&nbsp;{{
ceil((originCri.at(-1)?.[0] ?? 2) / ratio) - 1
@ -17,20 +17,20 @@
>
</div>
</div>
<a-divider
<Divider
dashed
style="width: 100%; border-color: #ddd4; margin: 1vh 0 1vh 0"
></a-divider>
></Divider>
<div id="def">
<div class="des">加防伤害</div>
<canvas ref="def" class="chart"></canvas>
<div class="slider-div">
<span>加防次数&nbsp;&nbsp;&nbsp;&nbsp;{{ addDef }}</span>
<a-slider
<Slider
class="slider"
v-model:value="addDef"
:max="ceil((originDef.at(-1)?.[0] ?? 2) / ratio) - 1"
></a-slider>
></Slider>
<span
>最大值&nbsp;&nbsp;&nbsp;&nbsp;{{
ceil((originDef.at(-1)?.[0] ?? 2) / ratio) - 1
@ -93,6 +93,7 @@
</template>
<script lang="ts" setup>
import { Slider, Divider } from 'ant-design-vue';
import { computed, onMounted, ref, watch } from 'vue';
import { detailInfo, getCriticalDamage, getDefDamage } from '../tools/book';
import Chart, { ChartConfiguration } from 'chart.js/auto';

View File

@ -5,10 +5,10 @@
<component :is="info"></component>
</div>
</Scroll>
<a-divider
<Divider
dashed
style="margin: 2vh 0 2vh 0; border-color: #ddd4"
></a-divider>
></Divider>
<div id="critical">
<div style="font-size: 2.5vh; width: 100%; text-align: center">
临界表
@ -31,6 +31,7 @@
import { isMobile } from '../use';
import { detailInfo, getSpecialHint } from '../tools/book';
import Scroll from '../components/scroll.vue';
import { Divider } from 'ant-design-vue';
const props = defineProps<{
fromBook?: boolean;

View File

@ -23,10 +23,10 @@
@select="select(e, i)"
@hover="selected = i"
></EnemyOne>
<a-divider
<Divider
dashed
style="width: 100%; border-color: #ddd4"
></a-divider>
></Divider>
</div>
</Scroll>
</div>
@ -50,6 +50,7 @@ import { mainSetting } from '../preset/settingIns';
import { isMobile } from '../use';
import { IMountedVBind } from '../interface';
import { isNil } from 'lodash-es';
import { Divider } from 'ant-design-vue';
const props = defineProps<IMountedVBind>();

View File

@ -8,10 +8,10 @@
</div>
<div id="info" :style="{ top: `${top}px` }">
<EnemyOne :enemy="enemy!"></EnemyOne>
<a-divider
<Divider
dashed
style="margin: 2vh 0 2vh 0; border-color: #ddd4; width: 100%"
></a-divider>
></Divider>
</div>
<Transition name="detail">
<EnemySpecial
@ -78,6 +78,7 @@ import { LeftOutlined, RightOutlined } from '@ant-design/icons-vue';
import EnemyCritical from '../panel/enemyCritical.vue';
import { detailInfo } from '../tools/book';
import { gameKey } from '@motajs/system-action';
import { Divider } from 'ant-design-vue';
const props = defineProps<{
fromBook?: boolean;

View File

@ -29,14 +29,14 @@
<meh-outlined />
</span>
<div id="danmaku-input-div">
<a-input
<Input
id="danmaku-input-input"
:max-length="200"
v-model:value="inputValue"
:max-length="200"
placeholder="请在此输入弹幕,显示中括号请使用\[或\]"
autocomplete="off"
@change="input(inputValue)"
@pressEnter="inputEnter()"
@press-enter="inputEnter()"
/>
</div>
<span
@ -50,14 +50,14 @@
<Transition name="danmaku">
<div v-if="cssOpened" id="danmaku-css">
<span id="danmaku-css-hint">编辑弹幕的 CSS 样式</span>
<a-input
<Input
id="danmaku-css-input"
:max-length="300"
v-model:value="cssInfo"
:max-length="300"
placeholder="请在此输入样式"
autocomplete="off"
@blur="inputCSS(cssInfo)"
@pressEnter="inputCSS(cssInfo)"
@press-enter="inputCSS(cssInfo)"
/>
<span v-if="cssError" id="danmaku-css-error">{{
cssError
@ -113,7 +113,7 @@
></span>
</div>
</Scroll>
<a-input
<Input
id="danmaku-color-input"
:max-length="100"
v-model:value="nowColor"
@ -121,7 +121,7 @@
autocomplete="off"
@blur="inputColor(nowColor)"
@pressEnter="inputColor(nowColor)"
></a-input>
></Input>
</div>
</Transition>
<Transition name="danmaku-icon">
@ -168,6 +168,7 @@ import Scroll from '../components/scroll.vue';
import BoxAnimate from '../components/boxAnimate.vue';
import { IMountedVBind } from '../interface';
import { tip } from '../use';
import { Input } from 'ant-design-vue';
const props = defineProps<IMountedVBind>();

View File

@ -11,19 +11,17 @@
<div id="equipbox-main">
<div id="equip-list">
<div id="filter">
<a-select v-model:value="norm" class="select">
<a-select-option v-for="t of normList" :value="t">{{
<Select v-model:value="norm" class="select">
<SelectOption v-for="t of normList" :value="t">{{
t === 'none' ? '所有' : getStatusLabel(t)
}}</a-select-option>
</a-select>
<a-divider type="vertical" class="divider"></a-divider>
<a-select v-model:value="sType" class="select">
<a-select-option value="value">数值</a-select-option>
<a-select-option value="percentage"
>百分比</a-select-option
>
</a-select>
<a-divider type="vertical" class="divider"></a-divider>
}}</SelectOption>
</Select>
<Divider type="vertical" class="divider"></Divider>
<Select v-model:value="sType" class="select">
<SelectOption value="value">数值</SelectOption>
<SelectOption value="percentage">百分比</SelectOption>
</Select>
<Divider type="vertical" class="divider"></Divider>
<span
@click="changeSort()"
class="button-text"
@ -35,10 +33,10 @@
<span v-else><sort-descending-outlined /></span>
</span>
</div>
<a-divider
<Divider
dashed
style="border-color: #ddd4; margin: 1vh 0 1vh 0"
></a-divider>
></Divider>
<Scroll id="equip-scroll"
><div
class="equip selectable"
@ -62,12 +60,12 @@
>
</div>
<div id="equip-status">
<a-divider
<Divider
class="divider"
:type="isMobile ? 'horizontal' : 'vertical'"
dashed
style="border-color: #ddd4"
></a-divider>
></Divider>
<div id="equip-status-main">
<div id="equip-now">
<Scroll
@ -94,10 +92,10 @@
</div>
</Scroll>
</div>
<a-divider
<Divider
dashed
style="border-color: #ddd4; margin: 1vh 0 1vh 0"
></a-divider>
></Divider>
<div id="equip-hero" v-if="!isMobile">
<div id="hero-icon">
<BoxAnimate
@ -112,21 +110,21 @@
</div>
</div>
</div>
<a-divider
<Divider
v-if="!isMobile"
class="divider"
type="vertical"
dashed
style="border-color: #ddd4"
></a-divider>
></Divider>
</div>
<div id="equip-desc">
<div id="equip-icon">
<BoxAnimate
:id="
isCol
? equiped[selected] ?? 'none'
: toShow[selected]?.[0] ?? 'none'
? (equiped[selected] ?? 'none')
: (toShow[selected]?.[0] ?? 'none')
"
></BoxAnimate>
<span>{{ equip.name }}</span>
@ -134,20 +132,20 @@
<div id="equip-type">
<span>装备孔{{ equip.equip?.type }}</span>
</div>
<a-divider
<Divider
dashed
style="border-color: #ddd4; margin: 1vh 0 1vh 0"
></a-divider>
></Divider>
<div id="equip-add">
<span id="title">增减属性</span>
<Scroll style="width: 100%; height: 100%">
<component :is="addStatus"></component>
</Scroll>
</div>
<a-divider
<Divider
dashed
style="border-color: #ddd4; margin: 1vh 0 1vh 0"
></a-divider>
></Divider>
<div id="equip-desc-text">
<span id="title">装备介绍</span>
<Scroll id="desc-text" style="height: 100%; width: 100%">
@ -189,6 +187,7 @@ import { hyper } from 'mutate-animate';
import { gameKey } from '@motajs/system-action';
import { IMountedVBind } from '../interface';
import { isNil } from 'lodash-es';
import { Divider, Select, SelectOption } from 'ant-design-vue';
const props = defineProps<IMountedVBind>();

View File

@ -8,21 +8,21 @@
<div id="fly-settings">
<div id="fly-border">
<span>无边框模式</span>
<a-switch
<Switch
class="fly-settings"
v-model:checked="noBorder"
checked-children="ON"
un-checked-children="OFF"
></a-switch>
></Switch>
</div>
<div v-if="!isMobile" id="fly-tradition">
<span>传统按键模式</span>
<a-switch
<Switch
class="fly-settings"
v-model:checked="tradition"
checked-children="ON"
un-checked-children="OFF"
></a-switch>
></Switch>
</div>
<span
v-if="!isMobile"
@ -45,16 +45,16 @@
>
</div></Scroll
>
<a-divider type="vertical" dashed id="divider-left"></a-divider>
<Divider type="vertical" dashed id="divider-left"></Divider>
<div id="fly-map-div">
<canvas id="fly-map" @click="click"></canvas>
</div>
</div>
<a-divider
<Divider
id="divider-right"
dashed
:type="isMobile ? 'horizontal' : 'vertical'"
></a-divider>
></Divider>
<div id="fly-right">
<canvas id="fly-thumbnail" @click="fly" @wheel="wheel"></canvas>
<div id="fly-tools">
@ -104,6 +104,7 @@ import { createChangable } from '../tools/common';
import { mainSetting } from '../preset/settingIns';
import { GameStorage } from '@motajs/legacy-system';
import { IMountedVBind } from '../interface';
import { Divider, Switch } from 'ant-design-vue';
const props = defineProps<IMountedVBind>();
@ -580,7 +581,10 @@ onUnmounted(() => {
max-width: 50%;
text-overflow: ellipsis;
overflow: hidden;
text-shadow: 1px 1px 1px black, 1px -1px 1px black, -1px 1px 1px black,
text-shadow:
1px 1px 1px black,
1px -1px 1px black,
-1px 1px 1px black,
-1px -1px 1px black;
}

View File

@ -1,6 +1,6 @@
<template>
<div id="load">
<a-progress
<Progress
class="task-progress"
type="circle"
:percent="(loading / totalTask) * 100"
@ -9,17 +9,17 @@
<template #format>
<span>{{ loaded }} / {{ totalTask }}</span>
</template>
</a-progress>
</Progress>
<div class="byte-div">
<span class="byte-progress-tip"
>{{ formatSize(loadedByte) }} /
{{ formatSize(totalByte) }}</span
>
<a-progress
<Progress
class="byte-progress"
type="line"
:percent="loadedPercent"
></a-progress>
></Progress>
</div>
</div>
</template>
@ -35,6 +35,7 @@ import { formatSize } from '../utils';
import { logger } from '@motajs/common';
import { sleep } from 'mutate-animate';
import { IMountedVBind } from '../interface';
import { Progress } from 'ant-design-vue';
const props = defineProps<IMountedVBind>();

View File

@ -37,11 +37,11 @@
</div>
</div>
</Scroll>
<a-divider
<Divider
class="display-divider"
:type="isMobile ? 'horizontal' : 'vertical'"
dashed
></a-divider>
></Divider>
</div>
</TransitionGroup>
</div>
@ -54,7 +54,7 @@
"
></div>
</Scroll>
<a-divider class="info-divider" dashed></a-divider>
<Divider class="info-divider" dashed></Divider>
<div class="info-editor" v-if="!!selectedItem">
<div class="editor-custom">
<component
@ -86,6 +86,7 @@ import Scroll from '../components/scroll.vue';
import { isMobile } from '../use';
import { gameKey } from '@motajs/system-action';
import { IMountedVBind } from '../interface';
import { Divider } from 'ant-design-vue';
const props = defineProps<IMountedVBind>();

View File

@ -6,17 +6,17 @@
>
</div>
<span id="item-name">{{ info.name }}</span>
<a-divider dashed style="border-color: #ddd4" id="divider"></a-divider>
<Divider dashed style="border-color: #ddd4" id="divider"></Divider>
<div id="item-info">
<Scroll id="item-desc" :no-scroll="true">
<span v-html="desc"></span>
</Scroll>
</div>
<a-divider
<Divider
dashed
style="border-color: #ddd4"
id="divider-split"
></a-divider>
></Divider>
<div id="shop-bottom">
<div id="item-list">
<Scroll style="width: 100%; height: 100%">
@ -43,12 +43,12 @@
</div>
</Scroll>
</div>
<a-divider
<Divider
dashed
style="border-color: #ddd4"
type="vertical"
id="divider-vertical"
></a-divider>
></Divider>
<div id="item-sell-info">
<div id="shop-mode">
<span
@ -57,12 +57,12 @@
@click="mode = 'buy'"
>购买</span
>
<a-divider
<Divider
dashed
type="vertical"
id="divider-vertical"
style="border-color: #ddd4"
></a-divider>
></Divider>
<span
class="button-text mode-button"
:active="mode === 'sell'"
@ -71,11 +71,11 @@
>售出</span
>
</div>
<a-divider
<Divider
dashed
style="border-color: #ddd4"
id="divider-mode"
></a-divider>
></Divider>
<div
class="item-sell-info"
:style="{
@ -105,11 +105,11 @@
<span>拥有</span>
<span>{{ cnt(item.id) }}</span>
</div>
<a-divider
<Divider
dashed
style="border-color: #ddd4"
id="divider-mode"
></a-divider>
></Divider>
<div id="sell-count">
<span>{{ mode === 'buy' ? '购买' : '售出' }}数量</span>
<div id="sell-count-select">
@ -126,10 +126,10 @@
/>
</div>
</div>
<a-divider
<Divider
dashed
style="border-color: #ddd4; margin: 2vh 0 2vh 0"
></a-divider>
></Divider>
<div id="sell-confirm">
<span
id="sell-total"
@ -175,6 +175,7 @@ import BoxAnimate from '../components/boxAnimate.vue';
import { gameKey } from '@motajs/system-action';
import { IMountedVBind } from '../interface';
import { tip } from '../use';
import { Divider } from 'ant-design-vue';
const props = defineProps<IMountedVBind>();

View File

@ -6,7 +6,7 @@
>
</div>
<span id="skill-title">{{ skill.title }}</span>
<a-divider dashed style="border-color: #ddd4" id="divider"></a-divider>
<Divider dashed style="border-color: #ddd4" id="divider"></Divider>
<div id="skill-info">
<Scroll id="skill-desc" :no-scroll="true">
<span v-html="desc"></span>
@ -16,25 +16,25 @@
<span v-if="level < skill.max" v-html="effect[1]"></span>
</div>
</div>
<a-divider
<Divider
dashed
style="border-color: #ddd4"
id="divider-split"
></a-divider>
></Divider>
<div id="skill-bottom">
<canvas id="skill-canvas"></canvas>
<a-divider
<Divider
dashed
style="border-color: #ddd4"
:type="isMobile ? 'horizontal' : 'vertical'"
id="divider-vertical"
></a-divider>
></Divider>
<div id="skill-upgrade-info">
<div id="skill-upgrade-up">
<span id="skill-level"
>当前等级{{ level }} / {{ skill.max }}</span
>
<a-divider dashed class="upgrade-divider"></a-divider>
<Divider dashed class="upgrade-divider"></Divider>
<span
v-if="level < skill.max"
id="skill-consume"
@ -44,7 +44,7 @@
<span v-else id="skill-consume" style="color: gold"
>已满级</span
>
<a-divider dashed class="upgrade-divider"></a-divider>
<Divider dashed class="upgrade-divider"></Divider>
<Scroll id="front-scroll" :no-scroll="true"
><div id="skill-front">
<span>前置技能</span>
@ -59,7 +59,7 @@
>
</div>
<div id="skill-upgrade-bottom">
<a-divider dashed class="upgrade-divider"></a-divider>
<Divider dashed class="upgrade-divider"></Divider>
<div id="skill-chapter">
<span class="button-text" @click="selectChapter(-1)"
><LeftOutlined
@ -87,6 +87,7 @@ import { sleep } from 'mutate-animate';
import { gameKey } from '@motajs/system-action';
import { IMountedVBind } from '../interface';
import { isNil } from 'lodash-es';
import { Divider } from 'ant-design-vue';
const props = defineProps<IMountedVBind>();

View File

@ -21,11 +21,11 @@
:selected="mode === 'tools'"
>消耗道具</span
>
<a-divider
<Divider
dashed
style="border-color: #ddd4; height: 100%"
type="vertical"
></a-divider>
></Divider>
<span
class="button-text"
@click="mode = 'constants'"
@ -33,10 +33,10 @@
>永久道具</span
>
</div>
<a-divider
<Divider
dashed
style="margin: 1vh 0 1vh 0; border-color: #ddd4"
></a-divider>
></Divider>
<Scroll class="item-list">
<div
class="item selectable"
@ -62,12 +62,12 @@
</div>
</Scroll>
</div>
<a-divider
<Divider
dashed
:type="isMobile ? 'horizontal' : 'vertical'"
class="divider"
style="border-color: #ddd4; margin: 1%"
></a-divider>
></Divider>
</div>
<div id="detail">
<div id="info">
@ -85,13 +85,13 @@
<span>{{
selected === 'none'
? '永久道具'
: getClsName(all[selected].cls as ItemMode) ??
'永久道具'
: (getClsName(all[selected].cls as ItemMode) ??
'永久道具')
}}</span>
</div>
</div>
<span style="margin-top: 2vh">点击该物品以使用</span>
<a-divider dashed style="border-color: #ddd4"></a-divider>
<Divider dashed style="border-color: #ddd4"></Divider>
<div id="desc">
<span>道具描述</span>
<Scroll id="desc-text">
@ -115,7 +115,7 @@ import { getClsName, getItems } from '../tools/toolbox';
import { isMobile } from '../use';
import { type } from '../utils';
import { hyper } from 'mutate-animate';
import { message } from 'ant-design-vue';
import { Divider, message } from 'ant-design-vue';
import { gameKey } from '@motajs/system-action';
import { IMountedVBind } from '../interface';
import { isNil } from 'lodash-es';

View File

@ -109,20 +109,20 @@ importers:
specifier: ^4.17.12
version: 4.17.12
'@types/node':
specifier: ^18.19.80
version: 18.19.123
specifier: ^22.18.0
version: 22.18.0
'@types/ws':
specifier: ^8.18.0
version: 8.18.1
'@vitejs/plugin-legacy':
specifier: ^6.0.2
version: 6.1.1(terser@5.43.1)(vite@6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))
specifier: ^7.2.1
version: 7.2.1(terser@5.43.1)(vite@7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))
'@vitejs/plugin-vue':
specifier: ^6.0.1
version: 6.0.1(vite@6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))(vue@3.5.20(typescript@5.9.2))
version: 6.0.1(vite@7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))(vue@3.5.20(typescript@5.9.2))
'@vitejs/plugin-vue-jsx':
specifier: ^5.1.1
version: 5.1.1(vite@6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))(vue@3.5.20(typescript@5.9.2))
version: 5.1.1(vite@7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))(vue@3.5.20(typescript@5.9.2))
archiver:
specifier: ^7.0.1
version: 7.0.1
@ -138,9 +138,12 @@ importers:
eslint:
specifier: ^9.22.0
version: 9.34.0
eslint-config-prettier:
specifier: ^10.1.8
version: 10.1.8(eslint@9.34.0)
eslint-plugin-prettier:
specifier: ^5.5.0
version: 5.5.4(eslint@9.34.0)(prettier@3.6.2)
specifier: ^5.5.4
version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.34.0))(eslint@9.34.0)(prettier@3.6.2)
eslint-plugin-react:
specifier: ^7.37.5
version: 7.37.5(eslint@9.34.0)
@ -198,21 +201,18 @@ importers:
typescript-eslint:
specifier: ^8.27.0
version: 8.41.0(eslint@9.34.0)(typescript@5.9.2)
unplugin-vue-components:
specifier: ^0.22.12
version: 0.22.12(@babel/parser@7.28.3)(rollup@4.49.0)(vue@3.5.20(typescript@5.9.2))
vite:
specifier: ^6.3.5
version: 6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)
specifier: ^7.0.0
version: 7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)
vite-plugin-dts:
specifier: ^4.5.4
version: 4.5.4(@types/node@18.19.123)(rollup@4.49.0)(typescript@5.9.2)(vite@6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))
version: 4.5.4(@types/node@22.18.0)(rollup@4.49.0)(typescript@5.9.2)(vite@7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))
vitepress:
specifier: ^1.6.3
version: 1.6.4(@algolia/client-search@5.36.0)(@types/node@18.19.123)(async-validator@4.2.5)(axios@1.11.0)(less@4.4.1)(markdown-it-mathjax3@4.3.2(encoding@0.1.13))(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.2)
version: 1.6.4(@algolia/client-search@5.36.0)(@types/node@22.18.0)(async-validator@4.2.5)(axios@1.11.0)(less@4.4.1)(markdown-it-mathjax3@4.3.2(encoding@0.1.13))(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.2)
vitepress-plugin-mermaid:
specifier: ^2.0.17
version: 2.0.17(mermaid@11.10.1)(vitepress@1.6.4(@algolia/client-search@5.36.0)(@types/node@18.19.123)(async-validator@4.2.5)(axios@1.11.0)(less@4.4.1)(markdown-it-mathjax3@4.3.2(encoding@0.1.13))(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.2))
version: 2.0.17(mermaid@11.10.1)(vitepress@1.6.4(@algolia/client-search@5.36.0)(@types/node@22.18.0)(async-validator@4.2.5)(axios@1.11.0)(less@4.4.1)(markdown-it-mathjax3@4.3.2(encoding@0.1.13))(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.2))
vue-tsc:
specifier: ^2.2.8
version: 2.2.12(typescript@5.9.2)
@ -651,9 +651,6 @@ packages:
'@antfu/install-pkg@1.1.0':
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
'@antfu/utils@0.7.10':
resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
'@antfu/utils@8.1.1':
resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
@ -2354,6 +2351,9 @@ packages:
'@types/node@18.19.123':
resolution: {integrity: sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg==}
'@types/node@22.18.0':
resolution: {integrity: sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ==}
'@types/qs@6.14.0':
resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
@ -2449,12 +2449,12 @@ packages:
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
'@vitejs/plugin-legacy@6.1.1':
resolution: {integrity: sha512-BvusL+mYZ0q5qS5Rq3D70QxZBmhyiHRaXLtYJHH5AEsAmdSqJR4xe5KwMi1H3w8/9lVJwhkLYqFQ9vmWYWy6kA==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
'@vitejs/plugin-legacy@7.2.1':
resolution: {integrity: sha512-CaXb/y0mlfu7jQRELEJJc2/5w2bX2m1JraARgFnvSB2yfvnCNJVWWlqAo6WjnKoepOwKx8gs0ugJThPLKCOXIg==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
terser: ^5.16.0
vite: ^6.0.0
vite: ^7.0.0
'@vitejs/plugin-vue-jsx@5.1.1':
resolution: {integrity: sha512-uQkfxzlF8SGHJJVH966lFTdjM/lGcwJGzwAHpVqAPDD/QcsqoUGa+q31ox1BrUfi+FLP2ChVp7uLXE3DkHyDdQ==}
@ -3611,6 +3611,12 @@ packages:
engines: {node: '>=6.0'}
hasBin: true
eslint-config-prettier@10.1.8:
resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
eslint-plugin-prettier@5.5.4:
resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==}
engines: {node: ^14.18.0 || >=16.0.0}
@ -4420,10 +4426,6 @@ packages:
lie@3.3.0:
resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
local-pkg@0.4.3:
resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
engines: {node: '>=14'}
local-pkg@1.1.2:
resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
engines: {node: '>=14'}
@ -4480,10 +4482,6 @@ packages:
typescript:
optional: true
magic-string@0.27.0:
resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
engines: {node: '>=12'}
magic-string@0.30.18:
resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==}
@ -5812,6 +5810,9 @@ packages:
undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
unicode-canonical-property-names-ecmascript@2.0.1:
resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
engines: {node: '>=4'}
@ -5859,20 +5860,6 @@ packages:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
unplugin-vue-components@0.22.12:
resolution: {integrity: sha512-FxyzsuBvMCYPIk+8cgscGBQ345tvwVu+qY5IhE++eorkyvA4Z1TiD/HCiim+Kbqozl10i4K+z+NCa2WO2jexRA==}
engines: {node: '>=14'}
peerDependencies:
'@babel/parser': ^7.15.8
vue: 2 || 3
peerDependenciesMeta:
'@babel/parser':
optional: true
unplugin@1.16.1:
resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
engines: {node: '>=14.0.0'}
update-browserslist-db@1.1.3:
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
hasBin: true
@ -5971,19 +5958,19 @@ packages:
terser:
optional: true
vite@6.3.5:
resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
vite@7.0.0:
resolution: {integrity: sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
'@types/node': ^20.19.0 || >=22.12.0
jiti: '>=1.21.0'
less: '*'
less: ^4.0.0
lightningcss: ^1.21.0
sass: '*'
sass-embedded: '*'
stylus: '*'
sugarss: '*'
sass: ^1.70.0
sass-embedded: ^1.70.0
stylus: '>=0.54.8'
sugarss: ^5.0.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
@ -6095,9 +6082,6 @@ packages:
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
@ -6337,8 +6321,6 @@ snapshots:
package-manager-detector: 1.3.0
tinyexec: 1.0.1
'@antfu/utils@0.7.10': {}
'@antfu/utils@8.1.1': {}
'@babel/cli@7.28.3(@babel/core@7.28.3)':
@ -7606,23 +7588,23 @@ snapshots:
dependencies:
langium: 3.3.1
'@microsoft/api-extractor-model@7.30.7(@types/node@18.19.123)':
'@microsoft/api-extractor-model@7.30.7(@types/node@22.18.0)':
dependencies:
'@microsoft/tsdoc': 0.15.1
'@microsoft/tsdoc-config': 0.17.1
'@rushstack/node-core-library': 5.14.0(@types/node@18.19.123)
'@rushstack/node-core-library': 5.14.0(@types/node@22.18.0)
transitivePeerDependencies:
- '@types/node'
'@microsoft/api-extractor@7.52.11(@types/node@18.19.123)':
'@microsoft/api-extractor@7.52.11(@types/node@22.18.0)':
dependencies:
'@microsoft/api-extractor-model': 7.30.7(@types/node@18.19.123)
'@microsoft/api-extractor-model': 7.30.7(@types/node@22.18.0)
'@microsoft/tsdoc': 0.15.1
'@microsoft/tsdoc-config': 0.17.1
'@rushstack/node-core-library': 5.14.0(@types/node@18.19.123)
'@rushstack/node-core-library': 5.14.0(@types/node@22.18.0)
'@rushstack/rig-package': 0.5.3
'@rushstack/terminal': 0.15.4(@types/node@18.19.123)
'@rushstack/ts-command-line': 5.0.2(@types/node@18.19.123)
'@rushstack/terminal': 0.15.4(@types/node@22.18.0)
'@rushstack/ts-command-line': 5.0.2(@types/node@22.18.0)
lodash: 4.17.21
minimatch: 10.0.3
resolve: 1.22.10
@ -7809,7 +7791,7 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.49.0':
optional: true
'@rushstack/node-core-library@5.14.0(@types/node@18.19.123)':
'@rushstack/node-core-library@5.14.0(@types/node@22.18.0)':
dependencies:
ajv: 8.13.0
ajv-draft-04: 1.0.0(ajv@8.13.0)
@ -7820,23 +7802,23 @@ snapshots:
resolve: 1.22.10
semver: 7.5.4
optionalDependencies:
'@types/node': 18.19.123
'@types/node': 22.18.0
'@rushstack/rig-package@0.5.3':
dependencies:
resolve: 1.22.10
strip-json-comments: 3.1.1
'@rushstack/terminal@0.15.4(@types/node@18.19.123)':
'@rushstack/terminal@0.15.4(@types/node@22.18.0)':
dependencies:
'@rushstack/node-core-library': 5.14.0(@types/node@18.19.123)
'@rushstack/node-core-library': 5.14.0(@types/node@22.18.0)
supports-color: 8.1.1
optionalDependencies:
'@types/node': 18.19.123
'@types/node': 22.18.0
'@rushstack/ts-command-line@5.0.2(@types/node@18.19.123)':
'@rushstack/ts-command-line@5.0.2(@types/node@22.18.0)':
dependencies:
'@rushstack/terminal': 0.15.4(@types/node@18.19.123)
'@rushstack/terminal': 0.15.4(@types/node@22.18.0)
'@types/argparse': 1.0.38
argparse: 1.0.10
string-argv: 0.3.2
@ -8119,6 +8101,10 @@ snapshots:
dependencies:
undici-types: 5.26.5
'@types/node@22.18.0':
dependencies:
undici-types: 6.21.0
'@types/qs@6.14.0': {}
'@types/range-parser@1.2.7': {}
@ -8250,10 +8236,14 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
'@vitejs/plugin-legacy@6.1.1(terser@5.43.1)(vite@6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))':
'@vitejs/plugin-legacy@7.2.1(terser@5.43.1)(vite@7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))':
dependencies:
'@babel/core': 7.28.3
'@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.3)
'@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.3)
'@babel/preset-env': 7.28.3(@babel/core@7.28.3)
babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.3)
babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.3)
browserslist: 4.25.3
browserslist-to-esbuild: 2.1.1(browserslist@4.25.3)
core-js: 3.45.1
@ -8261,31 +8251,31 @@ snapshots:
regenerator-runtime: 0.14.1
systemjs: 6.15.1
terser: 5.43.1
vite: 6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)
vite: 7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)
transitivePeerDependencies:
- supports-color
'@vitejs/plugin-vue-jsx@5.1.1(vite@6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))(vue@3.5.20(typescript@5.9.2))':
'@vitejs/plugin-vue-jsx@5.1.1(vite@7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))(vue@3.5.20(typescript@5.9.2))':
dependencies:
'@babel/core': 7.28.3
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3)
'@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.3)
'@rolldown/pluginutils': 1.0.0-beta.34
'@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.3)
vite: 6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)
vite: 7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)
vue: 3.5.20(typescript@5.9.2)
transitivePeerDependencies:
- supports-color
'@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1))(vue@3.5.20(typescript@5.9.2))':
'@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1))(vue@3.5.20(typescript@5.9.2))':
dependencies:
vite: 5.4.19(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)
vite: 5.4.19(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)
vue: 3.5.20(typescript@5.9.2)
'@vitejs/plugin-vue@6.0.1(vite@6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))(vue@3.5.20(typescript@5.9.2))':
'@vitejs/plugin-vue@6.0.1(vite@7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5))(vue@3.5.20(typescript@5.9.2))':
dependencies:
'@rolldown/pluginutils': 1.0.0-beta.29
vite: 6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)
vite: 7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)
vue: 3.5.20(typescript@5.9.2)
'@volar/language-core@2.4.15':
@ -9712,12 +9702,18 @@ snapshots:
optionalDependencies:
source-map: 0.6.1
eslint-plugin-prettier@5.5.4(eslint@9.34.0)(prettier@3.6.2):
eslint-config-prettier@10.1.8(eslint@9.34.0):
dependencies:
eslint: 9.34.0
eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.34.0))(eslint@9.34.0)(prettier@3.6.2):
dependencies:
eslint: 9.34.0
prettier: 3.6.2
prettier-linter-helpers: 1.0.0
synckit: 0.11.11
optionalDependencies:
eslint-config-prettier: 10.1.8(eslint@9.34.0)
eslint-plugin-react@7.37.5(eslint@9.34.0):
dependencies:
@ -10618,8 +10614,6 @@ snapshots:
dependencies:
immediate: 3.0.6
local-pkg@0.4.3: {}
local-pkg@1.1.2:
dependencies:
mlly: 1.8.0
@ -10680,10 +10674,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
magic-string@0.27.0:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
magic-string@0.30.18:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@ -12235,6 +12225,8 @@ snapshots:
undici-types@5.26.5: {}
undici-types@6.21.0: {}
unicode-canonical-property-names-ecmascript@2.0.1: {}
unicode-match-property-ecmascript@2.0.0:
@ -12281,30 +12273,6 @@ snapshots:
unpipe@1.0.0: {}
unplugin-vue-components@0.22.12(@babel/parser@7.28.3)(rollup@4.49.0)(vue@3.5.20(typescript@5.9.2)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.2.0(rollup@4.49.0)
chokidar: 3.6.0
debug: 4.4.1
fast-glob: 3.3.3
local-pkg: 0.4.3
magic-string: 0.27.0
minimatch: 5.1.6
resolve: 1.22.10
unplugin: 1.16.1
vue: 3.5.20(typescript@5.9.2)
optionalDependencies:
'@babel/parser': 7.28.3
transitivePeerDependencies:
- rollup
- supports-color
unplugin@1.16.1:
dependencies:
acorn: 8.15.0
webpack-virtual-modules: 0.6.2
update-browserslist-db@1.1.3(browserslist@4.25.3):
dependencies:
browserslist: 4.25.3
@ -12381,9 +12349,9 @@ snapshots:
replace-ext: 2.0.0
teex: 1.0.1
vite-plugin-dts@4.5.4(@types/node@18.19.123)(rollup@4.49.0)(typescript@5.9.2)(vite@6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)):
vite-plugin-dts@4.5.4(@types/node@22.18.0)(rollup@4.49.0)(typescript@5.9.2)(vite@7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)):
dependencies:
'@microsoft/api-extractor': 7.52.11(@types/node@18.19.123)
'@microsoft/api-extractor': 7.52.11(@types/node@22.18.0)
'@rollup/pluginutils': 5.2.0(rollup@4.49.0)
'@volar/typescript': 2.4.23
'@vue/language-core': 2.2.0(typescript@5.9.2)
@ -12394,24 +12362,24 @@ snapshots:
magic-string: 0.30.18
typescript: 5.9.2
optionalDependencies:
vite: 6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)
vite: 7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)
transitivePeerDependencies:
- '@types/node'
- rollup
- supports-color
vite@5.4.19(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1):
vite@5.4.19(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1):
dependencies:
esbuild: 0.21.5
postcss: 8.5.6
rollup: 4.49.0
optionalDependencies:
'@types/node': 18.19.123
'@types/node': 22.18.0
fsevents: 2.3.3
less: 4.4.1
terser: 5.43.1
vite@6.3.5(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5):
vite@7.0.0(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5):
dependencies:
esbuild: 0.25.9
fdir: 6.5.0(picomatch@4.0.3)
@ -12420,20 +12388,20 @@ snapshots:
rollup: 4.49.0
tinyglobby: 0.2.14
optionalDependencies:
'@types/node': 18.19.123
'@types/node': 22.18.0
fsevents: 2.3.3
less: 4.4.1
terser: 5.43.1
tsx: 4.20.5
vitepress-plugin-mermaid@2.0.17(mermaid@11.10.1)(vitepress@1.6.4(@algolia/client-search@5.36.0)(@types/node@18.19.123)(async-validator@4.2.5)(axios@1.11.0)(less@4.4.1)(markdown-it-mathjax3@4.3.2(encoding@0.1.13))(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.2)):
vitepress-plugin-mermaid@2.0.17(mermaid@11.10.1)(vitepress@1.6.4(@algolia/client-search@5.36.0)(@types/node@22.18.0)(async-validator@4.2.5)(axios@1.11.0)(less@4.4.1)(markdown-it-mathjax3@4.3.2(encoding@0.1.13))(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.2)):
dependencies:
mermaid: 11.10.1
vitepress: 1.6.4(@algolia/client-search@5.36.0)(@types/node@18.19.123)(async-validator@4.2.5)(axios@1.11.0)(less@4.4.1)(markdown-it-mathjax3@4.3.2(encoding@0.1.13))(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.2)
vitepress: 1.6.4(@algolia/client-search@5.36.0)(@types/node@22.18.0)(async-validator@4.2.5)(axios@1.11.0)(less@4.4.1)(markdown-it-mathjax3@4.3.2(encoding@0.1.13))(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.2)
optionalDependencies:
'@mermaid-js/mermaid-mindmap': 9.3.0
vitepress@1.6.4(@algolia/client-search@5.36.0)(@types/node@18.19.123)(async-validator@4.2.5)(axios@1.11.0)(less@4.4.1)(markdown-it-mathjax3@4.3.2(encoding@0.1.13))(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.2):
vitepress@1.6.4(@algolia/client-search@5.36.0)(@types/node@22.18.0)(async-validator@4.2.5)(axios@1.11.0)(less@4.4.1)(markdown-it-mathjax3@4.3.2(encoding@0.1.13))(postcss@8.5.6)(search-insights@2.17.3)(terser@5.43.1)(typescript@5.9.2):
dependencies:
'@docsearch/css': 3.8.2
'@docsearch/js': 3.8.2(@algolia/client-search@5.36.0)(search-insights@2.17.3)
@ -12442,7 +12410,7 @@ snapshots:
'@shikijs/transformers': 2.5.0
'@shikijs/types': 2.5.0
'@types/markdown-it': 14.1.2
'@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1))(vue@3.5.20(typescript@5.9.2))
'@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1))(vue@3.5.20(typescript@5.9.2))
'@vue/devtools-api': 7.7.7
'@vue/shared': 3.5.20
'@vueuse/core': 12.8.2(typescript@5.9.2)
@ -12451,7 +12419,7 @@ snapshots:
mark.js: 8.11.1
minisearch: 7.1.2
shiki: 2.5.0
vite: 5.4.19(@types/node@18.19.123)(less@4.4.1)(terser@5.43.1)
vite: 5.4.19(@types/node@22.18.0)(less@4.4.1)(terser@5.43.1)
vue: 3.5.20(typescript@5.9.2)
optionalDependencies:
markdown-it-mathjax3: 4.3.2(encoding@0.1.13)
@ -12559,8 +12527,6 @@ snapshots:
webidl-conversions@3.0.1: {}
webpack-virtual-modules@0.6.2: {}
whatwg-url@5.0.0:
dependencies:
tr46: 0.0.3

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

@ -44,7 +44,6 @@ async function buildClient(outDir: string) {
'Opera >= 43'
],
polyfills: true,
modernPolyfills: true,
renderModernChunks: false
})
],
@ -60,18 +59,6 @@ async function buildClient(outDir: string) {
assetFileNames: 'assets/[name].[hash][extname]',
manualChunks: {
antdv: ['ant-design-vue', '@ant-design/icons-vue'],
common: [
'lodash-es',
'axios',
'lz-string',
'chart.js',
'mutate-animate',
'eventemitter3',
'gl-matrix',
'jszip',
'anon-tokyo',
'vue'
],
audio: [
'codec-parser',
'opus-decoder',
@ -448,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) {
@ -536,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 => {

View File

@ -2,8 +2,8 @@
"compilerOptions": {
"target": "ESNext",
"composite": true,
"module": "ESNext",
"moduleResolution": "Node",
"module": "esnext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true,
"strict": true
},

View File

@ -1,7 +1,5 @@
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import components from 'unplugin-vue-components/vite';
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
import vuejsx from '@vitejs/plugin-vue-jsx';
import path from 'path';
import postcssPresetEnv from 'postcss-preset-env';
@ -39,8 +37,7 @@ export default defineConfig({
isCustomElement: tag => {
return custom.includes(tag) || tag.startsWith('g-');
}
}),
components({ resolvers: [AntDesignVueResolver()] })
})
],
base: `./`,
resolve: {