武器の形状変化スキル



スキルによって形状変化する武器を作ってみます。

※戦闘時には使用しない方がいいです

変更点
まだなし


#==============================================================================
# 武器の形状変化スキル By 貪藻矢射妥←
#------------------------------------------------------------------------------
# スキルによって形状変化する武器を作ってみます。
# 
# ※戦闘時には使用しない方がいいです
#  未検証なので・・・
# 
#==============================================================================
# 更新っぽいもの
# まだなし

module MODEL_CHANGE
  # モデルチェンジ用スキルID
  MODEL_CHG_SKILL_ID = 491
  
  # モデルチェンジ用リスト
  # 表示名と武器IDのハッシュ
  MODEL_CHG_HASH = {
    "刀" => 615, 
    "鎌" => 616, 
    "剣" => 617, 
    "槍" => 618, 
    "棍" => 619, 
    "鋒" => 620, 
    "斧" => 621
  }
end

class Window_ModelChangeCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(160, 320, 320, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 7
    @column_max = 7
    @commands = MODEL_CHANGE::MODEL_CHG_HASH.keys
    refresh
    self.index = 0
    
    if $OuterFlgs["Window_BG"]
      @bg_sprite = nil
      make_bg("p_cmd_back", 220)
    end
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    x = 4 + index * 43
    draw_shadow_text([x, 0, 64, 32], @commands[index])
  end
end

class Scene_Skill
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias model_change_main main
  def main
    # コマンドウィンドウを作成
    @model_change_window = Window_ModelChangeCommand.new
    @model_change_window.active = false
    @model_change_window.visible = false
    
    model_change_main
    
    # ウィンドウを解放
    @model_change_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias model_change_update update
  def update
    # ウィンドウを更新
    @model_change_window.update
    
    model_change_update
    
    # モデルチェンジウィンドウがアクティブの場合: update_model_change を呼ぶ
    if @model_change_window.active
      update_model_change
      return
    end
  end
  
  #--------------------------------------------------------------------------
  # ● フレーム更新 (スキルウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  alias model_change_update_skill update_skill
  def update_skill
    # モデルチェンジの場合
    if @skill.id == MODEL_CHANGE::MODEL_CHG_SKILL_ID
      # C ボタンが押された場合
      if Input.trigger?(Input::C)
        # スキルウィンドウで現在選択されているデータを取得
        @skill = @skill_window.skill
        # 使用できない場合
        if @skill == nil or not @actor.skill_can_use?(@skill.id)
          # ブザー SE を演奏
          Sound.play_buzzer
          return
        end
        # 決定 SE を演奏
        Sound.play_ok
        @model_change_window.active = true
        @model_change_window.visible = true
        @skill_window.active = false
      end
    else
      # もとの処理を実行
      model_change_update_skill
    end

  end
  
  #--------------------------------------------------------------------------
  # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_model_change
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      @model_change_window.active = false
      @model_change_window.visible = false
      @skill_window.active = true
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      
      actor = $game_party.actors[@actor_index]
    
      list = [actor.weapon_id]
      
      tmp_wep_id = -1
      for i in 0...list.size
        if MODEL_CHANGE::MODEL_CHG_HASH.has_value?(list[i])
          tmp_wep_id = i
        end
      end
      
      wep_set = MODEL_CHANGE::MODEL_CHG_HASH.values
      
      # 形状変化前の武器を装備中なら実施
      if tmp_wep_id != -1
        actor.equip(tmp_wep_id, 0)
        
        # 形状変化後の武器を追加
        $game_party.gain_weapon(wep_set[@model_change_window.index], 1)
        
        # 形状変化後の装備変更
        actor.equip(tmp_wep_id, wep_set[@model_change_window.index])
      
        # 形状変化前の装備を削減
        $game_party.lose_weapon(list[tmp_wep_id], 1)
      
        Sound.play_ok
      else
        Sound.play_buzzer
      end
      
      # 以下を実施すると選択する間もなく終わっちゃうのでコメントアウト
      #@model_change_window.active = false
      #@model_change_window.visible = false
      #@skill_window.active = true
      return
    end
  end
end

戻る