Project1

标题: 关于复制技能 [打印本页]

作者: 间桐樱    时间: 昨天 21:35
标题: 关于复制技能
本帖最后由 间桐樱 于 2024-9-23 21:39 编辑

很早以前就问过了,当时以及搞定了,现在突发奇想,想把复制技能按到一个类似百变怪的队友身上,在战斗中攻击敌人,复制敌人所有技能,在本次战斗中使用
然后就要大改复制技能了,以前是指定复制技能的技能,现在能不能改成指定队友的id,以及相关脚本的修改,能力实在不足
#==============================================================================
# ■ RPG::UsableItem
#==============================================================================
class RPG::UsableItem
  #--------------------------------------------------------------------------
  # ○ 偷窃技能的技能かどうかを返す
  #--------------------------------------------------------------------------
  def steal_skill?
    [66].include?(@id)
  end
end

#==============================================================================
# ■ RPG::Item
#==============================================================================
class RPG::Item
  #--------------------------------------------------------------------------
  # ○ 盗めるスキルかどうかを返す
  #--------------------------------------------------------------------------
  def can_steal?
    false
  end
end

#==============================================================================
# ■ Game_ActionResult
#==============================================================================
class Game_ActionResult
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :steal_skills             # 盗まれたスキルIDの配列
  #--------------------------------------------------------------------------
  # ● クリア
  #--------------------------------------------------------------------------
  alias tmsksteal_game_actionresult_clear clear
  def clear
    tmsksteal_game_actionresult_clear
    @steal_skills = []
  end
  #--------------------------------------------------------------------------
  # ● 何らかのステータス(能力値かステート)が影響を受けたかの判定
  #--------------------------------------------------------------------------
  alias tmsksteal_game_actionresult_status_affected? status_affected?
  def status_affected?
    tmsksteal_game_actionresult_status_affected? || !@steal_skills.empty?
  end
end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの効果適用
  #--------------------------------------------------------------------------
  alias tmsksteal_game_battler_item_apply item_apply
  def item_apply(user, item)
    tmsksteal_game_battler_item_apply(user, item)
    return if user.enemy?
    if enemy? && item.steal_skill? && @result.hit?
      enemy.actions.each do |action|
        skill = $data_skills[action.skill_id]
        next if user.skill_learn?(skill)        # すでに習得済み
        @result.steal_skills.push(skill.id)
        user.learn_steal_skill(skill.id)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 戦闘終了処理
  #--------------------------------------------------------------------------
  alias tmsksteal_game_battler_on_battle_end on_battle_end
  def on_battle_end
    @steal_skills.clear unless enemy?
    tmsksteal_game_battler_on_battle_end
  end
end

#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルの初期化
  #--------------------------------------------------------------------------
  alias tmsksteal_game_actor_init_skills init_skills
  def init_skills
    @steal_skills = []
    tmsksteal_game_actor_init_skills
  end
  #--------------------------------------------------------------------------
  # ● 追加スキルの取得
  #--------------------------------------------------------------------------
  alias tmsksteal_game_actor_added_skills added_skills
  def added_skills
    result = tmsksteal_game_actor_added_skills
    @steal_skills.each {|id| result.push(id) }
    result
  end
  #--------------------------------------------------------------------------
  # ● スキルの習得済み判定
  #--------------------------------------------------------------------------
  alias tmsksteal_game_actor_skill_learn? skill_learn?
  def skill_learn?(skill)
    return true if tmsksteal_game_actor_skill_learn?(skill)
    skill.is_a?(RPG::Skill) && @steal_skills.include?(skill.id)
  end
  #--------------------------------------------------------------------------
  # ○ 盗んだスキルの習得
  #--------------------------------------------------------------------------
  def learn_steal_skill(skill_id)
    @steal_skills.push(skill_id)
  end
end

#==============================================================================
# ■ Window_BattleLog
#==============================================================================
class Window_BattleLog < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 能力強化/弱体の表示
  #--------------------------------------------------------------------------
  alias tmsksteal_window_battlelog_display_changed_buffs display_changed_buffs
  def display_changed_buffs(target)
    tmsksteal_window_battlelog_display_changed_buffs(target)
    display_steal_skill(target)
  end
  #--------------------------------------------------------------------------
  # ○ 盗んだスキルの表示
  #--------------------------------------------------------------------------
  def display_steal_skill(target)
    target.result.steal_skills.each do |id|
      replace_text(sprintf("%sを盗んだ!", $data_skills[id].name))
      wait
    end
  end
end




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