查看: 4439|回复: 14

[已经解决] 请教如何在游戏中更改物品和敌人数据

[复制链接]
梦石
0
星屑
1134
在线时间
13 小时
注册时间
2015-5-9
回帖
6
发表于 2019-1-21 12:35:29 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 raindiely 于 2019-1-21 20:14 编辑

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

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

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

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

蹲厕所的女孩大佬提到了用伤害公式来控制,我觉得或许是个可行的方案但正在陷入思维误区的我完全没能想到这方面的思路
如果能提供我一些实现这个设想的思路就太感谢了
梦石
2
星屑
6767
在线时间
501 小时
注册时间
2018-3-23
回帖
487

R考场第七期银奖

发表于 2019-1-21 13:14:37 | 显示全部楼层
本帖最后由 MCCF 于 2019-1-21 13:19 编辑

有比较简单的方法。但是需要修改脚本。不过也没有多麻烦的。而你说的方法,应该就是直接在游戏中修改$data_enemies了,这样是非常麻烦的。
首先,需要明确一点。究竟是只是修改基础值(也就是只修改数据库中基础值,状态、技能装备和物品增加的属性并不会减少或增多),还是总体最后计算的值(这个值是数据库中设定的基础值和状态、技能装备和物品的附加值之和)直接进行修改。
举个例子,设定1号角色超过30级,所有敌人的所有基础能力值乘1.5。那么就修改param_base,插入代码:
[pre lang="ruby"]class Game_Enemy < Game_Battler
  alias new_param_base param_base
  def param_base(index)
    v = new_param_base(index)
    return $game_actors[1].level >= 30 ? v * 1.5 : v
  end
end[/pre]
类似这样吧。这段代码暂时还没有经过测试,只是提供一个模型而已。这一段可能理论性比较强,并且还有诸如各种属性值、物品的效果等等,因为这些内容非常多样化,这里就不一一讲述。如果不是修改基础能力值,而是直接在最后的总和上面修改,那么就直接修改param吧。如果只是一部分属性有修改的话就修改mmp,mhp,luk这些简便方法,等等。
具体找个时间弄一个比较完整的脚本吧。

点评

非常感谢指教,想实现的功能是:让某个怪物的基础能力始终等于玩家等级的x倍,我设想的思路是在战斗之前进行判定,然后更改怪物的能力值  发表于 2019-1-21 19:43
祝好。
回复

使用道具 举报

梦石
0
星屑
955
在线时间
84 小时
注册时间
2018-12-18
回帖
83
发表于 2019-1-21 13:18:16 | 显示全部楼层
给个计算公式就可以了,不知道我理解的对不对,物品的话就直接给体力值恢复或者魔力值恢复之类的,敌人就改技能伤害吧
图在下面:

QQ截图20190121131903.png

点评

嗯嗯,你可以综合选取,他那个方法也挺不错的,毕竟改代码是可以实现很多原本实现不了的效果  发表于 2019-1-22 16:07
非常感谢指教!可能是我表达的有些模糊吧XD 目的是想制作一些能力值随着玩家等级变化的怪物,不只是攻击效果上的变化,希望显示的数值也会发生变化  发表于 2019-1-21 19:47
我们没必要挣吧,都只是给个建议,具体怎么做看楼主自己的,就像你说的我这方法改变不了敌人的hp什么的数值,同样你改代码改不了消耗品啊  发表于 2019-1-21 13:32
比如说按楼主说的,敌人的生命值会随着角色的等级修改。这个用技能怎么表示呢?如果敌人的MP也会修改,又更加麻烦。  发表于 2019-1-21 13:27
也可能是我理解错了吧,我只是给出一个方案,就楼主说的根据角色等级来改变效果,具体需要还是得看楼主怎么说吧  发表于 2019-1-21 13:26

评分

参与人数 3星屑 +30 赞 +2 收起 理由
VIPArcher + 30 我很赞同
MCCF + 1 的确
RMVXA + 1 我很赞同

查看全部评分

回复 1 0

使用道具 举报

梦石
2
星屑
6767
在线时间
501 小时
注册时间
2018-3-23
回帖
487

R考场第七期银奖

发表于 2019-1-21 22:07:15 | 显示全部楼层
啊,那是我想麻烦了。
于是乎,抽空写了个脚本,局限性可能比较高,但是应该适用于楼主的情况。

[pre lang="ruby"]#encoding:utf-8
# =============================================================================
# 能力值扩展 - level
# =============================================================================
=begin

  ----------------------------------------------------------------------------
  介绍:
  ----------------------------------------------------------------------------
  设定某些敌人的所有能力为某角色等级的数倍。
  (只限于这种设定,其他设定需要在该脚本上另作修改)
  
  ----------------------------------------------------------------------------
  使用方法:
  ----------------------------------------------------------------------------
  插入到插件脚本之下,Main之上

