编号 | 伤害类型 | 公式 | 注解 | 1 | 基本公式 | a.atk * 4 - b.def * 2 | 被指定为默认的通常攻击。
a:执行技能、道具的一方(自己)b:技能、道具受影响的一方(对方)
参考:小学基础数学四则运算
+:加法 -:减法 *:乘法 /:除法
| 2 | 无视防御 | a.atk * 4 | 基本公式中,不使用防御公式 | 3 | 其他属性的利用 | a.atk * 4 - b.def * 2 + a.luk | 把自己的运气属性加到伤害当中
其他属性:
mhp:最大HP
mmp:最大MP
atk:攻撃力 def:防御力 mat:魔法力 mdf:魔法防御
agi:敏捷性 luk:运气 hit:命中率 eva:回避率 cri:会心率
cev:会心回避 mev:魔法回避 mrf:魔法反射 cnt:反撃率
hrg:HP再生率 mrg:MP再生率 trg:TP再生率
tgr:成为目标率 grd:防御効果率 rec:回復効果率 mcr:MP消費率
tcr:TP获得率 pdr:物理伤害率 mdr:魔法伤害率
fdr:地面伤害率 exr:经验获得率 | 4 | 变量的使用 | v[n] * 2 (n:变量ID) | 変量[n]的2倍 | 5 | 比例伤害1 | Math.floor(b.hp / 2) | 目标现在的HP变为二分之一
参考:Math.floor
结果可能变为小数的东西必须是Math.floor求整
| 6 | 比例伤害2 | b.hp - 1 | 目标剩余的HP减少1(注意不要因为分散度或属性而发生变动) | 7 | 比例伤害3 | Math.floor(b.mhp / 2) | 目标最大HP的一半,分散率影响同上 | 8 | 根据特定ID的有无产生变化 | 10 + (b.isStateAffected(n) ? 30 : 0) [n:状态ID] | 对手变为状态n的场合,伤害增加30。(如果判断自己目前状态,把b换成a就OK)
参考:条件运算符(三元运算符)
(条件?满足时的值:不满足时的值)
| 9 | 状态异常数 | 10 + b.states().length * 30 | 将对手的状态数*30的伤害加在一起。
持有状态数组的长度,就是状态数量
| 10 | 最低伤害设定 | Math.max(100, a.atk * 4 - b.def * 2) | 结果在100以下时固定为100
参考:Math.max
从指定的参数中返回最大值
| 11 | 最大伤害设定 | Math.min(100, a.atk * 4 - b.def * 2) | 结果在100以上时固定为100
参考:Math.min
从指定的参数中返回最小值 |
技能公式还可以变得更复杂⼀些吗,例如,当某些变量的值超过100时,会对敌⼈造成
额外的伤害?
可以,这种情况下我们可以使⽤if else句式 (分歧)。 ⽐如:
[JavaScript] 纯文本查看 复制代码 if (statement)
{
formula1;
}
else
{
formula2;
}
咋才能把它写进伤害公式⾥呢?
⼀⾏就够了!全塞⼀块?
[JavaScript] 纯文本查看 复制代码 if (条件) { 公式1 } else { 公式2 }
例子:
[JavaScript] 纯文本查看 复制代码 if (v[10] > 100) { a.atk*4 - b.def*2 } else { a.atk*2 - b.def*2 }
也可以简化成这样:
[JavaScript] 纯文本查看 复制代码 if (statement)
formula1;
else
formula2;
例⼦:
[JavaScript] 纯文本查看 复制代码 if (v[10] > 100) a.atk*4 - b.def*2; else a.atk*2 - b.def*2;
使⽤三元选择符进⾏简化是不错的选择 (我最爱的):
[JavaScript] 纯文本查看 复制代码 statement ? formula1 : formula2;
例子:
[JavaScript] 纯文本查看 复制代码 v[10] > 100 ? a.atk*4 - b.def*2 : a.atk*2 - b.def*2;
符号说明:
[JavaScript] 纯文本查看 复制代码 > - ⼤于
< - ⼩于
>= ⼤于或等于
<= ⼩于或等于
=== 等于
&& 和
|| 或
!== 不等于
! 否
例子:
[JavaScript] 纯文本查看 复制代码 v[10] > 100 ? 1000 : 100;
如果变量10⼤于100,将造成1000伤害,否则只会造成100伤害
[JavaScript] 纯文本查看 复制代码 v[10] < 100 ? 1000 : 100;
如果变量10⼩于100,将造成1000伤害,否则只会造成100伤害
[JavaScript] 纯文本查看 复制代码 v[10] >== 100 ? 1000 : 100;
如果变量10⼤于或等于100,将造成1000伤害,否则只会造成100伤害
[JavaScript] 纯文本查看 复制代码 v[10] <== 100 ? 1000 : 100;
如果变量10⼩于或等于100,将造成1000伤害,否则只会造成100伤害
[JavaScript] 纯文本查看 复制代码 v[10] === 100 ? 1000: 100;
如果变量10等于100,将造成1000伤害,否则只会造成100伤害
[JavaScript] 纯文本查看 复制代码 v[10] > 50 && v[11] >== 25 ? 1000 : 100;
如果变量10⼤于50,同时变量11⼤于或等于25,则造成1000伤害,否则只会造成100伤害
[JavaScript] 纯文本查看 复制代码 v[10] > 50 || v[11] > 50 ? 1000 : 100;
如果变量10⼤于50,或者变量11⼤于50,则造成1000伤害,否则只会造成100伤害
[JavaScript] 纯文本查看 复制代码 v[10] !== 100 ? 1000 : 100;
如果变量10不等于100,将造成1000伤害,否则只会造成100伤害
关于条件表达式
条件的公式一般为 A ? B:C
意思就是A为一个条件,?则是作为对A提问
在问句中仅有是与否,B和C分别代表着A的答案的正确和否定,中间用:分隔
这里我们用 a.hp_rate <= 0.1 ? a.atk * 4 : a.atk * 2 - b.def * 1
来进行举例,前面的a.hp_rate >= 0.1代表着条件:
自身当前HP是否不大于10%
后面的a.atk * 4则是在条件是认可的状态下触发
而:后面的a.atk * 2 -b.def * 1则是在条件为否定的情况下触发
同理,我们可以用这个办法进行很多类型的对比和开关
一个技能有多种伤害不再是梦
比如a.atk < b.atk ?进行攻击力的对比啊
a.luk > b.luk ?进行幸运的对比啊,比比皆是不再更多举例
另外一个能够判断的则是[状态]
b.isStateAffected(xx) ?
一般使用上方的公式来判断目标是否处于xx号状态
假如说我要制作一个目标处于ID为009的状态时伤害翻倍的技能,
就可以这么写:
(a.atk * 3 - b.def * 1) * b.isStateAffected(9)?2:1
当然你也可以把条件写在前方,在两个答案中使用完全不同的公式
公式与变量的运用
使用$gameVariables.value(xx)来引用游戏变量,也可使用v[x]来引用变量。
使用该语句在公式中即可引用xx变量的值,而变量需要提前带入,可以用公共事件进行。
在技能公式中
a.atk – b.def + v[n]
v[n]代表着ID为x的变量,n就是变量号
或者可以用条件判断if语句进行判断
代码(文本):
if(语句){公式1;{公式2;}
例如:
代码(文本):
if(v[10] > 100) {a.atk*4 - b.def*2} else {a.atk*2 – b.def*2}
假如变量10的值大于100 公式1执行{a.atk*4 - b.def*2} 否则 公式2执行{a.atk*2 - b.def*2}
提示:在测试战斗而非正式运行游戏的时刻,全变量默认为0,请提前赋值以防止测试出错(比如在战斗事件中设置第一回合触发赋值)
在部分情况下,公式中代表分隔的空格可以省略,如a.atk*2-b.def*2。
但实际情况可能会根据使用的公示的不同而有不同的分隔号需求,保险起见请养成使用空格的习惯。
|