#============================================================================== # ** Game_Battler #------------------------------------------------------------------------------ # 添加变身技能相关方法 #============================================================================== class Game_Battler < Game_BattlerBase # 添加属性访问器 attr_accessor :transformed_skills attr_accessor :transformation_duration # 初始化对象 alias transform_skill_initialize initialize def initialize transform_skill_initialize @transformed_skills = [] @transformation_duration = 0 end # 每回合更新 alias transform_skill_on_turn_end on_turn_end def on_turn_end transform_skill_on_turn_end update_transformation end # 更新变身状态 def update_transformation return if @transformation_duration <= 0 @transformation_duration -= 1 if @transformation_duration <= 0 @transformed_skills.each do |skill_id| forget_skill(skill_id) end @transformed_skills.clear end end # 添加变身技能 def add_transformed_skill(skill_id, duration) return if skill_learn?($data_skills[skill_id]) learn_skill(skill_id) @transformed_skills << skill_id @transformation_duration = [@transformation_duration, duration].max end # 检查是否是变身技能 def transform_skill?(skill) skill && skill.note.include?("<transform_skill>") end # 获取变身概率 def transform_probability(skill) skill.note[/<transform_prob:(\d+)>/i] ? $1.to_i : 100 end # 获取变身持续时间 def transform_duration(skill) skill.note[/<transform_duration:(\d+)>/i] ? $1.to_i : 3 end end #============================================================================== # ** Scene_Battle #------------------------------------------------------------------------------ # 添加变身技能处理 #============================================================================== class Scene_Battle < Scene_Base # 使用技能 alias transform_skill_use_item use_item def use_item item = @subject.current_action.item if @subject.transform_skill?(item) && @subject.current_action.target_index >= 0 process_transform_skill(item) end transform_skill_use_item end # 处理变身技能 def process_transform_skill(skill) # 获取目标数组 targets = @subject.current_action.make_targets.compact return if targets.empty? # 只对第一个敌人目标有效 target = targets.find { |t| t.is_a?(Game_Enemy) } return unless target # 获取可学习的技能列表(排除特殊技能) learnable_skills = target.actions.select do |action| action.item && action.item.is_a?(RPG::Skill) && !action.item.note.include?("<no_transform>") end return if learnable_skills.empty? # 随机选择一个技能 selected_action = learnable_skills.sample skill_id = selected_action.item.id # 计算成功概率 probability = @subject.transform_probability(skill) duration = @subject.transform_duration(skill) if rand(100) < probability @subject.add_transformed_skill(skill_id, duration) @log_window.add_text("#{@subject.name}学会了#{selected_action.item.name}!") else @log_window.add_text("#{@subject.name}的变身失败了!") end end end |
3D7D61C28F924E23BDB9CD05EFDC7FAB.png (49.65 KB, 下载次数: 6)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |