Project1

标题: 伤害公式以及其他符号意思等(新手必看) [打印本页]

作者: xiamumomo    时间: 2021-2-26 13:23
标题: 伤害公式以及其他符号意思等(新手必看)
本帖最后由 xiamumomo 于 2022-3-30 17:14 编辑

原网址:https://forums.rpgmakerweb.com/i ... formulas-101.81905/(点开这个评论也有帮助)
目前只是翻译品论去的暂未合集到里面可以的话直接去看  公式的标点符号都是大写下面应为是机翻自动是小写但是有些我改回来了
但是不知道有没遗漏的如果你们复制使用要注意(妈耶眼睛瞎了)


下面是翻译内容
请注意:
关于这些公式可以执行的不同操作的讨论已经开始,因此请直接将那些评论和问题提交给相应的主题。
https://forums.rpgmakerweb.com/i ... eas-and-help.47099/

指向事件命令等效脚本列表的链接
https://forums.rpgmakerweb.com /index.php?threads/rpg-maker-mv-script-call-list.46456/


伤害公式101
MV版

您可能想知道如何使技能对处于状态的敌人造成更大的伤害,或者如果玩家拥有陈述,或恰好是敌方生命值的一半。等等。

所有这些以及更多操作都可以通过自定义损坏公式完成。

基础知识:

类型-设置公式会破坏或修复哪些内容。
无-不会,不会造成任何损坏。
HP伤害-HP将会受到伤害
MP伤害-MP将受到伤害
HP恢复-HP将被恢复
MP恢复-MP将被恢复
HP消耗-对敌人造成伤害HP并为攻击者恢复那么多的HP
MP消耗-对敌人造成伤害MP并为攻击者恢复那么多的MP

Element-设置要使用的元素。普通攻击-意味着将使用与武器相同的元素。

差异-损害如何波动。例如,如果技能公式说造成100点伤害,并且变异为20%,则该技能将造成80至120点伤害。

批判的-可以重击技能,造成的伤害提高300%。

现在,真正有趣的部分-公式!
它决定了对手会受到多少伤害或盟军可以治愈。

让我们剖析RPG Maker MV随附的基本公式之一
-Fire 100 + a.mat * 2-b.mdf * 2

像a和b这样的东西是什么意思?
a-攻击者
b-防御者
因此,如果“演员眼镜”向史莱姆身上施火。a是眼镜,b是史莱姆。

表示将“ Glass mat”(眼镜攻击)参数取两倍,然后减去“ Slime”的mdf(“ Magic Defense”)参数乘以两倍,然后在公式开头将其加到100。
例如,Glass具有100垫,而Slime具有20 mdf。如果我们使用这些数字转换公式,我们将得到-100 + 100 * 2-20 * 2,经过计算,我们看到,使用这些参数,如果没有方差,则火会造成260点伤害。

但是,公式中只有最后一个数字会造成伤害。如果您有2行公式。(分号;告诉该程序行在何处结束),
例如a.atk; a.atk * 2
仅会计算a.atk * 2的损坏。

公式中除了a和b之外还有更多字母吗?
是的。有变量。像这样使用:v [ID]。ID-变量的索引。
因此,您可以掌握一项技能,使变量越高越强。
例如v [10] * 2-b.def * 3

有没有办法使技巧更加复杂,例如,如果某个变量超过100,会造成额外的损失吗?
是的,在这种情况下,我们可以使用if else语句。
if else语句的外观:

代码:
代码(文本):
if(语句)
{
Formula1;
}
else
{
Formula2;
}
但是,如何将其写入伤害公式?
它只有一条线!
只需将所有内容一起编写即可!
代码(文本):
if(statement){Formula1; } else {Formula2; }
例如:
代码(文本):
if(v [10]> 100){a.atk * 4-b.def * 2} else {a.atk * 2-b.def * 2}

可以缩短为如果您仅使用1行公式。
代码(文字):
if(语句)
公式1;
其他
公式2;
例如:
代码(文字):
if (v [10]> 100){a.atk * 4-b.def * 2} else {a.atk * 2-b.def * 2}

而且您可以使用三元运算符(我最喜欢的一个)进一步缩短它:

statement?公式1:公式2;
例如:
代码(文字):
v [10]> 100?a.atk * 4-b.def * 2:a.atk * 2-b.def * 2;

语句的符号:

>大于
<小于
>=大于或等于
<=小于或等于
===等于
&&和
|| 或
!==不等于
!不是

例子:

v [10]> 100?1000:100;(如果变量10大于100,将造成1000伤害,否则只会造成100)

v [10] <100?1000:100;(如果变量10小于100,它将造成1000伤害,否则,它将仅造成100)

v [10]> == 100?1000:100;(如果变量为100或更大,它将造成1000伤害,否则只会造成100)

