- 注册时间
- 2004-3-5
- 最后登录
- 2016-1-1
⑧专业
赋予你第五自由
- 积分
- 108021
|
发表于 2006-8-24 15:06:28
|
显示全部楼层
- #物品持有数突破
- #收集,修改 BY 玄天
- #原作者:日站(MOMOMOMO)。其版权由其原作者拥有,任何人不得非法使用。
- #最大物品持有数
- ITEM_MAXIMUM = 9999
- #所持数の桁
- 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, "持っている数")
- 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
- #-------------------------------------------------------------------------------
- #==============================================================================
- # ■ 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
复制代码
楼上万年潜水出现了.. |
|