Project1

标题: 求教RMMV,YEP的ATB战斗系统如何做到玩家一回合多次行动 [打印本页]

作者: alllll    时间: 2023-10-29 12:52
标题: 求教RMMV,YEP的ATB战斗系统如何做到玩家一回合多次行动
俺是最近接触rpgmaker的萌新,最近在模仿一款喜欢的游戏做战斗系统时遇到了这个问题,似乎装了YEP的ATB战斗系统后,系统自带的“行动回数”增加就无效了,俺想要装备或者状态可以为玩家提供一回合多动的效果,大佬们知道有什么办法可以实现吗,如果有必要,俺愿意提供一定的现金作为报酬解决这个问题……
作者: 余杭    时间: 2023-10-29 15:15
换个战斗系统
作者: shiroin    时间: 2023-10-29 16:11
就ATB战斗模式的原理而言,你想要做到多次行动,核心还是每次行动后能瞬间让对应角色行动条充能完毕,插件的帮助文档里有不少这种改变行动后行动条充能的注释,而且允许加在状态注释中,你可以用来制作代表多次行动的特殊状态,状态结束后就丧失多次行动能力
或者你可以试试YEP_Instant Cast这个插件,利用其立即释放的机制模拟出多次行动的效果,我还不清楚它和ATP战斗模式有没有冲突,需要你自己去尝试了
作者: alllll    时间: 2023-10-30 15:35
shiroin 发表于 2023-10-29 16:11
就ATB战斗模式的原理而言,你想要做到多次行动,核心还是每次行动后能瞬间让对应角色行动条充能完毕,插件 ...

尝试过疯狂模式了,但没得编程能力,编写的总是效果错误
作者: shiroin    时间: 2023-10-30 15:51
alllll 发表于 2023-10-30 15:35
尝试过疯狂模式了,但没得编程能力,编写的总是效果错误

具体是怎么写的?效果错误又报错了什么问题?
作者: 余杭    时间: 2023-10-30 16:40
YEP的ATB的战斗系统,行动分为两部分读条:
“一行动条”读满,若可以进行选择操作,则开始选择行动,并进入第二阶段;
        这里二行动条的长度和插件参数以及选择的行动的速度补正有关系,具体长度是 (参数-补正);
“二行动条”读满,若有一阶段选择的行动,则执行,否则随机选一种行动执行;
        行动结束,开始判定此次行动会不会改变行动条位置,这里可以让一行动条直接拉满,开始选择下一次行动。

你想通过装备或者状态去做      “行动次数”+1,
首先,装备不行,
          非技能和物品的标签会一直生效,每次行动后都会立即行动,游戏平衡直接没了;
其次,状态可以,但是
          如果你这个状态是一直生效的,那和装备没区别,
          如果你这个状态是技能添加的,那还算是稍微正常点,但是做出来是啥效果我也不确定。

然后又到了另一个回合的概念,YEP的ATB里面回合很模糊,
它的回合时间公式是参数里面的   “Full Turn”    这一个参数,默认是 8 倍的全场最低速度,

如果你要  这个“一回合”    里多动,直接拉速度就行,但是同样的,平衡没了;

如果你要是想要编辑器特性里的 “行动次数”,在行动者一次行动里可以多次选择动作并且多次执行动作,
(改代码可以实现一部分,但是谁知道改完之后会出啥bug,你也说你不懂编程,更没办法了)
ATB基本做不到,因为你把这个标签放到装备或者状态上,那就像我上面说的,一直行动,“一行动条”等于没有;
你要是把这个标签放到技能或者物品上,那还不如直接用3楼说的YEP_Instant Cast,瞬发技能,直接跳过“二行动条”,开始下一次选择,
       但是这就不是你说的那种多次行动了,这是瞬发技能。

所以真要用 “行动次数” 这个特性,真不建议用ATB,因为YEP的ATB直接把这一部分忽略了,加也不好加。
作者: alllll    时间: 2023-10-30 23:20
本帖最后由 alllll 于 2023-10-30 23:27 编辑
shiroin 发表于 2023-10-30 15:51
具体是怎么写的?效果错误又报错了什么问题?