v [10] <== 100?1000:100;(如果变量等于或小于100,则将造成1000伤害,否则只会造成100)

v [10] === 100?1000:100;(如果变量等于100,它将造成1000伤害,否则只会造成100)

v [10]> 50 && v [11]> == 25?1000:100;(如果变量10大于50,变量11为25或更大,则会造成1000点伤害,否则只会造成100点伤害)

v [10]> 50 || v [11]> 50吗?1000:100;(如果变量10大于50或变量11大于50,那么它将造成1000伤害,只会造成100伤害)

v [10]!== 100?1000:100;(如果变量10不等于100,它将造成1000伤害,否则只会造成100)

对于a和b使用的参数呢?

以下是它们的完整列表:

当前:(所有整数,例如:900、999、11)

级别-当前级别(默认情况下仅是Actor)
hp-当前hp
mp-当前mp
tp-当前tp

参数:(所有平坦的数字,例如:1337,7331,156)

mhp-最大hp
mmp-最大MP
hp-当前生命值
mp-当前魔法值
atk-攻击
def-防御
mat-魔法攻击
mdf- 魔法防御
agi-敏捷度
luk-运气

XParams:

hit-命中率
eva-闪避率
cri -临界率
cev-临界逃逸率
mev-魔法逃逸率
mrf-魔法反射率
cnt-反击率
hrg-HP再生率
mrg-MP再生率
trg-TP再生率

SParams:(所有小数点均表示百分数,例如1.0、0.5,

0.75、2.44分别为100%,50%,75%,244%)
tgr-目标率
grd-防护作用率
rec-恢复作用率
pha-药理学
mcr-MP成本率
tcr-TP收费率
pdr-物理伤害率
mdr-魔法伤害率
fdr-地面伤害率
exr-经验率

如何更改HP / MP / TP?
gainHp(value) - 恢复HP-通过值(值:value)
gainMp(value) - 恢复MP-通过值
gainTp(value) - 恢复TP-通过值

setHp(hp) - 将HP设置为值
setMp(mp) - 将MP设置为值
setTp(tp) - 将TP设置为值
例如a.setHp(a.mhp)
例如,a.setHp(a.hp + 100)

clearTp()-将TP设置为0


那么,可以影响状态公式的高级内容呢?

我们得到了所有!
isStateAffected(stateId)-检查战斗人员是否对他们施加了状态。
b.isStateAffected(10) ? 10000 : 1;

isDeathStateAffected ()-检查战斗机是否有死亡状态。
b.isDeathStateAffected() ? 10000 : 1;

resetStateCounts(stateId)-刷新战斗状态将持续多久
if (b.isStateAffected(10)) b.resetStateCounts(10); 100

updateStateTurns()-缩短战场上所有状态1回合
b.updateStateTurns(); 100

addState(stateId)-为战斗者添加状态
if (!b.isStateAffected(10)) b.addState(10); 100

isStateAddable(stateId)-检查状态是否可以添加到战场
c=100; if (b.isStateAddable(10)) b.addState(10); else c=4000; c

removeState(stateId)-从战斗中移除状态
if (a.isStateAffected(10)) a.removeState(10); 0



迷们呢?我们可以buff和debuff战斗吗?buff(增益)Debuff(减益、负面)

是的!
addBuff(paramId,turns)-添加一个BUFF到参数
a.addBuff(0, 3); b.def*10

addDebuff(paramId, turns) - 添加一个DeBuff到参数
b.addDebuff(2, 10); 9999

removeBuff(paramId)-从战斗中移除一个buff或debuff
removeAllBuffs()-从战斗中移除所有的增益和减益

参数ID

0-最大HP
1-最大MP
2-攻击
3-防御
4-魔法攻击
5-魔法防御
6-敏捷
7-运气

一般的战斗机东西
die() -击杀战斗者
b.die(); 0

revive() -使战斗者复活
a.revive(); 1000

paramBase(paramId) -获取基本参数
a.paramBase(3)* 10-b.def * 2

paramPlus(paramId) -获取参数
a.paramPlus(3)* 2-b.def * 2

paramMax(paramId) -获取参数
b.paramMax(0)

elementRate(elementId) -检查战斗机的元素比率(比率为代表%的十进制数)
b.elementRate(10) >== 0.5 ? 10000 : a.mat*4;

isStateResist(stateId)  -检查战斗机是否抵抗状态
c=0; b.isStateResist(10) ? c+=2000 : b.addState(10); c

isSkillTypeSealed(stypeId)-检查战士的技能类型是否被密封
isSkillSealed(skillId)-检查战士的技能类型是否被密封
isEquipTypeSealed(etypeId)-检查战斗机的装备类型是否被密封
isDualWield()-检查战斗机是否可以双重使用
isGuard()-检查战斗机是否在守卫
recoveryAll()-删除所有状态,将HP和MP恢复到最大

