赞 | 0 |
VIP | 2 |
好人卡 | 0 |
积分 | 1 |
经验 | 2700 |
最后登录 | 2013-8-16 |
在线时间 | 113 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 113 小时
- 注册时间
- 2008-3-25
- 帖子
- 204
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 銀藍色的零 于 2009-12-13 22:41 编辑
我使用了這一套腳本系統
工程
但是我還要使用物品分類的腳本
所以導致原來的物品系統亂掉了
請問要從哪調整呢?
物品分類腳本
原出處:http://ytomy.sakura.ne.jp/tkool/rpgtech/techlist_xp.html- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ アイテム分類 - KGC_ItemGrouping ◆
- #_/ ◇ Last update : 2007/08/26 ◇
- #_/----------------------------------------------------------------------------
- #_/ アイテムを種類別に分類する処理を追加します。
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #==============================================================================
- # ★ カスタマイズ項目 ★
- #==============================================================================
- module KGC
- # ◆分類属性配列
- # 分類に使用する属性名を並べる(0:全種 -1:武器 -2:防具)
- IG_ELEMENTS = ["恢復", "攻擊", "輔助", "材料", "劇情", 0]
- # ◆分類名称配列
- # 分類後の名称を並べる(分類属性配列と同じ位置・数)
- IG_NAME = ["恢復", "攻擊", "輔助", "材料", "劇情"]
-
- # ◆説明文(分類属性配列と同じ位置・数)
- IG_HELP = ["顯示所有的恢復物品。",
- "顯示所有的攻擊物品。",
- "顯示所有的輔助物品。",
- "顯示所有的材料物品。",
- "顯示所有的劇情物品。"]
- # ◆分類ウィンドウの表示形式
- # 0..横型 1..縦型
- IG_GROUP_WINDOW_STYLE = 0
- # ---- IG_GROUP_WINDOW_STYLE == 1 の場合のみ、次の ----
- # ---- if ~ end 間の項目が有効になります ----
- if IG_GROUP_WINDOW_STYLE == 1
- # ◆分類ウィンドウの座標
- IG_GROUP_WINDOW_POS = [336, 96]
- # ◆分類ウィンドウの幅
- IG_GROUP_WINDOW_WIDTH = 240
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- $imported = {} if $imported == nil
- $imported["ItemGrouping"] = true
- if $game_special_elements == nil
- $game_special_elements = {}
- $data_system = load_data("Data/System.rxdata")
- end
- # 非表示属性
- $game_special_elements["item_hide"] = $data_system.elements.index("非表示アイテム")
- module KGC
- # 分類配列
- ITEM_GROUP = []
- IG_ELEMENTS.each_with_index { |element, i|
- # 分類属性が 0 以下の場合
- if element.is_a?(Numeric) && element <= 0
- ITEM_GROUP[i] = element
- next
- end
- # ハッシュのキーを設定
- key = "_grouping_item_#{i}}"
- # 属性ID取得
- $game_special_elements[key] = $data_system.elements.index(element)
- ITEM_GROUP[i] = $game_special_elements[key]
- }
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Module_RPG
- #==============================================================================
- module RPG
- class Item
- #--------------------------------------------------------------------------
- # ● アイテム使用可否判定
- #--------------------------------------------------------------------------
- def usable?
- if $game_party.item_can_use?(self.id)
- return true
- end
- return false
- end
- end
- unless $imported["UsableEquipment"]
- class Weapon
- #--------------------------------------------------------------------------
- # ● 武器使用可否判定
- #--------------------------------------------------------------------------
- def usable?
- return false
- end
- end
- class Armor
- #--------------------------------------------------------------------------
- # ● 防具使用可否判定
- #--------------------------------------------------------------------------
- def usable?
- return false
- end
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Module_Graphics
- #==============================================================================
- module Graphics
- unless defined?(transition_interrupt_KGC)
- #--------------------------------------------------------------------------
- # ● トランジション実行
- #--------------------------------------------------------------------------
- class << Graphics
- alias transition_interrupt_KGC transition
- end
- def self.transition(duration = 8, filename = "", vague = 40)
- if @_interrupt_transition
- @_transition_duration = duration
- @_transition_filename = filename.dup
- @_transition_vague = vague
- return
- end
- transition_interrupt_KGC(duration, filename, vague)
- end
- #--------------------------------------------------------------------------
- # ● トランジション割り込み開始
- #--------------------------------------------------------------------------
- def self.start_interrupt_transition
- @_interrupt_transition = true
- end
- #--------------------------------------------------------------------------
- # ● トランジション割り込み終了
- #--------------------------------------------------------------------------
- def self.end_interrupt_transition
- if @_interrupt_transition
- @_interrupt_transition = nil
- transition(@_transition_duration, @_transition_filename,
- @_transition_vague)
- @_transition_duration = @_transition_filename = @_transition_vague = nil
- end
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_Item
- #==============================================================================
- class Window_Item < Window_Selectable
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias initialize_KGC_ItemGrouping initialize
- def initialize
- initialize_KGC_ItemGrouping
- # 戦闘中以外の場合
- unless $game_temp.in_battle
- # [ヘルプウィンドウ拡張]を導入していない場合
- unless $imported["HelpExtension"]
- self.y += 64
- self.height -= 64
- end
- self.index = -1
- # アクティブ化解除
- self.active = false
- end
- end
- #--------------------------------------------------------------------------
- # ● アイテム数を取得
- #--------------------------------------------------------------------------
- def item_number
- return @data.size
- end
- #--------------------------------------------------------------------------
- # ● 非表示判定
- # index : アイテムID
- # type : 種別(0:アイテム 1:武器 2:防具)
- #--------------------------------------------------------------------------
- def hide?(index, type = 0)
- case type
- when 0 # アイテム
- elements = $data_items[index].element_set
- when 1 # 武器
- elements = $data_weapons[index].element_set
- when 2 # 防具
- elements = $data_armors[index].guard_element_set
- end
- return elements.include?($game_special_elements["item_hide"])
- end
- #--------------------------------------------------------------------------
- # ● 分類後のアイテムリストを取得
- # itemkind : アイテムの種別
- #--------------------------------------------------------------------------
- def itemlist(itemkind)
- @data = []
- # 戦闘中以外なら分類に従って追加
- unless $game_temp.in_battle
- # 「全種」の場合
- if KGC::ITEM_GROUP[itemkind] == 0
- for i in 1...$data_items.size
- if $game_party.item_number(i) > 0 && !self.hide?(i, 0)
- @data.push($data_items[i])
- end
- end
- for i in 1...$data_weapons.size
- if $game_party.weapon_number(i) > 0 && !self.hide?(i, 1)
- @data.push($data_weapons[i])
- end
- end
- for i in 1...$data_armors.size
- if $game_party.armor_number(i) > 0 && !self.hide?(i, 2)
- @data.push($data_armors[i])
- end
- end
- # 「武器」の場合
- elsif KGC::ITEM_GROUP[itemkind] == -1
- for i in 1...$data_weapons.size
- if $game_party.weapon_number(i) > 0 && !self.hide?(i, 1)
- @data.push($data_weapons[i])
- end
- end
- # 「防具」の場合
- elsif KGC::ITEM_GROUP[itemkind] == -2
- for i in 1...$data_armors.size
- if $game_party.armor_number(i) > 0 && !self.hide?(i, 2)
- @data.push($data_armors[i])
- end
- end
- else
- for i in 1...$data_items.size
- # アイテムを所持、かつ対応属性を持っている場合は追加
- if $game_party.item_number(i) > 0 && !self.hide?(i, 0) &&
- $data_items[i].element_set.include?(KGC::ITEM_GROUP[itemkind])
- @data.push($data_items[i])
- end
- end
- end
- # 戦闘中なら、アイテムと効果付き装備のみ追加
- else
- for i in 1...$data_items.size
- # アイテムを所持している場合は追加
- if $game_party.item_number(i) > 0 && !self.hide?(i, 0)
- @data.push($data_items[i])
- end
- end
- for i in 1...$data_weapons.size
- weapon = $data_weapons[i]
- # 武器を所持、かつ使用効果属性を持っている場合
- if $game_party.weapon_number(i) > 0 && !self.hide?(i, 1) && weapon.usable?
- @data.push(weapon)
- end
- end
- for i in 1...$data_armors.size
- armor = $data_armors[i]
- # 防具を所持、かつ使用効果属性を持っている場合
- if $game_party.armor_number(i) > 0 && !self.hide?(i, 2) && armor.usable?
- @data.push(armor)
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- # itemkind : アイテムの分類
- #--------------------------------------------------------------------------
- def refresh(itemkind = 0)
- if self.contents != nil
- self.contents.dispose
- self.contents = nil
- end
- # 分類後のリストを取得
- self.itemlist(itemkind)
- # 項目数が 0 でなければビットマップを作成し、全項目を描画
- @item_max = @data.size
- if @item_max > 0
- self.contents = Bitmap.new(width - 32, self.row_max * 32)
- for i in 0...@item_max
- draw_item(i)
- end
- else
- self.contents = Bitmap.new(32, 32)
- end
- end
- #--------------------------------------------------------------------------
- # ● 項目の描画
- # 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) && item.usable?) ||
- ($game_temp.in_battle && item.usable?)
- 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)
- self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
- self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
- end
- #--------------------------------------------------------------------------
- # ● ヘルプテキスト更新
- #--------------------------------------------------------------------------
- def update_help
- @help_window.set_text(self.item == nil ? "" : self.item.description)
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_ItemGroup
- #------------------------------------------------------------------------------
- # アイテム画面で、分類を選択するウィンドウです。
- #==============================================================================
- class Window_ItemGroup < Window_Selectable
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- wpos = Rect.new(0, 64, 640, 64)
- if KGC::IG_GROUP_WINDOW_STYLE == 1
- wpos.x = KGC::IG_GROUP_WINDOW_POS[0]
- wpos.y = KGC::IG_GROUP_WINDOW_POS[1]
- wpos.width = KGC::IG_GROUP_WINDOW_WIDTH
- wpos.height = KGC::IG_NAME.size * 32 + 32
- end
- super(wpos.x, wpos.y, wpos.width, wpos.height)
- self.contents = Bitmap.new(width - 32, height - 32)
- # コマンド一覧を作成
- @commands = KGC::IG_NAME
- @item_max = @commands.size
- if KGC::IG_GROUP_WINDOW_STYLE == 1
- @column_max = 1
- @item_width = width - 32
- else
- @column_max = @commands.size
- @item_width = (width - 32) / @commands.size
- end
- self.index = 0
- self.opacity = 0
- refresh
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- rect = Rect.new(0, 0, @item_width, 32)
- for i in [email protected]
- rect.x = @item_width * (i % @column_max)
- rect.y = 32 * (i / @column_max)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- self.contents.font.color = system_color
- self.contents.draw_text(rect, @commands[i], 1)
- end
- end
- #--------------------------------------------------------------------------
- # ● カーソルの矩形更新
- #--------------------------------------------------------------------------
- def update_cursor_rect
- if index != -1
- self.cursor_rect.set(@item_width * (index % @column_max),
- 32 * (index / @column_max),
- @item_width,
- 32)
- end
- end
- #--------------------------------------------------------------------------
- # ● ヘルプテキスト更新
- #--------------------------------------------------------------------------
- def update_help
- @help_window.set_text(KGC::IG_HELP[self.index])
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Item
- #==============================================================================
- class Scene_Item
- #--------------------------------------------------------------------------
- # ● メイン処理
- #--------------------------------------------------------------------------
- alias main_KGC_ItemGrouping main
- def main
- # 分類ウィンドウを作成
- @group_window = Window_ItemGroup.new
- if $imported["MenuAlter"] && KGC::MA_MENU_TRANSPARENT
- @group_window.back_opacity = 160
- end
- Graphics.start_interrupt_transition
- main_KGC_ItemGrouping
- # ウィンドウを解放
- @group_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- # ウィンドウを初期化していない場合
- unless @window_initialize
- # Z オーダーを調整
- @group_window.z = @help_window.z + 100
- @target_window.z = @group_window.z + 100
- # ヘルプウィンドウを関連付け
- @group_window.help_window = @help_window
- # 初期化フラグをオン
- @window_initialize = true
- # トランジション割り込み終了
- Graphics.end_interrupt_transition
- end
- # ウィンドウを更新
- @help_window.update
- @item_window.update
- @target_window.update
- @group_window.update
- # アイテムウィンドウがアクティブの場合: update_item を呼ぶ
- if @item_window.active
- update_item
- return
- end
- # ターゲットウィンドウがアクティブの場合: update_target を呼ぶ
- if @target_window.active
- update_target
- return
- end
- # 分類ウィンドウがアクティブの場合: update_group を呼ぶ
- if @group_window.active
- update_group
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (アイテムウィンドウがアクティブの場合)
- #--------------------------------------------------------------------------
- alias update_item_KGC_ItemGrouping update_item
- def update_item
- # B ボタンが押された場合
- if Input.trigger?(Input::B)
- # キャンセル SE を演奏
- $game_system.se_play($data_system.cancel_se)
- # 分類ウィンドウをアクティブ化
- @group_window.active = true
- @group_window.visible = true
- @item_window.active = false
- @item_window.index = -1
- return
- end
- update_item_KGC_ItemGrouping
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
- #--------------------------------------------------------------------------
- def update_target
- # B ボタンが押された場合
- if Input.trigger?(Input::B)
- # キャンセル SE を演奏
- $game_system.se_play($data_system.cancel_se)
- # アイテム切れなどで使用できなくなった場合
- unless $game_party.item_can_use?(@item.id)
- # アイテムウィンドウの内容を再作成
- @item_window.refresh(@group_window.index)
- end
- # ターゲットウィンドウを消去
- @item_window.active = true
- @target_window.visible = false
- @target_window.active = false
- return
- end
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # アイテムを使い切った場合
- if $game_party.item_number(@item.id) == 0
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # ターゲットが全体の場合
- if @target_window.index == -1
- # パーティ全体にアイテムの使用効果を適用
- used = false
- for i in $game_party.actors
- used |= i.item_effect(@item)
- end
- end
- # ターゲットが単体の場合
- if @target_window.index >= 0
- # ターゲットのアクターにアイテムの使用効果を適用
- target = $game_party.actors[@target_window.index]
- used = target.item_effect(@item)
- end
- # アイテムを使った場合
- if used
- # アイテムの使用時 SE を演奏
- $game_system.se_play(@item.menu_se)
- # 消耗品の場合
- if @item.consumable
- # 使用したアイテムを 1 減らす
- $game_party.lose_item(@item.id, 1)
- # アイテムウィンドウの項目を再描画
- @item_window.draw_item(@item_window.index)
- end
- # ターゲットウィンドウの内容を再作成
- @target_window.refresh
- # 全滅の場合
- if $game_party.all_dead?
- # ゲームオーバー画面に切り替え
- $scene = Scene_Gameover.new
- return
- end
- # コモンイベント ID が有効の場合
- if @item.common_event_id > 0
- # コモンイベント呼び出し予約
- $game_temp.common_event_id = @item.common_event_id
- # マップ画面に切り替え
- $scene = Scene_Map.new
- return
- end
- end
- # アイテムを使わなかった場合
- unless used
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- end
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (分類ウィンドウがアクティブの場合)
- #--------------------------------------------------------------------------
- def update_group
- if @now_itemkind != @group_window.index
- # カーソル位置によって表示するアイテムの分類を分ける
- @item_window.refresh(@group_window.index)
- @item_window.oy = 0
- @now_itemkind = @group_window.index
- end
- # B ボタンが押された場合
- if Input.trigger?(Input::B)
- # キャンセル SE を演奏
- $game_system.se_play($data_system.cancel_se)
- # メニュー画面に切り替え
- if $imported["MenuAlter"]
- index = KGC::MA_COMMANDS.index(0)
- if index != nil
- $scene = Scene_Menu.new(index)
- else
- $scene = Scene_Menu.new
- end
- else
- $scene = Scene_Menu.new(0)
- end
- return
- end
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # アイテムが無い場合
- if @item_window.item_number == 0
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 決定 SE を演奏
- $game_system.se_play($data_system.decision_se)
- # アイテムウィンドウをアクティブ化
- @item_window.active = true
- @item_window.index = 0
- @group_window.active = false
- @group_window.visible = false if $imported["HelpExtension"]
- return
- end
- end
- end
复制代码 |
|