특정아이템에 갯수를 제한하는 스크립트입니다.
레어템등에 쓰면 좋겠죠? ㅎ
물론 상점에서도 제한양만큼 밖에 못사고요 ㅎ
#시작~~~~~~~~~
module RX_T_LIM
# 初期設定
@rx_t_limit_weapon_num = []
@rx_t_limit_armor_num = [] #건들지마세요
@rx_t_limit_item_num = []
/-設定例:
ここではアイテムID:1・ポーションの最大所持数を24個に
アイテムID:3・フルポーションの最大所持数を48個に
それぞれ設定しています。
お好みにより色々設定して下さい。-/
# -------------★설정하세요★-------------
@rx_t_limit_item_num[1] = 24 # ↓ 아이템 입니다
@rx_t_limit_item_num[2] = 48 # @rx_t_limit_item_num[id] = 갯수
#만약 @rx_t_limit_weapon_num[id] = 갯수 면무기
#@rx_t_limit_armor_num[id] = 갯수 면방어구
#이런식으로 계속 만드실 수 있어요 ㅎ
# -------------★설정 끝 ㅅㄱ~★-------------
def RX_T_LIM.weapon(id, num)
if @rx_t_limit_weapon_num[id] != nil
if num > @rx_t_limit_weapon_num[id]
num = @rx_t_limit_weapon_num[id]
end
end
end
def RX_T_LIM.armor(id, num)
if @rx_t_limit_armor_num[id] != nil
if num > @rx_t_limit_armor_num[id]
num = @rx_t_limit_armor_num[id]
end
end
end
def RX_T_LIM.item(id, num)
if @rx_t_limit_item_num[id] != nil
if num > @rx_t_limit_item_num[id]
num = @rx_t_limit_item_num[id]
end
end
end
def RX_T_LIM.d_weapon(id)
if @rx_t_limit_weapon_num[id] != nil
num = @rx_t_limit_weapon_num[id]
end
end
def RX_T_LIM.d_armor(id)
if @rx_t_limit_armor_num[id] != nil
num = @rx_t_limit_armor_num[id]
end
end
def RX_T_LIM.d_item(id)
if @rx_t_limit_item_num[id] != nil
num = @rx_t_limit_item_num[id]
end
end
end
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
# パーティを扱うクラスです。ゴールドやアイテムなどの情報が含まれます。このク
# ラスのインスタンスは $game_party で参照されます。
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# ● アイテムの所持数取得
# item_id : アイテム ID
#--------------------------------------------------------------------------
alias rx_rg11_item_number item_number
def item_number(item_id)
# ★ ハッシュに個数データがあれば所持数制限があるかチェック
if @items.include?(item_id)
rx_num = RX_T_LIM.item(item_id, @items[item_id])
# 所持制限数を超えていたら制限数まで減らす
if rx_num != nil
@items[item_id] = rx_num
end
end
rx_rg11_item_number(item_id)
end
#--------------------------------------------------------------------------
# ● 武器の所持数取得
# weapon_id : 武器 ID
#--------------------------------------------------------------------------
alias rx_rg11_weapon_number weapon_number
def weapon_number(weapon_id)
# ★ ハッシュに個数データがあれば所持数制限があるかチェック
if @weapons.include?(weapon_id)
rx_num = RX_T_LIM.weapon(weapon_id, @weapons[weapon_id])
# 所持制限数を超えていたら制限数まで減らす
if rx_num != nil
@weapons[weapon_id] = rx_num
end
end
rx_rg11_weapon_number(weapon_id)
end
#--------------------------------------------------------------------------
# ● 防具の所持数取得
# armor_id : 防具 ID
#--------------------------------------------------------------------------
alias rx_rg11_armor_number armor_number
def armor_number(armor_id)
# ★ ハッシュに個数データがあれば所持数制限があるかチェック
if @weapons.include?(armor_id)
rx_num = RX_T_LIM.armor(armor_id, @armors[armor_id])
# 所持制限数を超えていたら制限数まで減らす
if rx_num != nil
@armors[armor_id] = rx_num
end
end
rx_rg11_armor_number(armor_id)
end
end
#==============================================================================
# ■ Window_ShopBuy
#------------------------------------------------------------------------------
# ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
#==============================================================================
class Window_ShopBuy < Window_Selectable
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
# アイテムの所持数を取得
case item
# -------------★改造ここから★-------------
when RPG::Item
# ★ 個数制限があるかチェック
rx_num = RX_T_LIM.d_item(item.id)
number = $game_party.item_number(item.id)
when RPG::Weapon
# ★ 個数制限があるかチェック
rx_num = RX_T_LIM.d_weapon(item.id)
number = $game_party.weapon_number(item.id)
when RPG::Armor
# ★ 個数制限があるかチェック
rx_num = RX_T_LIM.d_armor(item.id)
number = $game_party.armor_number(item.id)
end
# ★ 個数制限最終判定
if rx_num == nil
rx_num = 99
end
# ★ 価格が所持金以下、かつ所持数が 99(若しくは制限個数)でなければ通常文字色に、
# そうでなければ無効文字色に設定
if item.price <= $game_party.gold and number < rx_num
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
#==============================================================================
# ■ 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
# ★ 購入数制限があるかチェック
rx_num = RX_T_LIM.d_item(@item.id)
number = $game_party.item_number(@item.id)
when RPG::Weapon
# ★ 購入数制限があるかチェック
rx_num = RX_T_LIM.d_weapon(@item.id)
number = $game_party.weapon_number(@item.id)
when RPG::Armor
# ★ 購入数制限があるかチェック
rx_num = RX_T_LIM.d_armor(@item.id)
number = $game_party.armor_number(@item.id)
end
# ★ 特に購入数制限がなければ購入数を99に。
if rx_num == nil
rx_num = 99
end
# ★ すでに 99 個(もしくは制限個数分)所持している場合
if number == rx_num
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# -------------★改造ここまで★-------------
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 最大購入可能個数を計算
max = @item.price == 0 ? 99 : $game_party.gold / @item.price
max = [max, rx_num - 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
#------------------끝
사용법
우선 스크립트붙이신후 13행에 가보세요
그러면 설정하는곳이 있을겁니다.
그쪽에서 설정하시면 되고요
@rx_t_limit_item_num[1] = 24 이렇게 되있는것은 1번아이템에 갯수가 24개로 제한되는거에요
여기서 가운데 영어를 바꾸면 무기 방어구 설정도 가능합니다.
@rx_t_limit_weapon_num[id] = 숫자 ←특정 무기 갯수 제한
@rx_t_limit_armor_num[id] = 숫자 ← 특정방어구 갯수 제한
입니다.
나머지 아이템갯수는 99개로 제한될거에요 아마도;;;;;
이것도 바꿀수는 있는데 왠만하면 비추;; 아이템 소지수 돌파 쓰는분도 비추입니다;;
출처는 type74 입니다
레어템등에 쓰면 좋겠죠? ㅎ
물론 상점에서도 제한양만큼 밖에 못사고요 ㅎ
#시작~~~~~~~~~
module RX_T_LIM
# 初期設定
@rx_t_limit_weapon_num = []
@rx_t_limit_armor_num = [] #건들지마세요
@rx_t_limit_item_num = []
/-設定例:
ここではアイテムID:1・ポーションの最大所持数を24個に
アイテムID:3・フルポーションの最大所持数を48個に
それぞれ設定しています。
お好みにより色々設定して下さい。-/
# -------------★설정하세요★-------------
@rx_t_limit_item_num[1] = 24 # ↓ 아이템 입니다
@rx_t_limit_item_num[2] = 48 # @rx_t_limit_item_num[id] = 갯수
#만약 @rx_t_limit_weapon_num[id] = 갯수 면무기
#@rx_t_limit_armor_num[id] = 갯수 면방어구
#이런식으로 계속 만드실 수 있어요 ㅎ
# -------------★설정 끝 ㅅㄱ~★-------------
def RX_T_LIM.weapon(id, num)
if @rx_t_limit_weapon_num[id] != nil
if num > @rx_t_limit_weapon_num[id]
num = @rx_t_limit_weapon_num[id]
end
end
end
def RX_T_LIM.armor(id, num)
if @rx_t_limit_armor_num[id] != nil
if num > @rx_t_limit_armor_num[id]
num = @rx_t_limit_armor_num[id]
end
end
end
def RX_T_LIM.item(id, num)
if @rx_t_limit_item_num[id] != nil
if num > @rx_t_limit_item_num[id]
num = @rx_t_limit_item_num[id]
end
end
end
def RX_T_LIM.d_weapon(id)
if @rx_t_limit_weapon_num[id] != nil
num = @rx_t_limit_weapon_num[id]
end
end
def RX_T_LIM.d_armor(id)
if @rx_t_limit_armor_num[id] != nil
num = @rx_t_limit_armor_num[id]
end
end
def RX_T_LIM.d_item(id)
if @rx_t_limit_item_num[id] != nil
num = @rx_t_limit_item_num[id]
end
end
end
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
# パーティを扱うクラスです。ゴールドやアイテムなどの情報が含まれます。このク
# ラスのインスタンスは $game_party で参照されます。
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# ● アイテムの所持数取得
# item_id : アイテム ID
#--------------------------------------------------------------------------
alias rx_rg11_item_number item_number
def item_number(item_id)
# ★ ハッシュに個数データがあれば所持数制限があるかチェック
if @items.include?(item_id)
rx_num = RX_T_LIM.item(item_id, @items[item_id])
# 所持制限数を超えていたら制限数まで減らす
if rx_num != nil
@items[item_id] = rx_num
end
end
rx_rg11_item_number(item_id)
end
#--------------------------------------------------------------------------
# ● 武器の所持数取得
# weapon_id : 武器 ID
#--------------------------------------------------------------------------
alias rx_rg11_weapon_number weapon_number
def weapon_number(weapon_id)
# ★ ハッシュに個数データがあれば所持数制限があるかチェック
if @weapons.include?(weapon_id)
rx_num = RX_T_LIM.weapon(weapon_id, @weapons[weapon_id])
# 所持制限数を超えていたら制限数まで減らす
if rx_num != nil
@weapons[weapon_id] = rx_num
end
end
rx_rg11_weapon_number(weapon_id)
end
#--------------------------------------------------------------------------
# ● 防具の所持数取得
# armor_id : 防具 ID
#--------------------------------------------------------------------------
alias rx_rg11_armor_number armor_number
def armor_number(armor_id)
# ★ ハッシュに個数データがあれば所持数制限があるかチェック
if @weapons.include?(armor_id)
rx_num = RX_T_LIM.armor(armor_id, @armors[armor_id])
# 所持制限数を超えていたら制限数まで減らす
if rx_num != nil
@armors[armor_id] = rx_num
end
end
rx_rg11_armor_number(armor_id)
end
end
#==============================================================================
# ■ Window_ShopBuy
#------------------------------------------------------------------------------
# ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
#==============================================================================
class Window_ShopBuy < Window_Selectable
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
# アイテムの所持数を取得
case item
# -------------★改造ここから★-------------
when RPG::Item
# ★ 個数制限があるかチェック
rx_num = RX_T_LIM.d_item(item.id)
number = $game_party.item_number(item.id)
when RPG::Weapon
# ★ 個数制限があるかチェック
rx_num = RX_T_LIM.d_weapon(item.id)
number = $game_party.weapon_number(item.id)
when RPG::Armor
# ★ 個数制限があるかチェック
rx_num = RX_T_LIM.d_armor(item.id)
number = $game_party.armor_number(item.id)
end
# ★ 個数制限最終判定
if rx_num == nil
rx_num = 99
end
# ★ 価格が所持金以下、かつ所持数が 99(若しくは制限個数)でなければ通常文字色に、
# そうでなければ無効文字色に設定
if item.price <= $game_party.gold and number < rx_num
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
#==============================================================================
# ■ 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
# ★ 購入数制限があるかチェック
rx_num = RX_T_LIM.d_item(@item.id)
number = $game_party.item_number(@item.id)
when RPG::Weapon
# ★ 購入数制限があるかチェック
rx_num = RX_T_LIM.d_weapon(@item.id)
number = $game_party.weapon_number(@item.id)
when RPG::Armor
# ★ 購入数制限があるかチェック
rx_num = RX_T_LIM.d_armor(@item.id)
number = $game_party.armor_number(@item.id)
end
# ★ 特に購入数制限がなければ購入数を99に。
if rx_num == nil
rx_num = 99
end
# ★ すでに 99 個(もしくは制限個数分)所持している場合
if number == rx_num
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# -------------★改造ここまで★-------------
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 最大購入可能個数を計算
max = @item.price == 0 ? 99 : $game_party.gold / @item.price
max = [max, rx_num - 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
#------------------끝
사용법
우선 스크립트붙이신후 13행에 가보세요
그러면 설정하는곳이 있을겁니다.
그쪽에서 설정하시면 되고요
@rx_t_limit_item_num[1] = 24 이렇게 되있는것은 1번아이템에 갯수가 24개로 제한되는거에요
여기서 가운데 영어를 바꾸면 무기 방어구 설정도 가능합니다.
@rx_t_limit_weapon_num[id] = 숫자 ←특정 무기 갯수 제한
@rx_t_limit_armor_num[id] = 숫자 ← 특정방어구 갯수 제한
입니다.
나머지 아이템갯수는 99개로 제한될거에요 아마도;;;;;
이것도 바꿀수는 있는데 왠만하면 비추;; 아이템 소지수 돌파 쓰는분도 비추입니다;;
출처는 type74 입니다