Project1

标题: 请教判断同时装备1号,2号,3号装备时则免疫第10号状态的写法 [打印本页]

作者: taeckle    时间: 2021-1-2 07:25
标题: 请教判断同时装备1号,2号,3号装备时则免疫第10号状态的写法
本帖最后由 taeckle 于 2021-1-2 07:29 编辑

我想在Game_Actor类下的 def state_guard?(state_id) 里面增加个同时装备1号,2号,3号装备时则免疫第10号状态的判断(if),

还请大神多多指教,先谢过了!





附上RPG相关初始代码:

  # ● 判定防御属性
  #     state_id : 属性 ID
  #--------------------------------------------------------------------------
  def state_guard?(state_id)
    for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
      armor = $data_armors
      if armor != nil
        if armor.guard_state_set.include?(state_id)
          return true
        end
      end
    end
    return false
  end

作者: 紫英晓狼1130    时间: 2021-1-2 13:07
你都能说出来效果,翻译过来不就好了?
判断或如果就是if语句 则就是执行语句
同时装备 肯定不是一个类型的装备
所以直接if armor X 三个嵌套 加执行语句
不是所有脚本问题都要提问的 一个游戏要是所有问题都提问 游戏是做不出来的
作者: taeckle    时间: 2021-1-2 14:02
紫英晓狼1130 发表于 2021-1-2 13:07
你都能说出来效果,翻译过来不就好了?
判断或如果就是if语句 则就是执行语句
同时装备 肯定不是一个类型的 ...

好的,请教下那个for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
是神马意思呢?相当于for i in @armor1_id && for i in @armor2_id && for i in @armor3_id && for i in @armor3_id 吗?
作者: soulsaga    时间: 2021-1-2 14:59
本帖最后由 soulsaga 于 2021-1-2 15:03 编辑
taeckle 发表于 2021-1-2 14:02
好的,请教下那个for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
是神马意思呢?相当于for  ...


相当于for i in @armor1_id && for i in @armor2_id && for i in @armor3_id && for i in @armor3_id

好像没有这种写法..

还有..LZ没有说清楚这点
"里面增加个同时装备1号,2号,3号装备时则免疫第10号状态的判断"
是指不同人装备了123装备时生效还是一个人装备了123装备时生效

萌新不是神仙..並不能算到大佬心中所想的..所以请说清楚要达到的效果绝不能省略..
作者: 芯☆淡茹水    时间: 2021-1-2 16:28
是这样 ?
  1. arr = [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  2. return true if state_id == 10 && [1,2,3].all?{|id| arr.include?(id) }
复制代码


作者: 灯笼菜刀王    时间: 2021-1-2 16:51
本帖最后由 灯笼菜刀王 于 2021-1-2 17:46 编辑

return true if state_id == 10 and ([@armor1_id, @armor2_id, @armor3_id, @armor4_id] & [1,2,3]).size == 3
作者: alexncf125    时间: 2021-1-2 16:51
本帖最后由 alexncf125 于 2021-1-2 17:03 编辑

RUBY 代码复制
  1. def state_guard?(state_id)
  2.     for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  3.       armor = $data_armors[i]
  4.       if armor != nil
  5.         if armor.guard_state_set.include?(state_id)
  6.           return true
  7.         end
  8.       end
  9.     end
  10.     return false
  11.   end
那个for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
当然不是相当于for i in @armor1_id && for i in @armor2_id && for i in @armor3_id && for i in @armor3_id了
而是相当于
RUBY 代码复制
  1. def state_guard?(state_id)
  2.     armor = $data_armors[@armor1_id]
  3.     if armor != nil
  4.       if armor.guard_state_set.include?(state_id)
  5.         return true
  6.       end
  7.     end
  8.     armor = $data_armors[@armor2_id]
  9.     if armor != nil
  10.       if armor.guard_state_set.include?(state_id)
  11.         return true
  12.       end
  13.     end
  14.     armor = $data_armors[@armor3_id]
  15.     if armor != nil
  16.       if armor.guard_state_set.include?(state_id)
  17.         return true
  18.       end
  19.     end
  20.     armor = $data_armors[@armor4_id]
  21.     if armor != nil
  22.       if armor.guard_state_set.include?(state_id)
  23.         return true
  24.       end
  25.     end
  26.     return false
  27.   end
简单来说就是把"重复的, 只有一个元素不同的"脚本简化
作者: soulsaga    时间: 2021-1-2 19:45
话说def state_guard?(state_id)
做什么用的?感觉跟LZ需要的不太占边?
作者: SailCat    时间: 2021-1-2 20:28
这个功能并不需要脚本
1号装备带自动状态#1
2号装备带自动状态#2
3号装备带自动状态#3
然后将状态#1 #2 #3的状态防御那一栏里面,对状态#10打上[-]





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