用 AI 辅助 DNF 装备 PVF 的二次开发:背景、原理、为什么、局限与扩展
先来看张图:


用 GPT 辅助 DNF 装备 PVF 的二次开发:背景、原理、为什么、局限与扩展
概览 📌
- 背景与文件结构
- 原理:如何把通用模型“收敛”为结构化生成器
- 为什么这样做(价值)
- 使用方法与示例
- 局限性与风险
- 扩展性与工程化落地建议
背景:DNF 的 PVF 文件与装备数据结构 📚
1. 索引文件(equipment.lst)
- 作用:为每个装备分配唯一 ID,并指出其描述文件的抽象路径
- 格式(每行一个装备):
33328 `character/mage/weapon/pole/air_splitter.equ` 33332 `character/mage/weapon/pole/waning_woon.equ` - 完整文件路径规则:
equipment/+ 抽象路径
2. 装备描述文件(*.equ)
- 结构化键值与脚本混合,包含基本属性、职业、稀有度、动画配置、脚本触发效果等
- 示例关键段:
[name] `玄水魔杖` [usable job] `[mage]` `[at mage]` [/usable job] [grade] 37 [rarity] 2 [attach type] `[sealing]` [magical attack] 37 [attack speed] 100 ... [if] [attack success] 1 [/if] [then] [target] `enemy` -1 [add absolute damage] `light` `%` 10 [passive object] 48074 0 0 0 65 0 `` [/passive object] [/then]
3. 关键枚举与语义对齐
- 职业枚举(如
[mage],[at mage],[fighter],[all]等) - 绑定/交易类型枚举(如
[sealing],[trade],[account]等) - 属性含义与单位换算(由系统提示词明确约定,方便模型正确输出)
小提示:描述文本中如需显示百分号,通常使用
%%来避免与字段语义冲突;字段区使用[%]或数值来表达百分值含义。
原理:用 System 提示词把模型“收敛”为结构化生成器 🧠
1. 明确协议与上下文
- 在 System 提示词中嵌入:
- 索引文件路径规则与示例
.equ文件的完整结构模板- 属性字段列表、合法取值范围与单位换算
- 职业、稀有度、交易类型等枚举
- 脚本片段的语法规则与语义示例(如
[if]/[then])
2. 收敛生成空间(约束与范畴)
- 通过枚举和“合法值集合”,显著减少模型的自由度
- 指明每个字段的单位、显示规则与边界条件(例如攻速、冷却、命中、抗魔等)
- 给出脚本的常用触发条件与动作(如
[attack success],[add absolute damage],[passive object])
3. 输出控制与错误防护
- 要求模型仅输出 PVF 内容(不夹杂注释或说明),并严格匹配方括号与缩进风格
- 提供“示例-对照”的规范样例,让模型模仿结构与格式
- 在提示词中说明“常见陷阱”,如百分号、数值单位、块的闭合、路径拼接等
原理核心:将“知识与规范”转化为模型的强引导上下文,通过约束减少歧义与幻觉,使生成结果稳定可用。
为什么选择这种方式(价值) 💡
- 提升生产效率:批量装备、轻量差异配置、自动化生成文本与脚本,减少手工错误
- 保持一致性:统一的字段、单位和风格,不同作者产出的内容规范一致
- 内建领域知识:职业枚举、交易类型、属性含义、脚本语法都在提示词中固化,降低沟通与培训成本
- 可迭代与版本化:提示词作为“标准”,可持续演进;装备数据可回溯与差异对比
- 跨语言支持:
[name2]支持多语言命名,模型能同时生成中文与英文文本
使用方法与工作流(从索引到上线) 📎
1. 分配 ID 与路径
- 在
equipment/equipment.lst中新增一行:34567 `character/mage/weapon/rod/storm_rod.equ` - 统一命名:目录结构与职业挂钩,便于后续管理(如
mage/weapon/rod)
2. 生成 .equ 文件内容
- 向模型输入你的需求(职业、稀有度、属性、效果、风格文本等)
- 要求模型只返回 PVF 块,不要额外注释;严格遵循模板字段与缩进
3. 保存与打包
- 新文件路径:
equipment/character/mage/weapon/rod/storm_rod.equ - 格式检查:字段闭合、缩进、百分号表示、单位换算、脚本块校验
- 构建/打包工具处理后导入测试环境,验证数值与脚本效果
版本管理建议:将
equipment.lst与.equ文件一并纳入 Git,搭配 CI 做语法与字段校验。
示例:一个完整的武器 PVF(可直接用于参考) 📄
#PVF_File
[name]
`雷霆惊日棍`
[name2]
`Storm Sun Rod`
[basic explain]
`[砖袭]背击敌人时,增加50%%的眩晕几率。
[砖袭]投掷时,眩晕几率增加10%%。
[伏虎霸王拳]攻击力增加30%%。`
[detail explain]
`[砖袭]背击敌人时,眩晕几率额外提升50%%。
[砖袭]投掷时,眩晕几率增加10%%。
[伏虎霸王拳]攻击力增加30%%(决斗场中为15%%)。`
[flavor text]
`如同雷霆般瞬间击向敌人,因此有了这个名字。雷霆惊日棍。`
[grade]
37
[rarity]
2
[usable job]
`[mage]`
`[at mage]`
[/usable job]
[attach type]
`[sealing]`
[minimum level]
35
[magical attack]
37
[attack speed]
100
[cast speed]
50
[stuck]
1
[stuck resistance]
50
[anti evil]
15
[HP MAX]
100
[MP MAX]
100
[MP regen speed]
10
[price]
51800
[repair price]
41440
[value]
10000
[equipment physical attack]
299 284
[equipment magical attack]
365 348
[separate attack]
164 109
[skill levelup]
`[mage]` 44 1
[/skill levelup]
[icon]
`Item/weapon/mage/rod.img` 18
[field image]
`Item/field_weapon.img` 7
[equipment type]
`[weapon]` 22
[animation job]
`[mage]`
[variation]
5 1
[layer variation]
2790 `rodc`
[equipment ani script]
`equipment/character/mage.lay`
[layer variation]
200 `rodd`
[equipment ani script]
`equipment/character/mage.lay`
[animation job]
`[at mage]`
[variation]
5 1
[layer variation]
2150 `at_roda`
[equipment ani script]
`equipment/character/atmage.lay`
[layer variation]
200 `at_rodd`
[equipment ani script]
`equipment/character/atmage.lay`
[sub type]
2
[move wav]
`ROD_TOUCH`
[durability]
24
[weight]
2200
[item group name]
`rod`
[cool time]
10000
[possible kiri protect]
[need material]
666 1
[creation rate]
511
[skill data up]
`[fighter]` 60
`[all]`
`[static]` 0
`+` 100
`[fighter]` 14
`[all]`
`[level]` 0
`%` 30
`[fighter]` 14
`[all]`
`[level]` 1
`%` 30
`[at fighter]` 60
`[all]`
`[level]` 3
`+` 100
`[at fighter]` 60
`[all]`
`[level]` 8
`+` 100
`[at fighter]` 14
`[all]`
`[level]` 0
`%` 30
`[at fighter]` 14
`[all]`
`[level]` 1
`%` 30
[/skill data up]
[pvp]
[skill data up]
`[fighter]` 60
`[all]`
`[static]` 0
`+` 100
`[fighter]` 14
`[all]`
`[level]` 0
`%` 15
`[fighter]` 14
`[all]`
`[level]` 1
`%` 15
`[at fighter]` 14
`[all]`
`[level]` 0
`%` 15
`[at fighter]` 14
`[all]`
`[level]` 1
`%` 15
[/skill data up]
[/pvp]
[if]
[attack success]
1
[/if]
[then]
[target]
`enemy` -1
[add absolute damage]
`light`
`%` 10
[passive object]
48074 0 0 0 65 0
``
[/passive object]
[/then]
单位与显示的规则(含公式) 📊
-
攻击速度与施放速度映射:
( \text{显示等级} = \frac{\text{PVF数值}}{10} )
例如[attack speed]=100→ 显示为 10 攻速 -
冷却时间(毫秒):
( \text{秒} = \frac{\text{PVF值}}{1000} )
例如[cool time]=10000→ 10 秒 -
命中(stuck)与命中点数关系:
( \text{命中点数} = -\text{stuck} )
例如[stuck]=-10表示 +10 命中;[stuck]=10表示 -10 命中 -
抗魔、上限、独立攻、防等:
多为线性映射(1=1),即 ( \text{显示} = \text{PVF值} )
提示:文本描述中的百分号使用
%%;字段区的百分比使用[%]或明确数值,避免混淆解析。
局限性与风险 ⚠️
- 语法严格性:PVF 对块闭合、缩进、反引号引用非常敏感;模型偶尔可能漏掉
[/xxx]或缩进不一致 - 幻觉风险:模型可能编造不存在的路径、图标、动画层代码或技能 ID,需要人工或工具校验
- 数值平衡:模型善于生成,但不擅长“平衡性设计”;需设计者把关数值与对战影响
- 规范变动:PVF 规范或引擎版本若更新,提示词需要同步更新;旧模板可能产生不兼容内容
- 国际化细节:
[name2]文案风格与长度控制需人工审校,避免 UI 溢出或术语不一致 - 上下游工具:打包器、校验器、游戏内调试工具链若缺失,模型生成的文件无法闭环验证
扩展性与工程化落地建议 🚀
1. 规范强化与模板库
- 建立可复用的模板(武器、护甲、首饰、套装、宠物等)
- 把枚举与单位换算固化到“提示词 + 约束 JSON(或 Yaml)”,实现双重约束
2. 校验与 CI
- 编写 PVF Linter(正则或手写解析器):检查方括号闭合、字段合法值、路径存在性
- Git + CI:提交即跑校验与对比;阻断不合规的 PR
3. 参数化生成与工具集成
- 前端表单或 CLI 把需求参数化,产出 JSON,模型根据 JSON 生成
.equ - 使用“函数调用/结构化输出”让模型先产出中间结构(JSON),再转换到 PVF,降低格式错误
4. 知识库与可观测性
- 构建装备与技能 ID 的知识库(向量检索或 KV 存储),减少幻觉
- 日志与可视化:记录每次生成的来源参数、差异与评审结果
5. 脚本片段库与复用
- 把常用的
[if]/[then]行为、元素伤害、状态持续时间等做成片段库;模型引用片段,减少语法错误
最佳实践清单 ✅
- 统一缩进与反引号引用;检查每个
[/xxx]是否闭合 - 确认职业、交易类型、稀有度等枚举值合法且与设计意图一致
- 校验单位:攻速与施速除以 10;冷却除以 1000;命中取反
- 描述文本中的百分号用
%%;字段区用%语义或数值 - 可以将常用的对象ID比如技能特效ID等等一起预制到内置上下文中
结语 🎯
通过精心设计的 System 提示词,把大模型约束在 PVF 的语法与语义空间,可以显著提升 DNF 装备二次开发的效率与一致性。它不是“替代设计者”,而是“加速器与稳压器”:帮助快速产出规范化内容,减轻重复劳动,让设计者将精力集中在数值平衡与玩法创新上。配合校验工具、模板库与工程化流程,这套方法可以稳定落地,并随着项目演进持续扩展与优化。
提示词示例
你的任务是帮助用户对DNF装备的二次开发.
装备索引都在`equipment/equipment.lst`文件中, 格式如下:
33328 `character/mage/weapon/pole/air_splitter.equ`
33332 `character/mage/weapon/pole/waning_woon.equ`
其中ID是装备的唯一标识, 后面的字符串是装备的描述文件的抽象路径(完整路径是`equipment/` + 抽象路径).
装备描述文件的格式如下:
#PVF_File
[name]
`玄水魔杖`
[name2]
`Xuanshui Wand`
[basic explain] # 简单描述(仅描述,实际效果以下方的属性和脚本为准)
`[砖袭]背击敌人时,增加1.5倍的眩晕几率。
[砖袭]投掷时,眩晕几率增加10%%
[伏虎霸王拳]攻击力增加30%%`
[detail explain] # 详细描述
`[砖袭]背击敌人时,增加50%%的眩晕几率。
[砖袭]投掷时,眩晕几率增加10%%
[伏虎霸王拳]攻击力增加30%% (在决斗场中增加15%%)`
[flavor text] # 介绍
`如同雷霆般瞬间击向敌人,因此有了这个名字。雷霆惊日棍。`
[grade] # 装备品级, 可取值范围: 5、12、17、31、33、37
37
[rarity] # 稀有度(0:普通-白, 1:高级-蓝, 2:稀有-紫, 3:神器-粉, 4:传说-橙, 5:史诗/勇者-红)
2
[usable job] # 可以有多个, 比如剑和钝器可以被鬼剑士和魔剑士使用, 比如图腾和十字架可以被圣职者使用
`[mage]`
`[at mage]`
[/usable job]
[attach type]
`[sealing]`
[minimum level] # 最低使用等级
35
[magical attack] # 智力+37
37
# 同时还可以有以下属性:
# [physical attack]
# [physical defense]
# [magical defense]
[attack speed] # 攻击速度+10%
100
[cast speed] # 施放速度+5%
50
# 还可以有以下速度属性:
# [move speed]
[stuck] # 命中率修正(负数表示增加, 比如这里是正数,表示命中率减少1%)
1
[stuck resistance] # 回避率+5%
50
[anti evil] # 抗魔值+15
15
[HP MAX] # HP 上线加成
100
[MP MAX]
100
[MP regen speed]
10
[price]
51800
[repair price]
41440
[value]
10000
[equipment physical attack]
299 284
[equipment magical attack]
365 348
[separate attack]
164 109
[skill levelup] # 可以有多个, 表示装备后技能等级提升, 44是技能ID, 1是提升的等级
`[mage]` 44 1
[/skill levelup]
[icon]
`Item/weapon/mage/rod.img` 18
[field image]
`Item/field_weapon.img` 7
[equipment type] # 装备类型+价格表索引ID
`[weapon]` 22
[animation job]
`[mage]`
[variation]
5 1
[layer variation]
2790 `rodc`
[equipment ani script]
`equipment/character/mage.lay`
[layer variation]
200 `rodd`
[equipment ani script]
`equipment/character/mage.lay`
[animation job]
`[at mage]`
[variation]
5 1
[layer variation]
2150 `at_roda`
[equipment ani script]
`equipment/character/atmage.lay`
[layer variation]
200 `at_rodd`
[equipment ani script]
`equipment/character/atmage.lay`
[sub type]
2
[move wav]
`ROD_TOUCH`
[durability]
24
[weight]
2200
[item group name]
`rod`
[cool time]
10000
[possible kiri protect]
[need material]
666 1
[creation rate]
511
[skill data up]
`[fighter]` 60
`[all]`
`[static]` 0
`+` 100
`[fighter]` 14
`[all]`
`[level]` 0
`%` 30
`[fighter]` 14
`[all]`
`[level]` 1
`%` 30
`[at fighter]` 60
`[all]`
`[level]` 3
`+` 100
`[at fighter]` 60
`[all]`
`[level]` 8
`+` 100
`[at fighter]` 14
`[all]`
`[level]` 0
`%` 30
`[at fighter]` 14
`[all]`
`[level]` 1
`%` 30
[/skill data up]
[pvp]
[skill data up]
`[fighter]` 60
`[all]`
`[static]` 0
`+` 100
`[fighter]` 14
`[all]`
`[level]` 0
`%` 15
`[fighter]` 14
`[all]`
`[level]` 1
`%` 15
`[at fighter]` 14
`[all]`
`[level]` 0
`%` 15
`[at fighter]` 14
`[all]`
`[level]` 1
`%` 15
[/skill data up]
[/pvp]
其中涉及到的值如下:
职业:
[swordman] #鬼剑
[fighter] #女格斗
[at fighter] #男格斗
[demonic swordman] #魔剑士
[creatormage] #缔造者
[gunner] #男枪
[at gunner] #女枪
[mage] #女魔法
[at mage] #男魔法
[priest] #圣职者
[all] #全职业
绑定/交易类型取值如下
`[trade]` //不可交易
`[free]` //自由交易
`[sealing]` //封装, 可交易,但一旦拆封则不可交易, 一般稀有度为2和3是用此类型
`[account]` //账号绑定 一般稀有度4和5是用此类型
`[trade delete]` //无法删除
`[sealing trade]` //封装且不可交易
## 一些属性汇总
[physical attack]力量 10=10点
[physical defense]体力 10=10点
[magical attack]智力 10=10点
[magical defense]精神 10=10点
[attack speed]攻击速度 10=1攻速
[cast speed]施放速度 10=1
[move speed]移动速度 10=1
[HP MAX] HP上限 1=1
[MP MAX] MP上限 1=1
[stuck] 命中 -10=10点命中 10= -10命中
[stuck resistance] 回避 10=1
[anti evil] 抗魔值 1=1
[all elemental resistance] 所有属性抗性 1=1
[all activestatus resistance] 所有异常抗性 1=1
[all elemental attack] 所有属性强化 1=1
all多用作所有的意思
[equipment physical attack] 物理攻击力 1=1
[equipment magical attack] 魔法攻击力 1=1
[separate attack] 独立攻击力 1=1
[equipment physical defense]物理防御 1=1
[equipment magical defense]魔法防御 1=1
[hit recovery] 硬直 1=1
[physical critical hit] 物理暴击 1=1
[magical critical hit] 魔法暴击 1=1
[room list move speed rate] 城镇移动速度 0.5=50%
[cooltime] 冷却时间 10000=10秒
[attack success] 攻击时触发
[casting] 施放时
[hit]被攻击时
[duration] 状态持续时间
[set item master] 套装关联代码
[elemental property]属性攻击代码
[light element]光属性攻击
[fire element]火属性攻击
[dark element]暗属性攻击
[water element]冰属性攻击
[light attack]光属性强化
[fire attack]火属性强化
[dark attack]暗属性强化
[water attack]冰属性强化
[physical damage reduce]
100// 物理伤害减免
[magical damage reduce]
100// 魔法伤害减免
[physical absolute damage]
100// 物理绝对伤害
[magical absolute damage]
100// 魔法绝对伤害
[physical absolute defense]
20.0// 物理绝对防御。百分比
[magical absolute defense]
20.0// 魔法绝对防御。百分比
一些脚本示例
表示攻击成功时, 对目标附加10%的绝对伤害, 并且附加一个技能ID为48074特效(黑色闪电)其中xyz坐标为0,0,0, 技能ID等级是65, 最后一个0表示跟随目标, 1表示跟随释放者:
[if]
[attack success]
1
[/if]
[then]
[target]
`enemy` -1
[add absolute damage]
`light`
`%` 10
[passive object]
48074 0 0 0 65 0
``
[/passive object]
[/then]

浙公网安备 33010602011771号