XP 스크립트

스크립트 적용 스크린샷은 http://hartshorn-id.hp.infoseek.co.jp/material/equip.html 에서 볼 수 있습니다.  장비창 전능력 표시와 최강장비 기능이 있습니다.

#==============================================================================
# ■ Harts_Window_EquipTitle
#------------------------------------------------------------------------------
#  装備画面で、タイトルを表示するウィンドウ。
#==============================================================================

class Harts_Window_EquipTitle < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 160, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120, 32, $data_system.words.equip, 1)
  end
end

#==============================================================================
# ■ Harts_Window_EquipCommand
#------------------------------------------------------------------------------
#  装備の選択を行うウィンドウです。
#==============================================================================

class Harts_Window_EquipCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(160, 0, 480, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 3
    @column_max = 3
    @commands = ["装備", "最強装備", "終わる"]
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #    index : 項目番号
  #    color : 文字色
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    self.contents.font.color = color
    x = index * 160 + 4
    self.contents.draw_text(x, 0, 128, 32, @commands[index], 1)
  end
end

#==============================================================================
# ■ Harts_Window_EquipItem
#------------------------------------------------------------------------------
#  装備画面で、装備変更の候補となるアイテムの一覧を表示するウィンドウです。
#==============================================================================

class Harts_Window_EquipItem < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #    actor      : アクター
  #    equip_type : 装備部位 (0~3)
  #--------------------------------------------------------------------------
  def initialize(actor, equip_type)
    super(272, 256, 368, 160)
    @actor = actor
    @equip_type = equip_type
    @column_max = 1
    refresh
    self.active = false
    self.index = -1
  end
  #--------------------------------------------------------------------------
  # ● アイテムの取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● 最強アイテムのid取得
  #--------------------------------------------------------------------------
  def max_item_id
    if @equip_type == 0
      if @actor.weapon_id == 0
        max = 0
      else
        max = $data_weapons[@actor.weapon_id].atk
      end
    elsif @equip_type == 1
      if @actor.armor1_id == 0
        max = 0
      else
        max = $data_armors[@actor.armor1_id].pdef
      end
    elsif @equip_type == 2
      if @actor.armor2_id == 0
        max = 0
      else
        max = $data_armors[@actor.armor2_id].pdef
      end
    elsif @equip_type == 3
      if @actor.armor3_id == 0
        max = 0
      else
        max = $data_armors[@actor.armor3_id].pdef
      end
    end
    for i in 0...@data.size-1
      if @equip_type == 0
        if max <= $data_weapons[@data[i].id].atk
          max = $data_weapons[@data[i].id].atk
          item_id = @data[i].id
        end
      elsif @equip_type >= 1
        if max <= $data_armors[@data[i].id].pdef
          max = $data_armors[@data[i].id].pdef
          item_id = @data[i].id
        end
      end
    end
    return item_id
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # 装備可能な武器を追加
    if @equip_type == 0
      weapon_set = $data_classes[@actor.class_id].weapon_set
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
          @data.push($data_weapons[i])
        end
      end
    end
    # 装備可能な防具を追加
    if @equip_type >= 1
      armor_set = $data_classes[@actor.class_id].armor_set
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0 and armor_set.include?(i)
          if $data_armors[i].kind == @equip_type-1
            @data.push($data_armors[i])
          end
        end
      end
    end
    # 空白を追加
    @data.push(nil)
    # ビットマップを作成し、全項目を描画
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max-1
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #    index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    x = 4
    y = index * 32
    case item
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 280, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 296, y, 24, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

#==============================================================================
# ■ Harts_Window_EquipLeft
#------------------------------------------------------------------------------
#  装備画面で、アクターのパラメータ変化を表示するウィンドウです。
#==============================================================================

class Harts_Window_EquipLeft < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #    actor : アクター
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 64, 272, 352)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_graphic(@actor, 32, 64)
    draw_actor_name(@actor, 4 + 96, 0)
    draw_actor_level(@actor, 4 + 96, 32)
    draw_actor_parameter(@actor, 4, 80, 0)
    draw_actor_parameter(@actor, 4, 112, 1)
    draw_actor_parameter(@actor, 4, 144, 2)
    draw_actor_parameter(@actor, 4, 192, 3)
    draw_actor_parameter(@actor, 4, 224, 4)
    draw_actor_parameter(@actor, 4, 256, 5)
    draw_actor_parameter(@actor, 4, 288, 6)
    if @new_atk != nil and @new_atk != @actor.atk
      if @new_atk > @actor.atk
        self.contents.font.color = system_color
      else
        self.contents.font.color = disabled_color
      end
      self.contents.draw_text(160, 80, 40, 32, "→", 1)
      self.contents.draw_text(200, 80, 36, 32, @new_atk.to_s, 2)
    end
    if @new_pdef != nil and @new_pdef != @actor.pdef
      if @new_pdef > @actor.pdef
        self.contents.font.color = system_color
      else
        self.contents.font.color = disabled_color
      end
      self.contents.draw_text(160, 112, 40, 32, "→", 1)
      self.contents.draw_text(200, 112, 36, 32, @new_pdef.to_s, 2)
    end
    if @new_mdef != nil and @new_mdef != @actor.mdef
      if @new_mdef > @actor.mdef
        self.contents.font.color = system_color
      else
        self.contents.font.color = disabled_color
      end
      self.contents.draw_text(160, 144, 40, 32, "→", 1)
      self.contents.draw_text(200, 144, 36, 32, @new_mdef.to_s, 2)
    end
    if @new_str != nil and @new_str != @actor.str
      if @new_str > @actor.str
        self.contents.font.color = system_color
      else
        self.contents.font.color = disabled_color
      end
      self.contents.draw_text(160, 192, 40, 32, "→", 1)
      self.contents.draw_text(200, 192, 36, 32, @new_str.to_s, 2)
    end
    if @new_dex != nil and @new_dex != @actor.dex
      if @new_dex > @actor.dex
        self.contents.font.color = system_color
      else
        self.contents.font.color = disabled_color
      end
      self.contents.draw_text(160, 224, 40, 32, "→", 1)
      self.contents.draw_text(200, 224, 36, 32, @new_dex.to_s, 2)
    end
    if @new_agi != nil and @new_agi != @actor.agi
      if @new_agi > @actor.agi
        self.contents.font.color = system_color
      else
        self.contents.font.color = disabled_color
      end
      self.contents.draw_text(160, 256, 40, 32, "→", 1)
      self.contents.draw_text(200, 256, 36, 32, @new_agi.to_s, 2)
    end
    if @new_int != nil and @new_int != @actor.int
      if @new_int > @actor.int
        self.contents.font.color = system_color
      else
        self.contents.font.color = disabled_color
      end
      self.contents.draw_text(160, 288, 40, 32, "→", 1)
      self.contents.draw_text(200, 288, 36, 32, @new_int.to_s, 2)
    end
  end
  #--------------------------------------------------------------------------
  # ● 装備変更後のパラメータ設定
  #    new_atk  : 装備変更後の攻撃力
  #    new_pdef : 装備変更後の物理防御
  #    new_mdef : 装備変更後の魔法防御
  #--------------------------------------------------------------------------
  def set_new_parameters(new_atk, new_pdef, new_mdef, new_str, new_dex, new_agi, new_int)
    if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef or @new_str != new_str or @new_dex != new_dex or @new_agi != new_agi or @new_int != new_int
      @new_atk = new_atk
      @new_pdef = new_pdef
      @new_mdef = new_mdef
      @new_str = new_str
      @new_dex = new_dex
      @new_agi = new_agi
      @new_int = new_int
      refresh
    end
  end
