## 一、需求解读与技术架构分析
### 1. 用户核心需求拆解
根据用户描述,当前疗伤药包结构为:
```mermaid
graph TD
A[疗伤药包] --> B[单个疗伤药×6]
```
需要改造为:
```mermaid
graph TD
A[疗伤药包] --> B[堆叠疗伤药×6]
B --> C[单个疗伤药×6]
```
最终实现**1个药包=6组×6个=36个**的复合堆叠结构
---
## 二、数据库深度配置方案
### 1. 基础物品参数表
| 字段名 | 疗伤药包 | 堆叠疗伤药 | 原始疗伤药 |
|---------------|----------------|-----------------|------------------|
| Name | 疗伤药包 | 堆叠疗伤药 | 疗伤药 |
| AniCount | 120 | 115 | 0 |
| Shape | 115 | 6 | 0 |
| StdMode | 31 | 0 | 0 |
| Reserved | 0 | 6 | 6 |
| Weight | 1 | 1 | 1 |
**关键配置说明**:
- 药包的`Shape=115`与堆叠药的`AniCount=115`形成解包关联
- 堆叠药的`Reserved=6`实现每组6个的堆叠
- `StdMode=31`声明为可解包物品
---
## 三、解包配置文件定制
### 1. UnbindList.txt核心规则
在`D:\MirServer\Mir200\Envir\UnbindList.txt`中添加:
```ini
; AniCount值 物品名称 解包数量 类型(1加红,2加蓝,3红蓝,4卷轴)
115 堆叠疗伤药 6 3
120 疗伤药包 6 3
```
**复合解包流程**:
1. 双击药包触发首次解包:`疗伤药包→6个堆叠疗伤药`
2. 双击堆叠药触发二次解包:`堆叠疗伤药→6个原始疗伤药`
---
## 四、重量计算体系重构
### 1. 堆叠重量公式
根据HERO引擎特性:
```math
总重量 = \begin{cases}
单重×数量/10 & (\text{OverLap}=1) \\
单重×数量 & (\text{OverLap}=2)
\end{cases}
```
**配置建议**:
```ini
; 堆叠疗伤药设置
OverLap=1 ; 轻量化模式
Weight=0.1 ; 单重0.1
```
此时每组6个重量=0.1×6/10=0.06,36个总重0.36
---
## 五、客户端补丁适配方案
### 1. 物品显示优化
1. 使用WIL编辑器修改`Items.wil`:
- 帧号115:药包图标添加"6×6"标识
- 帧号116:堆叠药显示层叠效果
2. 在`Prguse.wzl`添加悬浮提示:
```ini
[115]
Tip=双击解开获得6组疗伤药\n每组包含6个
```
---
## 六、脚本级解包控制(进阶)
### 1. QFunction-0.txt增强
```lua
[@StdModeFunc115]
#IF
CHECKITEM 堆叠疗伤药 6
#ACT
TAKE 堆叠疗伤药 6
GIVE 疗伤药 36
SENDMSG 6 成功解包获得36个疗伤药!
```
**功能扩展**:
- 检测背包空间是否足够36格
- 添加解包动画特效
- 记录解包日志到数据库
---
## 七、测试验证体系
### 1. 自动化测试脚本
```python
# 模拟解包过程
def test_unpack():
give_item("疗伤药包", 1)
click_item("疗伤药包")
assert count_item("堆叠疗伤药") == 6
for _ in range(6):
click_item("堆叠疗伤药")
assert count_item("疗伤药") == 36
```
---
## 八、多维解决方案库
| 故障现象 | 诊断方法 | 解决方案 | 引用依据 |
|------------------------|-----------------------------|-----------------------------------|----------|
| 解包后数量不符 | 检查Reserved字段 | 修正Reserved=6 | |
| 堆叠药无法二次解包 | 验证UnbindList条目 | 添加115条目 | |
| 重量计算异常 | 核查OverLap模式 | 设置OverLap=1 | |
| 客户端显示错位 | 校验Items.wil帧号 | 重新制作图标 | |
---
## 九、二次开发拓展方向
### 1. 动态堆叠系统
```lua
-- 根据玩家等级动态调整堆叠数
[@LevelUp]
#ACT
CALCVAR HUMAN 堆叠系数 = <$LEVEL> / 10
SAVEVAR HUMAN 堆叠系数 ..\QuestDiary\堆叠设置.txt
```
### 2. 智能解包算法
```python
# 根据背包剩余空间自动解包
def auto_unpack():
bag_space = get_bag_free()
if bag_space >= 36:
full_unpack()
elif bag_space >= 6:
partial_unpack()
else:
alert("背包空间不足")
```
---
## 十、安全与备份策略
### 1. 数据库版本控制
```mermaid
gantt
title 数据库变更管理
section 疗伤药配置
初始版本 :done, 2025-03-01, 1d
堆叠改造 :active, 2025-03-07, 2d
压力测试 :2025-03-09, 1d
```
### 2. 容灾恢复方案
```powershell
# 每日自动备份
Compress-Archive -Path D:\MirServer\DB\* -DestinationPath Z:\Backup\MirDB_$(Get-Date -f yyyyMMdd).zip
```
---
通过本方案的系统化实施,可完美实现疗伤药包的复合堆叠解包功能。建议按照"数据库配置→解包规则→客户端适配→脚本增强"的流程推进,关键点在于`AniCount`与`Shape`的关联绑定,以及`Reserved`字段的堆叠控制。最终效果应达到:单药包解包6组,每组双击再解包6个,总计36个的标准结构。

