XP 스크립트

중복일 수도 있습니다만, 소지한 아이템 갯수가 99개를 넘어도 가게에서 해당물건 구입이 가능하도록 수정한 것입니다.  원 스크립트는:
http://www.geocities.jp/gamergss/rgss/rgss001.html



#==============================================================================
#   ◆ 所持数限界突破 - item_maximum◆
#------------------------------------------------------------------------------
#  アイテムの持てる数を99以上にするスクリプトです
#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================

#アイテムの所持数
ITEM_MAXIMUM = 999 #소지/구입 최대수는 여기서 지정

#所持数の桁
ITEM_MAXIMUM_PLACE= 4

#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
#  パーティを扱うクラスです。ゴールドやアイテムなどの情報が含まれます。このク
# ラスのインスタンスは $game_party で参照されます。
#==============================================================================

class Game_Party
  #--------------------------------------------------------------------------
  # ● アイテムの増加 (減少)
  #    item_id : アイテム ID
  #    n      : 個数
  #--------------------------------------------------------------------------
  def gain_item(item_id, n)
    # ハッシュの個数データを更新
    if item_id > 0
      @items[item_id] = [[item_number(item_id) + n, 0].max, ITEM_MAXIMUM].min
    end
  end
  #--------------------------------------------------------------------------
  # ● 武器の増加 (減少)
  #    weapon_id : 武器 ID
  #    n        : 個数
  #--------------------------------------------------------------------------
  def gain_weapon(weapon_id, n)
    # ハッシュの個数データを更新
    if weapon_id > 0
      @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, ITEM_MAXIMUM].min
    end
  end
  #--------------------------------------------------------------------------
  # ● 防具の増加 (減少)
  #    armor_id : 防具 ID
  #    n        : 個数
  #--------------------------------------------------------------------------
  def gain_armor(armor_id, n)
    # ハッシュの個数データを更新
    if armor_id > 0
      @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, ITEM_MAXIMUM].min
    end
  end 
end

#-------------------------------------------------------------------------------

#==============================================================================
# ■ Window_Item
#------------------------------------------------------------------------------
#  アイテム画面、バトル画面で、所持アイテムの一覧を表示するウィンドウです。
#==============================================================================

class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #    index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    width = 24 + (ITEM_MAXIMUM_PLACE - 2) * 12
    x_i = x - width + 24
    self.contents.draw_text(x_i + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x_i + 256, y, width, 32, number.to_s, 2)
  end
end

#-------------------------------------------------------------------------------

#==============================================================================
# ■ Window_ShopNumber
#------------------------------------------------------------------------------
#  ショップ画面で、購入または売却するアイテムの個数を入力するウィンドウです。
#==============================================================================

class Window_ShopNumber < Window_Base
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_item_name(@item, 4, 96)
    self.contents.font.color = normal_color
    width = 24 + (ITEM_MAXIMUM_PLACE - 2) * 12
    widths = 32 + (ITEM_MAXIMUM_PLACE - 2) * 12
    self.contents.draw_text(272 - width + 24, 96, 32, 32, "×")
    self.contents.draw_text(308 - width + 24, 96, width, 32, @number.to_s, 2)
    self.cursor_rect.set(304 - width + 24, 96, widths, 32)
#    self.cursor_rect.set(304, 96, 32, 32)
    # 合計価格と通貨単位を描画
    domination = $data_system.words.gold
    cx = contents.text_size(domination).width
    total_price = @price * @number
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 160, 328-cx-2, 32, total_price.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(332-cx, 160, cx, 32, domination, 2)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    if self.active
      # カーソル右 (+1)
      if Input.repeat?(Input::RIGHT) and @number < @max
        $game_system.se_play($data_system.cursor_se)
        @number += 1
        refresh
      end
      # カーソル左 (-1)
      if Input.repeat?(Input::LEFT) and @number > 1
        $game_system.se_play($data_system.cursor_se)
        @number -= 1
        refresh
      end
      # カーソル上 (+10)
      if Input.repeat?(Input::UP) and @number < @max
        $game_system.se_play($data_system.cursor_se)
        @number = [@number + 10, @max].min
        refresh
      end
      # カーソル下 (-10)
      if Input.repeat?(Input::DOWN) and @number > 1
        $game_system.se_play($data_system.cursor_se)
        @number = [@number - 10, 1].max
        refresh
      end
      # R(最大数)
      if Input.repeat?(Input::R) and @number < @max
        $game_system.se_play($data_system.cursor_se)
        @number = @max
        refresh
      end
      # L(1)
      if Input.repeat?(Input::L) and @number > 1
        $game_system.se_play($data_system.cursor_se)
        @number = 1
        refresh
      end
    end
  end