简单来说,就是
<After Atb eval>
user._行动次数==user._行动次数||0;
user._行动次数上限==user._行动次数上限||0;
user._行动次数+=1;
if(user._行动次数>user._行动次数上限){
    行动次数==0;
}
else{
  Atbturn=100%;
}
</after atb eval>
就是通过穿戴装备或者获得状态增加“行动次数上限”这个变量,然后“行动次数”每次玩家行动结束+1次,直到大于次数上限,这时候就会轮到敌人的回合了。
放在角色那边后确实可以让角色可以无限“我的回合”,但是我不知道如何在让玩家在装备特定装备或者获得特殊状态时增加变量“行动次数上限”,于是这个效果关不掉了……(这是我记忆中的内容,可能有点偏差,但大致是这样的
作者: alllll    时间: 2023-10-30 23:21
余杭 发表于 2023-10-30 16:40
YEP的ATB的战斗系统,行动分为两部分读条:
“一行动条”读满,若可以进行选择操作,则开始选择行动,并进 ...

那大佬有没有相关插件推荐,我的朋友很渴求这个机制
作者: shiroin    时间: 2023-10-30 23:46
alllll 发表于 2023-10-30 23:20
简单来说,就是

user._行动次数==user._行动次数||0;

我有汉化过这种需求的插件,你可以去试试:
https://rpg.blue/thread-494592-1-1.html

给装备填好正确格式的注释后,穿上装备就增加你设置的这个自变量,脱下装备则降低之前增加的变量值
作者: alllll    时间: 2023-10-31 00:14
shiroin 发表于 2023-10-30 23:46
我有汉化过这种需求的插件,你可以去试试:
https://rpg.blue/thread-494592-1-1.html

谢谢大佬,不过我想看看有没有其他人推荐的atb插件,毕竟纯粹靠改代码实现实在是太繁琐了
作者: alllll    时间: 2023-10-31 15:42
shiroin 发表于 2023-10-30 23:46
我有汉化过这种需求的插件,你可以去试试:
https://rpg.blue/thread-494592-1-1.html

好吧,其实我发现上面那个代码一开始就有问题,这个代码哪怕把“ ATB Turn: +100%”放到“if”里面,这个Atbturn也会无视if内的条件自动执行
作者: shiroin    时间: 2023-10-31 15:57
alllll 发表于 2023-10-31 15:42
好吧,其实我发现上面那个代码一开始就有问题,这个代码哪怕把“ ATB Turn: +100%”放到“if”里面,这 ...

额,我去翻了下代码,ATB Turn只是一个Notetags,可以加在状态注释中,但在eval里应该是没法正常生效的
就帮助文档的提示,你可以制作一个只持续N回合的状态,角色在持有这个状态的情况下才获得得ATB Turn +1的效果,多次行动后会提前消耗掉状态持续数,只要状态结束了,多次行动的效果就丧失

另外如果你是打算通过JS eval去调整行动条的初始值,对应源代码应该是这个:

Game_Battler.prototype.atbTurnFlat = function() {
    var value = 0;
    for (var i = 0; i < this.states().length; ++i) {
      var state = this.states();
      if (state) value += state.atbTurnFlat;
    }
    return value;
};

Game_Battler.prototype.atbTurnRate = function() {
    var value = 0;
    for (var i = 0; i < this.states().length; ++i) {
      var state = this.states();
      if (state) value += state.atbTurnRate;
    }
    return value;
};

直接用user.atbTurnFlat或者user.atbTurnRate去调节
作者: alllll    时间: 2023-10-31 16:08
shiroin 发表于 2023-10-31 15:57
额,我去翻了下代码,ATB Turn只是一个Notetags,可以加在状态注释中,但在eval里应该是没法正常生效的
...

啊,原来是这样啊,果然写这些还是需要编程的基础的,那我去试试吧,谢谢大佬
作者: alllll    时间: 2023-11-7 21:00
shiroin 发表于 2023-10-31 15:57
额,我去翻了下代码,ATB Turn只是一个Notetags,可以加在状态注释中,但在eval里应该是没法正常生效的
...

虽然我尝试过大佬的建议。但是这些变量是没有效果的,最后我是依靠立即技能释放解决的……
不过我看现在的帖子都没有详细的相关方法,以及我想要找到某种…简化的方法,所以我就借给大佬的回复把我的方法写在这里吧
首先需要yep的“技能立即释放”,“自动被动状态“,“状态核心”,以及大佬您发布的“ WAY_CustomOnEquipEval”插件
(下列数据中,我使用了3个状态和一个公共变量实现装备特殊装备时,每个装备都可以提供一个额外回合数,脱下时解除额外回合数,其中,27号状态为“多动回合次数”,28号位“多动次数冷却”,29号为持续性的被动状态“多动回合数(预载)”,10号变量为“多次行动次数”,以及我发现不可以初始给玩家多动系列装备,否则10号变量会直接+3,如果是换装则没有问题,至于为什么不用被动状态记录多次回合次数,是因为被动状态是一直持续附加的,而且可能和状态核心有点冲突,如果为被动状态附加数据,除非附加的数据本身改变(例如公共变量10改变),否则数据不会改变(比如我要求行动一次额外回合数-1就不生效,只能另外开一个新状态)
首先是加行动数的装备
<Passive State: 29>//附加被动状态29

<Custom On Equip Eval>//穿上装备后,10号变量+1
  var NOA = $gameVariables.value(10);
  $gameVariables.setValue(10,(NOA + 1));
</Custom On Equip Eval>

<Custom On Remove Equip Eval>//脱下装备后,10号变量-1
  var NOA = $gameVariables.value(10);
  $gameVariables.setValue(10,(NOA - 1));
</Custom On Remove Equip Eval>

多动回合次数(27)
<Instant Skill: 1>//处于该状态时,1号技能立即释放,基于立即释放插件规则,这里可以改为其他技能组

<Custom Apply Effect>//显示玩家这个回合可以额外行动的次数
  user._NOAM = $gameVariables.value(10);
  user.setStateCounter(27,user._NOAM);
</Custom Apply Effect>

<Custom Action End Effect>//如果在这个状态下行动,玩家行动一次,多动次数-1,如果次数为0,则解除“多次行动”进入“冷却”状态
if(user._NOAM >= 1){
  user._NOAM -= 1;
  user.setStateCounter(27,user._NOAM);
}
else{
  user.addState(28);
}
</Custom Action End Effect>

冷却状态(28,设为一回合后结束)
<Custom Apply Effect>//获得该状态时,移除27号状态
  user.removeState(27);
</Custom Apply Effect>

<Custom Remove Effect>//该状态自然解除,获得27号状态
  user.addState(27);
</Custom Remove Effect>

多次行动状态(预载)(被动状态)
<Custom Passive Condition>//当处于27,28号状态时,不再附加该被动状态
if (user.isStateAffected(27) || user.isStateAffected(28)){
  condition = false;
} else {
  condition = true;
}
</Custom Passive Condition>

<Custom Battle Effect>//当进入战斗时,移除被动状态并添加27号状态
  user.addState(27);
  user.removeState(29);
</Custom Battle Effect>




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