赞 | 14 |
VIP | 0 |
好人卡 | 4 |
积分 | 24 |
经验 | 30333 |
最后登录 | 2024-3-12 |
在线时间 | 912 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 2386
- 在线时间
- 912 小时
- 注册时间
- 2014-10-14
- 帖子
- 1331

|
4楼

楼主 |
发表于 2016-10-13 15:25:49
|
只看该作者
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ 装備拡張 - KGC_EquipExtension ◆
- #_/ ◇ Last update : 2008/01/10 ◇
- #_/----------------------------------------------------------------------------
- #_/ 装備関連の機能を拡張します。
- #_/============================================================================
- #_/ ≪装備品設定詳細化[EquipDetailSetting]≫より上
- #_/ ≪クラス設定詳細化[ClassDetailSetting]≫より上
- #_/ ≪装備画面改造[EquipAlter]≫より下
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- if $game_special_elements == nil
- $game_special_elements = {}
- $data_system = load_data("Data/System.rxdata")
- end
- #==============================================================================
- # ★ カスタマイズ項目 ★
- #==============================================================================
- module KGC
- # ◆拡張装備タイプ定義
- # 配列の最初がタイプ 5 に相当。以降 6,7,8,... と続く。
- EEX_EQUIP_TYPE_EXT = ["鞋子", "首饰", "徽章", "称号", "法宝"]
- # ◆装備品のタイプ(1:盾 2:頭 3:身体 4:装飾品 5以降:↑で定義)
- # ※どのように指定しても、必ず最初は武器になります。
- EEX_EQUIP_TYPE = [1, 2, 3, 4, 5, 6, 6, 6, 7, 8, 9]
- # ◆二刀流時の武器数
- # 二刀流時は↑の先頭から (EEX_TS_NUMBER - 1) 個を武器に置き換える
- EEX_TS_NUMBER = 2
- # ◆装備欄の名前
- # 増加した装備タイプの名称もここで指定。
- EEX_EQUIP_NAME = [
- $data_system.words.weapon, # 武器
- $data_system.words.armor1, # タイプ 1(盾)
- $data_system.words.armor2, # タイプ 2(頭)
- $data_system.words.armor3, # タイプ 3(身体)
- $data_system.words.armor4, # タイプ 4(装飾品)
- EEX_EQUIP_TYPE_EXT[0], # タイプ 5
- EEX_EQUIP_TYPE_EXT[1] # タイプ 6
- # EEX_EQUIP_TYPE_EXT[2] # タイプ 7
- # EEX_EQUIP_TYPE_EXT[3] # タイプ 8
- # EEX_EQUIP_TYPE_EXT[4] # タイプ 9
- ] # ←この ] は消さないこと
- # ◆最強装備から除外する装備タイプ
- # 除外する装備タイプを格納。
- # ≪装備画面改造≫と併用した場合はこちらを優先。
- EEX_IGNORE_STRONGEST_TYPE = []
- # ◆拡張装備画面に表示する装備欄開始番号
- # 武器を 0 、最初の防具を 1 とした番号(インデックス)。
- EEX_EQUIP_EX_INDEX = 0
- # ◆拡張装備画面背景透過
- EEX_EQUIP_EX_BACK_TRANSPARENT = true
- # ◆拡張装備画面「装備変更」名称
- EEX_EQUIP_EX_COMMAND_EQUIP = "装備変更"
- # ◆拡張装備画面「最強装備」名称
- EEX_EQUIP_EX_COMMAND_STRONGEST_EQUIP = "最強装備"
- # ◆拡張装備画面「全解除」名称
- EEX_EQUIP_EX_COMMAND_ALL_RELEASE = "全解除"
- # ◆拡張装備画面「装備変更」ヘルプ
- EEX_EQUIP_EX_HELP_EQUIP = "装備を変更します。"
- # ◆拡張装備画面「最強装備」ヘルプ
- EEX_EQUIP_EX_HELP_STRONGEST_EQUIP = "最も強力な武具を装備します。"
- # ◆拡張装備画面「全解除」ヘルプ
- EEX_EQUIP_EX_HELP_ALL_RELEASE = "全ての装備品を外します。"
- # ◆EP(Equip Point)制を使用する
- EEX_USE_EP = true
- # ◆消費EP既定値
- # 消費EPが指定されていない装備品で使用
- EEX_EP_COST_DEFAULT = 1
- # ◆EP上限値
- EEX_EP_MAX = 15
- # ◆EP下限値
- EEX_EP_MIN = 1
- # ◆最大EP算出式
- # 【lv…レベル】
- # 自動的に整数変換されるので、結果が小数になってもOK。
- EEX_EP_FORMULA = "lv * 0.6"
- # ◆「EP」の名称
- EEX_EP_NAME = "EP"
- # ◆装備画面のEP最大値描画
- # 名前が隠れたりする場合は false にしてください。
- EEX_DRAW_EP_MAX = true
- # ◆消費EP値の色(アイテム名の末尾に付く数値)
- EEX_EP_COLOR = Color.new(128, 255, 255)
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- $imported = {} if $imported == nil
- $imported["EquipExtension"] = true
- # 両手持ち属性
- $game_special_elements["two_handed"] = $data_system.elements.index("両手持ち")
- if KGC::EEX_EQUIP_TYPE_EXT.size > 0
- for element in KGC::EEX_EQUIP_TYPE_EXT.compact
- $game_special_elements["EEX_#{element}"] = $data_system.elements.index(element)
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #--------------------------------------------------------------------------
- # ● 拡張装備画面呼び出し
- # actor_index : アクターINDEX
- #--------------------------------------------------------------------------
- def call_equip_extend(actor_index = 0)
- # プレイヤーの姿勢を矯正
- $game_player.straighten
- # 拡張装備画面に切り替え
- $scene = Scene_EquipExtend.new(actor_index)
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ RPG::Weapon
- #==============================================================================
- class RPG::Weapon
- #--------------------------------------------------------------------------
- # ● 名前取得
- #--------------------------------------------------------------------------
- def name
- return @name.gsub(/\[.*\]/) {""}
- end
- #--------------------------------------------------------------------------
- # ○ オリジナル名取得
- #--------------------------------------------------------------------------
- def original_name
- return @name
- end
- #--------------------------------------------------------------------------
- # ○ 消費EP取得
- #--------------------------------------------------------------------------
- def ep_cost
- return @name =~ /\[EP[ ]*(\d+)\]/i ? $1.to_i : KGC::EEX_EP_COST_DEFAULT
- end
- #--------------------------------------------------------------------------
- # ○ 装備タイプ取得
- #--------------------------------------------------------------------------
- def equip_type
- if @name =~ /\[ET[ ]*([0-9,]+)\]/i
- type = $1.split(/[,]/).compact
- for i in 0...type.size
- type[i] = type[i].to_i
- end
- type.insert(0, 0) if type[0] != 0
- return type
- else
- return nil
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ RPG::Armor
- #==============================================================================
- class RPG::Armor
- #--------------------------------------------------------------------------
- # ● 名前取得
- #--------------------------------------------------------------------------
- def name
- return @name.gsub(/\[.*\]/) {""}
- end
- #--------------------------------------------------------------------------
- # ○ オリジナル名取得
- #--------------------------------------------------------------------------
- def original_name
- return @name
- end
- #--------------------------------------------------------------------------
- # ○ 消費EP取得
- #--------------------------------------------------------------------------
- def ep_cost
- return @name =~ /\[EP[ ]*(\d+)\]/i ? $1.to_i : KGC::EEX_EP_COST_DEFAULT
- end
- #--------------------------------------------------------------------------
- # ○ 種類取得
- #--------------------------------------------------------------------------
- def kind
- if @guard_element_set.size > 0
- @guard_element_set.compact.each { |element|
- (0...KGC::EEX_EQUIP_TYPE_EXT.size).each { |i|
- if element == $game_special_elements["EEX_#{KGC::EEX_EQUIP_TYPE_EXT[i]}"]
- return i + 4
- end
- }
- }
- end
- return @kind
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Game_Actor
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :weapon_fix # 武器固定
- attr_accessor :armor_id # 防具 ID
- attr_accessor :armor_fix # 防具固定
- #--------------------------------------------------------------------------
- # ● セットアップ
- # actor_id : アクター ID
- #--------------------------------------------------------------------------
- alias setup_KGC_EquipExtension setup
- def setup(actor_id)
- actor = $data_actors[actor_id]
- @weapons = [actor.weapon_id]
- (1...KGC::EEX_TS_NUMBER).each { |i|
- @weapons << 0
- }
- @armor1_id = @armor2_id = @armor3_id = @armor4_id = 0
- @weapon_fix = [actor.weapon_fix]
- (1...KGC::EEX_TS_NUMBER).each { |i|
- @weapon_fix << false
- }
- # 防具固定状態を設定
- @armor_fix = [false, false, false, false, false]
- (1..4).each { |i|
- if (index = KGC::EEX_EQUIP_TYPE.index(i)) != nil
- @armor_fix[index] = eval("actor.armor#{i}_fix")
- end
- }
- if self.equip_type.size > 5
- (5...self.equip_type.size).each { |i|
- @armor_fix[i] = false
- }
- end
- # 防具を設定
- @armor_id = [0, 0, 0, 0, 0]
- if (index = KGC::EEX_EQUIP_TYPE.index(1)) != nil &&
- ( @weapons[0] == 0 ||
- !$data_weapons[@weapons[0]].element_set.include?(
- $game_special_elements["two_handed"]) )
- @armor_id[index] = actor.armor1_id
- else
- @armor_id[1] = 0
- end
- (2..4).each { |i|
- if (index = KGC::EEX_EQUIP_TYPE.index(i)) != nil
- @armor_id[index] = eval("actor.armor#{i}_id")
- end
- }
- if self.equip_type.size > 5
- (5...self.equip_type.size).each { |i|
- @armor_id[i] = 0
- }
- end
- setup_KGC_EquipExtension(actor_id)
- @equip_type = nil
- @equip_type_weapon = nil
- @two_swords = false
- @two_handed = false
- @ts_number = nil
- @attack_count = 0
- if KGC::EEX_EQUIP_TYPE.size > 5
- (5...KGC::EEX_EQUIP_TYPE.size).each { |i|
- # 防具ID, 固定フラグを初期化
- @armor_id[i] = 0
- @armor_fix[i] = false
- # オートステートを更新
- update_auto_state(nil, $data_armors[self.armor_id[i]])
- }
- end
- end
- #--------------------------------------------------------------------------
- # ○ パラメータの取得
- #--------------------------------------------------------------------------
- unless $imported["LimitBreak"]
- def parameter(type)
- return $data_actors[@actor_id].parameters[type, @level]
- end
- end
- #--------------------------------------------------------------------------
- # ○ 装備タイプ取得
- #--------------------------------------------------------------------------
- def equip_type
- type = (@equip_type_weapon != nil && @equip_type_weapon != []) ?
- @equip_type_weapon : (@equip_type != nil && @equip_type != []) ?
- @equip_type : KGC::EEX_EQUIP_TYPE
- if type[0] != 0
- type.insert(0, 0)
- end
- return type
- end
- #--------------------------------------------------------------------------
- # ○ 装備タイプ設定
- #--------------------------------------------------------------------------
- def equip_type=(type)
- @equip_type = type
- end
- #--------------------------------------------------------------------------
- # ○ 装備品タイプ変更適用
- #--------------------------------------------------------------------------
- def equip_type_apply
- last_equip_type = self.equip_type.dup
- if self.weapon_id > 0
- @equip_type_weapon = $data_weapons[self.weapon_id].equip_type
- else
- @equip_type_weapon = nil
- end
- # 装備不可能になったものは外す
- for i in (self.two_swords? ? self.ts_number : 1)...last_equip_type.size
- next if @armor_id[i] == nil
- if (armor = $data_armors[@armor_id[i]]) != nil &&
- self.equip_type[i] != armor.kind + 1
- self.equip(i, 0)
- end
- end
- @armor_id = @armor_id[0...self.equip_type.size]
- end
- #--------------------------------------------------------------------------
- # ○ 最大EP取得
- #--------------------------------------------------------------------------
- def max_ep
- formula = KGC::EEX_EP_FORMULA.gsub(/lv/i) {"@level"}
- return [[Integer(eval(formula)), KGC::EEX_EP_MIN].max, KGC::EEX_EP_MAX].min
- end
- #--------------------------------------------------------------------------
- # ○ EP取得
- #--------------------------------------------------------------------------
- def ep
- n = 0
- equip_item_list.each { |item| n += item.ep_cost }
- return self.max_ep - n
- end
- #--------------------------------------------------------------------------
- # ○ 二刀流状態取得
- #--------------------------------------------------------------------------
- def two_swords?
- return @two_swords
- end
- #--------------------------------------------------------------------------
- # ○ 二刀流設定
- #--------------------------------------------------------------------------
- def two_swords=(value)
- # 二刀流になった場合
- if value && !@two_swords
- # 両手持ちを解除
- self.two_handed = false
- # 二刀流で装備不可能になる防具を外す
- for i in 1...self.ts_number
- self.equip(i, 0)
- end
- # 二刀流が解除された場合
- elsif !value && @two_swords
- # 元々防具であった部分の武器を外す
- for i in 1...self.ts_number
- self.equip(i, 0)
- @weapons[i] = 0
- @weapon_fix[i] = false
- end
- end
- @two_swords = value
- end
- #--------------------------------------------------------------------------
- # ○ 二刀流武器数取得
- #--------------------------------------------------------------------------
- def ts_number
- return @ts_number != nil ? @ts_number : KGC::EEX_TS_NUMBER
- end
- #--------------------------------------------------------------------------
- # ○ 二刀流武器数設定
- #--------------------------------------------------------------------------
- def ts_number=(number)
- @ts_number = number
- end
- #--------------------------------------------------------------------------
- # ○ 両手持ち状態取得
- #--------------------------------------------------------------------------
- def two_handed?
- return @two_handed
- end
- #--------------------------------------------------------------------------
- # ○ 両手持ち設定
- #--------------------------------------------------------------------------
- def two_handed=(value)
- # 両手持ちになった場合
- if value && !@two_handed
- # 二刀流を解除
- self.two_swords = false
- # 最初の防具を外す
- self.equip(1, 0)
- # 最初の防具を固定
- @armor_fix[1] = true
- # 両手持ちが解除された場合
- elsif !value && @two_handed
- # 最初の防具固定を解除
- @armor_fix[1] = false
- end
- @two_handed = value
- end
- #--------------------------------------------------------------------------
- # ○ 攻撃回数取得
- #--------------------------------------------------------------------------
- def attack_count
- @attack_count = 0 if @attack_count == nil
- return @attack_count
- end
- #--------------------------------------------------------------------------
- # ○ 攻撃回数設定
- #--------------------------------------------------------------------------
- def attack_count=(value)
- @attack_count = value
- end
- #--------------------------------------------------------------------------
- # ● 武器ID の取得
- #--------------------------------------------------------------------------
- def weapon_id(type = 0)
- @weapons[type] = 0 if @weapons[type] == nil
- return @weapons[type]
- end
- #--------------------------------------------------------------------------
- # ● 武器ID の設定
- #--------------------------------------------------------------------------
- def weapon_id=(n)
- @weapons[0] = n
- end
- #--------------------------------------------------------------------------
- # ○ 武器ID の設定(二刀流用)
- #--------------------------------------------------------------------------
- def set_weapon(type, n)
- @weapons[type] = n
- end
- #--------------------------------------------------------------------------
- # ○ 武器リスト取得
- #--------------------------------------------------------------------------
- def equip_weapon_list
- weapons = []
- if two_swords?
- (0...ts_number).each { |i|
- weapons << $data_weapons[weapon_id(i)]
- }
- else
- weapons << $data_weapons[weapon_id]
- end
- return weapons.compact
- end
- #--------------------------------------------------------------------------
- # ○ 防具リスト取得
- #--------------------------------------------------------------------------
- def equip_armor_list
- armors = []
- (1...equip_type.size).each { |i|
- armors << $data_armors[armor_id[i]]
- }
- return armors.compact
- end
- #--------------------------------------------------------------------------
- # ○ 装備品リストの取得
- #--------------------------------------------------------------------------
- def equip_item_list
- return equip_weapon_list + equip_armor_list
- end
- #--------------------------------------------------------------------------
- # ○ 防具ID の取得
- #--------------------------------------------------------------------------
- def armor_id
- type = equip_type.dup
- for i in 1...type.size
- if @armor_id[i] == nil
- @armor_id[i] = 0
- end
- end
- return @armor_id
- end
- #--------------------------------------------------------------------------
- # ● 防具ID 1 の取得(互換用)
- #--------------------------------------------------------------------------
- def armor1_id
- return armor_id[1]
- end
- #--------------------------------------------------------------------------
- # ● 防具ID 1 の設定(互換用)
- #--------------------------------------------------------------------------
- def armor1_id=(id)
- @armor_id[1] = id
- end
- #--------------------------------------------------------------------------
- # ● 防具ID 2 の取得(互換用)
- #--------------------------------------------------------------------------
- def armor2_id
- return armor_id[2]
- end
- #--------------------------------------------------------------------------
- # ● 防具ID 2 の設定(互換用)
- #--------------------------------------------------------------------------
- def armor2_id=(id)
- @armor_id[2] = id
- end
- #--------------------------------------------------------------------------
- # ● 防具ID 3 の取得(互換用)
- #--------------------------------------------------------------------------
- def armor3_id
- return armor_id[3]
- end
- #--------------------------------------------------------------------------
- # ● 防具ID 3 の設定(互換用)
- #--------------------------------------------------------------------------
- def armor3_id=(id)
- @armor_id[3] = id
- end
- #--------------------------------------------------------------------------
- # ● 防具ID 4 の取得(互換用)
- #--------------------------------------------------------------------------
- def armor4_id
- return armor_id[4]
- end
- #--------------------------------------------------------------------------
- # ● 防具ID 4 の設定(互換用)
- #--------------------------------------------------------------------------
- def armor4_id=(id)
- @armor_id[4] = id
- end
- #--------------------------------------------------------------------------
- # ● 基本攻撃力の取得
- #--------------------------------------------------------------------------
- def base_atk
- n = 0
- if $game_temp.in_battle
- if self.two_swords? # 二刀流
- if @current_action.kind == 1 # スキルなら全武器の合計
- equip_weapon_list.each { |weapon| n += weapon.atk }
- else # スキル以外なら攻撃回数で変化
- weapon = $data_weapons[self.weapon_id(@attack_count)]
- n = weapon != nil ? weapon.atk : 0
- end
- else # 通常
- weapon = $data_weapons[self.weapon_id]
- n = weapon != nil ? weapon.atk : 0
- n *= 1.5 if self.two_handed?
- end
- else
- if self.two_swords? # 二刀流
- equip_weapon_list.each { |weapon| n += weapon.atk }
- else # 通常
- weapon = $data_weapons[self.weapon_id]
- n = weapon != nil ? weapon.atk : 0
- n *= 1.5 if self.two_handed?
- end
- end
- return Integer(n)
- end
- #--------------------------------------------------------------------------
- # ● 属性補正値の取得
- # element_id : 属性 ID
- #--------------------------------------------------------------------------
- def element_rate(element_id)
- # 属性有効度に対応する数値を取得
- table = [0,200,150,100,50,0,-100]
- result = table[$data_classes[@class_id].element_ranks[element_id]]
- # 防具でこの属性が防御されている場合は半減
- equip_armor_list.each { |armor|
- result /= 2 if armor.guard_element_set.include?(element_id)
- }
- # ステートでこの属性が防御されている場合は半減
- @states.each { |i|
- result /= 2 if $data_states[i].guard_element_set.include?(element_id)
- }
- return result
- end
- #--------------------------------------------------------------------------
- # ● ステート防御判定
- # state_id : ステート ID
- #--------------------------------------------------------------------------
- def state_guard?(state_id)
- equip_armor_list.each { |armor|
- return true if armor.guard_state_set.include?(state_id)
- }
- return false
- end
- #--------------------------------------------------------------------------
- # ● 通常攻撃の属性取得
- #--------------------------------------------------------------------------
- unless $imported["SetAttackElement"]
- def element_set
- elements = []
- equip_weapon_list.each { |w| elements |= w.element_set }
- return elements
- end
- end
- #--------------------------------------------------------------------------
- # ● 通常攻撃のステート変化 (+) 取得
- #--------------------------------------------------------------------------
- def plus_state_set
- state_set = []
- equip_weapon_list.each { |w| state_set |= w.plus_state_set }
- return state_set
- end
- #--------------------------------------------------------------------------
- # ● 通常攻撃のステート変化 (-) 取得
- #--------------------------------------------------------------------------
- def minus_state_set
- state_set = []
- equip_weapon_list.each { |w| state_set |= w.minus_state_set }
- return state_set
- end
- #--------------------------------------------------------------------------
- # ○ 装備品の能力値修正の取得
- #--------------------------------------------------------------------------
- def equipment_parameter(type)
- param = ["maxhp", "maxsp", "str", "dex", "agi", "int"]
- n = 0
- equip_item_list.each { |e| n += eval("e.#{param[type]}_plus") }
- return n
- end
- unless $imported["LimitBreak"]
- #--------------------------------------------------------------------------
- # ● 基本腕力の取得
- #--------------------------------------------------------------------------
- def base_str
- n = parameter(2)
- n += equipment_parameter(2)
- return [[n, 1].max, 999].min
- end
- #--------------------------------------------------------------------------
- # ● 基本器用さの取得
- #--------------------------------------------------------------------------
- def base_dex
- n = parameter(3)
- n += equipment_parameter(3)
- return [[n, 1].max, 999].min
- end
- #--------------------------------------------------------------------------
- # ● 基本素早さの取得
- #--------------------------------------------------------------------------
- def base_agi
- n = parameter(4)
- n += equipment_parameter(4)
- return [[n, 1].max, 999].min
- end
- #--------------------------------------------------------------------------
- # ● 基本魔力の取得
- #--------------------------------------------------------------------------
- def base_int
- n = parameter(5)
- n += equipment_parameter(5)
- return [[n, 1].max, 999].min
- end
- end
- #--------------------------------------------------------------------------
- # ● 基本物理防御の取得
- #--------------------------------------------------------------------------
- def base_pdef
- n = 0
- equip_item_list.each { |item| n += item.pdef }
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本魔法防御の取得
- #--------------------------------------------------------------------------
- def base_mdef
- n = 0
- equip_item_list.each { |item| n += item.mdef }
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本回避修正の取得
- #--------------------------------------------------------------------------
- def base_eva
- n = 0
- equip_armor_list.each { |armor| n += armor.eva }
- return n
- end
- #--------------------------------------------------------------------------
- # ● 装備の変更
- # equip_type : 装備タイプ
- # id : 武器 or 防具 ID (0 なら装備解除)
- #--------------------------------------------------------------------------
- def equip(equip_type, id)
- case equip_type
- when (self.two_swords? ? 0...self.ts_number : 0) # 武器
- if id == 0 || $game_party.weapon_number(id) > 0
- # EP判定
- if KGC::EEX_USE_EP && id > 0
- # EP不足の場合は戻る
- if $data_weapons[id].ep_cost > self.ep
- return
- end
- end
- # 二刀流以外で両手持ち武器を装備する場合
- if !self.two_swords? && id > 0 &&
- $data_weapons[id].element_set.include?($game_special_elements["two_handed"])
- # 最初の防具を外す
- self.equip(1, 0)
- end
- $game_party.gain_weapon(self.weapon_id(equip_type), 1)
- self.set_weapon(equip_type, id)
- $game_party.lose_weapon(id, 1)
- end
- #when (self.two_swords? ? self.ts_number : 1)...self.equip_type.size
- else # 防具
- # 二刀流以外で、両手持ち武器を装備しており、最初の防具を変更する場合は戻る
- if !self.two_swords? && equip_type == 1 && self.weapon_id > 0 &&
- $data_weapons[self.weapon_id].element_set.include?($game_special_elements["two_handed"])
- return
- end
- if id == 0 || $game_party.armor_number(id) > 0
- # EP判定
- if KGC::EEX_USE_EP && id > 0
- # EP不足の場合は戻る
- if $data_armors[id].ep_cost > self.ep
- return
- end
- end
- update_auto_state(@armor_id[equip_type] != nil ?
- $data_armors[@armor_id[equip_type]] : nil, $data_armors[id])
- if @armor_id[equip_type] != nil && @armor_id[equip_type] > 0
- $game_party.gain_armor(@armor_id[equip_type], 1)
- end
- @armor_id[equip_type] = id
- $game_party.lose_armor(id, 1)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 装備固定判定
- # equip_type : 装備タイプ
- #--------------------------------------------------------------------------
- def equip_fix?(equip_type)
- case equip_type
- when (self.two_swords? ? 0...self.ts_number : 0) # 武器
- return @weapon_fix[equip_type]
- #when (self.two_swords? ? self.ts_number : 1)...self.equip_type.size
- else # 防具
- return @armor_fix[equip_type]
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● 通常攻撃 攻撃側アニメーション ID の取得
- #--------------------------------------------------------------------------
- def animation1_id
- if self.two_swords?
- weapon = $data_weapons[self.weapon_id(self.attack_count)]
- return weapon != nil ? weapon.animation1_id : 0
- else
- weapon = $data_weapons[self.weapon_id]
- return weapon != nil ? weapon.animation1_id : 0
- end
- end
- #--------------------------------------------------------------------------
- # ● 通常攻撃 対象側アニメーション ID の取得
- #--------------------------------------------------------------------------
- def animation2_id
- if self.two_swords?
- weapon = $data_weapons[self.weapon_id(self.attack_count)]
- return weapon != nil ? weapon.animation2_id : 0
- else
- weapon = $data_weapons[self.weapon_id]
- return weapon != nil ? weapon.animation2_id : 0
- end
- end
- #--------------------------------------------------------------------------
- # ● クラス ID の変更
- # class_id : 新しいクラス ID
- #--------------------------------------------------------------------------
- def class_id=(class_id)
- if $data_classes[class_id] != nil
- @class_id = class_id
- # 装備できなくなったアイテムを外す
- if self.two_swords?
- for i in 0...self.ts_number
- equip(i, 0) unless equippable?($data_weapons[self.weapon_id(i)])
- end
- else
- equip(0, 0) unless equippable?($data_weapons[self.weapon_id])
- end
- for i in (self.two_swords? ? self.ts_number : 1)...self.equip_type.size
- equip(i, 0) unless equippable?($data_armors[self.armor_id[i]])
- end
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_EquipLeft
- #==============================================================================
- unless $imported["EquipAlter"]
- class Window_EquipLeft < Window_Base
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- alias refresh_KGC_EquipExtension refresh
- def refresh
- # 元の処理を実行
- refresh_KGC_EquipExtension
- if KGC::EEX_USE_EP
- if KGC::EEX_DRAW_EP_MAX
- self.contents.font.color = system_color
- self.contents.draw_text(140, 0, 32, 32, KGC::EEX_EP_NAME)
- self.contents.font.color = @actor.ep == 0 ? knockout_color : normal_color
- self.contents.draw_text(172, 0, 24, 32, @actor.ep.to_s, 2)
- self.contents.font.color = normal_color
- self.contents.draw_text(196, 0, 16, 32, "/", 1)
- self.contents.draw_text(212, 0, 24, 32, @actor.max_ep.to_s, 2)
- else
- self.contents.font.color = system_color
- self.contents.draw_text(180, 0, 32, 32, KGC::EEX_EP_NAME)
- self.contents.font.color = @actor.ep == 0 ? knockout_color : normal_color
- self.contents.draw_text(212, 0, 24, 32, @actor.ep.to_s, 2)
- end
- end
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_EquipRight
- #==============================================================================
- class Window_EquipRight < Window_Selectable
- #--------------------------------------------------------------------------
- # ● タイプの取得
- #--------------------------------------------------------------------------
- def type
- if self.index >= @equip_type.size
- self.index = @equip_type.size - 1
- end
- return @equip_type[self.index]
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- # 装備タイプを取得
- @actor.equip_type_apply
- @equip_type = @actor.equip_type.dup
- if @actor.two_swords?
- for i in [email protected]_number
- @equip_type[i] = 0
- end
- end
- if self.index >= @equip_type.size
- self.index = @equip_type.size - 1
- end
- # ウィンドウ内容を作成
- self.contents.dispose
- self.contents = Bitmap.new(width - 32, @equip_type.size * 32)
- [url=home.php?mod=space&uid=2653549]@data[/url] = []
- if @actor.two_swords?
- for i in [email protected]_number
- @data.push($data_weapons[@actor.weapon_id(i)])
- end
- for i in @actor.ts_number...@equip_type.size
- @data.push($data_armors[@actor.armor_id[i]])
- end
- else
- @data.push($data_weapons[@actor.weapon_id])
- for i in 1...@equip_type.size
- @data.push($data_armors[@actor.armor_id[i]])
- end
- end
- @item_max = @data.size
- self.contents.font.color = system_color
- for i in 0...@equip_type.size
- if @actor.two_swords? && i < @actor.ts_number
- self.contents.draw_text(4, 32 * i, 92, 32, KGC::EEX_EQUIP_NAME[0])
- else
- next if KGC::EEX_EQUIP_NAME[@actor.equip_type[i]] == nil
- self.contents.draw_text(4, 32 * i, 92, 32, KGC::EEX_EQUIP_NAME[@actor.equip_type[i]])
- end
- end
- for i in [email protected]
- self.contents.font.color = normal_color
- draw_item_name(@data[i], 92, 32 * i)
- if KGC::EEX_USE_EP && @data[i] != nil
- self.contents.font.color = KGC::EEX_EP_COLOR
- self.contents.draw_text(92, 32 * i, 240, 32, @data[i].ep_cost.to_s, 2)
- end
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_EquipItem
- #==============================================================================
- class Window_EquipItem < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 項目の描画
- # index : 項目番号
- #--------------------------------------------------------------------------
- alias draw_item_KGC_EquipExtension draw_item
- def draw_item(index)
- # 元の処理を実行
- draw_item_KGC_EquipExtension(index)
- item = @data[index]
- if KGC::EEX_USE_EP && item != nil
- x = 4 + index % 2 * (288 + 32)
- y = index / 2 * 32
- self.contents.font.color = KGC::EEX_EP_COLOR
- self.contents.draw_text(x + 216, y, 24, 32, item.ep_cost.to_s, 2)
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_Status
- #==============================================================================
- class Window_Status < Window_Base
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- if $imported["StatusAlter"]
- draw_actor_graphic(@actor, 4, 48)
- else
- draw_actor_graphic(@actor, 40, 112)
- end
- draw_actor_name(@actor, 4, 0)
- draw_actor_class(@actor, 4 + 144, 0)
- draw_actor_level(@actor, 96, 32)
- draw_actor_state(@actor, 96, 64)
- draw_actor_hp(@actor, 96, 112, 172)
- draw_actor_sp(@actor, 96, 144, 172)
- draw_actor_parameter(@actor, 96, 192, 0)
- draw_actor_parameter(@actor, 96, 224, 1)
- draw_actor_parameter(@actor, 96, 256, 2)
- draw_actor_parameter(@actor, 96, 304, 3)
- draw_actor_parameter(@actor, 96, 336, 4)
- draw_actor_parameter(@actor, 96, 368, 5)
- draw_actor_parameter(@actor, 96, 400, 6)
- draw_actor_parameter(@actor, 96, 440, 7)
- draw_actor_parameter(@actor, 96, 480, 8)
- draw_actor_parameter(@actor, 96, 500, 9)
- self.contents.font.color = system_color
- self.contents.draw_text(320, 48, 80, 32, "EXP")
- self.contents.draw_text(320, 80, 80, 32, "NEXT")
- self.contents.font.color = normal_color
- self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2)
- self.contents.draw_text(320 + 80, 80, 84, 32, @actor.next_rest_exp_s, 2)
- if KGC::EEX_USE_EP
- self.contents.font.color = system_color
- self.contents.draw_text(468, 0, 48, 32, KGC::EEX_EP_NAME)
- self.contents.font.color = @actor.ep == 0 ? knockout_color : normal_color
- self.contents.draw_text(516, 0, 32, 32, @actor.ep.to_s, 2)
- self.contents.font.color = normal_color
- self.contents.draw_text(548, 0, 24, 32, "/", 1)
- self.contents.draw_text(572, 0, 32, 32, @actor.max_ep.to_s, 2)
- end
- self.contents.font.color = system_color
- self.contents.draw_text(320, 160, 96, 32, "装備")
- if @actor.two_swords?
- for i in [email protected]_number
- draw_item_name($data_weapons[@actor.weapon_id(i)], 320 + 16, 192 + 32 * i)
- end
- for i in @[email protected]_type.size
- draw_item_name($data_armors[ @actor.armor_id[i] ], 320 + 16, 192 + 32 * i)
- end
- else
- draw_item_name($data_weapons[@actor.weapon_id], 320 + 16, 192)
- for i in [email protected]_type.size
- draw_item_name($data_armors[ @actor.armor_id[i] ], 320 + 16, 192 + 32 * i)
- end
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_ShopStatus
- #==============================================================================
- class Window_ShopStatus < Window_Base
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- unless $imported["LargeParty"]
- 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.size = 22
- self.contents.font.color = system_color
- self.contents.draw_text(4, 0, 200, 32, "持っている数")
- self.contents.font.color = normal_color
- self.contents.draw_text(204, 0, 32, 32, number.to_s, 2)
- return if @item.is_a?(RPG::Item)
- self.contents.font.size = 18 if $imported["HelpExtension"]
- # 装備品追加情報
- 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
- # アクターの名前を描画
- if $imported["HelpExtension"]
- self.contents.draw_text(4, 32 + 44 * i, 120, 32, actor.name)
- else
- self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
- end
- # 現在の装備品を取得
- if @item.is_a?(RPG::Weapon)
- item1 = $data_weapons[actor.weapon_id]
- else
- for j in 1...actor.equip_type.size
- if actor.equip_type[j] == @item.kind + 1
- item1 = $data_armors[actor.armor_id[j]]
- break
- end
- end
- 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
- # パラメータの変化値を描画
- if $imported["HelpExtension"]
- self.contents.draw_text(124, 32 + 44 * i, 112, 32,
- sprintf("%+d", change), 2)
- else
- self.contents.draw_text(124, 64 + 64 * i, 112, 32,
- sprintf("%+d", change), 2)
- end
- end
- # アイテムを描画
- if item1 != nil
- x = 4
- if $imported["HelpExtension"]
- y = 32 + 44 * i + 22
- else
- y = 64 + 64 * i + 32
- end
- icon = RPG::Cache.icon(item1.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, icon, icon.rect, opacity)
- self.contents.draw_text(x + 28, y, 212, 32, item1.name)
- end
- end
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_EquipExtendControl
- #------------------------------------------------------------------------------
- # 装備画面で、操作を選択するウィンドウです。
- #==============================================================================
- class Window_EquipExtendControl < Window_Selectable
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(0, 0, 640, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- @commands = [KGC::EEX_EQUIP_EX_COMMAND_EQUIP, KGC::EEX_EQUIP_EX_COMMAND_STRONGEST_EQUIP, KGC::EEX_EQUIP_EX_COMMAND_ALL_RELEASE]
- @item_max = @commands.size
- @column_max = @commands.size
- @item_width = (width - 32) / @commands.size
- self.z = 1000
- self.index = 0
- refresh
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- for i in [email protected]
- rect = Rect.new(@item_width * i, 0, @item_width, 32)
- 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, 0, @item_width, 32)
- end
- end
- #--------------------------------------------------------------------------
- # ● ヘルプテキスト更新
- #--------------------------------------------------------------------------
- def update_help
- case self.index
- when 0
- @help_window.set_text(KGC::EEX_EQUIP_EX_HELP_EQUIP)
- when 1
- @help_window.set_text(KGC::EEX_EQUIP_EX_HELP_STRONGEST_EQUIP)
- when 2
- @help_window.set_text(KGC::EEX_EQUIP_EX_HELP_ALL_RELEASE)
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_EquipExtendStatus
- #------------------------------------------------------------------------------
- # 拡張装備画面で、アクターのパラメータ変化を表示するウィンドウです。
- #==============================================================================
- class Window_EquipExtendStatus < Window_EquipLeft
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :new_equip # 選択中の装備品
- attr_accessor :last_str # 変更前の腕力
- attr_accessor :last_dex # 変更前の器用さ
- attr_accessor :last_agi # 変更前の素早さ
- attr_accessor :last_int # 変更前の魔力
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(actor)
- super(actor)
- self.back_opacity = 160 if KGC::EEX_EQUIP_EX_BACK_TRANSPARENT
- self.x = 368
- self.y = 288
- self.z = 1000
- # 初期能力値を保存
- @new_equip = nil
- @last_equip = nil
- @last_str = @actor.str
- @last_dex = @actor.dex
- @last_agi = @actor.agi
- @last_int = @actor.int
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- draw_actor_name(@actor, 4, 0)
- draw_actor_level(@actor, 4, 32)
- if KGC::EEX_USE_EP
- if KGC::EEX_DRAW_EP_MAX
- self.contents.font.color = system_color
- self.contents.draw_text(140, 0, 32, 32, KGC::EEX_EP_NAME)
- self.contents.font.color = @actor.ep == 0 ? knockout_color : normal_color
- self.contents.draw_text(172, 0, 24, 32, @actor.ep.to_s, 2)
- self.contents.font.color = normal_color
- self.contents.draw_text(196, 0, 16, 32, "/", 1)
- self.contents.draw_text(212, 0, 24, 32, @actor.max_ep.to_s, 2)
- else
- self.contents.font.color = system_color
- self.contents.draw_text(180, 0, 32, 32, KGC::EEX_EP_NAME)
- self.contents.font.color = @actor.ep == 0 ? knockout_color : normal_color
- self.contents.draw_text(212, 0, 24, 32, @actor.ep.to_s, 2)
- end
- end
- self.contents.font.color = system_color
- self.contents.draw_text(4, 64, 72, 32, $data_system.words.atk)
- self.contents.draw_text(4, 96, 72, 32, $data_system.words.pdef)
- self.contents.draw_text(4, 128, 72, 32, $data_system.words.mdef)
- self.contents.draw_text(120, 32, 72, 32, $data_system.words.str)
- self.contents.draw_text(120, 64, 72, 32, $data_system.words.dex)
- self.contents.draw_text(120, 96, 72, 32, $data_system.words.agi)
- self.contents.draw_text(120, 128, 72, 32, $data_system.words.int)
- if @new_atk != nil
- self.contents.font.color = @actor.atk > @new_atk ? text_color(2) :
- @actor.atk < @new_atk ? text_color(3) : normal_color
- self.contents.draw_text(80, 64, 36, 32, @new_atk.to_s, 2)
- else
- self.contents.font.color = normal_color
- self.contents.draw_text(80, 64, 36, 32, @actor.atk.to_s, 2)
- end
- if @new_pdef != nil
- self.contents.font.color = @actor.pdef > @new_pdef ? text_color(2) :
- @actor.pdef < @new_pdef ? text_color(3) : normal_color
- self.contents.draw_text(80, 96, 36, 32, @new_pdef.to_s, 2)
- else
- self.contents.font.color = normal_color
- self.contents.draw_text(80, 96, 36, 32, @actor.pdef.to_s, 2)
- end
- if @new_mdef != nil
- self.contents.font.color = @actor.mdef > @new_mdef ? text_color(2) :
- @actor.mdef < @new_mdef ? text_color(3) : normal_color
- self.contents.draw_text(80, 128, 36, 32, @new_mdef.to_s, 2)
- else
- self.contents.font.color = normal_color
- self.contents.draw_text(80, 128, 36, 32, @actor.mdef.to_s, 2)
- end
- if @new_str != nil
- self.contents.font.color = @last_str > @new_str ? text_color(2) :
- @last_str < @new_str ? text_color(3) : normal_color
- self.contents.draw_text(200, 32, 36, 32, @new_str.to_s, 2)
- else
- self.contents.font.color = normal_color
- self.contents.draw_text(200, 32, 36, 32, @actor.str.to_s, 2)
- end
- if @new_dex != nil
- self.contents.font.color = @last_dex > @new_dex ? text_color(2) :
- @last_dex < @new_dex ? text_color(3) : normal_color
- self.contents.draw_text(200, 64, 36, 32, @new_dex.to_s, 2)
- else
- self.contents.font.color = normal_color
- self.contents.draw_text(200, 64, 36, 32, @actor.dex.to_s, 2)
- end
- if @new_agi != nil
- self.contents.font.color = @last_agi > @new_agi ? text_color(2) :
- @last_agi < @new_agi ? text_color(3) : normal_color
- self.contents.draw_text(200, 96, 36, 32, @new_agi.to_s, 2)
- else
- self.contents.font.color = normal_color
- self.contents.draw_text(200, 96, 36, 32, @actor.agi.to_s, 2)
- end
- if @new_int != nil
- self.contents.font.color = @last_int > @new_int ? text_color(2) :
- @last_int < @new_int ? text_color(3) : normal_color
- self.contents.draw_text(200, 128, 36, 32, @new_int.to_s, 2)
- else
- self.contents.font.color = normal_color
- self.contents.draw_text(200, 128, 36, 32, @actor.int.to_s, 2)
- end
- end
- #--------------------------------------------------------------------------
- # ● 装備変更後のパラメータ設定
- #--------------------------------------------------------------------------
- def set_new_parameters(new_atk, new_pdef, new_mdef, new_st = [nil, nil, nil, nil])
- if @new_atk != new_atk || @new_pdef != new_pdef || @new_mdef != new_mdef ||
- @new_str != new_st[0] || @new_dex != new_st[1] ||
- @new_agi != new_st[2] || @new_int != new_st[3]
- @new_atk = new_atk
- @new_pdef = new_pdef
- @new_mdef = new_mdef
- @new_str = new_st[0]
- @new_dex = new_st[1]
- @new_agi = new_st[2]
- @new_int = new_st[3]
- @last_equip = @new_equip
- refresh
- return
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_EquipExtendList
- #------------------------------------------------------------------------------
- # 拡張装備画面で、アクターが現在装備しているアイテムを表示するウィンドウです。
- #==============================================================================
- class Window_EquipExtendList < Window_Selectable
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # actor : アクター
- #--------------------------------------------------------------------------
- def initialize(actor)
- super(0, 64, 368, 416)
- if $imported["HelpExtension"]
- self.y = 128
- self.height = 352
- end
- self.contents = Bitmap.new(width - 32, height - 32)
- self.back_opacity = 160 if KGC::EEX_EQUIP_EX_BACK_TRANSPARENT
- self.active = false
- @actor = actor
- refresh
- self.index = 0
- end
- #--------------------------------------------------------------------------
- # ● アイテムの取得
- #--------------------------------------------------------------------------
- def item
- return @data[self.index]
- end
- #--------------------------------------------------------------------------
- # ● タイプの取得
- #--------------------------------------------------------------------------
- def type
- return @equip_type[self.index]
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- # 装備タイプを取得
- @actor.equip_type_apply
- @equip_type = @actor.equip_type.dup
- if @actor.two_swords?
- for i in [email protected]_number
- @equip_type[i] = 0
- end
- end
- if self.index >= @equip_type.size
- self.index = @equip_type.size - 1
- end
- # アイテムを追加
- @data = []
- if @actor.two_swords?
- for i in [email protected]_number
- @data.push($data_weapons[@actor.weapon_id(i)])
- end
- for i in @actor.ts_number...@equip_type.size
- @data.push($data_armors[@actor.armor_id[i]])
- end
- else
- @data.push($data_weapons[@actor.weapon_id])
- for i in 1...@equip_type.size
- @data.push($data_armors[@actor.armor_id[i]])
- end
- end
- @equip_type = @equip_type[KGC::EEX_EQUIP_EX_INDEX...@equip_type.size]
- @data = @data[KGC::[email protected]]
- @item_max = @data.size
- # ウィンドウ内容を作成
- self.contents.dispose
- self.contents = Bitmap.new(width - 32, @equip_type.size * 32)
- self.contents.font.color = system_color
- for i in 0...@equip_type.size
- if @equip_type[i] == 0 && @actor.two_swords? && i < @actor.ts_number
- self.contents.draw_text(4, 32 * i, 92, 32, KGC::EEX_EQUIP_NAME[0])
- else
- next if KGC::EEX_EQUIP_NAME[@equip_type[i]] == nil
- self.contents.draw_text(4, 32 * i, 92, 32, KGC::EEX_EQUIP_NAME[@equip_type[i]])
- end
- end
- for i in [email protected]
- self.contents.font.color = normal_color
- draw_item_name(@data[i], 92, 32 * i)
- if KGC::EEX_USE_EP && @data[i] != nil
- self.contents.font.color = KGC::EEX_EP_COLOR
- self.contents.draw_text(92, 32 * i, 240, 32, @data[i].ep_cost.to_s, 2)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● ヘルプテキスト更新
- #--------------------------------------------------------------------------
- def update_help
- @help_window.set_text(self.item == nil ? "" : self.item.description)
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_EquipExtendItem
- #------------------------------------------------------------------------------
- # 拡張装備画面で、装備変更の候補となるアイテムの一覧を表示するウィンドウです。
- #==============================================================================
- class Window_EquipExtendItem < Window_Selectable
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # actor : アクター
- # equip_type : 装備部位 (0~3)
- #--------------------------------------------------------------------------
- def initialize(actor, equip_type)
- super(368, 64, 320, 416)
- if $imported["HelpExtension"]
- self.y = 128
- self.height = 352
- end
- @actor = actor
- @equip_type = equip_type
- @column_max = 1
- refresh
- self.active = false
- self.index = -1
- self.back_opacity = 160 if KGC::EEX_EQUIP_EX_BACK_TRANSPARENT
- end
- #--------------------------------------------------------------------------
- # ● アイテムの取得
- #--------------------------------------------------------------------------
- def item
- return @data[self.index]
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- if self.contents != nil
- self.contents.dispose
- self.contents = nil
- end
- @data = []
- # 装備可能な武器を追加
- if @equip_type == 0
- for i in 1...$data_weapons.size
- weapon = $data_weapons[i]
- if $game_party.weapon_number(i) > 0 && @actor.equippable?(weapon)
- @data.push(weapon)
- end
- end
- end
- # 装備可能な防具を追加
- if @equip_type != 0
- for i in 1...$data_armors.size
- armor = $data_armors[i]
- if $game_party.armor_number(i) > 0 && @actor.equippable?(armor)
- if $data_armors[i].kind == @equip_type-1
- @data.push(armor)
- end
- end
- end
- end
- # 空白を追加
- @data.push(nil)
- # ビットマップを作成し、全項目を描画
- @item_max = @data.size
- self.contents = Bitmap.new(width - 32, row_max * 32)
- for i in 0...@item_max-1
- draw_item(i)
- end
- end
- #--------------------------------------------------------------------------
- # ● 項目の描画
- # index : 項目番号
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- y = index * 32
- case item
- when RPG::Weapon
- number = $game_party.weapon_number(item.id)
- when RPG::Armor
- number = $game_party.armor_number(item.id)
- end
- icon = RPG::Cache.icon(item.icon_name)
- self.contents.blt(0, y + 4, icon, icon.rect)
- self.contents.font.color = normal_color
- self.contents.draw_text(32, y, 212, 32, item.name, 0)
- self.contents.draw_text(244, y, 16, 32, ":", 1)
- self.contents.draw_text(260, y, 24, 32, number.to_s, 2)
- if KGC::EEX_USE_EP && item != nil
- self.contents.font.color = KGC::EEX_EP_COLOR
- self.contents.draw_text(220, y, 24, 32, item.ep_cost.to_s, 2)
- end
- end
- #--------------------------------------------------------------------------
- # ● ヘルプテキスト更新
- #--------------------------------------------------------------------------
- def update_help
- @help_window.set_text(self.item == nil ? "" : self.item.description)
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Interpreter (分割定義 3)
- #==============================================================================
- class Interpreter
- #--------------------------------------------------------------------------
- # ● 条件分岐
- #--------------------------------------------------------------------------
- def command_111
- # ローカル変数 result を初期化
- result = false
- # 条件判定
- case @parameters[0]
- when 0 # スイッチ
- result = ($game_switches[@parameters[1]] == (@parameters[2] == 0))
- when 1 # 変数
- value1 = $game_variables[@parameters[1]]
- if @parameters[2] == 0
- value2 = @parameters[3]
- else
- value2 = $game_variables[@parameters[3]]
- end
- case @parameters[4]
- when 0 # と同値
- result = (value1 == value2)
- when 1 # 以上
- result = (value1 >= value2)
- when 2 # 以下
- result = (value1 <= value2)
- when 3 # 超
- result = (value1 > value2)
- when 4 # 未満
- result = (value1 < value2)
- when 5 # 以外
- result = (value1 != value2)
- end
- when 2 # セルフスイッチ
- if @event_id > 0
- key = [$game_map.map_id, @event_id, @parameters[1]]
- if @parameters[2] == 0
- result = ($game_self_switches[key] == true)
- else
- result = ($game_self_switches[key] != true)
- end
- end
- when 3 # タイマー
- if $game_system.timer_working
- sec = $game_system.timer / Graphics.frame_rate
- if @parameters[2] == 0
- result = (sec >= @parameters[1])
- else
- result = (sec <= @parameters[1])
- end
- end
- when 4 # アクター
- actor = $game_actors[@parameters[1]]
- if actor != nil
- case @parameters[2]
- when 0 # パーティにいる
- result = ($game_party.actors.include?(actor))
- when 1 # 名前
- result = (actor.name == @parameters[3])
- when 2 # スキル
- result = (actor.skill_learn?(@parameters[3]))
- when 3 # 武器
- if actor.two_swords?
- result = false
- for i in 0...actor.ts_number
- if actor.weapon_id(i) == @parameters[3]
- result = true
- break
- end
- end
- else
- result = (actor.weapon_id == @parameters[3])
- end
- when 4 # 防具
- result = false
- for i in 1...actor.equip_type.size
- if actor.armor_id[i] == @parameters[3]
- result = true
- break
- end
- end
- when 5 # ステート
- result = (actor.state?(@parameters[3]))
- end
- end
- when 5 # エネミー
- enemy = $game_troop.enemies[@parameters[1]]
- if enemy != nil
- case @parameters[2]
- when 0 # 出現している
- result = (enemy.exist?)
- when 1 # ステート
- result = (enemy.state?(@parameters[3]))
- end
- end
- when 6 # キャラクター
- character = get_character(@parameters[1])
- if character != nil
- result = (character.direction == @parameters[2])
- end
- when 7 # ゴールド
- if @parameters[2] == 0
- result = ($game_party.gold >= @parameters[1])
- else
- result = ($game_party.gold <= @parameters[1])
- end
- when 8 # アイテム
- result = ($game_party.item_number(@parameters[1]) > 0)
- when 9 # 武器
- result = ($game_party.weapon_number(@parameters[1]) > 0)
- when 10 # 防具
- result = ($game_party.armor_number(@parameters[1]) > 0)
- when 11 # ボタン
- result = (Input.press?(@parameters[1]))
- when 12 # スクリプト
- result = eval(@parameters[1])
- end
- # 判定結果をハッシュに格納
- @branch[@list[@index].indent] = result
- # 判定結果が真だった場合
- if @branch[@list[@index].indent] == true
- # 分岐データを削除
- @branch.delete(@list[@index].indent)
- # 継続
- return true
- end
- # 条件に該当しない場合 : コマンドスキップ
- return command_skip
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Equip
- #==============================================================================
- class Scene_Equip
- #--------------------------------------------------------------------------
- # ● メイン処理
- #--------------------------------------------------------------------------
- alias main_KGC_EquipExtension main
- def main
- # アクターを取得
- @actor = $game_party.actors[@actor_index]
- # アイテムウィンドウを作成
- if KGC::EEX_EQUIP_TYPE_EXT.size > 0
- for i in 0...KGC::EEX_EQUIP_TYPE_EXT.size
- eval("@item_window#{i + 6} = Window_EquipItem.new(@actor, i + 5)")
- if $imported["MenuAlter"] && KGC::MA_MENU_TRANSPARENT
- eval("@item_window#{i + 6}.back_opacity = 160")
- end
- end
- end
- main_KGC_EquipExtension
- # アイテムウィンドウを解放
- if KGC::EEX_EQUIP_TYPE_EXT.size > 0
- for i in 0...KGC::EEX_EQUIP_TYPE_EXT.size
- eval("@item_window#{i + 6}.dispose if @item_window#{i + 6} != nil")
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- # ヘルプウィンドウを設定
- if KGC::EEX_EQUIP_TYPE_EXT.size > 0
- for i in 0...KGC::EEX_EQUIP_TYPE_EXT.size
- eval("@item_window#{i + 6}.help_window = @help_window")
- end
- end
- # アイテムウィンドウの可視状態設定
- @item_window1.visible = (@right_window.type == 0)
- @item_window2.visible = (@right_window.type == 1)
- @item_window3.visible = (@right_window.type == 2)
- @item_window4.visible = (@right_window.type == 3)
- @item_window5.visible = (@right_window.type == 4)
- if KGC::EEX_EQUIP_TYPE_EXT.size > 0
- for i in 0...KGC::EEX_EQUIP_TYPE_EXT.size
- eval("@item_window#{i + 6}.visible = (@right_window.type == i + 5)")
- end
- end
- # 現在装備中のアイテムを取得
- item1 = @right_window.item
- # 現在のアイテムウィンドウを @item_window に設定
- eval("@item_window = @item_window#{@right_window.type + 1}")
- # ライトウィンドウがアクティブの場合
- if @right_window.active
- # 装備変更後のパラメータを消去
- @left_window.set_new_parameters(nil, nil, nil)
- end
- # アイテムウィンドウがアクティブの場合
- if @item_window.active
- # 現在選択中のアイテムを取得
- item2 = @item_window.item
- # 装備を変更
- last_hp = @actor.hp
- last_sp = @actor.sp
- if @actor.two_swords?
- case @right_window.index
- when [email protected]_number # 武器
- @actor.set_weapon(@right_window.index, item2 == nil ? 0 : item2.id)
- if $imported["EquipDetailSetting"]
- @actor.update_auto_state(item1, item2, true)
- end
- when @[email protected]_type.size # 防具
- @actor.armor_id[@right_window.index] = (item2 == nil ? 0 : item2.id)
- for i in @[email protected]_type.size
- @actor.update_auto_state(item1, item2)
- end
- end
- else
- case @right_window.index
- when 0 # 武器
- @actor.weapon_id = (item2 == nil ? 0 : item2.id)
- if $imported["EquipDetailSetting"]
- @actor.update_auto_state(item1, item2, true)
- end
- when [email protected]_type.size # 防具
- @actor.armor_id[@right_window.index] = (item2 == nil ? 0 : item2.id)
- for i in [email protected]_type.size
- @actor.update_auto_state(item1, item2)
- end
- end
- end
- # 装備変更後のパラメータを取得
- new_atk = @actor.atk
- new_pdef = @actor.pdef
- new_mdef = @actor.mdef
- if $imported["EquipAlter"]
- new_st = [@actor.str, @actor.dex, @actor.agi, @actor.int]
- end
- # 装備を戻す
- if @actor.two_swords?
- case @right_window.index
- when [email protected]_number # 武器
- @actor.set_weapon(@right_window.index, item1 == nil ? 0 : item1.id)
- if $imported["EquipDetailSetting"]
- @actor.update_auto_state(item2, item1, true)
- end
- when @[email protected]_type.size # 防具
- @actor.armor_id[@right_window.index] = (item1 == nil ? 0 : item1.id)
- for i in @[email protected]_type.size
- @actor.update_auto_state(item2, item1)
- end
- end
- else
- case @right_window.index
- when 0 # 武器
- @actor.weapon_id = (item1 == nil ? 0 : item1.id)
- if $imported["EquipDetailSetting"]
- @actor.update_auto_state(item2, item1, true)
- end
- when [email protected]_type.size # 防具
- @actor.armor_id[@right_window.index] = (item1 == nil ? 0 : item1.id)
- for i in [email protected]_type.size
- @actor.update_auto_state(item2, item1)
- end
- end
- end
- @actor.hp = last_hp
- @actor.sp = last_sp
- # レフトウィンドウに描画
- if $imported["EquipAlter"]
- @left_window.set_new_parameters(new_atk, new_pdef, new_mdef, new_st)
- else
- @left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (アイテムウィンドウがアクティブの場合)
- #--------------------------------------------------------------------------
- unless $imported["EquipAlter"]
- alias update_item_KGC_EquipExtension update_item
- def update_item
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # アイテムウィンドウで現在選択されているデータを取得
- item = @item_window.item
- if KGC::EEX_USE_EP
- # EP判定
- if item != nil && item.ep_cost > @actor.ep
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- end
- # 装備 SE を演奏
- $game_system.se_play($data_system.equip_se)
- # 装備を変更
- @actor.equip(@right_window.index, item == nil ? 0 : item.id)
- # オートステートを更新
- if $imported["EquipDetailSetting"]
- if @actor.two_swords?
- @actor.update_auto_state(nil, $data_weapons[@actor.weapon_id(@right_window.index)], true)
- else
- @actor.update_auto_state(nil, $data_weapons[@actor.weapon_id], true)
- end
- end
- for i in [email protected]_type.size
- @actor.update_auto_state(nil, $data_armors[@actor.armor_id[i]])
- end
- # 初期能力を更新
- if $imported["EquipAlter"]
- @left_window.last_str = @actor.str
- @left_window.last_dex = @actor.dex
- @left_window.last_agi = @actor.agi
- @left_window.last_int = @actor.int
- end
- # ライトウィンドウをアクティブ化
- @right_window.active = true
- @item_window.active = false
- @item_window.index = -1
- # レフトウィンドウを初期化
- @left_window.new_equip = nil if $imported["EquipAlter"]
- @left_window.set_new_parameters(nil, nil, nil)
- # ライトウィンドウ、アイテムウィンドウの内容を再作成
- @right_window.refresh
- for i in 1..(KGC::EEX_EQUIP_TYPE_EXT.size + 5)
- eval("@item_window#{i}.refresh")
- end
- return
- end
- update_item_KGC_EquipExtension
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Battle (分割定義 1)
- #==============================================================================
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● メイン処理
- #--------------------------------------------------------------------------
- alias main_KGC_EquipExtension main
- def main
- # 攻撃回数を初期化
- for actor in $game_party.actors
- actor.attack_count = 0
- end
- main_KGC_EquipExtension
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Battle (分割定義 4)
- #==============================================================================
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
- #--------------------------------------------------------------------------
- alias update_phase4_step6_KGC_EquipExtension update_phase4_step6
- def update_phase4_step6
- update_phase4_step6_KGC_EquipExtension
- # 二刀流・通常攻撃の場合
- if @active_battler.is_a?(Game_Actor) && @active_battler.two_swords? &&
- @active_battler.current_action.kind == 0 && @active_battler.current_action.basic == 0
- # 攻撃回数加算
- loop {
- @active_battler.attack_count += 1
- if @active_battler.attack_count == @active_battler.ts_number ||
- @active_battler.weapon_id(@active_battler.attack_count) > 0
- break
- end
- }
- # 規定回数行動した場合
- if @active_battler.attack_count == @active_battler.ts_number
- # 攻撃回数を初期化
- @active_battler.attack_count = 0
- else
- # 戦闘継続の場合
- unless judge
- # 攻撃対象が死んでいる場合は再設定
- if @target_battlers[0].dead?
- if @active_battler.restriction == 3
- @target_battlers[0] = $game_party.random_target_actor
- else
- @target_battlers[0] = $game_troop.random_target_enemy
- end
- end
- if $imported["ActiveCountBattle"]
- @action_battlers.insert(0, @active_battler)
- else
- # ステップ 2 に移行
- @phase4_step = 2
- end
- end
- end
- else
- if @active_battler.is_a?(Game_Actor)
- # 攻撃回数を初期化
- @active_battler.attack_count = 0
- end
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_EquipExtend
- #------------------------------------------------------------------------------
- # 拡張装備画面の処理を行うクラスです。
- #==============================================================================
- class Scene_EquipExtend
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # actor_index : アクターインデックス
- # equip_index : 装備インデックス
- #--------------------------------------------------------------------------
- def initialize(actor_index = 0, equip_index = 0, call_menu = false)
- @actor_index = actor_index
- @equip_index = equip_index
- @call_menu = call_menu
- end
- #--------------------------------------------------------------------------
- # ● メイン処理
- #--------------------------------------------------------------------------
- def main
- @actor = $game_party.actors[@actor_index]
- @spriteset = Spriteset_Map.new if KGC::EEX_EQUIP_EX_BACK_TRANSPARENT
- # ウィンドウを作成
- if $imported["HelpExtension"]
- @help_window = Window_HelpExtension.new
- else
- @help_window = Window_Help.new
- end
- @control_window = Window_EquipExtendControl.new
- @control_window.y = 64 if $imported["HelpExtension"]
- @status_window = Window_EquipExtendStatus.new(@actor)
- @list_window = Window_EquipExtendList.new(@actor)
- @item_window1 = Window_EquipExtendItem.new(@actor, 0)
- @item_window2 = Window_EquipExtendItem.new(@actor, 1)
- @item_window3 = Window_EquipExtendItem.new(@actor, 2)
- @item_window4 = Window_EquipExtendItem.new(@actor, 3)
- @item_window5 = Window_EquipExtendItem.new(@actor, 4)
- # ヘルプウィンドウを関連付け
- @control_window.help_window = @help_window
- @list_window.help_window = @help_window
- @item_window1.help_window = @help_window
- @item_window2.help_window = @help_window
- @item_window3.help_window = @help_window
- @item_window4.help_window = @help_window
- @item_window5.help_window = @help_window
- # 拡張アイテムウィンドウを作成
- if KGC::EEX_EQUIP_TYPE_EXT.size > 0
- for i in 0...KGC::EEX_EQUIP_TYPE_EXT.size
- eval("@item_window#{i + 6} = Window_EquipExtendItem.new(@actor, i + 5)")
- eval("@item_window#{i + 6}.help_window = @help_window")
- if KGC::EEX_EQUIP_EX_BACK_TRANSPARENT
- eval("@item_window#{i + 6}.back_opacity = 160")
- end
- end
- end
- if KGC::EEX_EQUIP_EX_BACK_TRANSPARENT
- @help_window.back_opacity = 160
- @control_window.back_opacity = 160
- end
- # カーソル位置を設定
- @list_window.index = @equip_index
- @effect_type = 0
- refresh
- # トランジション実行
- Graphics.transition
- # メインループ
- loop {
- Graphics.update
- Input.update
- update
- if $scene != self
- break
- end
- }
- # トランジション準備
- Graphics.freeze
- # ウィンドウを解放
- @help_window.dispose
- @control_window.dispose
- @status_window.dispose
- @list_window.dispose
- @item_window1.dispose
- @item_window2.dispose
- @item_window3.dispose
- @item_window4.dispose
- @item_window5.dispose
- if KGC::EEX_EQUIP_TYPE_EXT.size > 0
- for i in 0...KGC::EEX_EQUIP_TYPE_EXT.size
- eval("@item_window#{i + 7}.dispose if @item_window#{i + 7} != nil")
- end
- end
- @spriteset.dispose if KGC::EEX_EQUIP_EX_BACK_TRANSPARENT
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- # ウィンドウを更新
- @status_window.update
- @list_window.update
- @item_window.update
- @control_window.update
- refresh
- update_effect(@effect_type)
- # 操作ウィンドウがアクティブの場合: update_control を呼ぶ
- if @control_window.active
- @effect_type = 0
- update_control
- return
- end
- # リストウィンドウがアクティブの場合: update_list を呼ぶ
- if @list_window.active
- @effect_type = 1
- update_list
- return
- end
- # アイテムウィンドウがアクティブの場合: update_item を呼ぶ
- if @item_window.active
- @effect_type = 2
- update_item
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (エフェクト)
- #--------------------------------------------------------------------------
- def update_effect(type)
- case type
- when 1
- @last_index = -1
- @status_window.x = [@status_window.x + 48, 368].min
- @status_window.y = [@status_window.y + 24, 288].min
- @list_window.x = [@list_window.x + 8, 0].min
- @item_window.x = [@item_window.x + 8, 368].min
- when 2
- if @last_index != @list_window.index
- pos = @list_window.index - @list_window.top_row
- center = (@list_window.height - 32) / 64
- @status_y = pos >= center ? @list_window.y : 288
- @last_index = @list_window.index
- end
- @status_window.x = [@status_window.x - 48, 0].max
- if @status_y > @status_window.y
- @status_window.y = [@status_window.y + 24, @status_y].min
- elsif @status_y < @status_window.y
- @status_window.y = [@status_window.y - 24, @status_y].max
- end
- @list_window.x = [@list_window.x - 8, -48].max
- @item_window.x = [@item_window.x - 8, 320].max
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (操作ウィンドウがアクティブの場合)
- #--------------------------------------------------------------------------
- def update_control
- # B ボタンが押された場合
- if Input.trigger?(Input::B)
- # キャンセル SE を演奏
- $game_system.se_play($data_system.cancel_se)
- if @call_menu
- # メニュー画面に切り替え
- if $imported["MenuAlter"]
- index = KGC::MA_COMMANDS.index(2)
- if index != nil
- $scene = Scene_Menu.new(index)
- else
- $scene = Scene_Menu.new
- end
- else
- $scene = Scene_Menu.new(3)
- end
- else
- # マップ画面に切り替え
- $scene = Scene_Map.new
- end
- return
- end
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # カーソル位置で分岐
- case @control_window.index
- when 0 # 装備変更
- # 決定 SE を演奏
- $game_system.se_play($data_system.decision_se)
- # リストウィンドウに切り替え
- @list_window.active = true
- @list_window.index = 0 if @list_window.index == -1
- @control_window.active = false
- @control_window.visible = false
- when 1 # 最強装備
- # 装備 SE を演奏
- $game_system.se_play($data_system.equip_se)
- # 装備最大数を取得
- if $imported["EquipExtension"]
- mx = @actor.equip_type.size
- else
- mx = 5
- end
- for i in KGC::EEX_EQUIP_EX_INDEX...mx
- # 装備固定の場合は次へ
- next if @actor.equip_fix?(i)
- # 装備の種類で分岐
- tw = $imported["EquipExtension"] && @actor.two_swords?
- case i
- when (tw ? [email protected]_number : 0) # 武器
- # 最強武器装備
- equip_strongest_weapon(i)
- when (tw ? @actor.ts_number : 1)...mx # 防具
- # 最強防具装備
- equip_strongest_armor(@actor.equip_type[i], i)
- end
- end
- # 初期能力を更新
- @status_window.last_str = @actor.str
- @status_window.last_dex = @actor.dex
- @status_window.last_agi = @actor.agi
- @status_window.last_int = @actor.int
- # レフトウィンドウを初期化
- @status_window.set_new_parameters(nil, nil, nil)
- # ウィンドウをリフレッシュ
- refresh_window
- when 2 # 全解除
- # 装備 SE を演奏
- $game_system.se_play($data_system.equip_se)
- # 装備最大数を取得
- if $imported["EquipExtension"]
- mx = @actor.equip_type.size
- else
- mx = 5
- end
- (KGC::EEX_EQUIP_EX_INDEX...mx).each { |i|
- # 装備固定でない場合は解除
- @actor.equip(i, 0) unless @actor.equip_fix?(i)
- }
- # 初期能力を更新
- @status_window.last_str = @actor.str
- @status_window.last_dex = @actor.dex
- @status_window.last_agi = @actor.agi
- @status_window.last_int = @actor.int
- # ステータスウィンドウを初期化
- @status_window.set_new_parameters(nil, nil, nil)
- # ウィンドウをリフレッシュ
- refresh_window
- end
- return
- end
- # R ボタンが押された場合
- if Input.trigger?(Input::R)
- # カーソル SE を演奏
- $game_system.se_play($data_system.cursor_se)
- # 次のアクターへ
- @actor_index += 1
- @actor_index %= $game_party.actors.size
- # 別の装備画面に切り替え
- $scene = Scene_EquipExtend.new(@actor_index, 0, @call_menu)
- return
- end
- # L ボタンが押された場合
- if Input.trigger?(Input::L)
- # カーソル SE を演奏
- $game_system.se_play($data_system.cursor_se)
- # 前のアクターへ
- @actor_index += $game_party.actors.size - 1
- @actor_index %= $game_party.actors.size
- # 別の装備画面に切り替え
- $scene = Scene_EquipExtend.new(@actor_index, 0, @call_menu)
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (リストウィンドウがアクティブの場合)
- #--------------------------------------------------------------------------
- def update_list
- # A ボタンが押された場合
- if Input.trigger?(Input::A)
- index = @list_window.index + KGC::EEX_EQUIP_EX_INDEX
- # 装備 SE を演奏
- $game_system.se_play($data_system.equip_se)
- # 装備を外す
- @actor.equip(index, 0)
- # ウィンドウリフレッシュ
- refresh_window
- return
- end
- # B ボタンが押された場合
- if Input.trigger?(Input::B)
- # キャンセル SE を演奏
- $game_system.se_play($data_system.cancel_se)
- # 操作ウィンドウに切り替え
- @list_window.active = false
- @control_window.active = true
- @control_window.visible = true
- # リフレッシュ
- refresh
- return
- end
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # 装備固定の場合
- if @actor.equip_fix?(@list_window.index + KGC::EEX_EQUIP_EX_INDEX)
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 決定 SE を演奏
- $game_system.se_play($data_system.decision_se)
- # アイテムウィンドウをアクティブ化
- @list_window.active = false
- @item_window.active = true
- @item_window.index = 0
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (アイテムウィンドウがアクティブの場合)
- #--------------------------------------------------------------------------
- def update_item
- # 選択中の装備品を更新
- @status_window.new_equip = @item_window.item
- # B ボタンが押された場合
- if Input.trigger?(Input::B)
- # キャンセル SE を演奏
- $game_system.se_play($data_system.cancel_se)
- # ステータスウィンドウを初期化
- @status_window.new_equip = nil
- @status_window.set_new_parameters(nil, nil, nil)
- # リストウィンドウをアクティブ化
- @list_window.active = true
- @item_window.active = false
- @item_window.index = -1
- return
- end
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # アイテムウィンドウで現在選択されているデータを取得
- item = @item_window.item
- index = @list_window.index + KGC::EEX_EQUIP_EX_INDEX
- if $imported["EquipExtension"] && KGC::EEX_USE_EP
- # EP判定
- if item != nil && item.ep_cost > @actor.ep
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- end
- # 装備可否判定
- if item != nil && [email protected]?(item)
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 装備 SE を演奏
- $game_system.se_play($data_system.equip_se)
- # 装備を変更
- @actor.equip(index, item == nil ? 0 : item.id)
- # オートステートを更新
- if $imported["EquipDetailSetting"]
- if $imported["EquipExtension"] && @actor.two_swords?
- @actor.update_auto_state(nil, $data_weapons[@actor.weapon_id(index)], true)
- else
- @actor.update_auto_state(nil, $data_weapons[@actor.weapon_id], true)
- end
- end
- if $imported["EquipExtension"]
- for i in (@actor.two_swords? ? @actor.ts_number : 1)[email protected]_type.size
- @actor.update_auto_state(nil, $data_armors[@actor.armor_id[i]])
- end
- else
- for i in 1..4
- @actor.update_auto_state(nil, $data_armors[eval("@actor.armor#{i}_id")])
- end
- end
- # 初期能力を更新
- @status_window.last_str = @actor.str
- @status_window.last_dex = @actor.dex
- @status_window.last_agi = @actor.agi
- @status_window.last_int = @actor.int
- # リストウィンドウをアクティブ化
- @list_window.active = true
- @item_window.active = false
- @item_window.index = -1
- # ステータスウィンドウを初期化
- @status_window.new_equip = nil
- @status_window.set_new_parameters(nil, nil, nil)
- # ウィンドウの内容を再作成
- refresh_window
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- # アイテムウィンドウの可視状態設定
- @item_window1.visible = (@list_window.type == 0)
- @item_window2.visible = (@list_window.type == 1)
- @item_window3.visible = (@list_window.type == 2)
- @item_window4.visible = (@list_window.type == 3)
- @item_window5.visible = (@list_window.type == 4)
- if KGC::EEX_EQUIP_TYPE_EXT.size > 0
- for i in 0...KGC::EEX_EQUIP_TYPE_EXT.size
- eval("@item_window#{i + 6}.visible = (@list_window.type == i + 5)")
- end
- end
- # 現在装備中のアイテムを取得
- item1 = @list_window.item
- # 現在のアイテムウィンドウを @item_window に設定
- eval("@item_window = @item_window#{@list_window.type + 1}")
- # リストウィンドウがアクティブの場合
- if @list_window.active
- # 装備変更後のパラメータを消去
- @status_window.set_new_parameters(nil, nil, nil)
- end
- # アイテムウィンドウがアクティブの場合
- if @item_window.active
- # 現在選択中のアイテムを取得
- item2 = @item_window.item
- index = @list_window.index + KGC::EEX_EQUIP_EX_INDEX
- # 装備を変更
- last_hp = @actor.hp
- last_sp = @actor.sp
- if @actor.two_swords?
- case index
- when [email protected]_number # 武器
- @actor.set_weapon(index, item2 == nil ? 0 : item2.id)
- if $imported["EquipDetailSetting"]
- @actor.update_auto_state(item1, item2, true)
- end
- when @[email protected]_type.size # 防具
- @actor.armor_id[index] = (item2 == nil ? 0 : item2.id)
- for i in @[email protected]_type.size
- @actor.update_auto_state(item1, item2)
- end
- end
- else
- case index
- when 0 # 武器
- @actor.weapon_id = (item2 == nil ? 0 : item2.id)
- if $imported["EquipDetailSetting"]
- @actor.update_auto_state(item1, item2, true)
- end
- when [email protected]_type.size # 防具
- @actor.armor_id[index] = (item2 == nil ? 0 : item2.id)
- for i in [email protected]_type.size
- @actor.update_auto_state(item1, item2)
- end
- end
- end
- # 装備変更後のパラメータを取得
- new_atk = @actor.atk
- new_pdef = @actor.pdef
- new_mdef = @actor.mdef
- if $imported["EquipAlter"]
- new_st = [@actor.str, @actor.dex, @actor.agi, @actor.int]
- end
- # 装備を戻す
- if @actor.two_swords?
- case index
- when [email protected]_number # 武器
- @actor.set_weapon(index, item1 == nil ? 0 : item1.id)
- if $imported["EquipDetailSetting"]
- @actor.update_auto_state(item2, item1, true)
- end
- when @[email protected]_type.size # 防具
- @actor.armor_id[index] = (item1 == nil ? 0 : item1.id)
- for i in @[email protected]_type.size
- @actor.update_auto_state(item2, item1)
- end
- end
- else
- case index
- when 0 # 武器
- @actor.weapon_id = (item1 == nil ? 0 : item1.id)
- if $imported["EquipDetailSetting"]
- @actor.update_auto_state(item2, item1, true)
- end
- when [email protected]_type.size # 防具
- @actor.armor_id[index] = (item1 == nil ? 0 : item1.id)
- for i in [email protected]_type.size
- @actor.update_auto_state(item2, item1)
- end
- end
- end
- @actor.hp = last_hp
- @actor.sp = last_sp
- # ステータスウィンドウに描画
- if $imported["EquipAlter"]
- @status_window.set_new_parameters(new_atk, new_pdef, new_mdef, new_st)
- else
- @status_window.set_new_parameters(new_atk, new_pdef, new_mdef)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウをリフレッシュ
- #--------------------------------------------------------------------------
- def refresh_window
- # 初期能力を更新
- @status_window.last_str = @actor.str
- @status_window.last_dex = @actor.dex
- @status_window.last_agi = @actor.agi
- @status_window.last_int = @actor.int
- # リフレッシュ
- @status_window.refresh
- @list_window.refresh
- @item_window1.refresh
- @item_window2.refresh
- @item_window3.refresh
- @item_window4.refresh
- @item_window5.refresh
- if KGC::EEX_EQUIP_TYPE_EXT.size > 0
- for i in 0...KGC::EEX_EQUIP_TYPE_EXT.size
- eval("@item_window#{i + 7}.refresh")
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 最強武器装備
- #--------------------------------------------------------------------------
- def equip_strongest_weapon(type)
- # 武器リストを初期化
- weapons = []
- # 装備可能な武器を追加
- for i in 1...$data_weapons.size
- weapon = $data_weapons[i]
- if $game_party.weapon_number(i) > 0 && @actor.equippable?(weapon)
- weapons.push(weapon)
- end
- end
- # 装備可能な武器が無い場合は戻る
- return if weapons == []
- # 武器リストを逆順(IDの大きい順)に並べ替え
- weapons = weapons.reverse
- # 最強武器を初期化
- strongest_weapon = weapons[0]
- # 最強武器を取得(攻撃力で判定)
- for weapon in weapons
- strongest_weapon = weapon if strongest_weapon.atk < weapon.atk
- end
- # 現在の装備を取得
- now_weapon = $data_weapons[
- $imported["EquipExtension"] && @actor.two_swords? ?
- @actor.weapon_id(type) : @actor.weapon_id]
- # 何も装備していない場合
- if now_weapon == nil
- # 装備を変更
- @actor.equip(type, strongest_weapon.id)
- # 現在の装備より強い場合
- elsif strongest_weapon.atk > now_weapon.atk
- # 装備を変更
- @actor.equip(type, strongest_weapon.id)
- end
- end
- #--------------------------------------------------------------------------
- # ● 最強防具装備
- # type : 防具の種類
- # index : 装備箇所
- #--------------------------------------------------------------------------
- def equip_strongest_armor(type, index)
- # 除外装備の場合は戻る
- return if KGC::EEX_IGNORE_STRONGEST_TYPE.include?(type)
- # 防具リストを初期化
- armors = []
- # 装備可能な防具を追加
- for i in 1...$data_armors.size
- armor = $data_armors[i]
- if $game_party.armor_number(i) > 0 && @actor.equippable?(armor)
- if $data_armors[i].kind == type - 1
- armors.push(armor)
- end
- end
- end
- # 装備可能な防具が無い場合は戻る
- return if armors == []
- # 防具リストを逆順(IDの大きい順)に並べ替え
- armors = armors.reverse
- # 最強防具を初期化
- strongest_armor = armors[0]
- # 最強防具を取得(物理防御で判定)
- for armor in armors
- strongest_armor = armor if strongest_armor.pdef < armor.pdef
- end
- # 現在の装備を取得
- now_armor = $data_armors[$imported["EquipExtension"] ?
- @actor.armor_id[index] : eval("@actor.armor#{index}_id")]
- # 何も装備していない場合
- if now_armor == nil
- # 装備を変更
- @actor.equip(index, strongest_armor.id)
- # 現在の装備より強い場合
- elsif strongest_armor.pdef > now_armor.pdef
- # 装備を変更
- @actor.equip(index, strongest_armor.id)
- end
- end
- end
复制代码 |
|