Project1

标题: 如何在获得状态后习得技能 [打印本页]

作者: 不想伸手    时间: 2011-4-23 07:09
标题: 如何在获得状态后习得技能
如何在主角获得某些状态之后习得技能
例如:
主角获得【中毒】状态 可习得(或者说是使用)技能【XX拳】
作者: 塞巴斯特    时间: 2011-4-23 07:16
我想说是自动还是什么……
作者: 不想伸手    时间: 2011-4-23 07:49
自动学会- -
作者: pigsss    时间: 2011-4-23 09:34
  1. module State_Skill
  2.   STATE_SKILL = [] if $data_skills.nil?
  3.   $data_skills        = load_data("Data/Skills.rxdata") if $data_skills.nil?
  4.   $data_states        = load_data("Data/States.rxdata") if $data_states.nil?
  5. #---------------------------------------------------------
  6. # @state_skill.push [狀態ID,技能ID]
  7. # “*” + 状态名 == 技能名
  8. #---------------------------------------------------------
  9.   for i in 1...$data_states.size
  10.     for i2 in 1...$data_skills.size
  11.       if "*" + $data_states[i].name ==  $data_skills[i2].name
  12.         STATE_SKILL.push [i,i2]
  13.       end
  14.     end
  15.   end
  16. end
  17. #==============================================================================
  18. # ■ Game_Battler (分割定义 2)
  19. #------------------------------------------------------------------------------
  20. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  21. # 超级类来使用。
  22. #==============================================================================

  23. class Game_Battler
  24.   include State_Skill
  25.   #--------------------------------------------------------------------------
  26.   # ● 附加状态
  27.   #     state_id : 状态 ID
  28.   #     force    : 强制附加标志 (处理自动状态时使用)
  29.   #--------------------------------------------------------------------------
  30.   def add_state(state_id, force = false)
  31.     # 无效状态的情况下
  32.     if $data_states[state_id] == nil
  33.       # 过程结束
  34.       return
  35.     end
  36.     # 无法强制附加的情况下
  37.     unless force
  38.       # 已存在的状态循环
  39.       for i in @states
  40.         # 新的状态和已经存在的状态 (-) 同时包含的情况下、
  41.         # 本状态不包含变化为新状态的状态变化 (-)
  42.         # (ex : 战斗不能与附加中毒同时存在的场合)
  43.         if $data_states[i].minus_state_set.include?(state_id) and
  44.            not $data_states[state_id].minus_state_set.include?(i)
  45.           # 过程结束
  46.           return
  47.         end
  48.       end
  49.     end
  50.     # 无法附加本状态的情况下
  51.     unless state?(state_id)
  52.       # 状态 ID 追加到 @states 序列中
  53.       @states.push(state_id)
  54.       # 选项 [当作 HP 0 的状态] 有效的情况下
  55.       if $data_states[state_id].zero_hp
  56.         # HP 更改为 0
  57.         @hp = 0
  58.       end
  59.       # 所有状态的循环
  60.       for i in 1...$data_states.size
  61.         # 状态变化 (+) 处理
  62.         if $data_states[state_id].plus_state_set.include?(i)
  63.           add_state(i)
  64.         end
  65.         # 状态变化 (-) 处理
  66.         if $data_states[state_id].minus_state_set.include?(i)
  67.           remove_state(i)
  68.         end
  69.       end
  70.       # 按比例大的排序 (值相等的情况下按照强度排序)
  71.       @states.sort! do |a, b|
  72.         state_a = $data_states[a]
  73.         state_b = $data_states[b]
  74.         if state_a.rating > state_b.rating
  75.           -1
  76.         elsif state_a.rating < state_b.rating
  77.           +1
  78.         elsif state_a.restriction > state_b.restriction
  79.           -1
  80.         elsif state_a.restriction < state_b.restriction
  81.           +1
  82.         else
  83.           a <=> b
  84.         end
  85.       end
  86.     end
  87.     # 强制附加的场合
  88.     if force
  89.       # 设置为自然解除的最低回数 -1 (无效)
  90.       @states_turn[state_id] = -1
  91.     end
  92.     # 不能强制附加的场合
  93.     unless  @states_turn[state_id] == -1
  94.       # 设置为自然解除的最低回数
  95.       @states_turn[state_id] = $data_states[state_id].hold_turn
  96.     end
  97.     # 无法行动的场合
  98.     unless movable?
  99.       # 清除行动
  100.       @current_action.clear
  101.     end
  102.     # 检查 HP 及 SP 的最大值
  103.     @hp = [@hp, self.maxhp].min
  104.     @sp = [@sp, self.maxsp].min
  105. #---------------------------------
  106. if self.is_a?(Game_Actor)
  107. if STATE_SKILL.size > 0
  108.     for i in STATE_SKILL
  109.       if i[0] == state_id
  110.         if i[1] != 0
  111.           learn_skill(i[1])
  112.           unless force
  113.             @states.delete(state_id)
  114.           end
  115.         end
  116.       end     
  117.     end
  118.   end
  119. end
  120. #---------------------------------
  121.   end
  122.   
  123.   #--------------------------------------------------------------------------
  124.   # ● 解除状态
  125.   #     state_id : 状态 ID
  126.   #     force    : 强制解除标志 (处理自动状态时使用)
  127.   #--------------------------------------------------------------------------
  128.   def remove_state(state_id, force = false)
  129.     # 无法附加本状态的情况下
  130.     if state?(state_id)
  131.       # 被强制附加的状态、并不是强制解除的情况下
  132.       if @states_turn[state_id] == -1 and not force
  133.         # 过程结束
  134.         return
  135.       end
  136.       # 现在的 HP 为 0 当作选项 [当作 HP 0 的状态]有效的场合
  137.       if @hp == 0 and $data_states[state_id].zero_hp
  138.         # 判断是否有另外的 [当作 HP 0 的状态]状态
  139.         zero_hp = false
  140.         for i in @states
  141.           if i != state_id and $data_states[i].zero_hp
  142.             zero_hp = true
  143.           end
  144.         end
  145.         # 如果可以解除战斗不能、将 HP 更改为 1
  146.         if zero_hp == false
  147.           @hp = 1
  148.         end
  149.       end
  150.       
  151.       
  152.        unless self.movable?
  153.         # ステート ID を @states 配列および @states_turn ハッシュから削除
  154.         @states.delete(state_id)
  155.         @states_turn.delete(state_id)
  156.         if self.movable?
  157.           self.at = 0
  158.         end
  159.       else
  160.         # ステート ID を @states 配列および @states_turn ハッシュから削除
  161.         @states.delete(state_id)
  162.         @states_turn.delete(state_id)
  163.       end
  164.       
  165.       
  166.       
  167.       
  168.       # 将状态 ID 从 @states 队列和 @states_turn hash 中删除
  169.       #@states.delete(state_id)
  170.       #@states_turn.delete(state_id)
  171.     end
  172.     # 检查 HP 及 SP 的最大值
  173.     @hp = [@hp, self.maxhp].min
  174.     @sp = [@sp, self.maxsp].min
  175. #---------------------------------
  176. if self.is_a?(Game_Actor)
  177. if STATE_SKILL.size > 0
  178.     for i in STATE_SKILL
  179.       if i[0] == state_id
  180.         if i[1] != 0
  181.           forget_skill(i[1])
  182.         end
  183.       end     
  184.     end
  185.   end
  186. end
  187. #---------------------------------
  188. end







  189. end
复制代码





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