Project1

标题: 请教如何在游戏中更改物品和敌人数据 [打印本页]

作者: raindiely    时间: 2019-1-21 12:35
标题: 请教如何在游戏中更改物品和敌人数据
本帖最后由 raindiely 于 2019-1-21 20:14 编辑

希望做到在游戏中改变某物品或敌人的数据(能力值和属性抗性之类的)
具体要实现的内容是,某件物品或敌人可以随玩家等级产生变化

如果我的思路有问题,有着其他更简单的方法实现这一效果,还请告诉我
万分感谢!

重新组织下语言,希望实现的功能如下
在进入战斗前,通过怪物是否拥有某项标签来进行判定
生效时,使 敌群中A类型敌人 的属性值(比如MHP)增加,增加的数值与玩家角色等级相关
是不是可以换句话说,让怪物也有升级功能?(我不确定)

再重新组织下语言
也许我的思路是有问题的,总之我是想做这样一个东西
类似彩蛋关卡,关卡内敌人不会因玩家等级提高(换句话说属性值提高)而变弱

蹲厕所的女孩大佬提到了用伤害公式来控制,我觉得或许是个可行的方案但正在陷入思维误区的我完全没能想到这方面的思路
如果能提供我一些实现这个设想的思路就太感谢了
作者: MCCF    时间: 2019-1-21 13:14
本帖最后由 MCCF 于 2019-1-21 13:19 编辑

有比较简单的方法。但是需要修改脚本。不过也没有多麻烦的。而你说的方法,应该就是直接在游戏中修改$data_enemies了,这样是非常麻烦的。
首先,需要明确一点。究竟是只是修改基础值(也就是只修改数据库中基础值,状态、技能装备和物品增加的属性并不会减少或增多),还是总体最后计算的值(这个值是数据库中设定的基础值和状态、技能装备和物品的附加值之和)直接进行修改。
举个例子,设定1号角色超过30级,所有敌人的所有基础能力值乘1.5。那么就修改param_base,插入代码:
RUBY 代码复制
  1. class Game_Enemy < Game_Battler
  2.   alias new_param_base param_base
  3.   def param_base(index)
  4.     v = new_param_base(index)
  5.     return $game_actors[1].level >= 30 ? v * 1.5 : v
  6.   end
  7. end

类似这样吧。这段代码暂时还没有经过测试,只是提供一个模型而已。这一段可能理论性比较强,并且还有诸如各种属性值、物品的效果等等,因为这些内容非常多样化,这里就不一一讲述。如果不是修改基础能力值,而是直接在最后的总和上面修改,那么就直接修改param吧。如果只是一部分属性有修改的话就修改mmp,mhp,luk这些简便方法,等等。
具体找个时间弄一个比较完整的脚本吧。
作者: 蹲厕所的女孩    时间: 2019-1-21 13:18
给个计算公式就可以了,不知道我理解的对不对,物品的话就直接给体力值恢复或者魔力值恢复之类的,敌人就改技能伤害吧
图在下面:


作者: MCCF    时间: 2019-1-21 22:07
啊,那是我想麻烦了。
于是乎,抽空写了个脚本,局限性可能比较高,但是应该适用于楼主的情况。

RUBY 代码复制
  1. #encoding:utf-8
  2. # =============================================================================
  3. # 能力值扩展 - level
  4. # =============================================================================
  5. =begin
  6.  
  7.   ----------------------------------------------------------------------------
  8.   介绍:
  9.   ----------------------------------------------------------------------------
  10.   设定某些敌人的所有能力为某角色等级的数倍。
  11.   (只限于这种设定,其他设定需要在该脚本上另作修改)
  12.  
  13.   ----------------------------------------------------------------------------
  14.   使用方法:
  15.   ----------------------------------------------------------------------------
  16.   插入到插件脚本之下,Main之上
  17.  
  18. =end
  19. #=============================================================================
  20. # 设定部分
  21. #=============================================================================
  22. module MCCF_Change_Params
  23.   module Level
  24.  
  25.     # 设定哪些ID的敌人的能力值会变化。
  26.     CHANGE_PARAMS_ENEMY = [1,2,3]
  27.  
  28.     # 设定判断等级的角色ID,也可以设为:average表示所有队员等级的平均值
  29.     JUDGE_ACTOR_ID = 1
  30.  
  31.     # 各种能力的计算公式设定,数字表示该能力值是等级的多少倍。
  32.     PARAMS_FORMULA = [
  33.       # 体力上限(此处表示体力上限为角色等级的100倍)
  34.       100,
  35.       # 魔力上限
  36.       50,
  37.       # 物理攻击
  38.       20,
  39.       # 物理防御
  40.       20,
  41.       # 魔法攻击
  42.       10,
  43.       # 魔法防御
  44.       10,
  45.       # 敏捷值
  46.       5,
  47.       # 幸运值
  48.       5,
  49.     ]
  50.  
  51.   end
  52. end
  53. #=============================================================================
  54. # 设定结束
  55. #=============================================================================
  56.  
  57. class Game_Enemy < Game_Battler
  58.   alias new_param_base param_base
  59.   def param_base(index)
  60.     v = new_param_base(index)
  61.     return v unless MCCF_Change_Params::Level::CHANGE_PARAMS_ENEMY.include?(@enemy_id)
  62.     return v if index >= 8
  63.     if !MCCF_Change_Params::Level::JUDGE_ACTOR_ID != :average
  64.       actor_id = MCCF_Change_Params::Level::JUDGE_ACTOR_ID
  65.       number = MCCF_Change_Params::Level::PARAMS_FORMULA[index]
  66.     else
  67.       s = 0
  68.       $game_party.members.select {|actor| s += actor.level }
  69.       s /= $game_party.members.length
  70.       return s
  71.     end
  72.     return $game_actors[actor_id].level * number
  73.   end
  74. end


