a75799 发表于 2017-7-8 15:31

mod制作进阶---effects和bonus value的使用

本帖最后由 a75799 于 2017-7-8 18:24 编辑

选择effects和bonus value来讲,一是因为它们使用起来非常灵活,并具有完美的兼容性与强大的功能,二是很难有mod系统的涉及到这里面所有的内容。
所以,如果你已经能够看懂别人的mod,又希望更进一步做出相对精致而炫酷的东西来,那么这篇帖子会对你有帮助。
本贴的主旨不是把近3000个effects的效果一一翻译出来,而是让大家对effect、bonus value与游戏机制的关联有一个全面的了解,从而能够在mod制作中对它们进行灵活的运用。


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
本贴为个人原创,3dm首发,欢迎转载传阅。至于是否注明出处或作者,i really dont care。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


1. 两者的关系
effect可以通过不同的途径对战役进行影响,但具体影响的内容一般总是由bonus value决定。
P.S:通过脚本生效的effect(wh_dlc07_effect_remove_bad_traits等)不由bonus value定义,但我并不打算讲脚本,所以这部分不会涉及。



2. bonus value对effect进行定义的方式
打开PFM,找到campaign_bonus_value
以此开头的我建议大家先浏览一遍。
我这里做一个简单的介绍:
battle_context是与开始战斗时的状态有关的(如闪击、对阵特定势力、进攻方、防御方、丛林作战、地下作战、各种军队姿态--劫掠、伏击、围城等等),这类文件的内容多数无法更改,只能调用(能够更改的部分也通常没有更改、新建的必要),所以这部分你只需要看一遍大概了解effect可以通过哪些战斗开始时的状态生效即可。

下面的ids包含了所有可以对effect进行定义bonus value key,不同的文件适应不同的情况,例如我们用得最多的basic就包含了常规状态下战役地图中所有能够使用的bonus value。


在看过这边的内容之后,往下翻,找到effect_bonus_value与junctions相关的内容。
这部分负责将bonus value与effect关联起来,属于重点需要掌握的部分。
仔细观察会发现junction与上面的ids通常都是相互对应的。例如campaign_bonus_value_ids_basic对应effect_bonus_value_basic_junction,表示当你希望通过basic_junction来为一个effect指定效果时,只能使用ids_basic中的key,它不包含的key将无法生效。

在了解这些之后,effect与bonus value的关系就应该清楚了。


3.实例
下面我会详细说明如何从确定bonus value到定义effect来建立一个激活火焰伤害、魔法伤害、不溃与免疫疲劳特性、致盲附魔并解锁火球魔法的effect,以此来让大家了解新建effect的意义和具体流程。

首先在effect中新建一个key。例如13131
icon是图标,priority为在ui上的排序(-1意味着后台效果,不在ui上显示),category表示在ui上的类型,value good决定该effect是增益还是减益(对实际效果没有影响)。
非后台效果需要有相关的文本描述(text-db-effects),否则将是一片空白。

下面一步步来:
激活火焰伤害
unit_flaming_attack_mod
可以通过basic、battle contexts、unit sets三种方式添加。
也就是说这个bonus value可以作为基础全局设置,或者针对特定战斗情况和特定单位。
P.S:根据单位生效的部分有几个表,但除了unit sets之外如unit records、unit class并没有实装,我也不建议大家去用它们,因为很可能根本无效或出现各种bug。而且它们在理论上能够实现的功能通过unit sets也一样可以,没必要做无用功。
P.S2:根据unit set生效的方式是通过effect_bonus_value_ids_unit_sets,这个比较特殊一点。

激活魔法伤害
unit_is_magical

只存在于basic中。

由于我们没有特殊要求,所以直接选择简便的做法,即通过basic来定义。
打开effect_bonus_value_basic_junction,添加:

13131unit_flaming_attack_mod
13131unit_is_magical



不溃与免疫疲劳特性
游戏中无法新建特性,所有特性都在unit_attribute,所以我们打开这个表,记住不溃与免疫疲劳特性的id---unbreakable、fatigue_immune。
接下来打开关联特性与effect的effect_bonus_value_unit_attribute_junctions,添加:

enable13131unbreakable
enable13131fatigue_immune


致盲附魔
致盲是一个phase,所以我们到special_ability_phases中按照它的分类(接触效果)和出现的时间(DLC内容)查找。
得到id:wh_dlc06_unit_contact_blinded。

如果你对于这种方式感到吃力,那么通过special_ability_phase_stat_effects来根据phase的效果查找也是可以的。
例如你知道致盲会减少36的近战攻击,那么在pfm中打开special_ability_phase_stat_effects下面的任意一个表,单击stat按属性排序,找到近战攻击然后看36的部分。或者单击value按值排序,找到36再看影响近战攻击的部分,直到把几个表搜索完为止。具体的话方法其实很多,这里就不一一列举了。

在得到致盲的id之后,打开关联武器附魔的effect_bonus_value_special_ability_phase_record_junctions
添加

active13131wh_dlc06_unit_contact_blinded


解锁火球魔法
首先我们确定火球的技能id,方法很多,比如unit_ablities或者unit_special_ablities。一样可以用上面说过的按分类和出现时间的方法来找。
得到id:wh_main_spell_fire_fireball
这里顺便解释一下官方命名的规则,以上面的火球来说:
wh表示战锤,main表示原版即存在的内容,spell表示法术,fire表示火系(lore),fireball是具体名称。
基本上所有命名都大同小异,只是一些比较偏的特殊简写对于英语基础较差的玩家可能会比较不友善。当然,这只是手动查询起来稍微麻烦一点,不影响使用。