end
 
#-------------------------------------------------------------------------------

#==============================================================================
# ■ Window_ShopStatus
#------------------------------------------------------------------------------
#  ショップ画面で、アイテムの所持数やアクターの装備を表示するウィンドウです。
#==============================================================================

class Window_ShopStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    if @item == nil
      return
    end
    case @item
    when RPG::Item
      number = $game_party.item_number(@item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(@item.id)
    when RPG::Armor
      number = $game_party.armor_number(@item.id)
    end
    self.contents.font.color = system_color
    self.contents.draw_text(4, 0, 200, 32, "Owned")
    self.contents.font.color = normal_color
    width = 36 + (ITEM_MAXIMUM_PLACE - 2) * 16
    self.contents.draw_text(204 - width + 36, 0, width, 32, number.to_s, 2)
    if @item.is_a?(RPG::Item)
      return
    end
    # 装備品追加情報
    for i in 0...$game_party.actors.size
      # アクターを取得
      actor = $game_party.actors[i]
      # 装備可能なら通常文字色に、不可能なら無効文字色に設定
      if actor.equippable?(@item)
        self.contents.font.color = normal_color
      else
        self.contents.font.color = disabled_color
      end
      # アクターの名前を描画
      self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
      # 現在の装備品を取得
      if @item.is_a?(RPG::Weapon)
        item1 = $data_weapons[actor.weapon_id]
      elsif @item.kind == 0
        item1 = $data_armors[actor.armor1_id]
      elsif @item.kind == 1
        item1 = $data_armors[actor.armor2_id]
      elsif @item.kind == 2
        item1 = $data_armors[actor.armor3_id]
      else
        item1 = $data_armors[actor.armor4_id]
      end
      # 装備可能な場合
      if actor.equippable?(@item)
        # 武器の場合
        if @item.is_a?(RPG::Weapon)
          atk1 = item1 != nil ? item1.atk : 0
          atk2 = @item != nil ? @item.atk : 0
          change = atk2 - atk1
        end
        # 防具の場合
        if @item.is_a?(RPG::Armor)
          pdef1 = item1 != nil ? item1.pdef : 0
          mdef1 = item1 != nil ? item1.mdef : 0
          pdef2 = @item != nil ? @item.pdef : 0
          mdef2 = @item != nil ? @item.mdef : 0
          change = pdef2 - pdef1 + mdef2 - mdef1
        end
        # パラメータの変化値を描画
        self.contents.draw_text(124, 64 + 64 * i, 112, 32,
          sprintf("%+d", change), 2)
      end
      # アイテムを描画
      if item1 != nil
        x = 4
        y = 64 + 64 * i + 32
        bitmap = RPG::Cache.icon(item1.icon_name)
        opacity = self.contents.font.color == normal_color ? 255 : 128
        self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
        self.contents.draw_text(x + 28, y, 212, 32, item1.name)
      end
    end
  end
end

#-------------------------------------------------------------------------------
#소지개수가 99개를 넘어도 구입이 가능하게 하려면 원 스크립트에 아래 부분을 추가합니다.
#==============================================================================
# ■ Window_ShopBuy
#------------------------------------------------------------------------------
#  ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
#==============================================================================

class Window_ShopBuy < Window_Selectable
    #--------------------------------------------------------------------------
  # ● 項目の描画
  #    index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    # アイテムの所持数を取得
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    # 価格が所持金以下、かつ所持数が 99 でなければ通常文字色に、
    # そうでなければ無効文字色に設定
    if item.price <= $game_party.gold and number < ITEM_MAXIMUM #소지 아이템 갯수가 99개를 넘어도 구입가능
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 88, 32, item.price.to_s, 2)
  end
