查看: 1230|回复: 6

[有事请教] 如何使强制战斗行动释放的技能受速度补正影响?

[复制链接]
梦石
0
星屑
714
在线时间
58 小时
注册时间
2022-2-9
回帖
10
发表于 2024-1-13 18:54:33 | 显示全部楼层 |阅读模式

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

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

×
大佬们,我发现强制战斗行动释放的技能总是第一个释放,无论该技能速度补正多小。
实测了1v1,敌方强制释放了一个速度补正-2000的会施加某号状态的技能,我方释放一个速度补正+2000的会解除该状态的技能,结果是敌方先动我方后动
梦石
0
星屑
7009
在线时间
1280 小时
注册时间
2016-12-6
回帖
378
发表于 2024-1-13 19:21:55 | 显示全部楼层
强制行动的指令不参与正常的战斗流程,触发就立即释放,所以速度补正属性是无效的
最好的解决办法是少用强制行动指令
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2024-1-13 19:59:25 | 显示全部楼层
我方后动不对吗?你要解除得要对方先附加对吧
回复

使用道具 举报

梦石
0
星屑
4230
在线时间
2671 小时
注册时间
2012-3-1
回帖
680
发表于 2024-1-13 21:37:27 | 显示全部楼层
强制战斗指令通常都是处于剧情内使用,或者是开局挂上buff什么的。
回复

使用道具 举报

梦石
0
星屑
29896
在线时间
5733 小时
注册时间
2016-3-8
回帖
1653
发表于 2024-1-13 22:29:38 | 显示全部楼层
本帖最后由 alexncf125 于 2024-1-13 22:41 编辑
shiroin 发表于 2024-1-13 19:21
强制行动的指令不参与正常的战斗流程,触发就立即释放,所以速度补正属性是无效的
最好的解决办法是少用强 ...


佬看看这样改会出bug么?
[pre lang="javascript"]BattleManager.forceAction = function (battler) {
    // this._actionForcedBattler = battler; // 此行移除
    var index = this._actionBattlers.indexOf(battler);
    if (index >= 0) {
        this._actionBattlers.splice(index, 1);
    }
    // 以下是新增內容
    var actionBattlers = this._actionBattlers;
    actionBattlers.splice(0, 0, battler);
    actionBattlers.forEach(function (b) {
        b.makeSpeed();
    });
    actionBattlers.sort(function (a, b) {
        return b.speed() - a.speed();
    });
    this._actionBattlers = actionBattlers;
    // 以上是新增內容
};[/pre]

[pre lang="javascript"]BattleManager.processTurn = function () {
    var subject = this._subject;
    var action = subject.currentAction();
    if (action) {
        // 以下是新增內容
        if (action._forcing) {
            action._forcing = false;
            this._subject = this.getNextSubject();
            return;
        }
        // 以上是新增內容
        action.prepare();
        if (action.isValid()) {
            this.startAction();
        }
        subject.removeCurrentAction();
    } else {
        subject.onAllActionsEnd();
        this.refreshStatus();
        this._logWindow.displayAutoAffectedStatus(subject);
        this._logWindow.displayCurrentState(subject);
        this._logWindow.displayRegeneration(subject);
        this._subject = this.getNextSubject();
    }
};[/pre]
回复

使用道具 举报

梦石
0
星屑
7009
在线时间
1280 小时
注册时间
2016-12-6
回帖
378
发表于 2024-1-13 23:10:02 | 显示全部楼层
alexncf125 发表于 2024-1-13 22:29
佬看看这样改会出bug么?
BattleManager.forceAction = function (battler) {
    // this._actionForcedB ...

我对战斗系统的底层代码研究得并不深,不好评价
但看你这个写法,新的forceAction方法是会对所有batter起效影响速度排序,不管是不是强制行动指令的作用对象。这可能会有超预期的反应
对底层代码进行修改也往往会引起牵一发动全身的效果,对战斗系统有深度定制的插件很可能会无法正常工作,一般是不建议这么折腾的
如果你目的是为了让强制行动指令可以适配技能应有的出手顺序,你完全可以借助YEP_BuffsStatesCore或者YEP_SkillCore的Timing Effects来定制强制行动指令,在我看来可以自由安排效果发动时间点的机制明显容错率是更高的
回复

使用道具 举报

梦石
0
星屑
7009
在线时间
1280 小时
注册时间
2016-12-6
回帖
378
发表于 2024-1-13 23:13:45 | 显示全部楼层
shiroin 发表于 2024-1-13 23:10
我对战斗系统的底层代码研究得并不深,不好评价
但看你这个写法,新的forceAction方法是会对所有batter起 ...

举例的话比如这个:

<Custom Turn End Effect>
if (user.agi > 300){
var skill = 312;
var target = -2;
BattleManager.queueForceAction(user, skill, target);
}
</Custom Turn End Effect>

持有包含这个注释的状态的角色,在回合结束时就会进行一次if判断,敏捷值判断通过就会强制发起一次312号技能
你可以针对Turn End的发动时机或者if (user.agi > 300)的条件内容进行定制,一样可以模拟出不同出手顺序的强制行动
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部