#======================================================================= # 豪华版技能冷却系统 By 绿发的Eclair # 使用方法:在特技名称后面用半角逗号分割,写上冷却回合数。 # 比如 十字斩,10 就是特技 十字斩 冷却10个回合了。 # 注意这个冷却是敌我通用的,不只是我方,敌人也不会使用冷却中的技能哦。 # 不想让特技窗口中显示冷却回合数, $冷却时间显示 = false 就行了。 # 冲突性:存在,但是除了RTAB外似乎整合难度不大。 #======================================================================= $冷却时间显示 = true module RPG class Skill def cold return @name.split(/,/)[1] end def name(actor = nil) if $冷却时间显示 and actor != nil and actor.cold[@id] != nil a = (@name.split(/,/)[0] == nil ? 0 : @name.split(/,/)[0]) return a + "(" + actor.cold[@id].to_s + "回合冷却)" else return (@name.split(/,/)[0] == nil ? 0 : @name.split(/,/)[0]) end end end end class Game_Battler #-------------------------------------------------------------------------- # ● 可以使用特技的判定 # skill_id : 特技 ID #-------------------------------------------------------------------------- attr_accessor :cold alias initialize_cold :initialize def initialize @cold = {} initialize_cold end def set_cold(key,val) return if @cold[key] == nil @cold[key] += val @cold.delete(key) if @cold[key] <= 0 end alias skill_can_use_addcold :skill_can_use? def skill_can_use?(skill_id) return false if @cold[skill_id] != nil skill_can_use_addcold(skill_id) end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ # 处理战斗画面的类。 #============================================================================== class Scene_Battle alias make_skill_action_result_addcold :make_skill_action_result def make_skill_action_result make_skill_action_result_addcold if @skill.cold.to_i != 0 @active_battler.cold[@skill.id] = @skill.cold.to_i end end alias start_phase4_addcold :start_phase4 def start_phase4 start_phase4_addcold end end #============================================================================== # ■ Window_Skill #------------------------------------------------------------------------------ # 特技画面、战斗画面、显示可以使用的特技浏览的窗口。 #============================================================================== class Window_Skill < Window_Selectable def draw_item(index) skill = @data[index] if @actor.skill_can_use?(skill.id) self.contents.font.color = normal_color else self.contents.font.color = disabled_color end x = 4 + index % 2 * (288 + 32) y = index / 2 * 32 rect = Rect.new(x, y, self.width / @column_max - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(skill.icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) if $scene.is_a?(Scene_Battle) self.contents.draw_text(x + 28, y, 204, 32, skill.name(@actor), 0) else self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0) end self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)if skill.occasion !=3 self.contents.draw_text(x + 232, y, 48, 32, "被动", 2) if skill.occasion == 3 end end #============================================================================== # ■ Game_Enemy #------------------------------------------------------------------------------ # 处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的 # 内部使用。 #============================================================================== class Game_Enemy < Game_Battler def make_action # 清除当前行动 self.current_action.clear # 无法行动的情况 unless self.movable? # 过程结束 return end # 抽取现在有效的行动 available_actions = [] rating_max = 0 for action in self.actions # 确认回合条件 n = $game_temp.battle_turn a = action.condition_turn_a b = action.condition_turn_b if (b == 0 and n != a) or (b > 0 and (n < 1 or n < a or n % b != a % b)) next end # 确认 HP 条件 if self.hp * 100.0 / self.maxhp > action.condition_hp next end if self.cold[action.skill_id] != nil next end # 确认等级条件 if $game_party.max_level < action.condition_level next end # 确认开关条件 switch_id = action.condition_switch_id if switch_id > 0 and $game_switches[switch_id] == false next end # 符合条件 : 添加本行动 available_actions.push(action) if action.rating > rating_max rating_max = action.rating end end # 最大概率值作为 3 合计计算(0 除外) ratings_total = 0 for action in available_actions if action.rating > rating_max - 3 ratings_total += action.rating - (rating_max - 3) end end # 概率合计不为 0 的情况下 if ratings_total > 0 # 生成随机数 value = rand(ratings_total) # 设置对应生成随机数的当前行动 for action in available_actions if action.rating > rating_max - 3 if value < action.rating - (rating_max - 3) self.current_action.kind = action.kind self.current_action.basic = action.basic self.current_action.skill_id = action.skill_id self.current_action.decide_random_target_for_enemy return else value -= action.rating - (rating_max - 3) end end end end end end #======================================================================= #豪华版技能冷却系统 #=======================================================================