确定id之后打开effect_bonus_value_unit_ability_junctions,这个负责effect与技能相关的部分。
解锁魔法的effect一定是原版就存在的,但我们的目的是要新建一个复杂的effect而不是通过添加复数effects来实现目的,所以我们不用原版的effect而是将功能添加到我们新建的13131上。

13131enablewh_main_spell_fire_fireball


至此,一个激活火焰伤害、魔法伤害、不溃与免疫疲劳特性、致盲附魔并解锁火球魔法的effect就完成了,接下来选择一种方式将其添加进游戏中即可。

P.S:既然说到了这里,不妨给大家发散一下关于技能升级的做法:
首先,新建技能1、2、3、4。代表一个技能的4个级别(但后台实际上是4个技能)。
设置4个effect(比如effect1、2、3、4),然后通过上面的effect_bonus_value_unit_ability_junctions进行如下设置:
第一个

effect1enable1


第二个enable 2 ,disable 1,

effect2enable2
effect2disable1


第三个 enable 3,disable 2,
第四个enable 4 disable3。
剩下的就是把4个技能做成你想要的样子,并确保这4个effect能够以渐进的方式获取,比如通过技能树、等级解锁之类。




4.附录--部分常用的effect添加方式
effect_bundles_to_effects_junctions
bundle是效果集,它有自己的生效方式(本文不涉及),其内容庞大,种类繁多。原版事件、种族特性等等都有相应的bundle,希望通过这些渠道添加的,可以用它来实现。
具体请参考effect_bundles和effect_bundles_to_effects_junctions。

ancillary_to_effects
道具。

character_skill_level_to_effects_junctions
角色技能树。

trait_level_effects
角色特性。

campaign_difficulty_handicap_effects
难度(可以区分玩家与AI)。

technology_effects_junction
科技。

building_effects_junction_tables
建筑。

其他的就不列举了,各位自行发掘。



最后,祝大家玩的愉快。此致敬礼blah blah blah。




glayhisashi 发表于 2017-7-8 15:38

你还没回答我这问题。。。

http://bbs.3dmgame.com/thread-5612023-1-1.html

yndhzuoshuai 发表于 2017-7-8 17:02

学习,学习,涨知识

yndhzuoshuai 发表于 2017-7-8 17:03

现在又有一个想法,我想把绿皮的黑兽人的攻击冲击力量改了像中型单位那种比如野兽人的牛头人那种,
发现黑兽人的攻击无法使一些中型单位硬直,我初步猜想应该是在修改武器属性那栏,因为冲击范围也在那里改,
还有我要怎么改才能让一个小体型步兵单位比如英雄,黑兽人,防止让巨兽单位和骑兵击倒硬直,这个又在哪里修改。
望指路

yndhzuoshuai 发表于 2017-7-8 17:37

出现问题了,这个battle_entities的KEY改了后,应该粘到哪{:3_56:}

a75799 发表于 2017-7-8 17:45

yndhzuoshuai 发表于 2017-7-8 17:37
出现问题了,这个battle_entities的KEY改了后,应该粘到哪

mod相关的到另一个帖子...那个问答的帖子。

我系统的讲一遍吧..

首先,要改一个单位的entity,需要先确定它的entity是什么。
一般单位的entity在land_units,坐骑在mounts,引擎类(战车、火炮等)在battlefield_engines。

确定之后打开battle_entities,找到相应的key,修改即可。

当然,你也可以在battle_entities新建一个key,然后通过land_units、mounts或者battlefield_engines指定给某个单位。


坐骑和引擎之所以有单独的entity是因为这类单位属于复合单位,由2~3个部分组成(一般是人物+坐骑/引擎,部分有officer),而这里面每个部分都有自己单独的entity。

yndhzuoshuai 发表于 2017-7-8 17:54

a75799 发表于 2017-7-8 17:45
mod相关的到另一个帖子...那个问答的帖子。

我系统的讲一遍吧..

找到了,但是为啥格式完全不一样,是不是哪里出问题了,我改武器护甲盾牌哪些都是一目了然,但是这个。。。还是我打开方式有问题{:3_56:}

a75799 发表于 2017-7-9 14:29

glayhisashi 发表于 2017-7-8 15:38
你还没回答我这问题。。。

http://bbs.3dmgame.com/thread-5612023-1-1.html

你不会按renown单位来限定阵营,没关系,做建筑树也可以。你不想做建筑树,用effect bundle来限制单位解锁也可以。你不想用effect bundle,改单位类型用military generator template来限制AI使用也可以。
你要是都不想用,我能怎么办呢?

glayhisashi 发表于 2017-7-9 15:47

a75799 发表于 2017-7-9 14:29
你不会按renown单位来限定阵营,没关系,做建筑树也可以。你不想做建筑树,用effect bundle来限制单位解 ...

呵呵,我已经解决了

a75799 发表于 2017-7-9 16:14

glayhisashi 发表于 2017-7-9 15:47
呵呵,我已经解决了

正确做法我27个小时之前就已经在置顶帖的472楼告诉过你了。你现在跑到这边来句呵呵,我也是哭笑不得。

glayhisashi 发表于 2017-7-9 16:44

a75799 发表于 2017-7-9 16:14
正确做法我27个小时之前就已经在置顶帖的472楼告诉过你了。你现在跑到这边来句呵呵,我也是哭笑不得。
...
你说的那个表格我之前检查了,有个值没留意

而且后边你说的有点带人绕路了,实在点就是 问了等于没问

hxsgame 发表于 2019-10-7 12:50

楼主的帖子讲解严谨详细,非常受益
页: [1]
查看完整版本: mod制作进阶---effects和bonus value的使用