3. 制作你的武器技能
<p>该篇需要用到的表格有</p>
<ul>
<li>BattleSkillConfig</li>
<li>FormulaParamConfig</li>
</ul>
<h2>技能效果方面</h2>
<p>技能包含了技能的目标选取与伤害造成两个大功能
在 < 魔法书自走棋:契约 > 中,技能决定了<strong>选取有效单位的方式</strong>以及<strong>对被选取的有效单位做什么事情</strong>的功能</p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">功能说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Id</td>
<td style="text-align: left;">该技能的id,用于匹配各项参数</td>
</tr>
<tr>
<td style="text-align: left;">Type</td>
<td style="text-align: left;">该技能是否为飞行物技能[1-非飞行物技能/绝大部分近战都是1][2-飞行物技能,绝大部分远程都填2,这里填了2下方fly参数就要配置对应的飞行物id]</td>
</tr>
<tr>
<td style="text-align: left;">HurtType</td>
<td style="text-align: left;">该技能造成的伤害类型,[1-物理][2-魔法][无伤害的纯buff技能填1就行]</td>
</tr>
<tr>
<td style="text-align: left;">Name</td>
<td style="text-align: left;">技能名称的文本描述。游戏内不显示,写给自己读的</td>
</tr>
<tr>
<td style="text-align: left;">Animation</td>
<td style="text-align: left;">释放该技能时调用的动画片,配置为多个时则随机选择一个使用。被动技能不需要配置该项</td>
</tr>
<tr>
<td style="text-align: left;">Energy</td>
<td style="text-align: left;">此项为决定该技能为[0-普通攻击/1-被动技能/大于1的整数-主动技能]的重要参数</td>
</tr>
<tr>
<td style="text-align: left;">PreFind</td>
<td style="text-align: left;">此项为决定该技能生效的单位[1-我方/2-除自己外的我方/11-敌方]</td>
</tr>
<tr>
<td style="text-align: left;">PreFindRange</td>
<td style="text-align: left;">技能释放前[预选]敌人的范围。若预选范围内不存在有效单位,则后续生效范围内也不会取到有效单位</td>
</tr>
<tr>
<td style="text-align: left;">Repel</td>
<td style="text-align: left;">该技能生效时是否参与重量计算的环节。一般来说只有近战会参与,远程技能不参与</td>
</tr>
<tr>
<td style="text-align: left;">Filter</td>
<td style="text-align: left;">技能生效的范围。具体配置参数翻阅备注表</td>
</tr>
<tr>
<td style="text-align: left;">BuffId</td>
<td style="text-align: left;">技能生效时附加的buff组</td>
</tr>
<tr>
<td style="text-align: left;">HitEffect</td>
<td style="text-align: left;">该技能在对应单位上生效后产生的特效,俗称受击特效。全特效列表翻阅备注</td>
</tr>
<tr>
<td style="text-align: left;">Fly</td>
<td style="text-align: left;">填写的飞行物id,近战类型技能忽略,飞行物技能必填</td>
</tr>
<tr>
<td style="text-align: left;">Logic</td>
<td style="text-align: left;">该技能的处理方式脚本,具体配置翻阅备注表</td>
</tr>
<tr>
<td style="text-align: left;">Desc</td>
<td style="text-align: left;">该技能的效果描述。游戏内不显示,写给自己读的</td>
</tr>
<tr>
<td style="text-align: left;">Formula</td>
<td style="text-align: left;">关联的伤害处理公式id,请前往FormulaParamConfig表配置</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">值类型</th>
<th style="text-align: left;">配置区间</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Id</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;"></td>
</tr>
<tr>
<td style="text-align: left;">Type</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;"><code>[1-近战技能]</code> <code>[2-飞行物技能]</code></td>
</tr>
<tr>
<td style="text-align: left;">HurtType</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;"><code>[1-物理]</code> <code>[2-魔法]</code></td>
</tr>
<tr>
<td style="text-align: left;">Name</td>
<td style="text-align: left;">字符串<code>string</code></td>
<td style="text-align: left;"></td>
</tr>
<tr>
<td style="text-align: left;">Animation</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;">翻阅Animation参数表</td>
</tr>
<tr>
<td style="text-align: left;">Energy</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;"><code>[0-普攻]</code> <code>[1-被动]</code> <code>[大于1-主动]</code></td>
</tr>
<tr>
<td style="text-align: left;">PreFind</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;"><code>[1-我方]</code> <code>[2-除自己外的我方]</code> <code>[11-敌方]</code></td>
</tr>
<tr>
<td style="text-align: left;">PreFindRange</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;"><code>0~100</code></td>
</tr>
<tr>
<td style="text-align: left;">Repel</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;"><code>[1-参与]</code> <code>[0-不参与]</code></td>
</tr>
<tr>
<td style="text-align: left;">Filter</td>
<td style="text-align: left;">正整数组<code>int[]</code></td>
<td style="text-align: left;">具体配置参数翻阅备注表</td>
</tr>
<tr>
<td style="text-align: left;">BuffId</td>
<td style="text-align: left;">正整数组<code>int[]</code></td>
<td style="text-align: left;">技能生效时附加的buff组</td>
</tr>
<tr>
<td style="text-align: left;">HitEffect</td>
<td style="text-align: left;">字符串<code>string</code></td>
<td style="text-align: left;">该技能在对应单位上生效后产生的特效,俗称受击特效。全特效列表翻阅备注</td>
</tr>
<tr>
<td style="text-align: left;">Fly</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;">填写的飞行物id,近战类型技能忽略,飞行物技能必填</td>
</tr>
<tr>
<td style="text-align: left;">Logic</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;">该技能的处理方式脚本,具体配置翻阅备注表</td>
</tr>
<tr>
<td style="text-align: left;">Desc</td>
<td style="text-align: left;">字符串<code>string</code></td>
<td style="text-align: left;">该技能的效果描述。游戏内不显示,写给自己读的</td>
</tr>
<tr>
<td style="text-align: left;">Formula</td>
<td style="text-align: left;">正整数<code>int</code></td>
<td style="text-align: left;">关联的伤害处理公式id,请前往FormulaParamConfig表配置</td>
</tr>
</tbody>
</table>
<h2>关于Filter参数</h2>
<p>Filter参数可以理解为筛选敌人的方式,存在着多项例如从前往后,从后往前,生命值最低等等,在这里讲罗列游戏中的所有筛选方式以及配置方式供参考
常用的参数会进行额外标注,部分不常用的参数要么是本身不太好用,要么就是有更好的参数代替</p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">筛选方式</th>
<th style="text-align: left;">Filter实际配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">1</td>
<td style="text-align: left;">生命值百分比最低的目标</td>
<td style="text-align: left;">1</td>
</tr>
<tr>
<td style="text-align: left;">2</td>
<td style="text-align: left;">距离最远的目标</td>
<td style="text-align: left;">2</td>
</tr>
<tr>
<td style="text-align: left;">3</td>
<td style="text-align: left;">所有受伤单位</td>
<td style="text-align: left;">3</td>
</tr>
<tr>
<td style="text-align: left;">4<code>常用</code></td>
<td style="text-align: left;">所有目标</td>
<td style="text-align: left;">4</td>
</tr>
<tr>
<td style="text-align: left;">5<code>常用</code></td>
<td style="text-align: left;">x个生命值百分比最低的目标</td>
<td style="text-align: left;">5,x</td>
</tr>
<tr>
<td style="text-align: left;">6<code>常用</code></td>
<td style="text-align: left;">队伍中靠前的x个目标</td>
<td style="text-align: left;">6,x</td>
</tr>
<tr>
<td style="text-align: left;">7<code>常用</code></td>
<td style="text-align: left;">随机x个目标</td>
<td style="text-align: left;">7,x</td>
</tr>
<tr>
<td style="text-align: left;">8<code>常用</code></td>
<td style="text-align: left;">面前<code>A*B</code>面积范围内的所有目标</td>
<td style="text-align: left;">8,<code>A*10000</code>,<code>B*10000</code></td>
</tr>
<tr>
<td style="text-align: left;">9</td>
<td style="text-align: left;">随机x个受伤的目标</td>
<td style="text-align: left;">9,x</td>
</tr>
<tr>
<td style="text-align: left;">10<code>常用</code></td>
<td style="text-align: left;">面前<code>A*B</code>面积范围内的随机x个目标</td>
<td style="text-align: left;">10,<code>A*10000</code>,<code>B*10000</code>,x</td>
</tr>
<tr>
<td style="text-align: left;">11</td>
<td style="text-align: left;">优先攻击带有<code>BUFFId</code>的x个目标</td>
<td style="text-align: left;">11,x,<code>BUFFId</code></td>
</tr>
<tr>
<td style="text-align: left;">12<code>常用</code></td>
<td style="text-align: left;">自己</td>
<td style="text-align: left;">12</td>
</tr>
<tr>
<td style="text-align: left;">13<code>常用</code></td>
<td style="text-align: left;">队伍中靠后的x个目标</td>
<td style="text-align: left;">13,x</td>
</tr>
<tr>
<td style="text-align: left;">14</td>
<td style="text-align: left;">从队伍中靠后的x个目标中随机选择y个目标</td>
<td style="text-align: left;">14,x,y</td>
</tr>
</tbody>
</table>
<h4>一些参数的详细说明</h4>
<p>选靠前的目标用6,选靠后的目标用13,选全部目标用4,范围内的所有目标用8。
14的意思是,从队伍中靠后的几个人里面随机打几个。例如:从队伍中靠后的5个人里面随机打两个。此时不处于队伍中靠后的5个人里面的目标则永远不会受到随机攻击</p>
<h2>关于Animation参数</h2>
<p>请翻阅文档中的<code>Animation参数列表</code>进行查阅与配置</p>
<p>配置为对应ID动画片时,执行技能会播放该动画片对应的动作与特效。并且根据执行帧的数量进行造成伤害。若技能配置为5倍力量伤害一次,选择了执行帧数量为2的动画片,则实际造成5倍力量x2次的伤害
特效方面:如果是采用飞行物方式的技能,则动画片上一般不会附带特效,飞行物才是主要的特效承载形式。如果是近战类技能,则大部分特效与动画绑定在一起
动画片的ID与实际用途并无强关联性,仅作为设计时的用法而命名。Attack开头的动画仍然可以用作技能动画,而Skill开头的动画也可以用作普通攻击的动画</p>
<h2>关于Fly参数</h2>
<p>当<code>BattleSkillConfig</code>中的<code>Type</code>参数填写为<code>2</code>时,<code>Fly</code>参数必须被填写
Fly参数为使用的飞行物Id,在MOD制作中,飞行物的制作并未被开放出来供制作方自定义,所以尽可能多地罗列游戏中用到的飞行物列表</p>
<p>请翻阅文档中的<code>Fly参数列表</code>进行查阅与配置</p>
<h2>关于HitEffect参数</h2>
<p>该参数为<code>受击特效</code>,通常用于展示该技能成功在目标身上生效时所产生的特效,一般常见于普攻或技能攻击到敌人时,在敌人身上播放<code>受击特效</code>
具体的特效列表与效果可以翻阅文档中的<code>特效列表</code></p>
<h2>伤害计算方面</h2>
<p><code>BattleSkillConfig</code>表中有一个参数为<code>Formula</code>,而该篇主要讲解的就是该参数的实际用途
<code>Formula</code>是主要决定伤害的计算方式。该技能是按照什么倍率?以什么参数作为基础值?又有多少概率可以给敌人附加额外的buff效果?统统由<code>FormulaParamConfig</code>内的<code>Logic</code>决定</p>
<p>接下来先看看<code>FormulaParamConfig</code>的基本构成</p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">功能说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Id</td>
<td style="text-align: left;">伤害公式的id,用于匹配各项参数</td>
</tr>
<tr>
<td style="text-align: left;">Type</td>
<td style="text-align: left;">决定该伤害是什么类型的伤害[1-治疗][2-物理][3-魔法][4-异常][5-反伤],配置为[1-治疗]时,不会造成伤害,更替为回血</td>
</tr>
<tr>
<td style="text-align: left;">ElementType</td>
<td style="text-align: left;">该伤害的元素类型[],不建议填写,默认为空</td>
</tr>
<tr>
<td style="text-align: left;">FloArr</td>
<td style="text-align: left;">Logic公式中的浮点参数</td>
</tr>
<tr>
<td style="text-align: left;">StrArr</td>
<td style="text-align: left;">Logic公式中的字段参数</td>
</tr>
<tr>
<td style="text-align: left;">IntArr</td>
<td style="text-align: left;">Logic公式中的整数参数</td>
</tr>
<tr>
<td style="text-align: left;">Logic</td>
<td style="text-align: left;">该伤害的计算公式脚本,需要结合[FloArr][StrArr][IntArr]一起配置</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">值类型</th>
<th style="text-align: left;">配置区间</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Id</td>
<td style="text-align: left;">正整数</td>
<td style="text-align: left;"></td>
</tr>
<tr>
<td style="text-align: left;">Type</td>
<td style="text-align: left;">正整数</td>
<td style="text-align: left;">指定参数[1;2;3;4;5]</td>
</tr>
<tr>
<td style="text-align: left;">ElementType</td>
<td style="text-align: left;">正整数</td>
<td style="text-align: left;">推荐参数[0]</td>
</tr>
<tr>
<td style="text-align: left;">FloArr</td>
<td style="text-align: left;">正浮点数组</td>
<td style="text-align: left;">根据具体的Logic来配置</td>
</tr>
<tr>
<td style="text-align: left;">StrArr</td>
<td style="text-align: left;">字符串</td>
<td style="text-align: left;">根据具体的Logic来配置</td>
</tr>
<tr>
<td style="text-align: left;">IntArr</td>
<td style="text-align: left;">正整数</td>
<td style="text-align: left;">根据具体的Logic来配置</td>
</tr>
<tr>
<td style="text-align: left;">Logic</td>
<td style="text-align: left;">字符串</td>
<td style="text-align: left;">指定参数[NormalAtk;GivenHurt;OnePropCalcHurt;TwoPropCalcHurt]</td>
</tr>
</tbody>
</table>
<p>Logic的4个主要脚本</p>
<ol>
<li>NormalAtk</li>
<li>GivenHurt</li>
<li>OnePropCalcHurt</li>
<li>TwoPropCalcHurt</li>
</ol>
<p><strong>NormalAtk:</strong>
该脚本用于根据武器的主要加成属性造成攻击力等额的伤害,基本用法就是设计一个技能,然后伤害脚本用这个普通攻击,那这个技能就是简单的普通攻击效果。注意,如果该技能中的buff栏内不为空,则附加这些buff栏内的buff概率为100%附加。</p>
<table>
<thead>
<tr>
<th style="text-align: left;">NormalAtk</th>
<th style="text-align: left;">参数配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">FloArr</td>
<td style="text-align: left;">空</td>
</tr>
<tr>
<td style="text-align: left;">StrArr</td>
<td style="text-align: left;">空</td>
</tr>
<tr>
<td style="text-align: left;">IntArr</td>
<td style="text-align: left;">空</td>
</tr>
<tr>
<td style="text-align: left;">Logic</td>
<td style="text-align: left;">NormalAtk</td>
</tr>
</tbody>
</table>
<p><strong>GivenHurt:</strong>
该脚本用于造成固定伤害,并且100%概率附加buff栏里面配置的buff。
使用案例:脚本选择givehurt,Type类型选择1,配置IntArr为50。则最终效果为恢复50点生命值。</p>
<table>
<thead>
<tr>
<th style="text-align: left;">GivenHurt</th>
<th style="text-align: left;">参数配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">FloArr</td>
<td style="text-align: left;">空</td>
</tr>
<tr>
<td style="text-align: left;">StrArr</td>
<td style="text-align: left;">空</td>
</tr>
<tr>
<td style="text-align: left;">IntArr</td>
<td style="text-align: left;">正整数</td>
</tr>
<tr>
<td style="text-align: left;">Logic</td>
<td style="text-align: left;">GivenHurt</td>
</tr>
</tbody>
</table>
<p><strong>OnePropCalcHurt:</strong>
该脚本的效果是(造成intArr加FloArr[A]倍StrArr的Type类型伤害,并有FloArr[B]概率附加buff)。该脚本可以应对游戏中绝大部分的情况,通常仅用该脚本即可
案例:FloArr配置为[3;0.25],StrArr配置为Power,IntArr配置为100。则实际效果是造成100+3倍力量的伤害,并且有25%几率施加buff</p>
<table>
<thead>
<tr>
<th style="text-align: left;">OnePropCalcHurt</th>
<th style="text-align: left;">参数配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">FloArr</td>
<td style="text-align: left;">两个配置参数[A,B]A为StrArr的倍率,B为施加buff的概率。B配置区间为[0 - 1]</td>
</tr>
<tr>
<td style="text-align: left;">StrArr</td>
<td style="text-align: left;">一级属性字段</td>
</tr>
<tr>
<td style="text-align: left;">IntArr</td>
<td style="text-align: left;">固定值</td>
</tr>
<tr>
<td style="text-align: left;">Logic</td>
<td style="text-align: left;">OnePropCalcHurt</td>
</tr>
</tbody>
</table>
<p><strong>TwoPropCalcHurt:</strong>
该脚本与OnePropCalcHurt完全一致,区别于填写的StrArr字段不同。一级属性采用OnePropCalcHurt,二级属性采用TwoPropCalcHurt
案例:FloArr配置为[3;1],StrArr配置为Defence,IntArr配置为0。则实际效果是造成3倍物理防御力的伤害,并且有100%几率施加buff</p>
<table>
<thead>
<tr>
<th style="text-align: left;">TwoPropCalcHurt</th>
<th style="text-align: left;">参数配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">FloArr</td>
<td style="text-align: left;">两个配置参数[A,B]A为StrArr的倍率,B为施加buff的概率。B配置区间为[0 - 1]</td>
</tr>
<tr>
<td style="text-align: left;">StrArr</td>
<td style="text-align: left;">一级属性字段</td>
</tr>
<tr>
<td style="text-align: left;">IntArr</td>
<td style="text-align: left;">固定值</td>
</tr>
<tr>
<td style="text-align: left;">Logic</td>
<td style="text-align: left;">TwoPropCalcHurt</td>
</tr>
</tbody>
</table>