赞 | 0 |
VIP | 0 |
好人卡 | 2 |
积分 | 1 |
经验 | 952 |
最后登录 | 2013-12-27 |
在线时间 | 336 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 336 小时
- 注册时间
- 2010-8-26
- 帖子
- 428
|
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ 拡張装備画面 - KGC_ExtendedEquipScene ◆ VX ◆
- #_/ ◇ Last update : 2009/02/15 ◇
- #_/----------------------------------------------------------------------------
- #_/ 機能を強化した装備画面を作成します。
- #_/============================================================================
- #_/ 【基本機能】≪ヘルプウィンドウ機能拡張≫ より下に導入してください。
- #_/ 【装備】≪スキル習得装備≫ より下に導入してください。
- #_/ 【装備】≪装備拡張≫ より上に導入してください。
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- $data_system = load_data("Data/System.rvdata") if $data_system == nil
- #==============================================================================
- # ★ カスタマイズ項目 - Customize BEGIN ★
- #==============================================================================
- module KGC
- module ExtendedEquipScene
- # ◆ パラメータ名
- VOCAB_PARAM = {
- :hit => "命中", # 命中率
- :eva => "回避", # 回避率
- :cri => "暴击", # クリティカル率
- :exp => "经验", # クリティカル率
- :equip_chance => "幸运", # クリティカル率
- } # ← この } は消さないこと!
- # ◆ 装備変更時に表示するパラメータ EQUIP_PARAMS = [ :maxhp, :maxmp, :atk, :def, :spi, :agi, :hit, :eva, :cri, :exp, :equip_chance ]
- # 表示したい順に , で区切って記入。
- # :maxhp .. 最大 HP
- # :maxmp .. 最大 MP
- # :atk .. 攻撃力
- # :def .. 防御力
- # :spi .. 精神力
- # :agi .. 敏捷性
- # :hit .. 命中率
- # :eva .. 回避率
- # :cri .. クリティカル率
- # :exp .. 幸运值
- # :equip_chance .. ク高级掉宝率 equip_chance
- EQUIP_PARAMS = [ :maxhp, :maxmp,:atk, :def, :spi, :agi, :hit, :eva, :cri,:equip_chance ]
- # ◆ 拡張装備コマンドを使用する
- # true : 「最強装備」「すべて外す」コマンドを使用可能
- # false : 装備変更のみ
- USE_COMMAND_WINDOW = false
- # ◆ 装備画面のコマンド名
- COMMANDS = [
- "装備変更", # 装備変更
- "最強装備", # 最強装備
- "すべて外す", # すべて外す
- ] # ← この ] は消さないこと!
- # ◆ 装備画面コマンドのヘルプ
- COMMAND_HELP = [
- "装備変更", # 装備変更
- "最も強力な武具を装備します。", # 最強装備
- "すべての武具を外します。", # すべて外す
- ] # ← この ] は消さないこと!
- # ◆ 最強装備を行わない装備種別
- # 最強装備から除外する装備種別を記述。
- # -1..武器 0..盾 1..頭 2..身体 3..装飾品 4~..≪装備拡張≫ で定義
- IGNORE_STRONGEST_KIND = [3, 5]
- # ◆ 最強武器選択時のパラメータ優先順位
- # 優先順位の高い順に , で区切って記入。
- # :atk .. 攻撃力
- # :def .. 防御力
- # :spi .. 精神力
- # :agi .. 敏捷性
- STRONGEST_WEAPON_PARAM_ORDER = [ :atk, :spi, :agi, :def ]
- # ◆ 最強防具選択時のパラメータ優先順位
- # 指定方法は武器と同じ。
- STRONGEST_ARMOR_PARAM_ORDER = [ :def, :spi, :agi, :atk ]
- # ◆ AP ウィンドウを使用する
- # true : 使用する
- # false : 使用しない
- # ≪スキル習得装備≫ 併用時のみ有効。
- SHOW_AP_WINDOW = true
- # ◆ AP ウィンドウに表示するスキル数
- # 多くしすぎすると表示がバグります。
- # (4 以下を推奨)
- AP_WINDOW_SKILLS = 4
- # ◆ AP ウィンドウの習得スキル名のキャプション
- AP_WINDOW_CAPTION = "習得#{Vocab.skill}"
- # ◆ AP ウィンドウの表示切り替えボタン
- # このボタンを押すと、AP ウィンドウの表示/非表示が切り替わる。
- AP_WINDOW_BUTTON = Input::X
- end
- end
- #==============================================================================
- # ☆ カスタマイズ項目 終了 - Customize END ☆
- #==============================================================================
- $imported = {} if $imported == nil
- $imported["ExtendedEquipScene"] = true
- module KGC::ExtendedEquipScene
- # パラメータ取得用 Proc
- GET_PARAM_PROC = {
- :atk => Proc.new { |n| n.atk },
- :def => Proc.new { |n| n.def },
- :spi => Proc.new { |n| n.spi },
- :agi => Proc.new { |n| n.agi },
- :exp => Proc.new { |n| n.exp },
- :equip_chance => Proc.new { |n| n.equip_chance },
- }
- # 最強アイテム用構造体
- StrongestItem = Struct.new("StrongestItem", :index, :item)
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Vocab
- #==============================================================================
- module Vocab
- # 命中率
- def self.hit
- return KGC::ExtendedEquipScene::VOCAB_PARAM[:hit]
- end
- # 回避率
- def self.eva
- return KGC::ExtendedEquipScene::VOCAB_PARAM[:eva]
- end
- # クリティカル率
- def self.cri
- return KGC::ExtendedEquipScene::VOCAB_PARAM[:cri]
- end
- # 回避率
- def self.exp
- return KGC::ExtendedEquipScene::VOCAB_PARAM[:exp]
- end
- # クリティカル率
- def self.equip_chance
- return KGC::ExtendedEquipScene::VOCAB_PARAM[:equip_chance]
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ Window_ExtendedEquipCommand
- #------------------------------------------------------------------------------
- # 拡張装備画面で、実行する操作を選択するウィンドウです。
- #==============================================================================
- class Window_ExtendedEquipCommand < Window_Command
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(160, KGC::ExtendedEquipScene::COMMANDS)
- self.active = false
- self.z = 1000
- end
- #--------------------------------------------------------------------------
- # ● ヘルプウィンドウの更新
- #--------------------------------------------------------------------------
- def update_help
- @help_window.set_text(KGC::ExtendedEquipScene::COMMAND_HELP[self.index])
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ Window_EquipBaseInfo
- #------------------------------------------------------------------------------
- # 装備画面で、アクターの基本情報を表示するウィンドウです。
- #==============================================================================
- class Window_EquipBaseInfo < Window_Base
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # x : ウィンドウの X 座標
- # y : ウィンドウの Y 座標
- # actor : アクター
- #--------------------------------------------------------------------------
- def initialize(x, y, actor)
- super(x, y, Graphics.width / 2, WLH + 32)
- @actor = actor
- refresh
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- draw_actor_name(@actor, 0, 0)
- #把下面的东西放在Window_Status的21行下
- case @actor.id
- #可以利用这个来设定不同角色,对应的图片名称
- when 1 #角色1
- i = "状态界面-流"
- when 2 #角色2 以when x 类推
- i = "状态界面-蕾雅娜"
- when 3 #角色1
- i = "状态界面-依莉娜"
- when 4 #角色2 以when x 类推
- i = "EnemyGuideBack_100628887"
- end
- bitmap = Cache.picture(i)
- rect = Rect.new(0,0,bitmap.width,bitmap.height)
- self.contents.blt(x, y, bitmap, rect)#x y 这些可以来调位置
- # EP 制を使用する場合は EP を描画
- if $imported["EquipExtension"] && KGC::EquipExtension::USE_EP_SYSTEM
- draw_actor_ep(@actor, 116, 0, Graphics.width / 2 - 148)
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_Equip
- #==============================================================================
- class Window_Equip < Window_Selectable
- unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW
- #--------------------------------------------------------------------------
- # ● カーソルを 1 ページ後ろに移動
- #--------------------------------------------------------------------------
- def cursor_pagedown
- return if Input.repeat?(Input::R)
- super
- end
- #--------------------------------------------------------------------------
- # ● カーソルを 1 ページ前に移動
- #--------------------------------------------------------------------------
- def cursor_pageup
- return if Input.repeat?(Input::L)
- super
- end
- end # <-- unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- return unless self.active
- if Input.repeat?(Input::RIGHT)
- Sound.play_cursor
- cursor_pagedown
- elsif Input.repeat?(Input::LEFT)
- Sound.play_cursor
- cursor_pageup
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_EquipItem
- #==============================================================================
- class Window_EquipItem < Window_Item
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # x : ウィンドウの X 座標
- # y : ウィンドウの Y 座標
- # width : ウィンドウの幅
- # height : ウィンドウの高さ
- # actor : アクター
- # equip_type : 装備部位
- #--------------------------------------------------------------------------
- alias initialize_KGC_ExtendedEquipScene initialize
- def initialize(x, y, width, height, actor, equip_type)
- width = Graphics.width / 2
- initialize_KGC_ExtendedEquipScene(x, y, width, height, actor, equip_type)
- @column_max = 1
- refresh
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- alias refresh_KGC_ExtendedEquipScene refresh unless $@
- def refresh
- return if @column_max == 2 # 無駄な描画はしない
- refresh_KGC_ExtendedEquipScene
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ Window_ExtendedEquipStatus
- #------------------------------------------------------------------------------
- # 拡張装備画面で、アクターの能力値変化を表示するウィンドウです。
- #==============================================================================
- class Window_ExtendedEquipStatus < Window_EquipStatus
- #--------------------------------------------------------------------------
- # ○ 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_writer :equip_type # 装備タイプ
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # x : ウィンドウの X 座標
- # y : ウィンドウの Y 座標
- # actor : アクター
- #--------------------------------------------------------------------------
- def initialize(x, y, actor)
- @equip_type = -1
- @caption_cache = nil
- super(x, y, actor)
- @new_item = nil
- @new_param = {}
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- super
- @caption_cache.dispose if @caption_cache != nil
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウ内容の作成
- #--------------------------------------------------------------------------
- def create_contents
- self.contents.dispose
- self.contents = Bitmap.new(Graphics.width / 2 - 32, height - 32)
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- return if @equip_type < 0
- if @caption_cache == nil
- create_cache
- else
- self.contents.clear
- self.contents.blt(0, 0, @caption_cache, @caption_cache.rect)
- end
- draw_item_name(@actor.equips[@equip_type], 0, 0)
- draw_item_name(@new_item, 24, WLH)
- KGC::ExtendedEquipScene::EQUIP_PARAMS.each_with_index { |param, i|
- draw_parameter(0, WLH * (i + 2), param)
- }
- end
- #--------------------------------------------------------------------------
- # ○ キャッシュ生成
- #--------------------------------------------------------------------------
- def create_cache
- create_contents
- self.contents.font.color = system_color
- self.contents.draw_text(0, WLH, 20, WLH, "→")
- # パラメータ描画
- KGC::ExtendedEquipScene::EQUIP_PARAMS.each_with_index { |param, i|
- draw_parameter_name(0, WLH * (i + 2), param)
- }
- @caption_cache = Bitmap.new(self.contents.width, self.contents.height)
- @caption_cache.blt(0, 0, self.contents, self.contents.rect)
- end
- #--------------------------------------------------------------------------
- # ○ 能力値名の描画
- # x : 描画先 X 座標
- # y : 描画先 Y 座標
- # type : 能力値の種類
- #--------------------------------------------------------------------------
- def draw_parameter_name(x, y, type)
- case type
- when :maxhp
- name = Vocab.hp
- when :maxmp
- name = Vocab.mp
- when :atk
- name = Vocab.atk
- when :def
- name = Vocab.def
- when :spi
- name = Vocab.spi
- when :agi
- name = Vocab.agi
- when :hit
- name = Vocab.hit
- when :eva
- name = Vocab.eva
- when :cri
- name = Vocab.cri
- when :exp
- name = Vocab.exp
- when :equip_chance
- name = Vocab.equip_chance
- end
- self.contents.font.color = system_color
- self.contents.font.size = 20
- self.contents.draw_text(x + 4, y, 96, WLH, name)
- self.contents.font.color = system_color
- self.contents.draw_text(x + 156, y, 20, WLH, "→", 1)
- end
- #--------------------------------------------------------------------------
- # ● 装備変更後の能力値設定equip_chance
- # new_param : 装備変更後のパラメータの配列
- # new_item : 変更後の装備
- #--------------------------------------------------------------------------
- def set_new_parameters(new_param, new_item)
- changed = false
- # パラメータ変化判定
- KGC::ExtendedEquipScene::EQUIP_PARAMS.each { |k|
- if @new_param[k] != new_param[k]
- changed = true
- break
- end
- }
- changed |= (@new_item != new_item)
- if changed
- @new_item = new_item
- @new_param = new_param
- refresh
- end
- end
- #--------------------------------------------------------------------------
- # ● 能力値の描画
- # x : 描画先 X 座標
- # y : 描画先 Y 座標
- # type : 能力値の種類
- #--------------------------------------------------------------------------
- def draw_parameter(x, y, type)
- case type
- when :maxhp
- value = @actor.maxhp
- parameter_value = @actor.maxhp
- gw = 70 * parameter_value / 5000
- gc1 = text_color(10)
- gc2 = text_color(10)
- when :maxmp
- value = @actor.maxmp
- parameter_value = @actor.maxmp
- gw = 70 * parameter_value / 3000
- gc1 = text_color(9)
- gc2 = text_color(9)
- when :atk
- value = @actor.atk
- parameter_value = @actor.atk
- gw = 70 * parameter_value / 400
- gc1 = text_color(2)
- gc2 = text_color(2)
- when :def
- value = @actor.def
- parameter_value = @actor.def
- gw = 70 * parameter_value / 400
- gc1 = text_color(3)
- gc2 = text_color(3)
- when :spi
- value = @actor.spi
- parameter_value = @actor.spi
- gw = 70 * parameter_value / 400
- gc1 = text_color(5)
- gc2 = text_color(5)
- when :agi
- value = @actor.agi
- parameter_value = @actor.agi
- gw = 70 * parameter_value / 400
- gc1 = text_color(4)
- gc2 = text_color(4)
- when :hit
- value = @actor.hit
- parameter_value = @actor.hit
- gw = 70 * parameter_value / 400
- gc1 = text_color(1)
- gc2 = text_color(1)
- when :eva
- value = @actor.eva
- parameter_value = @actor.eva
- gw = 70 * parameter_value / 200
- gc1 = text_color(6)
- gc2 = text_color(6)
- when :cri
- value = @actor.cri
- parameter_value = @actor.cri
- gw = 70 * parameter_value / 150
- gc1 = text_color(8)
- gc2 = text_color(8)
- when :exp
- value = @actor.exp
- parameter_value = @actor.exp
- gw = 70 * parameter_value / 150
- gc1 = text_color(3)
- gc2 = text_color(3)
- when :equip_chance
- value = @actor.equip_chance
- parameter_value = @actor.equip_chance
- gw = 70 * parameter_value / 100
- gc1 = text_color(9)
- gc2 = text_color(9)
- end
- new_value = @new_param[type]
- self.contents.font.color = system_color
- self.contents.font.size = 20
- self.contents.draw_text(x + 106, y, 48, WLH, value, 2)
- if new_value != nil
- self.contents.font.color = new_parameter_color(value, new_value)
- self.contents.draw_text(x + 176, y, 48, WLH, new_value, 2)
- end
- self.contents.fill_rect(50, y + WLH - 16, gw-5, 20, gauge_back_color)#x表示“黑槽20”
- self.contents.gradient_fill_rect(50, y + WLH - 21, gw, 16, gc1, gc2)
- self.contents.font.color = normal_color
- #= self.contents.draw_text(x, y + 3, 120, WLH, parameter_name)#x表示“攻击”
- self.contents.font.color = normal_color
- #= normal_color new_value self.contents.draw_text(x + 187, y + 3, 36, WLH, parameter_value, 2)#x表示“数字”
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ Window_ExtendedEquipAPViewer
- #------------------------------------------------------------------------------
- # 拡張装備画面で、習得スキルを表示するウィンドウです。
- #==============================================================================
- if $imported["EquipLearnSkill"]
- class Window_ExtendedEquipAPViewer < Window_APViewer
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :item # 表示対象のアイテム
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # x : ウィンドウの X 座標
- # y : ウィンドウの Y 座標
- # width : ウィンドウの幅
- # height : ウィンドウの高さ
- # actor : アクター
- #--------------------------------------------------------------------------
- def initialize(x, y, width, height, actor)
- @item = nil
- super
- self.index = -1
- self.active = false
- end
- #--------------------------------------------------------------------------
- # ○ アイテム設定
- #--------------------------------------------------------------------------
- def item=(new_item)
- @item = new_item
- refresh
- end
- #--------------------------------------------------------------------------
- # ○ リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- @data = []
- @can_gain_ap_skills = @actor.can_gain_ap_skills
- @equipment_skills = @actor.equipment_skills(true)
- skills = (@item == nil ? [] : @item.learn_skills)
- skills.each { |i|
- @data << $data_skills[i]
- }
- @item_max = @data.size
- create_contents
- draw_caption
- @item_max.times { |i| draw_item(i) }
- end
- #--------------------------------------------------------------------------
- # ○ キャプションを描画
- #--------------------------------------------------------------------------
- def draw_caption
- self.contents.font.color = system_color
- self.contents.draw_text(0, 0, width - 96, WLH,
- KGC::ExtendedEquipScene::AP_WINDOW_CAPTION, 1)
- self.contents.draw_text(width - 96, 0, 64, WLH, Vocab.ap, 1)
- self.contents.font.color = normal_color
- end
- #--------------------------------------------------------------------------
- # ○ スキルをマスク表示するかどうか
- # skill : スキル
- #--------------------------------------------------------------------------
- def mask?(skill)
- return false
- end
- #--------------------------------------------------------------------------
- # ○ 項目の描画
- # index : 項目番号
- #--------------------------------------------------------------------------
- def draw_item(index)
- rect = item_rect(index)
- rect.y += WLH
- self.contents.clear_rect(rect)
- skill = @data[index]
- if skill != nil
- draw_item_name(skill, rect.x, rect.y)
- if skill.need_ap > 0
- if @actor.ap_full?(skill) || @actor.skill_learn?(skill)
- # マスター
- text = Vocab.full_ap_skill
- else
- # AP 蓄積中
- text = sprintf("%4d/%4d", @actor.skill_ap(skill.id), skill.need_ap)
- end
- end
- # AP を描画
- rect.x = rect.width - 80
- rect.width = 80
- self.contents.font.color = normal_color
- self.contents.draw_text(rect, text, 2)
- end
- end
- end
- end # <-- if $imported["EquipLearnSkill"]
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Equip
- #==============================================================================
- class Scene_Equip < Scene_Base
- #--------------------------------------------------------------------------
- # ○ 定数
- #--------------------------------------------------------------------------
- STANDARD_WIDTH = Graphics.width / 2
- ANIMATION_SPPED = 8
- #--------------------------------------------------------------------------
- # ● 開始処理
- #--------------------------------------------------------------------------
- alias start_KGC_ExtendedEquipScene start
- def start
- start_KGC_ExtendedEquipScene
- # ステータスウィンドウを作り直す
- @status_window.dispose
- @status_window = Window_ExtendedEquipStatus.new(0, 0, @actor)
- create_command_window
- @last_item = RPG::Weapon.new
- @base_info_window = Window_EquipBaseInfo.new(
- 0, @help_window.height, @actor)
- if $imported["EquipLearnSkill"] && KGC::ExtendedEquipScene::SHOW_AP_WINDOW
- @ap_window = Window_ExtendedEquipAPViewer.new(0, 0, 64, 64, @actor)
- end
- adjust_window_for_extended_equiop_scene
- Graphics.frame_reset
- end
- #--------------------------------------------------------------------------
- # ○ ウィンドウの座標・サイズを拡張装備画面向けに調整
- #--------------------------------------------------------------------------
- def adjust_window_for_extended_equiop_scene
- @base_info_window.width = @equip_window.width
- @equip_window.x = 0
- @equip_window.y = @base_info_window.y + @base_info_window.height
- @equip_window.height = Graphics.height - @equip_window.y
- @equip_window.active = false
- @equip_window.z = 100
- @status_window.x = 0
- @status_window.y = 100
- @status_window.width = STANDARD_WIDTH
- @status_window.height = 320
- @status_window.visible = false
- @status_window.z = 100
- @item_windows.each { |window|
- window.x = @equip_window.width
- window.y = @help_window.height
- window.z = 50
- window.height = Graphics.height - @help_window.height
- }
- if @ap_window != nil
- @ap_window.width = @item_windows[0].width
- @ap_window.height =
- (KGC::ExtendedEquipScene::AP_WINDOW_SKILLS + 1) * Window_Base::WLH + 32
- @ap_window.x = @equip_window.width
- @ap_window.y = Graphics.height - @ap_window.height
- @ap_window.z = @item_windows[0].z + 20
- @ap_window.refresh
- end
- # コマンドウィンドウ不使用の場合@equip_window.y
- unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW
- @command_window.visible = false
- @command_window.active = false
- @equip_window.active = true
- @equip_window.call_update_help
- end
- end
- #--------------------------------------------------------------------------
- # ○ コマンドウィンドウの作成
- #--------------------------------------------------------------------------
- def create_command_window
- @command_window = Window_ExtendedEquipCommand.new
- @command_window.help_window = @help_window
- @command_window.active = true
- @command_window.x = (Graphics.width - @command_window.width) / 2
- @command_window.y = (Graphics.height - @command_window.height) / 2
- @command_window.update_help
- # 装備固定なら「最強装備」「すべて外す」を無効化
- if @actor.fix_equipment
- @command_window.draw_item(1, false)
- @command_window.draw_item(2, false)
- end
- end
- #--------------------------------------------------------------------------
- # ● 終了処理
- #--------------------------------------------------------------------------
- alias terminate_KGC_ExtendedEquipScene terminate
- def terminate
- terminate_KGC_ExtendedEquipScene
- @command_window.dispose
- @base_info_window.dispose
- @ap_window.dispose if @ap_window != nil
- end
- #--------------------------------------------------------------------------
- # ○ ウィンドウをリフレッシュ
- #--------------------------------------------------------------------------
- def refresh_window
- @base_info_window.refresh
- @equip_window.refresh
- @status_window.refresh
- @item_windows.each { |window| window.refresh }
- @ap_window.refresh if @ap_window != nil
- Graphics.frame_reset
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias update_KGC_ExtendedEquipScene update
- def update
- update_command_window
- if @command_window.active
- update_KGC_ExtendedEquipScene
- update_command_selection
- else
- update_KGC_ExtendedEquipScene
- update_ap_window
- end
- end
- #--------------------------------------------------------------------------
- # ○ コマンドウィンドウの更新
- #--------------------------------------------------------------------------
- def update_command_window
- @command_window.update
- end
- #--------------------------------------------------------------------------
- # ● ステータスウィンドウの更新
- #--------------------------------------------------------------------------
- def update_status_window
- @base_info_window.update
- @status_window.update
- if @command_window.active || @equip_window.active
- @status_window.set_new_parameters({}, nil)
- elsif @item_window.active
- return if @last_item == @item_window.item
- @last_item = @item_window.item
- temp_actor = Marshal.load(Marshal.dump(@actor))
- temp_actor.change_equip(@equip_window.index, @item_window.item, true)
- param = {
- :maxhp => temp_actor.maxhp,
- :maxmp => temp_actor.maxmp,
- :atk => temp_actor.atk,
- :def => temp_actor.def,
- :spi => temp_actor.spi,
- :agi => temp_actor.agi,
- :hit => temp_actor.hit,
- :eva => temp_actor.eva,
- :cri => temp_actor.cri,
- :exp => temp_actor.exp,
- :equip_chance => temp_actor.equip_chance,
- }
- @status_window.equip_type = @equip_window.index
- @status_window.set_new_parameters(param, @last_item)
- Graphics.frame_reset
- end
- end
- #--------------------------------------------------------------------------
- # ○ AP ウィンドウの更新equip_chance
- #--------------------------------------------------------------------------
- def update_ap_window
- return if @ap_window == nil
- # 表示/非表示切り替え
- button = KGC::ExtendedEquipScene::AP_WINDOW_BUTTON
- if button != nil && Input.trigger?(button)
- Sound.play_decision
- if @ap_window.openness == 255
- @ap_window.close
- else
- @ap_window.open
- end
- end
- # 表示内容更新
- @ap_window.update
- new_item = (@equip_window.active ? @equip_window.item : @item_window.item)
- @ap_window.item = new_item if @ap_window.item != new_item
- # 位置更新
- ay = @ap_window.y
- ayb = @ap_window.y + @ap_window.height # AP window: Bottom
- cy = @item_window.y + 16
- cy += @item_window.cursor_rect.y if @item_window.active
- cyb = cy + Window_Base::WLH # Cursor rect: Bottom
- bottom = (ay != @item_window.y)
- if bottom
- # 下で被る
- @ap_window.y = @item_window.y if ay < cyb
- else
- # 上で被る
- @ap_window.y = Graphics.height - @ap_window.height if cy < ayb
- end
- end
- #--------------------------------------------------------------------------
- # ○ コマンド選択の更新
- #--------------------------------------------------------------------------
- def update_command_selection
- update_window_position_for_equip_selection
- if Input.trigger?(Input::B)
- Sound.play_cancel
- return_scene
- elsif Input.trigger?(Input::R)
- Sound.play_cursor
- next_actor
- elsif Input.trigger?(Input::L)
- Sound.play_cursor
- prev_actor
- elsif Input.trigger?(Input::C)
- case @command_window.index
- when 0 # 装備変更
- Sound.play_decision
- # 装備部位ウィンドウに切り替え
- @equip_window.active = true
- @command_window.active = false
- @command_window.close
- when 1 # 最強装備
- if @actor.fix_equipment
- Sound.play_buzzer
- return
- end
- Sound.play_equip
- process_equip_strongest
- when 2 # すべて外す
- if @actor.fix_equipment
- Sound.play_buzzer
- return
- end
- Sound.play_equip
- process_remove_all
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 装備部位選択の更新
- #--------------------------------------------------------------------------
- alias update_equip_selection_KGC_ExtendedEquipScene update_equip_selection
- def update_equip_selection
- update_window_position_for_equip_selection
- if Input.trigger?(Input::A)
- if @actor.fix_equipment
- Sound.play_buzzer
- return
- end
- # 選択している装備品を外す
- Sound.play_equip
- @actor.change_equip(@equip_window.index, nil)
- refresh_window
- elsif Input.trigger?(Input::B)
- Sound.play_cancel
- if KGC::ExtendedEquipScene::USE_COMMAND_WINDOW
- show_command_window
- else
- # コマンドウィンドウ不使用なら終了
- return_scene
- end
- return
- elsif Input.trigger?(Input::R)
- unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW
- # コマンドウィンドウ不使用時のみ切り替え
- Sound.play_cursor
- next_actor
- return
- end
- elsif Input.trigger?(Input::L)
- unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW
- # コマンドウィンドウ不使用時のみ切り替え
- Sound.play_cursor
- prev_actor
- return
- end
- elsif Input.trigger?(Input::C)
- # 前回のアイテムをダミーにする
- @last_item = RPG::Weapon.new
- end
- update_equip_selection_KGC_ExtendedEquipScene
- end
- #--------------------------------------------------------------------------
- # ○ コマンドウィンドウに切り替え
- #--------------------------------------------------------------------------
- def show_command_window
- @equip_window.active = false
- @command_window.active = true
- @command_window.open
- end
- #--------------------------------------------------------------------------
- # ● アイテム選択の更新
- #--------------------------------------------------------------------------
- alias update_item_selection_KGC_ExtendedEquipScene update_item_selection
- def update_item_selection
- update_window_position_for_item_selection
- update_item_selection_KGC_ExtendedEquipScene
- if Input.trigger?(Input::C)
- @base_info_window.refresh
- end
- end
- #--------------------------------------------------------------------------
- # ○ ウィンドウ位置の更新 (装備部位選択)
- #--------------------------------------------------------------------------
- def update_window_position_for_equip_selection
- return if @item_window.x == @equip_window.width
- @base_info_window.width = @equip_window.width
- @item_window.x = [@item_window.x + ANIMATION_SPPED, @equip_window.width].min
- if @ap_window != nil
- @ap_window.x = @item_window.x
- end
- @equip_window.visible = true
- @status_window.visible = false
- end
- #--------------------------------------------------------------------------
- # ○ ウィンドウ位置の更新 (アイテム選択)
- #--------------------------------------------------------------------------
- def update_window_position_for_item_selection
- return if @item_window.x == STANDARD_WIDTH
- @base_info_window.width = STANDARD_WIDTH
- @item_window.x = [@item_window.x - ANIMATION_SPPED, STANDARD_WIDTH].max
- if @ap_window != nil
- @ap_window.x = @item_window.x
- end
- @equip_window.visible = false
- @status_window.visible = true
- end
- #--------------------------------------------------------------------------
- # ○ 最強装備の処理
- #--------------------------------------------------------------------------
- def process_equip_strongest
- # 以前のパラメータを保存
- last_hp = @actor.hp
- last_mp = @actor.mp
- # 最強装備対象の種別を取得
- types = [-1]
- types += ($imported["EquipExtension"] ? @actor.equip_type : [0, 1, 2, 3])
- ignore_types = KGC::ExtendedEquipScene::IGNORE_STRONGEST_KIND.clone
- judged_indices = []
- weapon_range = 0..(@actor.two_swords_style ? 1 : 0)
- # 装備対象の武具をすべて外す
- types.each_with_index { |t, i|
- @actor.change_equip(i, nil) unless ignore_types.include?(t)
- }
- # 最強武器装備
- weapon_range.each { |i|
- judged_indices << i
- # 1本目が両手持ちの場合は2本目を装備しない
- if @actor.two_swords_style
- weapon = @actor.weapons[0]
- next if weapon != nil && weapon.two_handed
- end
- weapon = get_strongest_weapon(i)
- @actor.change_equip(i, weapon) if weapon != nil
- }
- # 両手持ち武器を持っている場合は盾 (防具1) を装備しない
- weapon = @actor.weapons[0]
- if weapon != nil && weapon.two_handed
- judged_indices |= [1]
- end
- # 最強防具装備
- exist = true
- while exist
- strongest = get_strongest_armor(types, ignore_types, judged_indices)
- if strongest != nil
- @actor.change_equip(strongest.index, strongest.item)
- judged_indices << strongest.index
- else
- exist = false
- end
- end
- # 以前のパラメータを復元
- @actor.hp = last_hp
- @actor.mp = last_mp
- refresh_window
- end
- #--------------------------------------------------------------------------
- # ○ 最も強力な武器を取得
- # equip_type : 装備部位
- # 該当するアイテムがなければ nil を返す。
- #--------------------------------------------------------------------------
- def get_strongest_weapon(equip_type)
- # 装備可能な武器を取得
- equips = $game_party.items.find_all { |item|
- valid = item.is_a?(RPG::Weapon) && @actor.equippable?(item)
- if valid && $imported["EquipExtension"]
- valid = @actor.ep_condition_clear?(equip_type, item)
- end
- valid
- }
- return nil if equips.empty?
- param_order = KGC::ExtendedEquipScene::STRONGEST_WEAPON_PARAM_ORDER
- return get_strongest_item(equips, param_order)
- end
- #--------------------------------------------------------------------------
- # ○ 最も強力なアイテムを取得
- # equips : 装備品リスト
- # param_order : パラメータ優先順位
- #--------------------------------------------------------------------------
- def get_strongest_item(equips, param_order)
- result = []
- param_order.each { |param|
- # パラメータ順にソート
- get_proc = KGC::ExtendedEquipScene::GET_PARAM_PROC[param]
- equips = equips.sort_by { |item| -get_proc.call(item) }
- # 最もパラメータが高いアイテムを取得
- highest = equips[0]
- result = equips.find_all { |item|
- get_proc.call(highest) == get_proc.call(item)
- }
- # 候補が1つに絞れたら終了
- break if result.size == 1
- equips = result.clone
- }
- # 最も ID が大きいアイテムを取得
- return (result.sort_by { |v| -v.id })[0]
- end
- #--------------------------------------------------------------------------
- # ○ 最も強力な防具を取得 (StrongestItem)
- # types : 装備部位リスト
- # ignore_types : 無視する部位リスト
- # judged_indices : 判定済み部位番号リスト
- # 該当するアイテムがなければ nil を返す。
- #--------------------------------------------------------------------------
- def get_strongest_armor(types, ignore_types, judged_indices)
- # 装備可能な防具を取得
- equips = $game_party.items.find_all { |item|
- item.is_a?(RPG::Armor) &&
- !ignore_types.include?(item.kind) &&
- @actor.equippable?(item)
- }
- return nil if equips.empty?
- param_order = KGC::ExtendedEquipScene::STRONGEST_ARMOR_PARAM_ORDER
- # 最強防具を探す
- until equips.empty?
- armor = get_strongest_item(equips, param_order)
- types.each_with_index { |t, i|
- next if judged_indices.include?(i)
- next if armor.kind != t
- if $imported["EquipExtension"]
- next unless @actor.ep_condition_clear?(i, armor)
- end
- return KGC::ExtendedEquipScene::StrongestItem.new(i, armor)
- }
- equips.delete(armor)
- end
- return nil
- end
- #--------------------------------------------------------------------------
- # ○ すべて外す処理
- #--------------------------------------------------------------------------
- def process_remove_all
- type_max = ($imported["EquipExtension"] ? @actor.equip_type.size : 4) + 1
- type_max.times { |i| @actor.change_equip(i, nil) }
- refresh_window
- end
- end
复制代码 我想去掉最强装备,直接装备,装備変更这些选项,直接进入替换装备界面,问下怎么弄啊 |
|