Project1

标题: 【已解决】如何根据Game_Troop中敌人名字后缀改变敌人属性 [打印本页]

作者: [email protected]    时间: 2023-11-28 11:07
标题: 【已解决】如何根据Game_Troop中敌人名字后缀改变敌人属性
本帖最后由 [email protected] 于 2023-12-3 10:10 编辑

Game_Troop中敌人名字后缀改成性格之类的词缀,根据词缀的不同同一敌人属性会有偏差,请教下面写法为何不生效。
class Game_Troop
  alias pe_setup setup
  def setup(troop_id)
    # 根据敌人名字后缀的字表修改敌人属性
    @enemies.each do |enemy|
    suffix = enemy.name[/\[(.*?)\]/, 1]# 获取敌人名字后缀的文字描述
    modify_enemy_attributes(enemy, suffix) if suffix
    pe_setup(troop_id)
  end
end

# 修改敌人属性的方法
  def modify_enemy_attributes(enemy, suffix)
    case suffix
    when "(暴躁)"
      enemy.params[0] += 20 # 最大HP增加20
      enemy.params[1] += 20 # 最大MP增加20
      enemy.params[2] += 20 # 物理攻击增加20
      enemy.params[3] += 20 # 物理防御增加20
      enemy.params[4] += 10 # 魔法攻击增加10
      enemy.params[5] += 10 # 魔法防御增加10
      enemy.params[6] += 10 # 敏捷值增加10
      enemy.params[7] += 10 # 幸运值增加10
    when "(邪恶)"
。。。。。。
   when "(胆小)"
。。。。。。
    else
    end
  end
end
作者: 345912390    时间: 2023-11-28 21:30
看了一下你的顺序 弄反了
  1. alias pe_setup setup
  2.   def setup(troop_id)

  3.     pe_setup(troop_id)#先初始化,否则@enemies为空
  4.     # 根据敌人名字后缀的字表修改敌人属性
  5.     @enemies.each do |enemy|
  6.     suffix = enemy.name[/\[(.*?)\]/, 1]# 获取敌人名字后缀的文字描述
  7.     modify_enemy_attributes(enemy, suffix) if suffix
  8.   end
复制代码

没具体测试过,大概方向是这样
作者: freeman2008    时间: 2023-11-29 08:39
本帖最后由 freeman2008 于 2023-11-29 10:36 编辑
345912390 发表于 2023-11-28 21:30
看了一下你的顺序 弄反了

没具体测试过,大概方向是这样


改好顺序还是无效,还有其它原因吗?
作者: srwjrevenger    时间: 2023-11-29 11:17
本帖最后由 srwjrevenger 于 2023-11-29 12:25 编辑

刚刚发现自己搞错想回来改,就发现你回报了... ...
先像楼上说的改一下
之后名字要这样哦 史莱姆[暴躁]
when "(暴躁)" --> when "暴躁"
enemy.params[0]  -->  enemy.param(0)  这个不能直接改它,只是提醒你写错了
用 enemy.add_param(对应能力id, 数值)




作者: freeman2008    时间: 2023-11-29 11:48
srwjrevenger 发表于 2023-11-29 11:17
when "(暴躁)" -> when "暴躁"
enemy.params[0]  ->  enemy.param(0) 然而这是读取数据库的,无效... ...

新建了工程测试,还是无效。when后面不改属性,改其它来测试都没生效
作者: freeman2008    时间: 2023-11-29 13:55
srwjrevenger 发表于 2023-11-29 11:17
刚刚发现自己搞错想回来改,就发现你回报了... ...
先像楼上说的改一下
之后名字要这样哦 史莱姆[暴躁]

感谢,在史莱姆名字后面加性格词缀是可以的,但我想到脚本Game_Troop里的LETTER_TABLE = []里的这个表里设置性格词缀,效果是同一敌群有随机的性格,可以给同一敌群的几个敌人不同属性
作者: 345912390    时间: 2023-12-2 21:36
本帖最后由 345912390 于 2023-12-2 21:57 编辑
freeman2008 发表于 2023-11-29 13:55
感谢,在史莱姆名字后面加性格词缀是可以的,但我想到脚本Game_Troop里的LETTER_TABLE = []里的这个表里 ...



RUBY 代码复制
  1. class Game_Enemy < Game_Battler
  2.   #前缀名
  3.   PREFIX_TABLE = ['','【金】•','【木】•','【火】•','【水】•','【土】•']
  4.   #前缀属性
  5.   PREFIX_PARAMS=[[0,0,0,0,0,0,0,0],
  6.                                 [97,0,0,0,0,0,0,0],
  7.                                 [75,200,0,0,0,0,0,0],
  8.                                 [43,0,70,0,0,0,0,0],
  9.                                 [28,0,0.5,0,0,0,0,0],
  10.                                 [39,0,0,0,0,0,0,20],]
  11.   #--------------------------------------------------------------------------
  12.   # ● 定义实例变量
  13.   #--------------------------------------------------------------------------
  14.   attr_accessor :prefix_index #前缀序号
  15.  
  16.   alias old_initialize initialize
  17.   def initialize(index, enemy_id)
  18.    old_initialize(index, enemy_id)
  19.    @prefix_index=rand(PREFIX_TABLE.size)if @prefix_index==nil
  20.    #p @prefix_index
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 获取显示名称
  24.   #--------------------------------------------------------------------------
  25.   alias old_name name
  26.   def name
  27.     PREFIX_TABLE[@prefix_index]+@original_name + (@plural ? letter : "")
  28.   end
  29.    #--------------------------------------------------------------------------
  30.   # ● 获取普通能力的基础值
  31.   #--------------------------------------------------------------------------
  32.   alias old_param_base param_base
  33.   def param_base(param_id)
  34.     @prefix_index=rand(PREFIX_TABLE.size) if @prefix_index==nil
  35.       #return enemy.params[param_id]
  36.  
  37.      if PREFIX_PARAMS[@prefix_index][param_id].abs<1 then #按百分比计算
  38.         return enemy.params[param_id]*(1+PREFIX_PARAMS[@prefix_index][param_id])
  39.       else #按实际值计算
  40.         return enemy.params[param_id]+PREFIX_PARAMS[@prefix_index][param_id]
  41.       end
  42.  
  43.     #return enemy.params[param_id]
  44.   end
  45. end






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