| 本帖最后由 SailCat 于 2020-5-21 11:12 编辑 
 不知道题主的需求是永久增加还是本场战斗临时增加
 永久增加的话平衡太难做了……
 
 怎么实现的话,其实还挺复杂琐碎的,由于不知道题主是不是用的默认战斗系统,所以我这里就完全不修改Scene_Battle了,而且XP没有数值强化和弱化的默认植入……
 为了方便实现,所有要求的+2-5改成了+2-6,这样操作两次+1-3就可以了,不然太麻烦了
 
 1. 记录增量
 1) 主动行为:在Game_Party里面有一个函数叫clear_action,该方法在战斗中每回合调用一次,是用来清空全队行动的。我们可以在清空之前,通过它获取每个角色前一回合的行动,然后执行数值增加的操作。
 
 class Game_Party        attr_reader :buffs        alias sailcat_initialize initialize        alias sailcat_clear_actions clear_actions        def initialize                sailcat_initialize                @buffs = {}        end        def clear_actions                @actors.each do |a|                        c = a.current_action                        if c.valid?                                sym = [:agi]   # 本次是有效的行动 要加速度                                sym.concat([:str, :dex, :atk]) if c.kind == 0 and c.basic == 0  # 执行普攻 要加力量、灵巧、攻击                                sym.concat([:str, :str]) if c.kind == 1 and $data_skills[c.skill_id].atk_f > 0  # 执行物理技能 要加力量(高级)                                sym.concat([:int, :int]) if c.kind == 1 and $data_skills[c.skill_id].atk_f == 0  # 执行魔法技能 要加魔力(高级)                                sym.concat([:dex]) if c.kind == 1 and $data_skills[c.skill_id].scope < 2 # 执行技能攻击敌人 要加灵巧                                sym.each do { |s| @buffs[[a.index, s]] = @buffs[[a.index, s]].to_i + 1 + rand(3) }  # 把要加的数值记入buffs                        end                end                sailcat_clear_actions        endend
class Game_Party 
        attr_reader :buffs 
        alias sailcat_initialize initialize 
        alias sailcat_clear_actions clear_actions 
        def initialize 
                sailcat_initialize 
                @buffs = {} 
        end 
        def clear_actions 
                @actors.each do |a| 
                        c = a.current_action 
                        if c.valid? 
                                sym = [:agi]   # 本次是有效的行动 要加速度 
                                sym.concat([:str, :dex, :atk]) if c.kind == 0 and c.basic == 0  # 执行普攻 要加力量、灵巧、攻击 
                                sym.concat([:str, :str]) if c.kind == 1 and $data_skills[c.skill_id].atk_f > 0  # 执行物理技能 要加力量(高级) 
                                sym.concat([:int, :int]) if c.kind == 1 and $data_skills[c.skill_id].atk_f == 0  # 执行魔法技能 要加魔力(高级) 
                                sym.concat([:dex]) if c.kind == 1 and $data_skills[c.skill_id].scope < 2 # 执行技能攻击敌人 要加灵巧 
                                sym.each do { |s| @buffs[[a.index, s]] = @buffs[[a.index, s]].to_i + 1 + rand(3) }  # 把要加的数值记入buffs 
                        end 
                end 
                sailcat_clear_actions 
        end 
end 
 2) 被动行为:在Game_Battler,这里面有个attack_effect和skill_effect两个方法,增加后续的操作
 
 
 class Game_Battler        alias sailcat_attack_effect attack_effect        alias sailcat_skill_effect skill_effect        def attack_effect(attacker)                r = sailcat_attack_effect(attacker)                if self.is_a?(Game_Actor) and attacker.is_a?(Game_Enemy)                        $game_party.buffs[[self.index, :pdef]] = $game_party.buffs[[self.index, :pdef]].to_i + 1 + rand(3)                end                r        end        def skill_effect(user, skill)                r = sailcat_skill_effect(user, skill)                if self.is_a?(Game_Actor) and user.is_a?(Game_Enemy)                        sym = skill.atk_f == 0 ? :mdef : :pdef                        $game_party.buffs[[self.index, sym]] = $game_party.buffs[[self.index, sym]].to_i + 1 + rand(3)                end                r        endend
class Game_Battler 
        alias sailcat_attack_effect attack_effect 
        alias sailcat_skill_effect skill_effect 
        def attack_effect(attacker) 
                r = sailcat_attack_effect(attacker) 
                if self.is_a?(Game_Actor) and attacker.is_a?(Game_Enemy) 
                        $game_party.buffs[[self.index, :pdef]] = $game_party.buffs[[self.index, :pdef]].to_i + 1 + rand(3) 
                end 
                r 
        end 
        def skill_effect(user, skill) 
                r = sailcat_skill_effect(user, skill) 
                if self.is_a?(Game_Actor) and user.is_a?(Game_Enemy) 
                        sym = skill.atk_f == 0 ? :mdef : :pdef 
                        $game_party.buffs[[self.index, sym]] = $game_party.buffs[[self.index, sym]].to_i + 1 + rand(3) 
                end 
                r 
        end 
end 
 2. 实际操作数值提升,题主要提升的数值里,竟然还包括非角色基本数值的攻击、魔防、物防,这个是万万不可能直接修改的,因为角色内部根本没有存储这些东西的地方,也就是说不存在"@atk"的变量或"@atk_plus"的修正值
 实现方法:修改获取表面值(atk, pdef)之类的方法,考虑加成值
 
 class Game_Actor        def atk;        super + $game_party.buffs[[self.index, :atk]].to_i;        end        def pdef;        super + $game_party.buffs[[self.index, :pdef]].to_i;        end        def mdef;        super + $game_party.buffs[[self.index, :mdef]].to_i;        end        def str;        super + $game_party.buffs[[self.index, :str]].to_i;        end        def dex;        super + $game_party.buffs[[self.index, :dex]].to_i;        end        def agi;        super + $game_party.buffs[[self.index, :agi]].to_i;        end        def int;        super + $game_party.buffs[[self.index, :int]].to_i;        endend
class Game_Actor 
        def atk;        super + $game_party.buffs[[self.index, :atk]].to_i;        end 
        def pdef;        super + $game_party.buffs[[self.index, :pdef]].to_i;        end 
        def mdef;        super + $game_party.buffs[[self.index, :mdef]].to_i;        end 
        def str;        super + $game_party.buffs[[self.index, :str]].to_i;        end 
        def dex;        super + $game_party.buffs[[self.index, :dex]].to_i;        end 
        def agi;        super + $game_party.buffs[[self.index, :agi]].to_i;        end 
        def int;        super + $game_party.buffs[[self.index, :int]].to_i;        end 
end 
 3. 暂时还是永久buff
 暂时的话就在每场战斗后通过事件调一下$game_party.buffs.clear(方法见置顶贴,明暗雷通用),永久的话就不调,完毕。
 
 |