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