=end
#=============================================================================
# 设定部分
#=============================================================================
module MCCF_Change_Params
  module Level
   
    # 设定哪些ID的敌人的能力值会变化。
    CHANGE_PARAMS_ENEMY = [1,2,3]
   
    # 设定判断等级的角色ID,也可以设为:average表示所有队员等级的平均值
    JUDGE_ACTOR_ID = 1
   
    # 各种能力的计算公式设定,数字表示该能力值是等级的多少倍。
    PARAMS_FORMULA = [
      # 体力上限(此处表示体力上限为角色等级的100倍)
      100,
      # 魔力上限
      50,
      # 物理攻击
      20,
      # 物理防御
      20,
      # 魔法攻击
      10,
      # 魔法防御
      10,
      # 敏捷值
      5,
      # 幸运值
      5,
    ]
   
  end
end
#=============================================================================
# 设定结束
#=============================================================================

class Game_Enemy < Game_Battler
  alias new_param_base param_base
  def param_base(index)
    v = new_param_base(index)
    return v unless MCCF_Change_Params::Level::CHANGE_PARAMS_ENEMY.include?(@enemy_id)
    return v if index >= 8
    if !MCCF_Change_Params::Level::JUDGE_ACTOR_ID != :average
      actor_id = MCCF_Change_Params::Level::JUDGE_ACTOR_ID
      number = MCCF_Change_Params::Level::PARAMS_FORMULA[index]
    else
      s = 0
      $game_party.members.select {|actor| s += actor.level }
      s /= $game_party.members.length
      return s
    end
    return $game_actors[actor_id].level * number
  end
end[/pre]

在范例工程中,每次战斗都会输出能力值,变化是非常明显的。
范例工程: 能力随角色等级变化.zip (1.43 MB, 下载次数: 104)

评分

参与人数 1星屑 +30 收起 理由
VIPArcher + 30 塞糖

查看全部评分

祝好。
回复

使用道具 举报

梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2019-1-21 23:38:54 | 显示全部楼层
本帖最后由 KB.Driver 于 2019-1-22 00:01 编辑

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

[pre lang="ruby"]#==============================================================================
# ■ 敌人线性成长
#------------------------------------------------------------------------------
#  敌人的参数随队伍平均等级的增加而增加。
#
#   使用方法:敌人备注处写
#   <线性成长[参数号] x倍数> 或 <线性成长[参数号] 倍数x> 或 <线性成长[参数号] 倍数>
#
#   例  <线性成长[] x2> 或 <线性成长[] 2x>   =>  所有能力值增加玩家平均等级的2倍
#       <线性成长[0] 100>     =>  0号参数(体力上限)增加玩家平均等级的100倍   
#       <线性成长[2..5] 2.5>  =>  2至5号参数(攻防魔攻魔防)增加玩家平均等级的2.5倍
#==============================================================================

class RPG::Enemy
  
  REG_LINEAR_GROWTH = /<线性成长\[?(\d(?:\.\.)?\d?)?\]?[ :=]*x?([\d.]+)x?>/
  
  #--------------------------------------------------------------------------
  # ● [追加]线性成长比例
  #--------------------------------------------------------------------------
  def linear_growth
    growth = Hash.new(0)
    if self.note =~ REG_LINEAR_GROWTH
      if $1
        if eval($1).is_a?(Fixnum)
          growth[$1.to_i] = eval($2)
        elsif eval($1).is_a?(Range)
          eval($1).each{|param_id| growth[param_id] = eval($2)}
        end
      else
        (0..7).each{|param_id| growth[param_id] = eval($2)}
      end
    end
    growth
  end
  
end

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● [别名修改]获取普通能力的基础值
  #--------------------------------------------------------------------------
  alias :param_base_linear_growth :param_base
  def param_base(param_id)
    base = param_base_linear_growth(param_id)
    return base if ((add = enemy.linear_growth[param_id]) == 0)
    base + (add * $game_party.average_level).to_i
  end
end

class Game_Party
  #--------------------------------------------------------------------------
  # ● [追加]队伍平均等级
  #--------------------------------------------------------------------------
  def average_level
    members.collect{|a|a.level}.inject(:+) / members.size.to_f
  end
end
[/pre]

关于参数可以看F1
QQ截图20190121233903.png

评分

参与人数 1星屑 +30 收起 理由
VIPArcher + 30 塞糖

查看全部评分

用头画头像,用脚写脚本
回复 1 0

使用道具 举报

梦石
0
星屑
2032
在线时间
200 小时
注册时间
2018-12-27
回帖
334
发表于 2019-1-22 17:48:42 | 显示全部楼层
我个人倒是搞了一个蛹计算公式的,如果是按照等级来算技能伤害用level就够了。
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部