end
#추가 끝
#-------------------------------------------------------------------------------
#==============================================================================
# ■ Window_ShopSell
#------------------------------------------------------------------------------
#  ショップ画面で、売却のために所持アイテムの一覧を表示するウィンドウです。
#==============================================================================

class Window_ShopSell < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #    index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    # 売却可能なら通常文字色に、そうでないなら無効文字色に設定
    if item.price > 0
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    width = 24 + (ITEM_MAXIMUM_PLACE - 2) * 12
    x_i = x - width + 24
    self.contents.draw_text(x_i + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x_i + 256, y, width, 32, number.to_s, 2)
  end
end

#-------------------------------------------------------------------------------

#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
#  ショップ画面の処理を行うクラスです。
#==============================================================================

class Scene_Shop
  #--------------------------------------------------------------------------
  # ● フレーム更新 (購入ウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_buy
    # ステータスウィンドウのアイテムを設定
    @status_window.item = @buy_window.item
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # ウィンドウの状態を初期モードへ
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      # ヘルプテキストを消去
      @help_window.set_text("")
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # アイテムを取得
      @item = @buy_window.item
      # アイテムが無効の場合、または価格が所持金より上の場合
      if @item == nil or @item.price > $game_party.gold
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # アイテムの所持数を取得
      case @item
      when RPG::Item
        number = $game_party.item_number(@item.id)
      when RPG::Weapon
        number = $game_party.weapon_number(@item.id)
      when RPG::Armor
        number = $game_party.armor_number(@item.id)
      end
      # すでに 99 個所持している場合
      if number == ITEM_MAXIMUM
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # 最大購入可能個数を計算
      max = @item.price == 0 ? ITEM_MAXIMUM : $game_party.gold / @item.price
      max = [max, ITEM_MAXIMUM - number].min
      # ウィンドウの状態を個数入力モードへ
      @buy_window.active = false
      @buy_window.visible = false
      @number_window.set(@item, max, @item.price)
      @number_window.active = true
      @number_window.visible = true
    end
  end
end

Who's 백호

?

이상혁입니다.

http://elab.kr

Comment '2'
  • ?
    누군가 2010.05.21 09:58

    중복!중복!

  • ?
    무뇌인 2010.07.22 10:09

    중복이라두 전 못찾았음ㅇㅇ 그니까 이건 필요한그임


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
901 메뉴 제가 쓰는 메뉴 14 file 백호 2009.02.21 2319
900 메뉴 제가 쓰고있는 메뉴 13 file 백호 2009.02.21 3029
899 점프 대쉬 스크립트 11 WMN 2008.03.17 2345
898 이동 및 탈것 점프 높이를 자유자제로 조절하는 스크립트!! 8 file 백호 2009.02.21 1539
897 전투 전투후 경험치 분배와 레벨업시 HP/SP 전회복 15 백호 2009.02.21 2377
896 전투 전투중의 윈도우 전부 투명화 3 file 백호 2009.02.21 1879
895 장비 전투중에 장비변경 from RGSS Wiki 1 백호 2009.02.22 1988
894 전투 전투중에 장비들 교체하기 file 레이스89 2017.08.19 594
893 전투 전투의 커맨드에 따라 능력치를 상승 백호 2009.02.22 904
892 전투 전투의 승리마다 행동에 따라서 능력치가 상승한다! 1 백호 2009.02.22 1238
891 전투 전투위치 보정 스크립트 1 file 백호 2009.02.21 1234
890 전투 전투에서도 맵 BGM 연결하는 스크립트 2 file 백호 2009.02.21 1130
889 전투 전투시 아이콘 윈도우 2 file 백호 2009.02.21 1650
888 전투 전투시 미묘한 효과 스크립트 file 백호 2009.02.21 1468
887 전투 전투불능 케릭터 강제삭제 7 독도2005 2008.10.05 1918
886 전투 전투배경확장 한글 3 백호 2009.02.22 1472
885 전투 전투배경확장 스크립트 3 file 아미상 2013.09.15 2769
884 전투 전투배경 확장 3 file 백호 2009.02.21 1817
883 전투 전투링메뉴.(턴알) 7 백호 2009.02.21 2821
882 전투 전투 특수효과 DamageEX 스크립트 1 file 백호 2009.02.21 1590
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