shol8 发表于 2012-11-27 11:34

【教程类】<就由我来抛砖引玉吧~>新职业MOD教程

本帖最后由 六荒北辰 于 2013-10-12 17:46 编辑

0.此MOD制作较复杂,新手请从宠物MOD入手.

1.添加新职业单位(MEDIA\UNITS\PLAYERS):
完整的添加需要三个文件:BASE,FEMALE,MALE.我们可以从别的职业那里先拷贝一组文件.以Necromancer为例,我们从法师(MEDIA\UNITS\PLAYERS\ARBITER)处拷贝三个文件.
BASE文件包括单位技能,技能树,被动等.我们暂且不修改技能和被动等.我们需要修改的内容有:
<STRING>NAME:Hum_Necromancer_Base                                 内部调用名
<STRING>UNIT_GUID:                                                GUID,随便写一个吧,注册文件用
<STRING>UISKILLTREE:MEDIA/UI/MENUS/SKILLTREEOVERRIDES/SKILL_TREE_NECROMANCER.LAYOUT            技能树layout,改改名字就行
<TRANSLATE>DISPLAYNAME:Necromancer                              显示名字

FEMALE和MALE文件直接定义男,女角色的外观,UNITTYPE等.同样我们暂且不修改过多的东西.以FEMALE文件为例,我们需要修改的内容有:
<STRING>BASEFILE:media/units/players/necromancer/hum_necromancer_base.dat                        缺省参数文件路径,需要指向base文件
<STRING>NAME:Hum_Necromancer_F                                    内部调用名
<STRING>UNIT_GUID:                                                GUID,注册文件用
<STRING>UNITTYPE:NECROMANCER_FEMALE            单位类型,命名其实随意,不过需要可以区分职业和性别
<TRANSLATE>DISPLAYNAME:Necromancer                               显示名字

添加完这三个文件后需要注册这三个单元,建议使用RAW2TXT,论坛里可以下载.
这个是我添加的内容,TXT文件命名为UNITDATA.txt,冒号后的内容都要注意大写:







<INTEGER64>GUID:-1134913273522108106
<STRING>Name:HUM_NECROMANCER_BASE
<STRING>File:MEDIA/UNITS/PLAYERS/NECROMANCER/HUM_NECROMANCER_BASE.DAT
<STRING>UnitType:PLAYER
<BINARY>Unknown:00
<INTEGER>Level:1
<INTEGER>MinLevel:0
<INTEGER>MaxLevel:0
<INTEGER>Rarity:1
<INTEGER>RarityHC:1


<INTEGER64>GUID:-1234913273522108106
<STRING>Name:HUM_NECROMANCER_M
<STRING>File:MEDIA/UNITS/PLAYERS/NECROMANCER/HUM_NECROMANCER_M.DAT
<STRING>UnitType:NECROMANCER_MALE
<BINARY>Unknown:00
<INTEGER>Level:1
<INTEGER>MinLevel:0
<INTEGER>MaxLevel:0
<INTEGER>Rarity:1
<INTEGER>RarityHC:1


<INTEGER64>GUID:-1334913273522108106
<STRING>Name:HUM_NECROMANCER_F
<STRING>File:MEDIA/UNITS/PLAYERS/NECROMANCER/HUM_NECROMANCER_F.DAT
<STRING>UnitType:NECROMANCER_FEMALE
<BINARY>Unknown:00
<INTEGER>Level:1
<INTEGER>MinLevel:0
<INTEGER>MaxLevel:0
<INTEGER>Rarity:1
<INTEGER>RarityHC:1



然后生成UNITDATA.RAW,修改名字为UNITDATA_XXX.RAW放入MEDIA文件夹根目录下,XXX可以随意写,用于兼容UNITDATA.RAW.

2.添加新职业UNITTYPE(MEDIA\UNITTPYES):
仿照其它职业的UNITTPYE定义文件,以法师(EMBERMAGE)为参考,找到相关的三个文件,分别定义了EMBERMAGE,EMBERMAGE_FEMALE,EMBERMAGE_MALE的UNITTPYE.
拷贝一份进行修改.
先修改EMBERMAGE.DAT.txt,以修改成Necromancer为例,改成如下结构.