hpRate()-检查战斗机的HP率
mpRate()-检查战斗机的MP率
tpRate()-检查战斗机的TP率
b.hpRate() < 0.5 ? b.hp-1 : 100;

isActor()-检查战斗机是否为演员
isEnemy()-检查战斗机是否为敌人
escape() - 逃离战斗
b.escape()(使敌人逃跑)

consumeItem(item)-消耗物品
a.consumeItem($ dataItems [15]);100



仅对于演员:

currentExp()-当前EXP
currentLevelExp() - EXP需要的电流水平
nextLevelExp() - EXP需要一个新的水平
nextRequiredExp() - EXP留到下一级
maxLevel() -演员的最高水平
isMaxlevel() -是演员最高水平(真/假)
hasWeapon()演员是否持武器(true / false)
hasArmor()-演员是否戴着任何盔甲(true / false)
clearEquipments() -取消演员所穿的所有装备
isClass(gameClass)-检查演员是否属于某类(gameClass- $ dataClasses [ID])
hasNoWeapons()-检查演员是否没有任何武器
levelUp()-演员级别提升
levelDown()-演员级别降低
gainExp(exp)-给演员提供exp
learningSkill(skillId)-使演员学习技能
forgetSkill(skillId)(skillId)-使演员忘记技能
isLearnedSkill(skillId)-检查演员是否具有学习的技能演员
actorId() -返回演员的ID


仅针对敌人:
enemyId() -返回敌人的ID

数学怎么样?我们可以在公式中使用数学方法吗?

是的,您完全可以。

Math.random()-返回0到1之间的随机数(0 <= n <1)
Math.min(numbers)-从提供的数字中返回最小数。
例如Math.min(10,50,40,200)-10 将返回

Math.max(numbers) -从提供的数字中返回最大数字。
例如Math.max(10,50,40,200)-200 将返回

Math.round(number)-将数字四舍五入到最接近的整数。
Math.ceil(number)-将数字四舍五入到最接近的整数。
Math.floor(number)-将数字四舍五入到最接近的整数。

Math.rand()返回0到1之间的数字,但是我们能否获得1到100之间的随机数?还是5和200?

没问题:

Math.floor(Math.random()* 100)+1
^那将返回一个1到100之间的数字。如果我们没有在末尾加1,它只会返回一个0到99之间的数字。 。

但是有很多文字?我们可以简化一下吗?

值得庆幸的是,rpg_core.js中有一个方法添加了Math.randomInt(max);
因此,我们可以使用:
Math.randomInt(100)+1

作者: Zeldashu    时间: 2021-2-27 12:52
干货,顶,能稍微排版一下就更好了
作者: lishang339    时间: 2021-2-27 13:46
学习了,谢谢分享
作者: 微笑的迪妮莎    时间: 2021-2-27 22:04
高端货 多谢分享
作者: zwlele1980    时间: 2021-3-8 09:52
谢谢 大佬的教程公式 。 写的很细致
作者: y967    时间: 2021-3-17 11:14
不错,这个伤害公式很灵活,用变量控制伤害,可以做出很多专属技能伤害,并且每一个技能都对应不同的防御,这个防御就是变量,比如可以打造出武功专属防御公式,一个大侠可能防御了所有武功,却防不住一招下三滥功夫...
作者: 17665670570    时间: 2022-1-3 02:27
学习了
作者: xiamumomo    时间: 2022-2-18 21:35
b.clearStates() 这是清除目标所有的状态
作者: 任小雪    时间: 2022-2-23 12:26
分支里可以赋值,


if(v[1]){if(v[1]==2){v[1]=0;1000;}else{v[1]+=1;100;};}else{v[1]=1;100;}

总结,过于复杂的伤害公式,要用if else语句;并且,变量是需要赋值才能用的(起码伤害公式这里是这样)

这里是真的实测了,说法应该没毛病了,啧
作者: soulsaga    时间: 2022-2-23 15:13
本帖最后由 soulsaga 于 2022-2-23 15:20 编辑

参数:(所有平坦的数字,例如:1337,7331,156)

mhp-最大hp
mmp-最大MP
攻击-攻击
防御-防御
垫-魔法攻击

mdf- 魔法防御
agi-敏捷度
luk-运气


??????我该怎么吐槽
作者: dall01    时间: 2022-2-23 18:11
已经收藏,多谢分享
作者: jaslyfancy    时间: 2022-3-30 16:43
这个是真的有用!!一定要看,谢谢
作者: xin6429    时间: 2024-12-13 17:25
请问这样写不生效吗?
v[71] = b.enemyId() && v[72] = b.mhp
从公共事件看没有一点效果
只有这一段 v[71] = b.enemyId() 倒是可以生效
作者: 老k666    时间: 2024-12-16 10:14
受教了,好好学习下




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1