DNF阿拉德游戏论坛

 找回密码
 立即注册
查看: 46162|回复: 59
打印 上一主题 下一主题

[工具] PVF修改工具:支持提取导入编辑pvf代码(附pvfUtility下载)

  [复制链接]

签到天数: 42 天

[LV.5]阿拉德勇士

1165

主题

1501

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
73316
怒气
65146
声望
2659
战力
1166

活跃会员灌水之王游戏爱好者阿拉德最佳作者阿拉德勇士战斗法师DOF玩家佛系DNF玩家

跳转到指定楼层
楼主
发表于 2020-3-3 12:16:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
工具作者:cloud1300(美国的华莱士)
推荐理由:

DNF台服单机研究必备的pvf修改器,自带注释与标签功能,支持提取副本地图、武器装备、技能、宠物、时装、光环等,同时还可以一键导入提取、备份的pvf相关内容,对于未知文件支持模糊匹配搜索以及批量替换操作,游戏中所涉及的大部分研究工作你都可以在这个工具上面完成。

pvfutility基本pvf文件知识
pvf封包以带目录的文件为单位组织的,故不存在空文件夹,封包内存在文本文件和脚本文件两种文件类型,脚本文件开头带有#PVF_File,没有这个标识的都是文本文件。

说明: .lst文件相当于一个列表,里面罗列了游戏要用到的东西,所以新增物品记得添加对应的列表。 .kor.str文件就是语言描述文件,所以对应的文字修改都在这个里面,改装备里面的没用,没有的也可以统一指向到这个里面,比如野猪套套装说明就是这么修复的。国服的pvf里面,对应的是.chn.str。 每个文件夹下基本都有一个.lst和.kor.str文件。 关于有哪些kor.str文件,可以看n_string.lst,这个里面全部列出来了。
脚本文件
脚本文件是按一定格式编码的,在任何文件下你可以按Crtl+Shift+H进入二进制编辑模式。在二进制下,脚本文件拥有一个2字节的文件头0xB0D0,然后每5字节为一个项。在每个项中,第一个字节是类型,剩下4个字节是数据。为了便于编写,我们规定以下是脚本文件的通用文本格式。
Type(第一个字节)
文本形式注解
2
132位有符号整数(Int32)。
4
1.0单精度浮点数(Float)。注意,必须添加小数点,否则会识别为整数。
5
[label]即标签(Label)。
7
`string`注意必须带`,即Tab上面的反引号。
6或8
{6=`(UP)`}前面的数字是Type,后面的是内容。
9和10的集合
<1::name_1`名称`>前面的数字是对应的str文件索引**(存在于n_string.lst)**,后面的是在str的名称,``是对应的文字。
脚本文件名称
标签为[name]下的数据即脚本文件名称,支持识别<1::name_1`名称`>和`名称`两种写法。
文本文件
文本文件有很多种,我们只介绍str文件。
str文件是给脚本文件中像<1::name1`名称`> 提供name1和`名称`的一类文件,可带有多种地区的后缀,如.kor.str等。
格式为:name1>名称,每一行一个项,注意不要产生重复的”name1“,“名称”可以。
n_string.lst控制对应的str文件索引和使用哪一个str文件。
stringtable.bin保存了脚本文件中6、7、8、10类型的数据,这些类型的数据在脚本文件中只是一个对stringtable.bin内数据的引用,所以损坏stringtable.bin会导致pvf内所有脚本文件损坏。
编码
我们默认以Big5编码打开pvf文件并载入stringtable.bin,切换编码会重载stringtable.bin和所有str文件。
对于文本文件,你可以单独指定编码,并以该编码保存文件。
ANI文件
ANI文件是一种特殊的脚本文件,以.ani为扩展名,在旧版下以特殊格式编码**(称之为70ANI)**,在新版下以普通脚本文件的格式编码。
目前台服使用的是70ANI文件。

此文档将介绍pvfUtility脚本功能所涉及到的接口方法。对应版本:3.0,新的版本可能会有变动。Output 类:此类提供输出功能,可以在输出窗口输出信息。
  1. AppendText(string Text)
复制代码

在“脚本执行器“的最后一行输出文字。(无返回值)
PVF类:此类提供对当前打开的PVF文件操作的方法。
  1. GetCurretFileList GetCurretFileList(string Path)
复制代码

获取当前PVF文件列表,path为指定目录。(返回List)
  1. Unzip(string Name) Delete(string Name)
复制代码

解压或删除某个PVF中的文件(无返回值)
File类:此类提供直接操作文件的方法。
  1. GetBytes(string FileName)
复制代码

直接取得某个文件的Bytes(返回Byte[])
  1. GetText(string FileName,string Encodings)
复制代码

以指定的编码器取得某个文件的文本(返回string)
  1. GetDecryptionText(string FileName)
复制代码

取得某个脚本文件的解密文本(返回string)
  1. WriteBytes(string FileName, byte[] Bytes)
复制代码

直接将Bytes写入到某个文件里(返回bool)
ScriptFile类:此类提供对脚本文件的高级操作功能。
  1. GetName(string FileName)
复制代码

取得某个脚本文件的名称,即标签[name]的数据。(返回string)
  1. GetLabelDataInt(string FileName, string LabelText) GetLabelDataStr(string FileName,string LabelText)
复制代码

取得某个脚本文件中某个标签的第一个数值。(返回int/string)
  1. SetLabelDataInt(string FileName, string LabelText,int Data) SetLabelDataStr(string FileName, string LabelText, string Data)
复制代码

修改某个脚本文件中某个标签的第一个数值。(返回bool)
  1. GetLabelData(string FileName, string LabelText)
复制代码

取得某个脚本文件中某个标签的数据,如果此标签存在特定的结尾(如[/label])那么将读取到[/label],否则读取到下一个标签。(返回string)
  1. SetLabelData(string fileName, string labelText, string text)
复制代码

修改某个脚本文件中某个标签的数据,如果此标签存在特定的结尾(如[/label])那么将覆盖到[/label],否则覆盖到下一个标签。(返回bool)
  1. DelLabel(string fileName, string labelText )
复制代码

删除某个脚本文件中某个标签的数据,如果此标签存在特定的结尾(如[/label])那么将删除到[/label],否则删除到下一个标签。(返回bool)
  1. NewScriptContent(string fileName, string text)
复制代码

向某个脚本文件中追加内容。(返回bool)

搜索功能
pvf封包中文件非常多,因此搜索功能必不可少。pvfUtility提供了多结果集功能,方便进行复杂的搜索。
结果集
默认的结果集是“未命名”,导入txt文件后会产生新的结果集。当然也可以手动新建一个。
各结果集是相互独立的,可以导出结果集到txt,也可以提取全部文件或提取到7z。
搜索
pvfUtility提供多种搜索类型和搜索方式,可以指定目录搜索。
自动转换简体和繁体
使用“开头匹配”避免搜索"b"出现"ab"
搜索类型
注解
整数/浮点数[Type2/4]
带有.则搜索的是浮点数。
中文/字符串/标签[Type10/Type7/Type5]
标签一定要带[]
名称(标签[name]下内容)
支持<1::name_1`名称`>和`名称`两种写法
脚本文件内容
可以搜索任意脚本代码
文件名
不能包含目录名
搜索方式
在所有文件中搜索
从搜索结果中筛选符合项
从搜索结果中排除符合项
搜索结果显示
在左侧有一个搜索结果的窗格,用于显示搜索结果,当搜索结果小于300时,显示为列表形式,否则为树形视图。
上方的选择框用于选择结果集。
按shift、Crtl可以多选,右键菜单支持移除、提取单个结果。

文件资源管理器
右击文件列表中的项打开菜单,菜单中提供了对文件和文件夹的操作,按shift可以多选。 提取和导入功能与压缩包管理器相似,提取到提供了提取时的一些选项
注释
注释存在于Comment.xml当中,显示为(注释),点击编辑注释即可进行修改,默认使用云端注释,优先使用本地注释。
名称显示
方便快速找到文件,若感到卡顿请在设置中禁用。
提取
可以以默认的设置快速提取到pvf所在文件夹下,也可以指定文件夹提取文件。 以指定文件夹提取时,可以设置
解密脚本文件 若不选择,则直接以二进制提取脚本文件。 解密70ani文件若不选择,则直接以二进制提取70ANI文件。
完成后打开目录打开提取的目录,快速提取时无效。
文件冲突操作
覆盖、重命名、跳过
提取到7z
将选择的项提取到一个7z压缩包内,默认以bzip2算法,快速压缩。
导入
导入功能允许以指定的根目录导入到pvf中某一目录,并设置导入时的选项。 点击预览文件可以查看导入后预计的文件树。 生成lst代码表是为了快速加入lst文件中而准备的,输入起始代码即可。
剪切、复制、粘贴和重命名
若当前文件夹存在同名文件时,自动加上(copy)。
可以点击项使其弹出文本框进行快速重命名。

编辑器
编辑器提供了便捷修改脚本文件和文本文件的功能,使用基于Scintilla的Notepad++内核。
在封包-选项中,支持设置编辑器使用的字体和是否显示空白字符,启用DirectDraw可以提高清晰度,但是可能会闪屏(?)。
在保存旁边的下拉菜单提供了高级保存选项,只有文本文件才显示编码选项。
在路径框输入路径并按Enter可以快速跳转
快捷键
Crtl+F打开查找(支持跨窗口)
Crtl+G打开跳转
Crtl+H打开替换(支持跨窗口)
右键菜单
右键菜单支持保存当前文本到txt或是在资源管理器中显示文件。

关于标签格式化的说明
pvfUtility是支持标签格式化的,默认配置了商城文件。 如果编辑LabelFormat.xml就可以让他格式化为便于修改的格式.
对于一些一定格式的标签,我们可以编写:
  1. <Label Name="[ability category]" GroupItem= "3"/>
复制代码

前:
后:
标签格式化默认会使用云端的数据,如果有志愿者提交数据将会使大家受益。
联系作者:1300271842

引用的第三方控件:

MIT License:
ScintillaNET 3.6.3 by Jacob Slusser
DockPanelSuite  3.0.4 by Weifen Luo
ScintillaNET FindReplaceDialog by Steve Towner
Be.HexEditor by Bernhard Elbl

BSD 2-clause "Simplified" License:
TreeViewAdv 1.7.6.0  by AdamsLair

LGPL:
SevenZipSharp modified by StevenBonePgh
https://github.com/StevenBonePgh/SevenZipSharp

Other:
Windows® API Code Pack for Microsoft® .NET Framework

百度网盘下载:https://pan.baidu.com/s/1rAgCQ6SFR99BkJEvmCHBNg (版本号:pvfUtility 2020.2.2)提取码:6ekk]


“今天也是充满希望的一天!”——赛丽亚
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。

签到天数: 26 天

[LV.4]阿拉德玩家

3

主题

49

帖子

223

积分

阿拉德玩家

Rank: 3Rank: 3

积分
223
怒气
12
声望
79
战力
4
沙发
发表于 2020-3-3 23:52:14 | 只看该作者
如果你是最棒的,我能說什麼呢》
“对待装备要象对待情人一样!”——林纳斯
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]初入阿拉德

0

主题

14

帖子

84

积分

阿拉德菜鸟

Rank: 2

积分
84
怒气
44
声望
13
战力
0
板凳
发表于 2020-3-5 17:05:02 | 只看该作者
找一下pvf的道具地址x
“对待装备要象对待情人一样!”——林纳斯
回复 支持 反对

使用道具 举报

签到天数: 5 天

[LV.2]初入阿拉德

1

主题

20

帖子

186

积分

阿拉德菜鸟

Rank: 2

积分
186
怒气
62
声望
52
战力
0
地板
发表于 2020-3-5 17:55:04 | 只看该作者
空间急急急急急急
“用耳去听,用心去斩;剑斩肉身 心斩灵魂。”——G.S.D
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

19

帖子

42

积分

初入阿拉德

Rank: 1

积分
42
怒气
9
声望
7
战力
0
5#
发表于 2020-3-7 01:32:50 | 只看该作者
zhichi yixia
勇士!今天也是充满希望的一天哦~!
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

8

帖子

55

积分

阿拉德菜鸟

Rank: 2

积分
55
怒气
17
声望
15
战力
0
6#
发表于 2020-3-9 09:20:19 | 只看该作者
支持楼主
路过的小伙儿,挺帅嘛...
回复

使用道具 举报

该用户从未签到

0

主题

8

帖子

76

积分

阿拉德菜鸟

Rank: 2

积分
76
怒气
29
声望
18
战力
3
7#
发表于 2020-3-11 18:58:56 | 只看该作者
抢个沙发吧,顺便混点怒气这样子
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]初入阿拉德

9

主题

41

帖子

193

积分

阿拉德菜鸟

Rank: 2

积分
193
怒气
64
声望
44
战力
0
8#
发表于 2020-3-12 17:23:09 | 只看该作者
谢谢大神 感觉很厉害
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

6

帖子

28

积分

初入阿拉德

Rank: 1

积分
28
怒气
5
声望
8
战力
1
9#
发表于 2020-3-14 12:34:26 | 只看该作者
支持楼主
我是一位来自阿拉德大陆的勇士,嗯就这样...
回复

使用道具 举报

该用户从未签到

1

主题

20

帖子

333

积分

阿拉德玩家

Rank: 3Rank: 3

积分
333
怒气
133
声望
90
战力
0
10#
发表于 2020-3-15 00:06:00 | 只看该作者
1111111111111
我是一位来自阿拉德大陆的勇士,嗯就这样...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|DNF阿拉德游戏论坛 ( 渝ICP备13007431号1 )

GMT+8, 2024-4-25 08:19 , Processed in 0.186365 second(s), 48 queries .

快速回复 返回顶部 返回列表

阿拉德大陆的勇士们!今天也会是充满希望的一天!