Project1

标题: 【掩护】这个特性怎么微调一下?自己都丝血了还出掩护.. [打印本页]

作者: gxlmx2    时间: 2023-10-8 15:00
标题: 【掩护】这个特性怎么微调一下?自己都丝血了还出掩护..
【掩护】这个特性怎么微调一下?自己都丝血了还出掩护..

首先先赞一下这个功能,可以设置F牛或血牛角色给队友提供保护,印象比较深的是仙剑1李逍遥给残血女主抵挡伤害,显得义气十足,不过...
MV里拥有掩护功能的角色,自己若是丝血了还会替队友接受伤害,觉得有点过,怎么调整一下?

在自己血量充足的时候才出掩护,丝血(角色半蹲状态)不出掩护。
作者: shiroin    时间: 2023-10-8 15:40
原版的掩护机制只关心你身上有没有掩护标志以及是否可行动,这在rpg_objects.js里可以找到出处:

Game_BattlerBase.prototype.isSubstitute = function() {
    return this.specialFlag(Game_BattlerBase.FLAG_ID_SUBSTITUTE) && this.canMove();
};

以及在rpg_managers.js里确定了掩护只在出现了残血队友时触发:

BattleManager.checkSubstitute = function(target) {
    return target.isDying() && !this._action.isCertainHit();
};

所以你如果只打算让掩护在血量充足时才触发,可以对上述代码进行修改,比如追加一个&& !this.isDying();
这样即便身上有掩护特性,但因为已经残血了不满足条件,是不会触发掩护队友的
作者: gxlmx2    时间: 2023-10-10 11:08
感谢!不会看JS脚本,试错多次测试成功!发出来给需要的朋友。
rpg_managers.js里查找:
BattleManager.checkSubstitute = function(target) {
    return target.isDying() && !this._action.isCertainHit();
};
修改为:
BattleManager.checkSubstitute = function(target) {
    return target.isDying() && !this._action.isCertainHit() && !this.isDying();
};
作者: Kaede_123    时间: 2023-11-6 18:52
shiroin 发表于 2023-10-8 15:40
原版的掩护机制只关心你身上有没有掩护标志以及是否可行动,这在rpg_objects.js里可以找到出处:

Game_Bat ...

大神,关于这个问题我想请教一下,我试过加上&& !this.isDying()代码后出现undefined报错,另外我还想加上掩护的在异常状态下也不能就行掩护动作,掩护技能的几率为75%,请问有什么办法吗?这是目前我修改的代码;
BattleManager.checkSubstitute = function(target) {
    return target.isDying() && !this._action.isCertainHit() && this._action.isDamage() && !this.isDying() && !(Math.randomInt(3) === 0);
};
作者: shiroin    时间: 2023-11-6 19:52
Kaede_123 发表于 2023-11-6 18:52
大神,关于这个问题我想请教一下,我试过加上&& !this.isDying()代码后出现undefined报错,另外我还想加 ...

BattleManager这个函数里并没法判断this.isDying()是源自什么变量,你如果是想判断【掩护者本人也不能是濒死状态】,得加在下面这个函数里:
Game_BattlerBase.prototype.isSubstitute = function() {
    return this.specialFlag(Game_BattlerBase.FLAG_ID_SUBSTITUTE) && this.canMove();
};

改成return this.specialFlag(Game_BattlerBase.FLAG_ID_SUBSTITUTE) && this.canMove() && !this.isDying();

这样掩护者本人残血后,就无法让掩护机制正常生效
异常状态下无法进行掩护也是同理,追加!this.isStateAffected(n)句式,n就是异常状态的状态ID
作者: Kaede_123    时间: 2023-11-8 19:53
shiroin 发表于 2023-11-6 19:52
BattleManager这个函数里并没法判断this.isDying()是源自什么变量,你如果是想判断【掩护者本人也不能是 ...

多谢。
作者: woainicrc    时间: 2023-12-27 02:41
本帖最后由 woainicrc 于 2023-12-27 03:10 编辑

Game_BattlerBase.prototype.isSubstitute = function() {
    return this.specialFlag(Game_BattlerBase.FLAG_ID_SUBSTITUTE) && this.canMove()  && this.hpRate() > 0.5;
};
作者: woainicrc    时间: 2023-12-27 02:42
本帖最后由 woainicrc 于 2023-12-27 03:10 编辑

Game_BattlerBase.prototype.isSubstitute = function() {
    return this.specialFlag(Game_BattlerBase.FLAG_ID_SUBSTITUTE) && this.canMove()  && this.hpRate() > 0.5;
};

自身血量大于50%时才会触发掩护
作者: woainicrc    时间: 2023-12-27 02:45
本帖最后由 woainicrc 于 2023-12-27 11:07 编辑
Kaede_123 发表于 2023-11-6 18:52
大神,关于这个问题我想请教一下,我试过加上&& !this.isDying()代码后出现undefined报错,另外我还想加 ...


this.isDying()是写在这边的,这个是掩护者,你放到被掩护者上,当然报错了。
另外根据你的要求。可以这样写。
Game_BattlerBase.prototype.isSubstitute = function() {
    return this.specialFlag(Game_BattlerBase.FLAG_ID_SUBSTITUTE) && this.canMove()  && !this.isDying() && Math.random() < 0.75 && !this.isStateCategoryAffected('Ailment');
};

Ailment 这个根据个人文本改动就行了
作者: nhycs01    时间: 2023-12-27 11:12
本帖最后由 nhycs01 于 2023-12-27 11:15 编辑

感觉这个掩护只有设置成几率出,才有意义。
如果是必出,或者血量大于50%时才会触发掩护,会导致这个问题:
假设队伍里至少有3人:A、B、C
1.打BOSS前,A和C故意弄成可以被掩护的残血状态
2.A输出,B掩护,C一直给B加血
3.于是B一直处于满血或大半血状态,也就会一直触发掩护。
4.A一直输出,BOSS打谁都被B掩护,无伤击杀BOSS。





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