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 6153
881 전투 전투 특수효과 ActionEX 스크립트 1 file 백호 2009.02.21 1659
880 전투 전투 카메라 스크립트 5 file 백호 2009.02.21 2454
879 기타 전투 승리 BGM+페이드아웃 스크립트 1 file 백호 2009.02.21 1159
878 전투 전투 속도 조정 스크립트 2 file 백호 2009.02.21 1261
877 전투 전투 난이도 설정 스크립트 file 백호 2009.02.21 1441
876 전투 전투 관련 횟수 취득 스크립트 백호 2009.02.21 783
875 전투 전투 결과 화면 개조 스크립트 10 file 백호 2009.02.21 2496
874 전체화면 스크립트[해상도 스크립트랑 중복사용 불가] 24 file - 하늘 - 2009.08.06 3975
873 키입력 전체키 입력 스크립트 v4 by Cybersam 5 file 백호 2009.02.22 1947
872 장비 전체키 이용을 위한 장비창 스크립트 백호 2009.02.21 1234
871 키입력 전체 키 사용 스크립트 1 백호 2009.02.21 1423
870 전투 적의 여러차례 행동 스크립트 1 백호 2009.02.22 1320
869 HUD 적의 남은 HP만큼 적의 이름 색깔 변하는 스크립트 6 file 백호 2009.02.21 2337
868 전투 적 한계 HP수치 돌파 스크립트 ■ RPGモジュール 3 쉴더 2009.02.21 1783
867 저상 슬롯 15개 스크립트 9 WMN 2008.03.18 1496
866 장비 장비품개조 - KGC_AlterEquipment (8/12일자) 2 file 백호 2009.02.22 1694
865 장비 장비창을 다른거로 바꾸기 [헬악이님 제공] 10 file 아방스 2007.11.09 3049
864 장비 장비창업그레이드 ps인간 2009.01.23 2478
» 장비 장비창 개조 스크립트 from Harts Horn 7 백호 2009.02.22 1768
862 장비 장비착용시 올스탯 표시 2 file 백호 2009.02.21 1664
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 52 Next
/ 52