Project1

标题: 在随机属性系统中,有没有更好的办法实现套装属性? [打印本页]

作者: crow2006    时间: 2014-4-7 10:21
标题: 在随机属性系统中,有没有更好的办法实现套装属性?
现在用这样的方法实现套装属性,但是感觉设置起来过于繁琐:
比如我现在有3件套,盾牌+头盔+衣服,能够实现生命恢复+100的效果,
class Game_Actor < Game_Battler
  def shengminghf
    n = 0
    for e in equips.compact do n += e.shengminghf if e.dur > 0 end
##套装属性设置#########################################
  $反叛者之盾  = [401] # 反叛者之盾
  $反叛者战盔  = [402] # 反叛者战盔
  $反叛者战甲  = [403] # 反叛者战甲   
###########反叛者套装###################################################   
    if self.armors[0] != nil and self.armors[1] != nil and self.armors[2] != nil and self.armors[3] != nil
      if self.armors[0] != nil and self.armors.any?{|i| $反叛者之盾.include?(i.base_id)}
        if self.armors[1] != nil and self.armors.any?{|i| $反叛者战盔.include?(i.base_id)}
          if self.armors[2] != nil and self.armors.any?{|i| $反叛者战甲.include?(i.base_id)}
            n += 100
          end
        end
      end  
    end
##########################################################################
end
end

有没有什么更方便的方法来实现套装效果?
作者: 王硕    时间: 2014-4-7 16:55
没有提供工程,因此没有办法测试,把以下脚本代替你的脚本吧
RUBY 代码复制
  1. module TaoZhuang
  2.   TZ = {
  3.          [401,402,403] => 100, # 反叛者套装系列,生命恢复100
  4.          [404,405,406] => 150, # 正义者套装系列,生命恢复150
  5.          [407,408,409] => 200  # 中立者套装系列,生命恢复200
  6.        }
  7. end
  8.  
  9. class Game_Actor < Game_Battler
  10.   def shengminghf
  11.     n = 0
  12.     for e in equips.compact do n += e.shengminghf if e.dur > 0 end   
  13.     n += taozhuangpanding
  14.   end
  15.  
  16.   def taozhuangpanding
  17.     TaoZhuang::TZ.each{|j|
  18.       if self.armors[0] != nil and self.armors[1] != nil and self.armors[2] != nil and self.armors[3] != nil
  19.         if self.armors[0] != nil and self.armors.any?{|i| j[0].include?(i.base_id)}
  20.           if self.armors[1] != nil and self.armors.any?{|i| j[0].include?(i.base_id)}
  21.             if self.armors[2] != nil and self.armors.any?{|i| j[0].include?(i.base_id)}
  22.               return j[1]
  23.             end
  24.           end
  25.         end
  26.       end
  27.     }
  28.     return 0
  29.   end  
  30. end

作者: 铃仙·优昙华院·因幡    时间: 2014-4-7 20:06
我会告诉你可以用 数组交集 简化下面一堆的 if 么?

作者: crow2006    时间: 2014-4-7 21:00
角色属性比较多,所以需要每个都写一种。
弄了半天。

作者: 王硕    时间: 2014-4-7 21:43
看看这样行不行,依旧是没有工程不能测试,只能目测。有问题的话请点评我的楼层,这样我才能收到提醒
RUBY 代码复制
  1. module TaoZhuang
  2.   TZ = {
  3.          [401,402,403] => 100, # 反叛者套装系列,生命恢复100
  4.          [404,405,406] => 150, # 正义者套装系列,生命恢复150
  5.          [407,408,409] => 200  # 中立者套装系列,生命恢复200
  6.        }
  7. end
  8.  
  9. class Game_Actor < Game_Battler
  10.   def shengminghf
  11.     n = 0
  12.     for e in equips.compact do n += e.shengminghf if e.dur > 0 end   
  13.     n += taozhuangpanding
  14.   end
  15.  
  16.   def taozhuangpanding
  17.     TaoZhuang::TZ.each{|j|
  18.       if self.armors[0] != nil and self.armors[1] != nil and self.armors[2] != nil and self.armors[3] != nil
  19.         if self.armors[0] != nil and j[0].include?(self.armors[0].base_id)
  20.           if self.armors[1] != nil and j[0].include?(self.armors[1].base_id)
  21.             if self.armors[2] != nil and j[0].include?(self.armors[2].base_id)
  22.               return j[1]
  23.             end
  24.           end
  25.         end
  26.       end
  27.     }
  28.     return 0
  29.   end  
  30. end

作者: 铃仙·优昙华院·因幡    时间: 2014-4-7 22:36
王硕 发表于 2014-4-7 21:43
看看这样行不行,依旧是没有工程不能测试,只能目测。有问题的话请点评我的楼层,这样我才能收到提醒。
mod ...


RUBY 代码复制
  1. def armors_id
  2.     result = []
  3.     unless two_swords_style
  4.       result << @armor1_id
  5.     end
  6.     result << @armor2_id
  7.     result << @armor3_id
  8.     result << @armor4_id
  9.     return result.compact!
  10.   end
  11.  
  12.   def suit?
  13.     TaoZhuang::TZ.each_key do |array|
  14.       return true if array & armors_id == array
  15.     end
  16.     return false
  17.   end
这样其实感觉更好看= =




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