Project1

标题: 如何在任意一次战斗结束后设定某个角色的能力值 [打印本页]

作者: wyw838    时间: 2019-4-30 21:57
标题: 如何在任意一次战斗结束后设定某个角色的能力值
想要个一个角色设定一个能在战斗中叠加能力值的技能...于是就理所应当的用到了公共事件的处理...然而发现一个问题就是...用变量载入初始数值之后...还原似乎是件很麻烦的事...首先翻到Scene_Battle 1脚本的战斗结束函数那里...决定在这里重载角色的能力值...但是首先遇到的问题就是这里不会写==(准确的来说是不知道角色表示方法)。然后又想到一个问题就是...如果我没有用这个技能,并且以正常的方式增加了能力值...在任意一次战斗过后就会还原该能力值...也想请问一下有没有解决这个问题的方法
作者: 719783572    时间: 2019-5-1 04:16
本帖最后由 719783572 于 2019-5-1 05:18 编辑

把你"战斗中叠加能力值"的公共事件发出来才能详尽地解决。
比如用1号变量来控制角色的力量值上升,那要还原就修改Scene_Battle 1的140行。
把140行“#解除战斗用状态”往下一段
改成
RUBY 代码复制
  1. # 解除战斗用状态
  2. for actor in $game_party.actors
  3.    actor.remove_states_battle
  4.    actor.str -= $game_variables[1]
  5. end

但这样的结果就是队伍里所有角色都要扣掉等同于1号变量的力量值。(除非这个能力叠加是全队增益)
或者如果是指定1号角色使用叠加能力值技能的,那就把actor.str改成$game_actors[1].str

总之,你得说清楚到底怎么个叠加能力值,公共事件你怎么写,是全队增益还是单体,把你的思路说出来,要么就把工程放上来
作者: RyanBern    时间: 2019-5-29 09:22
一般处理不同来源的能力值的比较好的方法是直接去改掉 Game_Actor/Game_Battler 的相关方法,安全无毒,而且没有后遗症。
一般不太建议用“需要的时候加,不需要时候减”的思路,这个思路比较老了,而且存在的问题楼主也已经发现了。

举个例子来说,如果你希望战斗中,学会 X 号技能的角色叠加变量 Y 的力量值,你可以这样去写
RUBY 代码复制
  1. class Game_Actor
  2.   def str
  3.     # 以下省略已有定义
  4.     # ....
  5.     n += $game_variables[Y] if $game_temp.in_battle && skill_learn?(X)
  6.     return n
  7.   end
  8. end

体会一下上面的方法是不是比之前的思路好多了?




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