设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 45|回复: 1
打印 上一主题 下一主题

[有事请教] 如何实现在战斗中检测玩家一次攻击造成的伤害值

[复制链接]

Lv1.梦旅人

梦石
0
星屑
52
在线时间
8 小时
注册时间
2025-6-22
帖子
3
跳转到指定楼层
1
发表于 昨天 21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
已善用搜索


目的:
想在检测到玩家一次性对BOSS造成了超出预想的伤害时(或者BOSS一次性受到超出预想的伤害时),触发事件。
可看可不看的为啥要达成这个目的:说白了就是想检测玩家有没有开作弊打BOSS,BOSS是Meta角色,感觉加上这个的话演出效果会好一点

目前已经尝试:
在战斗事件页加入条件分歧,脚本:$gameTroop.members()[0].result().hpDamage >= (触发事件的伤害值)
是G老师教的,但是触发不了,不知道是不是G老师写的有问题

也尝试了:
使用YEP Battle Engine Core,技能进行备注,也触发不了

自己用过修改器,知道可以直接秒BOSS。但是原本BOSS就有个战败台词,所以不能用血量百分比作为事件触发条件,而是想将一次性造成/受到的伤害作为触发条件

感谢解惑!

Lv6.析梦学徒

老鹰

梦石
40
星屑
35446
在线时间
6781 小时
注册时间
2012-5-26
帖子
3268

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 昨天 23:53 | 只看该作者
为什么触发不了,是因为调用战斗事件是有固定的时间点的(战斗开始、回合开始、回合结束)。

在默认战斗中,如果是回合结束执行的事件,那要等全部角色使用完技能后,才判定战斗事件符不符合执行时机。
所以在判定战斗事件执行前,所有角色的result()中存储的伤害值都已经被清零了,也就没法达到你想要的效果。

这里给出一个简单的实现方式:
战斗者的 onDamage() 方法是受到技能伤害后调用的,其中 value 是受到的伤害值(正数)
你可以在其中增加一个判定
  1. Game_Battler.prototype.onDamage = function(value) {
  2.     this.removeStatesByDamage();
  3.     this.chargeTpByDamage(value / this.mhp);
  4.     # 如果本角色是敌人 且 敌人的数据库ID为 1 且 伤害值大于50%最大生命值
  5.     if( this.isEnemy() && this.enemyId() == 1 && value > this.mhp * 0.5 )
  6.     { // 将1号开关打开
  7.         $gameSwitches.setValue( 1, true );
  8.     }
  9. };
复制代码

之后你再利用其中的 1 号开关(具体哪个开关你可以自己改)去做战斗事件的判定。

但这里也有几个问题:
1. 敌人如果直接死亡了,那会优先处理死亡,所以你可以在战斗开始时给敌人附加一个 免疫死亡 的状态,之后在你的战败事件中再移除这个状态,避免事件执行前就死了然后判定战斗胜利。
2. 如果你想既处理单次受伤超过指定值的事件,又想再继续处理战败的事件,可能不太行,因为一次只会处理一个战斗事件,而且是从序号小的开始一个个判定是否满足执行条件,遇到一个满足的就执行了,之后的不再判定。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-6-30 15:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表