|
为什么触发不了,是因为调用战斗事件是有固定的时间点的(战斗开始、回合开始、回合结束)。
在默认战斗中,如果是回合结束执行的事件,那要等全部角色使用完技能后,才判定战斗事件符不符合执行时机。
所以在判定战斗事件执行前,所有角色的result()中存储的伤害值都已经被清零了,也就没法达到你想要的效果。
这里给出一个简单的实现方式:
战斗者的 onDamage() 方法是受到技能伤害后调用的,其中 value 是受到的伤害值(正数)
你可以在其中增加一个判定
- Game_Battler.prototype.onDamage = function(value) {
- this.removeStatesByDamage();
- this.chargeTpByDamage(value / this.mhp);
- # 如果本角色是敌人 且 敌人的数据库ID为 1 且 伤害值大于50%最大生命值
- if( this.isEnemy() && this.enemyId() == 1 && value > this.mhp * 0.5 )
- { // 将1号开关打开
- $gameSwitches.setValue( 1, true );
- }
- };
复制代码
之后你再利用其中的 1 号开关(具体哪个开关你可以自己改)去做战斗事件的判定。
但这里也有几个问题:
1. 敌人如果直接死亡了,那会优先处理死亡,所以你可以在战斗开始时给敌人附加一个 免疫死亡 的状态,之后在你的战败事件中再移除这个状态,避免事件执行前就死了然后判定战斗胜利。
2. 如果你想既处理单次受伤超过指定值的事件,又想再继续处理战败的事件,可能不太行,因为一次只会处理一个战斗事件,而且是从序号小的开始一个个判定是否满足执行条件,遇到一个满足的就执行了,之后的不再判定。
|
|