教你增加新BB,制做客户端补丁的详细教程
1、我们从做动作的INI开始说明
3dmotion.ini(这个INI是用来调用客户端的动作资源)
内容:
0001000100=c3/0001/000/100.c3 坐标表示动作编号,右边表示该动作的存储路径
0001000101=c3/0001/000/101.c3
0001000110=c3/0001/000/110.c3
0001000111=c3/0001/000/111.c3
说明:
其中前四位代表的是角色的编号。
中间三位代表的是角色所拿的武器编号。
后三位代表的是角色的动作编号。
这部分的编号规则全部是由策划在初期的时候制定下来的。关于3dmotion.ini的编号规则可看具体的策划案。
2、下面是与模型和贴图有关系的INI说明
在《魔域》中有许多INI是与3dobj.ini以及3dtexture.ini相关的,它们之间的关系如下:
3dobj.ini模型C3
*.ini
3dtexture.ini贴图
*.INI可以是armor.ini、armet.ini、weapon.ini、Mantle.ini我们以armor.ini为例
3dobj.ini:表示各模型的编号,以及这个编号所对应的模型的存储路径。
3dtexture.ini:表示各模型的贴图的编号,以及这个编号所对应的具体贴图的存储路径。
armor.ini:具体说明人物以及怪物调用模型和贴图的ini,分别指向3dobj.ini和3dtexture.ini。
3dobj.ini
001000000=c3/mesh/001000000.c3 动作编号以及该动作的存储路径
001000001=c3/mesh/001000001.c3
001000002=c3/mesh/001000002.c3
001000003=c3/mesh/001000003.c3
3dtexture.ini
001000000=c3/texture/001000000.dds 贴图的编号以及该贴图的存储路径
001000001=c3/texture/001000001.dds
001000002=c3/texture/001000002.dds
001000003=c3/texture/001000003.dds
armor.ini
[Armor001130000] 表示的是角色和这个角色所穿的衣服,其中001是角色的编号(对应于数据库中lookface的前三位),130000表示的衣服的编号。
Mesh=001000001 模型 指向3dobj.ini中的模型编号
Texture=001000001 贴图 指向3dtexture.ini中的贴图编号
这样就可以完成一个角色模型和贴图的调用。其他的譬如武器、头盔都是类似如此。但是在《魔域》中头盔相关的armet.ini用来配置头发。
但是,在INI中还有另外一种表达方法例如:
3Ditem.ini
2001569 1040101 1040101 50 50
物品数据库中id 模型 贴图 物品栏内大小 地上大小
4、怪物有关的INI
怪物的动作、模型和贴图与人物一样都是在3dmotion.ini和armor.ini中记录的,使用方法也完全一样,只是文件的存放路径不一样而已。其中
这里主要介绍Monster.ini ,这个是用来记录怪物其他数据的
Monster.ini
[食尸兽] 怪物的名字
SizeAdd=1 怪物所占的位置大小,影响到玩家攻击怪物的时候,玩家与怪物之间的距离
ZoomPercent=100 怪物与模型的比例,100为100%大小
MaxLife=100 怪物的最大生命值
Level=1 怪物的等级
Defy=1 是否使用等级藐视(具体需查看藐视有关的策划案)
Defence=1 该怪物的物理防御
MDefence=1 该怪物的魔法防御
由以上可以看出,这些是怪物在客户端所需要记录的一些数据,影响客户端的表现,但是必须和服务端数据库cq_monstertype里的数据保持同步。
4、NPC相关的INI
在游戏中,我们可以看到我们的NPC是带有动作的,这部分的动作调用都需要由npc.ini这个文件来配置。
NPC的动作配置方法和人物、怪物一样都是在3dmotion.ini中记录的。
NPC的模型和贴图是通过3DSimpleObj.ini来配置的,配置方法和配置人物怪物模型的贴图的armor.ini方法基本上一样。
我们先来看一下3DSimpleObj.ini的各个部分解释
3DSimpleObj.ini
[ObjIDType1] 编号
PartAmount=1 由一个模型组成
Part0=900000000 模型 指向3Dobj.ini
Texture0=900000000 帖图 指向3dtexture.ini
介绍一下:npc.ini
[NpcType1] NPC的编号
Name=托特斯 NPC的名称
SimpleObjID=1 指向3dsimpleObj.ini
StandByMotion=0900000100 站立动作,指向3dmotion.ini
BlazeMotion=0900000101 鼠标激发动作1,指向3dmotion.ini
BlazeMotion1=0900000320 鼠标激发动作2,指向3dmotion.ini
BlazeMotion2=0900000330 鼠标激发动作3,指向3dmotion.ini
RestMotion=0900000101 休闲小动作,指向3dmotion.ini
Effect=none NPC所带的特效(支持none为无特效)
其中需要说明的是鼠标激发动作,就是鼠标点击该NPC的时候会NPC发生的动作,这个具体可以根据策划的要求来增加,需要几个就可以做几个。
5、 地图配置相关INI
学习过地图的朋友在进入游戏以后一定考虑如何在地图上做一些飘动雪花、蒲公英等等之类的特殊效果,《魔域》中也有这样的效果,这个就要说到地图配置的INI
Gamemap.ini
[Map1000] 地图编号
File=map/map/grassland.DMap 地图Dmap文件的存储路径
Alpha=255 Alpha通道设置(改变地图透明度)
Red=255 红色量(调整可以改变地图的整体颜色)
Green=255 绿色量(调整可以改变地图的整体颜色)
Blue=255 蓝色量(调整可以改变地图的整体颜色)
Name=亚伯拉草原 地图名称
Snow=0 是否下雪
Firebug=0 是否有荧火虫
Dragon=0 是否有龙
Dandelion=1 是否有蒲公英
Music=music/1000.mp3 背景音乐的存储路径
其中的alpha,red,green,blue整体为调整地图的光暗、对比、色调等等。
当alpha=0时地图为全透明,
red=0的时候 地区缺乏红色素
三色量全为0的时候为黑色
6、 光效相关INI简单介绍(不做详细介绍)
3DEffectObj.ini:这个是3D特效模型,指定了3D效果编号所代表的模型路径。
3DEffect.ini(配置3D效果,指定动画效果)
[FootPrint-L] 动画效果名
Amount=1 帧数为1(在模型中已经有多帧贴图,这里是程序帧)
EffectId0=403 c3模型在3DEffectObj.ini中的编号
TextureId0=471 对应的贴图在3DTexture.ini中编号
Delay=0 播放延迟时间(单位毫秒)
LoopTime=1 动画循环次数
FrameInterval=66 动画播放每帧之间的时间间隔(单位毫秒) (比3D帧播放完毕多一点点)
LoopInterval=0 动画循环之间的时间间隔(毫秒)
OffsetX=0 动画播放时相对定位点的x偏移象素(正右为正)
OffsetY=0 动画播放时相对定位点的y偏移象素(正下为正)
[blister02] 动画效果名
Amount=2 帧数为2
EffectId0=114 c3模型在3DEffectObj.ini中的编号
TextureId0=114 对应的贴图在3DTexture.ini中编号
EffectId1=115 c3模型在3DEffectObj.ini中的编号
TextureId1=115 对应的贴图在3DTexture.ini中编号
Delay=750 播放延迟时间(单位毫秒)
LoopTime=999999 动画循环次数
FrameInterval=33 动画播放每帧之间的时间间隔(单位毫秒)
LoopInterval=0 动画循环次数之间的时间间隔(毫秒)
OffsetX=0 动画播放时相对定位点的x偏移象素
OffsetY=0 动画播放时相对定位点的y偏移象素
Action3Deffect.ini 动作3D动画特效
401.410.006=Flash4101 左边编号为(人物武器动作)右边是对应的特效名
Effect.ini
[TeamLeader] 特效名字(必须是唯一的),这里指组队的队长头上的特效
AniTitle=TeamLeader ani名字,注意所有2d动画特效使用的ani都定义在ani/effect.ani文件中
LoopTime=99999999 动画循环次数
FrameInterval=50 帧间隔,单位毫秒
ShowWay=0 图像显示方式,这里提供2种方式,0是普通方式,1是叠加方式
LoopInterval=0 动画播放间隔,单位毫秒
OffsetX=0 动画播放时的位移x值
OffsetY=-100 动画播放时的位移y值
Exigence=1 动画加载的优先级,一般设置为1就好
Delay=0 动画播放延时,指播放这个动画前的等待的时间,单位毫秒
另外还有3DMapEffect.ini、ActionMap3DEffect.ini、等等这些都是根据具体的策划要求来进行配置了。
Statuseffect.ini 状态光效INI
00000000 NULL NULL (程序给出的状态编号) 3D特效 2D特效
00000001 NULL NULL
00000002 Poison-t NULL
7、 音乐相关INI
ActionSound.ini
0.0.1.999.110=sound\walkL01.wav 左边第一位为是否骑马,第三位为职业性别、第四位为999代表通配、最后一位为动作编号。右边代表声音存储的路径。
0.0.1.999.111=sound\walkR01.wav
0.0.1.999.120=sound\runL01.wav
0.0.1.999.121=sound\runR01.wav
还有一些场景的声音放在场景配置文件中。
8、 魔法配置INI
magictype.ini当中所记录的信息非常长。
例如:1000 1 火球术 1 0 0 0 0 5 15 0 100 0 0 11 0 1 2000 0 0 0 0 0 0 0 0 0 0 0 0 1000 700 2 510 可继续修习 攻击单个敌人 IA-1s NULL NULL sound\1000.wav 0 FireBomb-S sound\1000T.wav NULL fireball-h 0 0 0
这个是其中一条信息,我们打开数据库可以发现前面一直到700的部分为数据库内的部分(数据库目前又增加了四个字段,但是INI并不需要改变),相关意思请查看数据库各个字段意思。
700以后的各个意思如下:
2:为客户端表现(2表示起始->人体->轨迹->目标人体->结束一共有6种)
510:为施放法术的动作(510为魔域中魔法师施放法术、弓箭手施放法术的动作、401为战士施放辅助魔法以及弓箭手施放专家以下攻击魔法的动作、402为战士、弓箭手施放专家级以上攻击魔法的动作)
可继续修习:技能栏文字描述
攻击单个敌人:技能栏文字描述2
IA-1s:吟唱特效(对应于3DEffect.ini)
NULL:吟唱声效(NULL为无特效,有声效则输入声效存储路径)
NULL:攻击特效(对应于3DEffect.ini)
Sound1000.wav:攻击声效(NULL为无特效,有声效则输入声效存储路径)
0:受击延时
FireBomb-S:受击特效(对应于3DEffect.ini)
sound1000T.wav:受击音效(NULL为无特效,有声效则输入声效存储路径)
NULL:地效索引
Fireball-h:轨迹特效(对应于3DEffect.ini)
0:屏幕表现
0:是否能在市场使用(0为不可用)
0:受击者受击动作延时
9、 新资源调用所用INI
首先,要说明《魔域》游戏主目录下的两个文件,一个是data.dnp、一个是c3.dnp
大家可以看到这两个文件加起来有400M以上的大小,而且从文件名可见这两个文件包含的是非常大的资源。这两个文件就是游戏在压盘以前对data以及c3文件夹进行打包,同时对其进行加密的资源文件。(以下简称dnp包)这样做的目的是为了优化客户端资源。
data.dnp里的资源一般是重要的、不常更新的、游戏地图、游戏界面等资源。
C3.dnp文件则包含了所有的C3资源。
data以及C3目录的作用是用于今后的游戏更新新资源所用,将最新更新的data以及C3资源添加到相应的目录下面。条件是这些新资源与dnp包中的资源无重复。
但是如果我们需要对dnp包中间的资源进行更新的话是否需要重新打一个dnp包更新出去呢?答案显然是否定的。
因此这里需要介绍一下DisperseFile.ini
这个ini是程序以及策划同时掌握并且编写的。它的作用是:在DisperseFile.ini中的文件不会从Dnp包中加载。
我们打开这个INI的时候会看到里面有一些文件的路径,其中包括data以及c3文件的路径。通常这些资源都已经是dnp包中已经有的了,但是我们有时候需要对其进行更新。那么我们首先要在该data或者C3目录下添加这些资源,然后再在DisperseFile.ini中添加上这个资源的路径。那么客户端程序在调用这个资源的时候就不会读取dnp包里的而会直接读取存储路径下的该资源。
例如:DisperseFile.ini下已经有一个
Data/Main/AgreeBtn.dds (同意按扭)
表示:首先在data.dnp包里有Data/Main/AgreeBtn.dds这个资源,但是太旧了,需要进行更新,则我们只要在data/Main目录下添加AgreeBtn.dds文件。客户端程序在调用AgreeBtn.dds
资源的时候会绕过data.dnp文件中的AgreeBtn.dds而直接调用游戏Data目录中Main下的AgreeBtn.dds。
10、其他重要的INI
我们在游戏中经常会看到一些系统提示之类的文字,这里面有一些是放在服务端输出的,而另外一些是放在客户端实现的。该资源配置文件为
StrRes.ini 字符串资源配置文件
;分号(半角),为注释符号
格式为:字符串ID=字符串
界面部分字符串ID空间为10000-50000
3DRole部分字符串ID空间为100000-200000
地图部分字符串ID空间为300000-400000
3DBaseCode部分字符串ID空间为500000-600000
客户端大部分需要通过程序来实现的文字以及提示都是通过这个INI来实现的。譬如:鼠标悬停时的文字解释、界面的名称、登陆服务器的过程提示、组队提示等等等等。
每一个INI都有其存在的必要和重要性,这里没有列举的还有GameSetUp.ini等等,它们都是游戏中不可或缺的。
ActionSound.ini
这INI文件中记录的是人物,怪物或者NPC等角色在不同情况下所发出的声音的音效文件路径。而前面的数字则是发出声者的状态,换句话说就是满足该状态,则发出后面路径中的声音来。见下面的例子:
0.0.3.999.121=soundrunR01.wav
0 说明该角色没有骑马。如果数字为1就说明有骑马。
0 这个说明的是人物的体形和怪物NPC的lookface
3
999 这个是武器编号
121 这个是动作编号
GameSetUp.ini
这个INI文件是用来记录系统设置和账号设置的。
[ScreenMode] 分辨率,数字的含义:0=800*600窗口; 1=800*600全屏,2=1024*768窗口;3=1024*768全屏;
ScreenModeRecord=2
[Group] 游戏的分区
GroupRecord=3
[Server] 游戏的服务器
ServerRecord=8
[Account] 游戏的帐号
AccountRecord=
[Interface] 游戏的界面
InterfaceRecord=0