From b93e286c52547d9fc5158a3b5d918e00895b64c4 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 17 Jun 2025 18:20:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=88=98=E6=96=97=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages-user/data-fallback/package.json | 5 +- packages-user/data-fallback/src/battle.ts | 10 +-- .../src/damage.ts} | 76 +++++++++-------- packages-user/data-fallback/src/index.ts | 2 + .../legacy-plugin-data/src/fx/index.ts | 5 -- packages-user/types/package.json | 3 + packages-user/types/src/enemy.ts | 85 +++++++++++++++++++ packages-user/types/src/index.ts | 1 + packages/common/src/logger.ts | 2 +- packages/legacy-common/src/patch.ts | 3 + 10 files changed, 143 insertions(+), 49 deletions(-) rename packages-user/{legacy-plugin-data/src/fx/itemDetail.ts => data-fallback/src/damage.ts} (67%) delete mode 100644 packages-user/legacy-plugin-data/src/fx/index.ts create mode 100644 packages-user/types/package.json create mode 100644 packages-user/types/src/enemy.ts create mode 100644 packages-user/types/src/index.ts diff --git a/packages-user/data-fallback/package.json b/packages-user/data-fallback/package.json index 870c54b..ddf8fb0 100644 --- a/packages-user/data-fallback/package.json +++ b/packages-user/data-fallback/package.json @@ -3,6 +3,7 @@ "dependencies": { "@motajs/legacy-common": "workspace:*", "@user/data-state": "workspace:*", - "@user/data-base": "workspace:*" + "@user/data-base": "workspace:*", + "@user/data-utils": "workspace:*" } -} \ No newline at end of file +} diff --git a/packages-user/data-fallback/src/battle.ts b/packages-user/data-fallback/src/battle.ts index 6680918..d43d595 100644 --- a/packages-user/data-fallback/src/battle.ts +++ b/packages-user/data-fallback/src/battle.ts @@ -1,12 +1,11 @@ import { DamageEnemy, ensureFloorDamage, - getSingleEnemy, getEnemy, HeroSkill, NightSpecial } from '@user/data-state'; -import { hook, loading } from '@user/data-base'; +import { hook } from '@user/data-base'; import { Patch, PatchClass } from '@motajs/legacy-common'; import { isNil } from 'lodash-es'; @@ -47,7 +46,7 @@ export function patchBattle() { ); } // 非强制战斗 - // @ts-ignore + // @ts-expect-error 2.c 重构 if (!core.canBattle(x, y) && !force && !core.status.event.id) { core.stopSound(); core.playSound('操作失败'); @@ -116,7 +115,7 @@ export function patchBattle() { core.clearContinueAutomaticRoute(); // 自动存档 - var inAction = core.status.event.id == 'action'; + const inAction = core.status.event.id === 'action'; if (inAction) { core.insertAction(beforeBattle, data.x, data.y); core.doAction(); @@ -131,7 +130,7 @@ export function patchBattle() { patch2.add('_action_battle', function (data, x, y, prefix) { if (data.id) { - const enemy = getSingleEnemy(data.id as EnemyIds); + // const enemy = getSingleEnemy(data.id as EnemyIds); // todo: 与不在地图上的怪物战斗 } else { if (data.floorId != core.status.floorId) { @@ -256,7 +255,6 @@ export function patchBattle() { } ); } -loading.once('coreInit', patchBattle); declare global { interface Enemys { diff --git a/packages-user/legacy-plugin-data/src/fx/itemDetail.ts b/packages-user/data-fallback/src/damage.ts similarity index 67% rename from packages-user/legacy-plugin-data/src/fx/itemDetail.ts rename to packages-user/data-fallback/src/damage.ts index 9eaa7a6..82f20fa 100644 --- a/packages-user/legacy-plugin-data/src/fx/itemDetail.ts +++ b/packages-user/data-fallback/src/damage.ts @@ -1,43 +1,49 @@ +import { Patch, PatchClass } from '@motajs/legacy-common'; import { EnemyCollection, ensureFloorDamage } from '@user/data-state'; import { formatDamage } from '@user/data-utils'; -export function init() { - core.control.updateDamage = function ( - floorId = core.status.floorId, - ctx, - thumbnail: boolean = false - ) { - if (!floorId || core.status.gameOver || main.mode !== 'play') return; - const onMap = ctx == null; - const floor = core.status.maps[floorId]; +export function patchDamage() { + const patch = new Patch(PatchClass.Control); + patch.add( + 'updateDamage', + function ( + floorId = core.status.floorId, + ctx, + thumbnail: boolean = false + ) { + if (!floorId || core.status.gameOver || main.mode !== 'play') + return; + const onMap = ctx == null; + const floor = core.status.maps[floorId]; - // 没有怪物手册 - // if (!core.hasItem('book')) return; - core.status.damage.posX = core.bigmap.posX; - core.status.damage.posY = core.bigmap.posY; - if (!onMap) { - const width = core.floors[floorId].width, - height = core.floors[floorId].height; - // 地图过大的缩略图不绘制显伤 - if (width * height > core.bigmap.threshold) return; + // 没有怪物手册 + // if (!core.hasItem('book')) return; + core.status.damage.posX = core.bigmap.posX; + core.status.damage.posY = core.bigmap.posY; + if (!onMap) { + const width = core.floors[floorId].width, + height = core.floors[floorId].height; + // 地图过大的缩略图不绘制显伤 + if (width * height > core.bigmap.threshold) return; + } + // 计算伤害 + ensureFloorDamage(floorId); + + floor.enemy.extract(); + floor.enemy.calRealAttribute(); + floor.enemy.calMapDamage(); + floor.enemy.emit('calculated'); + core.status.damage.data = []; + + // floor.enemy.render(true); + + // getItemDetail(floorId, onMap); // 宝石血瓶详细信息 + if (thumbnail) { + renderThumbnailDamage(floor.enemy); + core.control.drawDamage(ctx, floorId); + } } - // 计算伤害 - ensureFloorDamage(floorId); - - floor.enemy.extract(); - floor.enemy.calRealAttribute(); - floor.enemy.calMapDamage(); - floor.enemy.emit('calculated'); - core.status.damage.data = []; - - // floor.enemy.render(true); - - // getItemDetail(floorId, onMap); // 宝石血瓶详细信息 - if (thumbnail) { - renderThumbnailDamage(floor.enemy); - this.drawDamage(ctx, floorId); - } - }; + ); } function renderThumbnailDamage(col: EnemyCollection) { diff --git a/packages-user/data-fallback/src/index.ts b/packages-user/data-fallback/src/index.ts index ff2815a..a496d29 100644 --- a/packages-user/data-fallback/src/index.ts +++ b/packages-user/data-fallback/src/index.ts @@ -1,5 +1,7 @@ import { patchBattle } from './battle'; +import { patchDamage } from './damage'; export function patchAll() { patchBattle(); + patchDamage(); } diff --git a/packages-user/legacy-plugin-data/src/fx/index.ts b/packages-user/legacy-plugin-data/src/fx/index.ts deleted file mode 100644 index ae5d386..0000000 --- a/packages-user/legacy-plugin-data/src/fx/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { init as initItemDetail } from './itemDetail'; - -initItemDetail(); - -export * from './itemDetail'; diff --git a/packages-user/types/package.json b/packages-user/types/package.json new file mode 100644 index 0000000..82a7c94 --- /dev/null +++ b/packages-user/types/package.json @@ -0,0 +1,3 @@ +{ + "name": "@user/types" +} diff --git a/packages-user/types/src/enemy.ts b/packages-user/types/src/enemy.ts new file mode 100644 index 0000000..6b3a693 --- /dev/null +++ b/packages-user/types/src/enemy.ts @@ -0,0 +1,85 @@ +export interface IEnemyInfo {} + +export interface IDamageInfo {} + +export interface IDamageEnemy { + /** 原始怪物信息 */ + readonly enemy: Enemy; + /** 该怪物所属的怪物列表 */ + readonly collection: IEnemyCollection | null; + /** 怪物横坐标 */ + readonly x: number | undefined; + + /** + * 获取怪物属性信息 + */ + getEnemyInfo(): IEnemyInfo; + + /** + * 获取这个怪物的伤害信息 + */ + getDamageInfo(): IDamageInfo; +} + +export interface IMapDamage { + /** 伤害类型 */ + readonly type: string; + /** 伤害值 */ + readonly damage: number; + /** 伤害优先级 */ + readonly priority: number; +} + +export interface IMapDamageSummary { + /** 该点的总伤害 */ + readonly totalDamage: number; + /** 该点的伤害信息 */ + readonly damages: IMapDamage[]; +} + +export interface IEnemyCollection { + /** 怪物列表,索引为 x + width * y,值表示该点对应的怪物 */ + readonly list: Map; + + /** 楼层 id */ + readonly floorId: FloorIds; + /** 楼层宽度 */ + readonly width: number; + /** 楼层高度 */ + readonly height: number; + + /** 地图伤害 */ + readonly mapDamage: Map; + + /** 用于计算本怪物列表中怪物信息的勇士属性 */ + readonly hero: HeroStatus; + + /** + * 获取一点的怪物信息,不存在时返回 null + * @param x 怪物横坐标 + * @param y 怪物纵坐标 + */ + getEnemy(x: number, y: number): IDamageEnemy | null; + + /** + * 获取一点的地图伤害信息,每一点都包含地图伤害对象,传入地图外坐标时返回 null + * @param x 横坐标 + * @param y 纵坐标 + */ + getMapDamage(x: number, y: number): IMapDamageSummary | null; + + /** + * 重置此地图的怪物信息,并重新计算 + */ + refresh(): void; + + /** + * 复制这个怪物列表,同时将复制后的列表中勇士属性设为指定值 + * @param status 新的勇士属性 + */ + with(status: HeroStatus): IEnemyCollection; +} + +export interface IDamageSystem { + readonly collections: Map; +} diff --git a/packages-user/types/src/index.ts b/packages-user/types/src/index.ts new file mode 100644 index 0000000..493abad --- /dev/null +++ b/packages-user/types/src/index.ts @@ -0,0 +1 @@ +export * from './enemy'; diff --git a/packages/common/src/logger.ts b/packages/common/src/logger.ts index d57a211..6e1ec1c 100644 --- a/packages/common/src/logger.ts +++ b/packages/common/src/logger.ts @@ -161,7 +161,7 @@ export class Logger { const n = Math.floor(code / 50) + 1; const n2 = code % 50; const url = `${location.origin}/_docs/logger/warn/warn${n}.html#warn-code-${n2}`; - console.warn(`[WARNING Code ${code}] ${text}. See ${url}`); + console.warn(`[WARNING Code ${code}] ${text} See ${url}`); } } diff --git a/packages/legacy-common/src/patch.ts b/packages/legacy-common/src/patch.ts index 52c21c9..1437a5f 100644 --- a/packages/legacy-common/src/patch.ts +++ b/packages/legacy-common/src/patch.ts @@ -118,9 +118,12 @@ export class Patch { const set = this.patched[patchClass]; const obj = this.getPatchClass(patchClass); for (const [key, func] of patch.patches) { + // console.log(key); + if (set.has(key)) { logger.warn(49, patchName[patchClass], key); } + set.add(key); obj[key] = func; } this.patchList.delete(patch);