设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1960|回复: 3
打印 上一主题 下一主题

[已经解决] 让人物的能力值能随着行动操作而提升

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2323
在线时间
207 小时
注册时间
2019-3-30
帖子
171
跳转到指定楼层
1
发表于 2020-5-20 23:14:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
就是如何设计每次特定行动后都会给自身增加能力值,比如:
每次使用普通攻击后,攻击力增加1~3点,力量增加1~3点
每次使用物理技能后,力量增加2~5点,每次使用魔法技能后,魔力增加2~5点
每次受到物理攻击后,防御增加1~3点,每次受到魔法攻击后,魔法防御增加1~3点
每次人物行动后,速度增加1~2点
每次攻击敌人后,灵巧增加1~2点
大概就这样……

Lv5.捕梦者

梦石
0
星屑
34864
在线时间
4148 小时
注册时间
2007-12-15
帖子
9980
2
发表于 2020-5-21 08:45:19 | 只看该作者
本帖最后由 89444640 于 2020-5-21 08:46 编辑

公用事件,每个指令加对应变量,比如攻击执行一次加1号变量1,达到100次以后,下一次攻击有随机数10抽1的几率加攻击力1 攻击力2攻击力3 攻击力0,增加1~3任意一个后, 一号变量归零。进入下一轮循环。其他同理,最好脚本写,否则纯事件分歧很麻烦,角色多很会烦。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22431
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

3
发表于 2020-5-21 11:08:17 | 只看该作者
本帖最后由 SailCat 于 2020-5-21 11:12 编辑

不知道题主的需求是永久增加还是本场战斗临时增加
永久增加的话平衡太难做了……

怎么实现的话,其实还挺复杂琐碎的,由于不知道题主是不是用的默认战斗系统,所以我这里就完全不修改Scene_Battle了,而且XP没有数值强化和弱化的默认植入……
为了方便实现,所有要求的+2-5改成了+2-6,这样操作两次+1-3就可以了,不然太麻烦了

1. 记录增量
1) 主动行为:在Game_Party里面有一个函数叫clear_action,该方法在战斗中每回合调用一次,是用来清空全队行动的。我们可以在清空之前,通过它获取每个角色前一回合的行动,然后执行数值增加的操作。
RUBY 代码复制
  1. class Game_Party
  2.         attr_reader :buffs
  3.         alias sailcat_initialize initialize
  4.         alias sailcat_clear_actions clear_actions
  5.         def initialize
  6.                 sailcat_initialize
  7.                 @buffs = {}
  8.         end
  9.         def clear_actions
  10.                 @actors.each do |a|
  11.                         c = a.current_action
  12.                         if c.valid?
  13.                                 sym = [:agi]   # 本次是有效的行动 要加速度
  14.                                 sym.concat([:str, :dex, :atk]) if c.kind == 0 and c.basic == 0  # 执行普攻 要加力量、灵巧、攻击
  15.                                 sym.concat([:str, :str]) if c.kind == 1 and $data_skills[c.skill_id].atk_f > 0  # 执行物理技能 要加力量(高级)
  16.                                 sym.concat([:int, :int]) if c.kind == 1 and $data_skills[c.skill_id].atk_f == 0  # 执行魔法技能 要加魔力(高级)
  17.                                 sym.concat([:dex]) if c.kind == 1 and $data_skills[c.skill_id].scope < 2 # 执行技能攻击敌人 要加灵巧
  18.                                 sym.each do { |s| @buffs[[a.index, s]] = @buffs[[a.index, s]].to_i + 1 + rand(3) }  # 把要加的数值记入buffs
  19.                         end
  20.                 end
  21.                 sailcat_clear_actions
  22.         end
  23. end


2) 被动行为:在Game_Battler,这里面有个attack_effect和skill_effect两个方法,增加后续的操作

RUBY 代码复制
  1. class Game_Battler
  2.         alias sailcat_attack_effect attack_effect
  3.         alias sailcat_skill_effect skill_effect
  4.         def attack_effect(attacker)
  5.                 r = sailcat_attack_effect(attacker)
  6.                 if self.is_a?(Game_Actor) and attacker.is_a?(Game_Enemy)
  7.                         $game_party.buffs[[self.index, :pdef]] = $game_party.buffs[[self.index, :pdef]].to_i + 1 + rand(3)
  8.                 end
  9.                 r
  10.         end
  11.         def skill_effect(user, skill)
  12.                 r = sailcat_skill_effect(user, skill)
  13.                 if self.is_a?(Game_Actor) and user.is_a?(Game_Enemy)
  14.                         sym = skill.atk_f == 0 ? :mdef : :pdef
  15.                         $game_party.buffs[[self.index, sym]] = $game_party.buffs[[self.index, sym]].to_i + 1 + rand(3)
  16.                 end
  17.                 r
  18.         end
  19. end


2. 实际操作数值提升,题主要提升的数值里,竟然还包括非角色基本数值的攻击、魔防、物防,这个是万万不可能直接修改的,因为角色内部根本没有存储这些东西的地方,也就是说不存在"@atk"的变量或"@atk_plus"的修正值
实现方法:修改获取表面值(atk, pdef)之类的方法,考虑加成值
RUBY 代码复制
  1. class Game_Actor
  2.         def atk;        super + $game_party.buffs[[self.index, :atk]].to_i;        end
  3.         def pdef;        super + $game_party.buffs[[self.index, :pdef]].to_i;        end
  4.         def mdef;        super + $game_party.buffs[[self.index, :mdef]].to_i;        end
  5.         def str;        super + $game_party.buffs[[self.index, :str]].to_i;        end
  6.         def dex;        super + $game_party.buffs[[self.index, :dex]].to_i;        end
  7.         def agi;        super + $game_party.buffs[[self.index, :agi]].to_i;        end
  8.         def int;        super + $game_party.buffs[[self.index, :int]].to_i;        end
  9. end


3. 暂时还是永久buff
暂时的话就在每场战斗后通过事件调一下$game_party.buffs.clear(方法见置顶贴,明暗雷通用),永久的话就不调,完毕。

点评

太强了,支持  发表于 2020-5-21 13:00

评分

参与人数 5星屑 +100 +5 收起 理由
Cupidk爱呗茶 + 1 塞糖
RyanBern + 100 + 1 认可答案
miantouchi + 1 塞糖
89444640 + 1 塞糖
PLeaseS + 1 塞糖

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-20 15:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表