Project1
标题:
關於物品分類蓋過另一腳本的物品功能
[打印本页]
作者:
銀藍色的零
时间:
2009-12-13 16:40
标题:
關於物品分類蓋過另一腳本的物品功能
本帖最后由 銀藍色的零 于 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
复制代码
作者:
銀藍色的零
时间:
2009-12-14 19:50
請高手幫忙~~~~
作者:
天堂爱龙
时间:
2009-12-15 13:05
提示:
作者被禁止或删除 内容自动屏蔽
作者:
銀藍色的零
时间:
2009-12-15 18:26
第564行會出錯~~~囧|||
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1