<STRING>NAME:NECROMANCER
<STRING>CHILD:EMBERMAGE
<STRING>CHILD1: PLAYER
<STRING>CHILD2:CHARACTER
<STRING>CHILD3:ANY
<STRING>CHILD2: PLAYERS_AND_PETS
UNITTPYE文件的结构是一个树状的结构.

...
定义了名为XXX的UNITTPYE.
<STRING>NAME:NECROMANCER 为该UNITTPYE的名字
后面一串CHILD为继承关系.以XXX-CHILD-CHILD1-CHILD2-CHILD3...的顺序继承,表明XXX属于CHILD中的一类,CHILD又属于CHILD1中的一类,以此类推.
上面的代码可以看见最后有个CHILD2,它前面是CHILD3,这时候就需要继续往前搜索到第一个CHILD1: PLAYER,也就是说PLAYER属于PLAYERS_AND_PETS中的一类.
这里将NECROMANCER作为EMBERMAGE的一类主要是为了可以穿法师的职业装备.
对于NECROMANCER_FEMALE,使用如下方法添加:

<STRING>NAME:NECROMANCER_FEMALE
<STRING>CHILD: PLAYER_FEMALE
<STRING>CHILD1: PLAYER
<STRING>CHILD2:CHARACTER
<STRING>CHILD3:ANY
<STRING>CHILD2: PLAYERS_AND_PETS
<STRING>CHILD1:FEMALE
<STRING>CHILD:NECROMANCER
<STRING>CHILD1:EMBERMAGE
<STRING>CHILD2: PLAYER
其实主要是多定义了性别而已,直接使用原文件修改过来即可.NECROMANCER_MALE也类似.

改完并不能立即转换(新版本的DAT2TXT我不确定是否可以),此时我们需要根据hash公式计算NECROMANCER的hash值.(同理这边应该也可以提高最多附魔次数)
hash公式:
hash = string.length
foreach(char in string)
    hash = (hash >> 27) ^ (hash << 5) ^ char
这是老外给出的.
可以使用py版的dat2txt完成转换.
首先打来dat2txt目录下的tl2_dat_strings.txt,在其中新建一行,写入你要转的关键字,比如此处是NECROMANCER.
然后运行tl2_dat_strings.py,这样就会自动更新hash表了.
现在就可以使用txt2dat.py进行转换了.

3.Layout文件初步修改(MEDIA\UI\MENUS):
我们首先需要添加一个技能树的layout,由于我们当前的新职业是从法师改过来,所以我们先把法师的技能树(SKILL_TREE_ARBITER.LAYOUT)拷贝,并修改名字.
路径为MEDIA\UI\MENUS\SKILLTREEOVERRIDES\
名字改为之前在BASE文件里定义的技能树名字,这里是SKILL_TREE_NECROMANCER.LAYOUT
此外还需要稍微修改一下MEDIA\UI\MENUS\MAINMENUS\MAINMENU.LAYOUT.这个文件是新建游戏选择职业用的,其实功能都有,只是RUNIC根本没好好制作职业翻页,箭头太小而且位置难看难点击.
这里放上我已经改好的:
按照前面提到的路径放置就可以了.

到这里,基本的添加工作就做好了,我们可以进游戏看看.
职业选择画面(图标,模型什么的你们自己搞定吧):


可以看见有翻页的箭头,并且确实可以选择之前添加的死灵法师.
描述我没有改,三个文件中都有描述,这里显示的是FEMALE文件里的描述,最后完善的时候你们自己改吧.


游戏画面:


用控制台调出了法师的靴子,可以看见这个职业是可以使用的.

4.技能修改:
技能修改涉及到3个方面,新技能的制作与添加,技能面板的修改和职业文件中技能的修改.
首先是新技能的制作与添加,由于技能的写法很多,所以我不打算仔细介绍,你们可以参考已有技能来进行制作.
以法师的ICEBLAST为例:





<STRING>NAME:Ice Blast                  内部调用名
<TRANSLATE>DISPLAYNAME:Icy Blast             显示名
<TRANSLATE>BASE_DESCRIPTION:You unleash a hail of 5 ricocheting icy bolts to slow and immobilize your foes.      基本描述
<TRANSLATE>TIER1_DESCRIPTION:Target's Damage is reduced by 20% for 6 seconds
<TRANSLATE>TIER2_DESCRIPTION:Chance to Immobilize increased to 75% over 4 seconds
<TRANSLATE>TIER3_DESCRIPTION:Increases to 7 bolts over a wider arc                  三个阶段收益的描述
<STRING>SKILL_ICON:skillicon_iceblast                                       图标
<STRING>SKILL_ICON_INACTIVE:skillicon_iceblast_gray                不可用图标
<STRING>ACTIVATION_TYPE:NORMAL                                       技能类型
<STRING>TARGET_ALIGNMENT:EVIL                                          目标类型,这个需要结合技能效果决定,写法较多
<STRING>ANIMATION:special_icy_blast                                       施法动作
<FLOAT>RANDOMRANGE:0.000000                           
<FLOAT>RANGE:14.000000                                                         范围的相关参数,对实际效果不一定起作用
<BOOL>DONT_TARGET_SMASHABLES:true                                  不知道,没试过
<STRING>MANA_COST_GRAPH:MANACOST_NORMAL                   耗魔曲线
<FLOAT>MANA_GRAPH_SCALE:1.100000                                    耗魔曲线放大倍数
<FLOAT>SPEED:0.950000                                                            应该是施法速度
<INTEGER>COOLDOWNMS:800                                                    冷却时间,单位是毫秒
<FLOAT>FINDTARGETANGLE:10.000000                                       寻找目标角度,你可以用DOTA里狂战的溅射角度来理解
<FLOAT>TURNRATEOVERRIDE:-1.000000                                    不知道,不过基本都是-1
<STRING>REQUIREMENT_GRAPH:SKILLTIER1      需求等级曲线,游戏内单系七个主动技能的需求等级曲线分别为SKILLTIRE1~SKILLTIRE7
<BOOL>CAN_BE_SILENCED:false                                                   是否可以被沉默,基本都是false
<INTEGER>LEVEL_REQUIRED:0                                                   需求等级,貌似没什么用
<INTEGER>MONSTERCOOLDOWNMS:10000                                 怪物和宠物的冷却时间
<INTEGER>MAX_INVEST_LEVEL:15                                                最大等级
<INTEGER>CHANCE:100                                                                施法几率?不确定
<INTEGER64>UNIQUE_GUID:8984516551146183744                   GUID,注册用,注意保持跟其它技能不同,一般来说随便改几位就不可能重复了

...

...

...
                           十五个等级的技能效果

新建好了技能,需要将其注册到SKILLS.RAW中,这个文件暂时还没有兼容方案.
以RAW2TXT为例,首先将原有的SKILLS.RAW转成txt文件.
然后你需要添加以下...内的代码:


...
   
          <INTEGER64>GUID:之前提到的GUID
          <STRING>Name:内部调用名(注意大写)
          <STRING>File:文件路径(注意大写)
   
...
添加完再转回RAW文件,并放入MEDIA文件夹根目录下.

技能面板的修改:
使用layout编辑器打开之前的技能树layout,这里以SKILL_TREE_NECROMANCER.LAYOUT为例.
比如我们需要用新做的技能替换MAGMA SPEAR(这是法师火系第一个技能的内部调用名),我们只需要搜索这个名字,找到对应的位置,如下图:

把右侧的MAGMA SPEAR替换成你做的技能名即可.
这里说一句,在这个节点的同级节点中定义了和此技能同系的所有技能以及一些其它显示,在上一级节点中还有另外两系技能以及标签的定义.

最后我们需要在职业文件中修改这个技能.
技能定义在BASE文件内,搜索MAGMA SPEAR,将其替换成你所改的技能内部调用名即可.
其中的LEVEL是初始等级,LEVEL_REQUIRED不太确定是否起效.

5.其它
其实上面几步已经基本把新职业做完了,还需要做的只是把所有描述的文字都重写,包括技能和职业文件内的.
想优化界面的话自行修改layout吧,里面用到的贴图资源也都在UI文件夹内,DDS文件为贴图,对应IMAGESET文件为其进行定义.
附上我试作的半成品,技能只改了一个:


感谢hmpt制作的PDF版:




5ichx 发表于 2023-10-28 21:48

谢谢,有机会试试

3dm_18808542 发表于 2026-5-22 12:15

66666666666666666666666666
页: [1]
查看完整版本: 【教程类】<就由我来抛砖引玉吧~>新职业MOD教程