# 需求:铲子开挖(还原)与拆除区域解锁 > 状态:已实现 > 对照基线:老项目 `22AdLikeXy` ## 目标 1. 拆除「五行数字合成/拖放解锁区域」玩法。 2. 还原老项目「铲子开挖可开挖地块」主链。 3. 还原局内铲子广告。 4. MapGrid 字段语义回到「是否可开挖」;去掉「解锁区域 ID」。 ## 配表 | 项 | 值 | |----|-----| | 铲子 Text.id | `3003` | | 铲子 Text.type | `14`(不可复用 type=4,4 为五行火) | | 铲子广告每局上限 | Const id=10 / `BattleShovelAdMax` | 逻辑判定以 **`Text.type === 14`** 为准,常量 `SHOVEL_WEAPON2_ID = 3003` 作辅助。 ## MapGrid - 编辑器显示名:**是否可开挖**;序列化字段仍为 `_isCanBeDig`(既有地图勾选保持)。 - **玩法上删除**「解锁区域 ID」;`_unlockAreaId` 仍序列化(编辑器隐藏),仅用于换皮:现有地图 digSprite=土地块、putSprite=空地白格、waitUnlocked=待解锁地块。 - 皮映射:可开挖默认 **无皮**(`null`,露深色底);已揭示宝箱格才用 `waitUnlockedSprite`(待解锁);可放置 → 区域格用 `digSprite`(浅色土地块)、否则 `putSprite`。宝箱揭示见 `docs/需求-开挖宝箱.md`。 - `isCanBeDig && !isCanPutText` → Dig(可铲);铲后 Dig→Put。 ## 开挖流程 背包铲子 → 拖到空 Dig 格 → 扣铲(不挂字)→ Dig→Put → 音效 + 铲 Spine + **格子 statusSprite** 土地块(digSprite)fillRange 0→1 + openSpine 冒烟。 ## 表现资源 - `铲.prefab` 独立预制体,**不进** `textGrid.prefab`。 - 运行时 `gg.res.getNode` / `putNode` 对象池挂到 TextGrid;回池前停动画并复位。 ## 铲子广告 同时满足才展示: 1. 己方无可放置 Put 2. 背包有空位且无铲 3. 本局广告剩余次数 > 0 与门神:Const 盾牌触发距离内有怪优先门神;无威胁时铲子可展示。看广告后按空位发 1~2 把铲飞入背包。 本轮不做掘宝铲 / 被动产铲;无掘宝态时广告图标固定普通铲。 ## 不做 - 掘宝铲、被动产铲 - 批量改地图预制体中的残留 `_unlockAreaId` 序列化(引擎忽略即可) - `Level.unlockland*` 配表清理(代码不再读取,表由策划后续清)