在范例工程中,每次战斗都会输出能力值,变化是非常明显的。
范例工程: 能力随角色等级变化.zip (1.43 MB, 下载次数: 104)
作者: KB.Driver    时间: 2019-1-21 23:38
本帖最后由 KB.Driver 于 2019-1-22 00:01 编辑

个人觉得基础值乘以等级很难平衡……
拿个自己写的增量型的献丑吧。

RUBY 代码复制
  1. #==============================================================================
  2. # ■ 敌人线性成长
  3. #------------------------------------------------------------------------------
  4. #  敌人的参数随队伍平均等级的增加而增加。
  5. #
  6. #   使用方法:敌人备注处写
  7. #   <线性成长[参数号] x倍数> 或 <线性成长[参数号] 倍数x> 或 <线性成长[参数号] 倍数>
  8. #
  9. #   例  <线性成长[] x2> 或 <线性成长[] 2x>   =>  所有能力值增加玩家平均等级的2倍
  10. #       <线性成长[0] 100>     =>  0号参数(体力上限)增加玩家平均等级的100倍   
  11. #       <线性成长[2..5] 2.5>  =>  2至5号参数(攻防魔攻魔防)增加玩家平均等级的2.5倍
  12. #==============================================================================
  13.  
  14. class RPG::Enemy
  15.  
  16.   REG_LINEAR_GROWTH = /<线性成长\[?(\d(?:\.\.)?\d?)?\]?[ :=]*x?([\d.]+)x?>/
  17.  
  18.   #--------------------------------------------------------------------------
  19.   # ● [追加]线性成长比例
  20.   #--------------------------------------------------------------------------
  21.   def linear_growth
  22.     growth = Hash.new(0)
  23.     if self.note =~ REG_LINEAR_GROWTH
  24.       if $1
  25.         if eval($1).is_a?(Fixnum)
  26.           growth[$1.to_i] = eval($2)
  27.         elsif eval($1).is_a?(Range)
  28.           eval($1).each{|param_id| growth[param_id] = eval($2)}
  29.         end
  30.       else
  31.         (0..7).each{|param_id| growth[param_id] = eval($2)}
  32.       end
  33.     end
  34.     growth
  35.   end
  36.  
  37. end
  38.  
  39. class Game_Enemy < Game_Battler
  40.   #--------------------------------------------------------------------------
  41.   # ● [别名修改]获取普通能力的基础值
  42.   #--------------------------------------------------------------------------
  43.   alias :param_base_linear_growth :param_base
  44.   def param_base(param_id)
  45.     base = param_base_linear_growth(param_id)
  46.     return base if ((add = enemy.linear_growth[param_id]) == 0)
  47.     base + (add * $game_party.average_level).to_i
  48.   end
  49. end
  50.  
  51. class Game_Party
  52.   #--------------------------------------------------------------------------
  53.   # ● [追加]队伍平均等级
  54.   #--------------------------------------------------------------------------
  55.   def average_level
  56.     members.collect{|a|a.level}.inject(:+) / members.size.to_f
  57.   end
  58. end


关于参数可以看F1

作者: 白色幸福    时间: 2019-1-22 17:48
我个人倒是搞了一个蛹计算公式的,如果是按照等级来算技能伤害用level就够了。




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