end

#==============================================================================
# ■ Harts_Scene_Equip
#------------------------------------------------------------------------------
#  装備画面の処理を行うクラスです。
#==============================================================================

class Scene_Equip
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #    actor_index : アクターインデックス
  #    equip_index : 装備インデックス
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, equip_index = -1, command_index = 0, equip_active = false, command_active = true)
    @actor_index = actor_index
    @equip_index = equip_index
    @command_index = command_index
    @equip_active = equip_active
    @command_active = command_active
  end
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  def main
    # アクターを取得
    @actor = $game_party.actors[@actor_index]
    # ウィンドウを作成
    @title_window = Harts_Window_EquipTitle.new
    @command_window = Harts_Window_EquipCommand.new
    @help_window = Window_Help.new
    @help_window.y = 416
    @left_window = Harts_Window_EquipLeft.new(@actor)
    @right_window = Window_EquipRight.new(@actor)
    @item_window0 = Harts_Window_EquipItem.new(@actor, -1)
    @item_window1 = Harts_Window_EquipItem.new(@actor, 0)
    @item_window2 = Harts_Window_EquipItem.new(@actor, 1)
    @item_window3 = Harts_Window_EquipItem.new(@actor, 2)
    @item_window4 = Harts_Window_EquipItem.new(@actor, 3)
    @item_window5 = Harts_Window_EquipItem.new(@actor, 4)
    # ヘルプウィンドウを関連付け
    @right_window.help_window = @help_window
    @item_window0.help_window = @help_window
    @item_window1.help_window = @help_window
    @item_window2.help_window = @help_window
    @item_window3.help_window = @help_window
    @item_window4.help_window = @help_window
    @item_window5.help_window = @help_window
    # カーソル位置を設定
    @command_window.index = @command_index
    @right_window.index = @equip_index
    # アクティブウィンドウを設定
    @command_window.active = @command_active
    @right_window.active = @equip_active
    refresh
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @title_window.dispose
    @command_window.dispose
    @help_window.dispose
    @left_window.dispose
    @right_window.dispose
    @item_window0.dispose
    @item_window1.dispose
    @item_window2.dispose
    @item_window3.dispose
    @item_window4.dispose
    @item_window5.dispose
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    # アイテムウィンドウの可視状態設定
    @item_window0.visible = (@right_window.index == -1)
    @item_window1.visible = (@right_window.index == 0)
    @item_window2.visible = (@right_window.index == 1)
    @item_window3.visible = (@right_window.index == 2)
    @item_window4.visible = (@right_window.index == 3)
    @item_window5.visible = (@right_window.index == 4)
    # 現在装備中のアイテムを取得
    item1 = @right_window.item
    # 現在のアイテムウィンドウを @item_window に設定
    case @right_window.index
    when -1
      @item_window = @item_window0
    when 0
      @item_window = @item_window1
    when 1
      @item_window = @item_window2
    when 2
      @item_window = @item_window3
    when 3
      @item_window = @item_window4
    when 4
      @item_window = @item_window5
    end
    # ライトウィンドウがアクティブの場合
    if @right_window.active
      # 装備変更後のパラメータを消去
      @left_window.set_new_parameters(nil, nil, nil, nil, nil, nil, nil)
    end
    # アイテムウィンドウがアクティブの場合
    if @item_window.active
      # 現在選択中のアイテムを取得
      item2 = @item_window.item
      # 装備を変更
      last_hp = @actor.hp
      last_sp = @actor.sp
      @actor.equip(@right_window.index, item2 == nil ? 0 : item2.id)
      # 装備変更後のパラメータを取得
      new_atk = @actor.atk
      new_pdef = @actor.pdef
      new_mdef = @actor.mdef
      new_str = @actor.str
      new_dex = @actor.dex
      new_agi = @actor.agi
      new_int = @actor.int
      # 装備を戻す
      @actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
      @actor.hp = last_hp
      @actor.sp = last_sp
      # レフトウィンドウに描画
      @left_window.set_new_parameters(new_atk, new_pdef, new_mdef, new_str, new_dex, new_agi, new_int)
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @title_window.update
    @command_window.update
    @left_window.update
    @right_window.update
    @item_window.update
    refresh
    # コマンドウィンドウがアクティブの場合: update_command を呼ぶ
    if @command_window.active
      update_command
      return
    end
    # ライトウィンドウがアクティブの場合: update_right を呼ぶ
    if @right_window.active
      update_right
      return
    end
    # アイテムウィンドウがアクティブの場合: update_item を呼ぶ
    if @item_window.active
      update_item
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_command
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # メニュー画面に切り替え
      $scene = Scene_Menu.new(2)
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      case @command_window.index
      # 装備の場合
      when 0
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        # ライトウィンドウをアクティブ化
        @right_window.active = true
        @command_window.active = false
        @right_window.index = 0
        @command_window.index = -1
        return
      # 最強装備の場合 
      when 1
        # 装備 SE を演奏
        $game_system.se_play($data_system.equip_se)
        # 最強装備の取得
        max_weapon_id = @item_window1.max_item_id
        max_armor1_id = @item_window2.max_item_id
        max_armor2_id = @item_window3.max_item_id
        max_armor3_id = @item_window4.max_item_id
        # 最強装備実行
        @actor.equip(0, max_weapon_id)
        @actor.equip(1, max_armor1_id)
        @actor.equip(2, max_armor2_id)
        @actor.equip(3, max_armor3_id)
        # ライトウィンドウ、アイテムウィンドウの内容を再作成
        @right_window.refresh
        @left_window.refresh
        @item_window1.refresh
        @item_window2.refresh
        @item_window3.refresh
        @item_window4.refresh
        return
      #終わるの場合
      when 2
        # キャンセル SE を演奏
        $game_system.se_play($data_system.cancel_se)
        # メニュー画面に切り替え
        $scene = Scene_Menu.new(2)
        return
      end
    end
    # R ボタンが押された場合
    if Input.trigger?(Input::R)
      # カーソル SE を演奏
      $game_system.se_play($data_system.cursor_se)
      # 次のアクターへ
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      # 別の装備画面に切り替え
      $scene = Scene_Equip.new(@actor_index, @right_window.index, @command_window.index)
      return
    end
    # L ボタンが押された場合
    if Input.trigger?(Input::L)
      # カーソル SE を演奏
      $game_system.se_play($data_system.cursor_se)
      # 前のアクターへ
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      # 別の装備画面に切り替え
      $scene = Scene_Equip.new(@actor_index, @right_window.index, @command_window.index)
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (ライトウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_right
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # コマンドウィンドウをアクティブ化
      @right_window.active = false
      @command_window.active = true
      @right_window.index = -1
      @command_window.index = 0
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # 装備固定の場合
      if @actor.equip_fix?(@right_window.index)
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # アイテムウィンドウをアクティブ化
      @right_window.active = false
      @item_window.active = true
      @item_window.index = 0
      return
    end
    # R ボタンが押された場合
    if Input.trigger?(Input::R)
      # カーソル SE を演奏
      $game_system.se_play($data_system.cursor_se)
      # 次のアクターへ
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      # 別の装備画面に切り替え
      $scene = Scene_Equip.new(@actor_index, @right_window.index, @command_window.index, true, false)
      return
    end
    # L ボタンが押された場合
    if Input.trigger?(Input::L)
      # カーソル SE を演奏
      $game_system.se_play($data_system.cursor_se)
      # 前のアクターへ
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      # 別の装備画面に切り替え
      $scene = Scene_Equip.new(@actor_index, @right_window.index, @command_window.index, true, false)
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アイテムウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_item
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # ライトウィンドウをアクティブ化
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # 装備 SE を演奏
      $game_system.se_play($data_system.equip_se)
      # アイテムウィンドウで現在選択されているデータを取得
      item = @item_window.item
      # 装備を変更
      @actor.equip(@right_window.index, item == nil ? 0 : item.id)
      # ライトウィンドウをアクティブ化
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      # ライトウィンドウ、アイテムウィンドウの内容を再作成
      @right_window.refresh
      @item_window.refresh
      return
    end
  end
end

Who's 백호

?

이상혁입니다.

http://elab.kr

Comment '7'

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6312
581 기타 ID띄우기 스크립트(新) 3 백호 2009.02.22 1281
580 오디오 WinAMP 플러그인을 이용하여 RMXP에서 다른 사운드포맷 지원하기 v3 by Guillame777@rmxp.net 백호 2009.02.22 936
» 장비 장비창 개조 스크립트 from Harts Horn 7 백호 2009.02.22 1775
578 장비 Advanced Equip Window 백호 2009.02.22 806
577 기타 창고 시스템 8 백호 2009.02.22 1763
576 파티 Party Switching Screen by exseiken file 백호 2009.02.22 1305
575 기타 Selected phyolomortis.com scripts 1 file 백호 2009.02.22 789
574 타이틀/게임오버 심심해서 구현해본 타이틀음악만으로 게임 플레이하기 2 백호 2009.02.22 1622
573 온라인 multy-netplay 로그인창에서 비밀번호를 ***표시해주는 script~! 1 백호 2009.02.22 1890
572 기타 스크립트 자료 3 file 백호 2009.02.22 906
571 전투 Steal Script 5.5 by trickster@rmxp.net (SDK호환) file 백호 2009.02.22 1206
570 메뉴 링 메뉴 Edited by Hypershadow180@rmxp.net 1 file 백호 2009.02.22 1976
569 HUD 넷플레이 HUD표시 2 file 백호 2009.02.22 3097
568 온라인 Multi-Netplay Extended (신버전) 10 백호 2009.02.22 2865
567 온라인 Multi-Netplay Extended[구버전용] 3 백호 2009.02.22 2176
566 기타 풀스크린 스크립트 2 백호 2009.02.22 1408
565 아이템 Item Acquired Window by SiliconHero@rmxp.net 백호 2009.02.22 1097
564 기타 Defining Encounter Areas by RPG Advocate (사용법 첨부) file 백호 2009.02.22 1201
563 전투 S ABS_NonSDK ver 1 file 백호 2009.02.22 1458
562 전투 S ABS_NonSDK(구버전용) 5 file 백호 2009.02.22 1494
Board Pagination Prev 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ... 52 Next
/ 52