Project1

标题: 有事请教 [打印本页]

作者: yy5654321    时间: 2009-5-8 06:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: 紫苏    时间: 2009-5-8 07:03
      # 所有状态的循环
      for i in 1...$data_states.size
        # 状态变化 (+) 处理
        if $data_states[state_id].plus_state_set.include?(i)
          add_state(i)
        end
        # 状态变化 (-) 处理
        if $data_states[state_id].minus_state_set.include?(i)
          remove_state(i)
        end
      end
这一段是在对一个战斗者添加状态时执行的,for 循环遍历数据库中的所有状态,如果发现某状态是当前 add_state 将要添加的状态的附加状态,就再次调用 add_state 添加该状态;如果发现某状态是当前 add_state 将要添加的状态的解除状态,就调用 remove_state 解除该状态~可以看出这里 add_state 有一个递归调用的过程,附加状态添加后再次添加附加状态的附加状态,直到没有附加状态或者状态已经添加了(递归的出口)[LINE]2,#ff0000[/LINE]
    # 无法强制附加的情况下
    unless force
      # 已存在的状态循环
      for i in @states
        # 新的状态和已经存在的状态 (-) 同时包含的情况下、
        # 本状态不包含变化为新状态的状态变化 (-)
        # (ex : 战斗不能与附加中毒同时存在的场合)
        if $data_states.minus_state_set.include?(state_id) and
           not $data_states[state_id].minus_state_set.include?(i)
          # 过程结束
          return
        end
      end
    end
这一段是在状态不是被强制添加的情况下,遍历战斗者当前已有的状态,如果已有的状态中包含会解除即将要添加的状态的状态,或者当前要添加的状态会解除任何一个当前已有的状态,那么就直接结束整个添加状态的过程,因为不能让有解除关系的两个状态同时存在,比如战斗不能和其它状态不能同时存在~ [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: yy5654321    时间: 2009-5-8 15:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: 紫苏    时间: 2009-5-8 15:19
你打开数据库,切换到“状态”选项卡,右手边就可以设置附加/解除某状态~
意思就是说,当附加这个状态的时候自动附加/解除另一个状态

你看默认的战斗不能设置,除了战斗不能状态本身,其它状态全部都是减号,也就是当战斗不能状态被附加时自动解除其它所有状态~
作者: yy5654321    时间: 2009-5-8 18:42
提示: 作者被禁止或删除 内容自动屏蔽




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