Project1

标题: 【VX】求助关于装备扩张里出现的一个错误!急!~ [打印本页]

作者: woaizhazha521    时间: 2011-12-26 02:18
标题: 【VX】求助关于装备扩张里出现的一个错误!急!~
各位前辈请看 不晓得是怎么回事  请各位前辈帮忙解答下

具体  就是我只要一更换装备 别说进到更换界面 我点了一下这个武器框 他就提示这个!~




请各位前辈帮忙!~dsu_plus_rewardpost_czw
作者: 幻倾城    时间: 2011-12-26 03:19
拡張装備画面 - KGC_ExtendedEquipScene
装備拡張 - KGC_EquipExtension
两个一起用就可以了
作者: 小白玩家    时间: 2011-12-26 13:29
装备界面扩张~
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  2. #_/    ◆ 拡張装備画面 - KGC_ExtendedEquipScene ◆ VX ◆

  3. #_/    ◇ Last update : 2009/02/15 ◇

  4. #_/----------------------------------------------------------------------------

  5. #_/  機能を強化した装備画面を作成します。

  6. #_/============================================================================

  7. #_/ 【基本機能】≪ヘルプウィンドウ機能拡張≫ より下に導入してください。

  8. #_/ 【装備】≪スキル習得装備≫ より下に導入してください。

  9. #_/ 【装備】≪装備拡張≫ より上に導入してください。

  10. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


  11. $data_system = load_data("Data/System.rvdata") if $data_system == nil


  12. #==============================================================================

  13. # ★ カスタマイズ項目 - Customize BEGIN ★

  14. #==============================================================================


  15. module KGC

  16. module ExtendedEquipScene

  17.   # ◆ パラメータ名

  18.   VOCAB_PARAM = {

  19.     :hit => "命中率",        # 命中率

  20.     :eva => "回避率",        # 回避率

  21.     :cri => "暴击率",  # クリティカル率

  22.   }  # ← この } は消さないこと!


  23.   # ◆ 装備変更時に表示するパラメータ

  24.   #  表示したい順に , で区切って記入。

  25.   #  :maxhp .. 最大 HP

  26.   #  :maxmp .. 最大 MP

  27.   #  :atk   .. 攻撃力

  28.   #  :def   .. 防御力

  29.   #  :spi   .. 精神力

  30.   #  :agi   .. 敏捷性

  31.   #  :hit   .. 命中率

  32.   #  :eva   .. 回避率

  33.   #  :cri   .. クリティカル率

  34.   EQUIP_PARAMS = [ :atk, :def, :spi, :agi, :hit, :eva, :cri ]


  35.   # ◆ 拡張装備コマンドを使用する

  36.   #  true  : 「最強装備」「すべて外す」コマンドを使用可能

  37.   #  false : 装備変更のみ

  38.   USE_COMMAND_WINDOW = true

  39.   # ◆ 装備画面のコマンド名

  40.   COMMANDS = [

  41.     "装备更变",    # 装備変更

  42.     "最强装备",    # 最強装備

  43.     "装备解除",  # すべて外す

  44.   ]  # ← この ] は消さないこと!

  45.   # ◆ 装備画面コマンドのヘルプ

  46.   COMMAND_HELP = [

  47.     "更变装备。",            # 装備変更

  48.     "装备最强有力的装备。",  # 最強装備

  49.     "取下全部的装备。",      # すべて外す

  50.   ]  # ← この ] は消さないこと!


  51.   # ◆ 最強装備を行わない装備種別

  52.   #  最強装備から除外する装備種別を記述。

  53.   #  -1..武器  0..盾  1..頭  2..身体  3..装飾品  4~..≪装備拡張≫ で定義

  54.   IGNORE_STRONGEST_KIND = [3, 5]


  55.   # ◆ 最強武器選択時のパラメータ優先順位

  56.   #  優先順位の高い順に , で区切って記入。

  57.   #  :atk .. 攻撃力

  58.   #  :def .. 防御力

  59.   #  :spi .. 精神力

  60.   #  :agi .. 敏捷性

  61.   STRONGEST_WEAPON_PARAM_ORDER = [ :atk, :spi, :agi, :def ]

  62.   # ◆ 最強防具選択時のパラメータ優先順位

  63.   #  指定方法は武器と同じ。

  64.   STRONGEST_ARMOR_PARAM_ORDER  = [ :def, :spi, :agi, :atk ]


  65.   # ◆ AP ウィンドウを使用する

  66.   #  true  : 使用する

  67.   #  false : 使用しない

  68.   #  ≪スキル習得装備≫ 併用時のみ有効。

  69.   SHOW_AP_WINDOW    = true

  70.   # ◆ AP ウィンドウに表示するスキル数

  71.   #  多くしすぎすると表示がバグります。

  72.   #  (4 以下を推奨)

  73.   AP_WINDOW_SKILLS  = 4

  74.   # ◆ AP ウィンドウの習得スキル名のキャプション

  75.   AP_WINDOW_CAPTION = "習得#{Vocab.skill}"

  76.   # ◆ AP ウィンドウの表示切り替えボタン

  77.   #  このボタンを押すと、AP ウィンドウの表示/非表示が切り替わる。

  78.   AP_WINDOW_BUTTON  = Input::X

  79. end

  80. end


  81. #==============================================================================

  82. # ☆ カスタマイズ項目 終了 - Customize END ☆

  83. #==============================================================================


  84. $imported = {} if $imported == nil

  85. $imported["ExtendedEquipScene"] = true


  86. module KGC::ExtendedEquipScene

  87.   # パラメータ取得用 Proc

  88.   GET_PARAM_PROC = {

  89.     :atk => Proc.new { |n| n.atk },

  90.     :def => Proc.new { |n| n.def },

  91.     :spi => Proc.new { |n| n.spi },

  92.     :agi => Proc.new { |n| n.agi },

  93.   }

  94.   # 最強アイテム用構造体

  95.   StrongestItem = Struct.new("StrongestItem", :index, :item)

  96. end


  97. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★


  98. #==============================================================================

  99. # ■ Vocab

  100. #==============================================================================


  101. module Vocab

  102.   # 命中率

  103.   def self.hit

  104.     return KGC::ExtendedEquipScene::VOCAB_PARAM[:hit]

  105.   end


  106.   # 回避率

  107.   def self.eva

  108.     return KGC::ExtendedEquipScene::VOCAB_PARAM[:eva]

  109.   end


  110.   # クリティカル率

  111.   def self.cri

  112.     return KGC::ExtendedEquipScene::VOCAB_PARAM[:cri]

  113.   end

  114. end


  115. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★


  116. #==============================================================================

  117. # □ Window_ExtendedEquipCommand

  118. #------------------------------------------------------------------------------

  119. #   拡張装備画面で、実行する操作を選択するウィンドウです。

  120. #==============================================================================


  121. class Window_ExtendedEquipCommand < Window_Command

  122.   #--------------------------------------------------------------------------

  123.   # ● オブジェクト初期化

  124.   #--------------------------------------------------------------------------

  125.   def initialize

  126.     super(160, KGC::ExtendedEquipScene::COMMANDS)

  127.     self.active = false

  128.     self.z = 1000

  129.   end

  130.   #--------------------------------------------------------------------------

  131.   # ● ヘルプウィンドウの更新

  132.   #--------------------------------------------------------------------------

  133.   def update_help

  134.     @help_window.set_text(KGC::ExtendedEquipScene::COMMAND_HELP[self.index])

  135.   end

  136. end


  137. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★


  138. #==============================================================================

  139. # □ Window_EquipBaseInfo

  140. #------------------------------------------------------------------------------

  141. #   装備画面で、アクターの基本情報を表示するウィンドウです。

  142. #==============================================================================


  143. class Window_EquipBaseInfo < Window_Base

  144.   #--------------------------------------------------------------------------

  145.   # ● オブジェクト初期化

  146.   #     x     : ウィンドウの X 座標

  147.   #     y     : ウィンドウの Y 座標

  148.   #     actor : アクター

  149.   #--------------------------------------------------------------------------

  150.   def initialize(x, y, actor)

  151.     super(x, y, Graphics.width / 2, WLH + 32)

  152.     @actor = actor

  153.     refresh

  154.   end

  155.   #--------------------------------------------------------------------------

  156.   # ● リフレッシュ

  157.   #--------------------------------------------------------------------------

  158.   def refresh

  159.     self.contents.clear

  160.     draw_actor_name(@actor, 0, 0)

  161.     # EP 制を使用する場合は EP を描画

  162.     if $imported["EquipExtension"] && KGC::EquipExtension::USE_EP_SYSTEM

  163.       draw_actor_ep(@actor, 116, 0, Graphics.width / 2 - 148)

  164.     end

  165.   end

  166. end


  167. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★


  168. #==============================================================================

  169. # ■ Window_Equip

  170. #==============================================================================


  171. class Window_Equip < Window_Selectable


  172.   unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW


  173.   #--------------------------------------------------------------------------

  174.   # ● カーソルを 1 ページ後ろに移動

  175.   #--------------------------------------------------------------------------

  176.   def cursor_pagedown

  177.     return if Input.repeat?(Input::R)

  178.     super

  179.   end

  180.   #--------------------------------------------------------------------------

  181.   # ● カーソルを 1 ページ前に移動

  182.   #--------------------------------------------------------------------------

  183.   def cursor_pageup

  184.     return if Input.repeat?(Input::L)

  185.     super

  186.   end


  187.   end  # <-- unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW


  188.   #--------------------------------------------------------------------------

  189.   # ● フレーム更新

  190.   #--------------------------------------------------------------------------

  191.   def update

  192.     super

  193.     return unless self.active


  194.     if Input.repeat?(Input::RIGHT)

  195.       Sound.play_cursor

  196.       cursor_pagedown

  197.     elsif Input.repeat?(Input::LEFT)

  198.       Sound.play_cursor

  199.       cursor_pageup

  200.     end

  201.   end

  202. end


  203. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★


  204. #==============================================================================

  205. # ■ Window_EquipItem

  206. #==============================================================================


  207. class Window_EquipItem < Window_Item

  208.   #--------------------------------------------------------------------------

  209.   # ● オブジェクト初期化

  210.   #     x          : ウィンドウの X 座標

  211.   #     y          : ウィンドウの Y 座標

  212.   #     width      : ウィンドウの幅

  213.   #     height     : ウィンドウの高さ

  214.   #     actor      : アクター

  215.   #     equip_type : 装備部位

  216.   #--------------------------------------------------------------------------

  217.   alias initialize_KGC_ExtendedEquipScene initialize

  218.   def initialize(x, y, width, height, actor, equip_type)

  219.     width = Graphics.width / 2


  220.     initialize_KGC_ExtendedEquipScene(x, y, width, height, actor, equip_type)


  221.     @column_max = 1

  222.     refresh

  223.   end

  224.   #--------------------------------------------------------------------------

  225.   # ● リフレッシュ

  226.   #--------------------------------------------------------------------------

  227.   alias refresh_KGC_ExtendedEquipScene refresh  unless $@

  228.   def refresh

  229.     return if @column_max == 2  # 無駄な描画はしない


  230.     refresh_KGC_ExtendedEquipScene

  231.   end

  232. end


  233. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★


  234. #==============================================================================

  235. # □ Window_ExtendedEquipStatus

  236. #------------------------------------------------------------------------------

  237. #   拡張装備画面で、アクターの能力値変化を表示するウィンドウです。

  238. #==============================================================================


  239. class Window_ExtendedEquipStatus < Window_EquipStatus

  240.   #--------------------------------------------------------------------------

  241.   # ○ 公開インスタンス変数

  242.   #--------------------------------------------------------------------------

  243.   attr_writer   :equip_type               # 装備タイプ

  244.   #--------------------------------------------------------------------------

  245.   # ● オブジェクト初期化

  246.   #     x     : ウィンドウの X 座標

  247.   #     y     : ウィンドウの Y 座標

  248.   #     actor : アクター

  249.   #--------------------------------------------------------------------------

  250.   def initialize(x, y, actor)

  251.     @equip_type = -1

  252.     @caption_cache = nil

  253.     super(x, y, actor)

  254.     @new_item = nil

  255.     @new_param = {}

  256.     refresh

  257.   end

  258.   #--------------------------------------------------------------------------

  259.   # ● 解放

  260.   #--------------------------------------------------------------------------

  261.   def dispose

  262.     super

  263.     @caption_cache.dispose if @caption_cache != nil

  264.   end

  265.   #--------------------------------------------------------------------------

  266.   # ● ウィンドウ内容の作成

  267.   #--------------------------------------------------------------------------

  268.   def create_contents

  269.     self.contents.dispose

  270.     self.contents = Bitmap.new(Graphics.width / 2 - 32, height - 32)

  271.   end

  272.   #--------------------------------------------------------------------------

  273.   # ● リフレッシュ

  274.   #--------------------------------------------------------------------------

  275.   def refresh

  276.     return if @equip_type < 0


  277.     if @caption_cache == nil

  278.       create_cache

  279.     else

  280.       self.contents.clear

  281.       self.contents.blt(0, 0, @caption_cache, @caption_cache.rect)

  282.     end

  283.     draw_item_name(@actor.equips[@equip_type], 0, 0)

  284.     draw_item_name(@new_item, 24, WLH)

  285.     KGC::ExtendedEquipScene::EQUIP_PARAMS.each_with_index { |param, i|

  286.       draw_parameter(0, WLH * (i + 2), param)

  287.     }

  288.   end

  289.   #--------------------------------------------------------------------------

  290.   # ○ キャッシュ生成

  291.   #--------------------------------------------------------------------------

  292.   def create_cache

  293.     create_contents


  294.     self.contents.font.color = system_color

  295.     self.contents.draw_text(0, WLH, 20, WLH, "→")

  296.     # パラメータ描画

  297.     KGC::ExtendedEquipScene::EQUIP_PARAMS.each_with_index { |param, i|

  298.       draw_parameter_name(0, WLH * (i + 2), param)

  299.     }


  300.     @caption_cache = Bitmap.new(self.contents.width, self.contents.height)

  301.     @caption_cache.blt(0, 0, self.contents, self.contents.rect)

  302.   end

  303.   #--------------------------------------------------------------------------

  304.   # ○ 能力値名の描画

  305.   #     x    : 描画先 X 座標

  306.   #     y    : 描画先 Y 座標

  307.   #     type : 能力値の種類

  308.   #--------------------------------------------------------------------------

  309.   def draw_parameter_name(x, y, type)

  310.     case type

  311.     when :maxhp

  312.       name = Vocab.hp

  313.     when :maxmp

  314.       name = Vocab.mp

  315.     when :atk

  316.       name = Vocab.atk

  317.     when :def

  318.       name = Vocab.def

  319.     when :spi

  320.       name = Vocab.spi

  321.     when :agi

  322.       name = Vocab.agi

  323.     when :hit

  324.       name = Vocab.hit

  325.     when :eva

  326.       name = Vocab.eva

  327.     when :cri

  328.       name = Vocab.cri

  329.     end

  330.     self.contents.font.color = system_color

  331.     self.contents.draw_text(x + 4, y, 96, WLH, name)

  332.     self.contents.font.color = system_color

  333.     self.contents.draw_text(x + 156, y, 20, WLH, "→", 1)

  334.   end

  335.   #--------------------------------------------------------------------------

  336.   # ● 装備変更後の能力値設定

  337.   #     new_param : 装備変更後のパラメータの配列

  338.   #     new_item  : 変更後の装備

  339.   #--------------------------------------------------------------------------

  340.   def set_new_parameters(new_param, new_item)

  341.     changed = false

  342.     # パラメータ変化判定

  343.     KGC::ExtendedEquipScene::EQUIP_PARAMS.each { |k|

  344.       if @new_param[k] != new_param[k]

  345.         changed = true

  346.         break

  347.       end

  348.     }

  349.     changed |= (@new_item != new_item)


  350.     if changed

  351.       @new_item = new_item

  352.       @new_param = new_param

  353.       refresh

  354.     end

  355.   end

  356.   #--------------------------------------------------------------------------

  357.   # ● 能力値の描画

  358.   #     x    : 描画先 X 座標

  359.   #     y    : 描画先 Y 座標

  360.   #     type : 能力値の種類

  361.   #--------------------------------------------------------------------------

  362.   def draw_parameter(x, y, type)

  363.     case type

  364.     when :maxhp

  365.       value = @actor.maxhp

  366.     when :maxmp

  367.       value = @actor.maxmp

  368.     when :atk

  369.       value = @actor.atk

  370.     when :def

  371.       value = @actor.def

  372.     when :spi

  373.       value = @actor.spi

  374.     when :agi

  375.       value = @actor.agi

  376.     when :hit

  377.       value = @actor.hit

  378.     when :eva

  379.       value = @actor.eva

  380.     when :cri

  381.       value = @actor.cri

  382.     end

  383.     new_value = @new_param[type]

  384.     self.contents.font.color = normal_color

  385.     self.contents.draw_text(x + 106, y, 48, WLH, value, 2)

  386.     if new_value != nil

  387.       self.contents.font.color = new_parameter_color(value, new_value)

  388.       self.contents.draw_text(x + 176, y, 48, WLH, new_value, 2)

  389.     end

  390.   end

  391. end


  392. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★


  393. #==============================================================================

  394. # □ Window_ExtendedEquipAPViewer

  395. #------------------------------------------------------------------------------

  396. #   拡張装備画面で、習得スキルを表示するウィンドウです。

  397. #==============================================================================


  398. if $imported["EquipLearnSkill"]

  399. class Window_ExtendedEquipAPViewer < Window_APViewer

  400.   #--------------------------------------------------------------------------

  401.   # ● 公開インスタンス変数

  402.   #--------------------------------------------------------------------------

  403.   attr_reader   :item                     # 表示対象のアイテム

  404.   #--------------------------------------------------------------------------

  405.   # ● オブジェクト初期化

  406.   #     x      : ウィンドウの X 座標

  407.   #     y      : ウィンドウの Y 座標

  408.   #     width  : ウィンドウの幅

  409.   #     height : ウィンドウの高さ

  410.   #     actor  : アクター

  411.   #--------------------------------------------------------------------------

  412.   def initialize(x, y, width, height, actor)

  413.     @item = nil

  414.     super

  415.     self.index = -1

  416.     self.active = false

  417.   end

  418.   #--------------------------------------------------------------------------

  419.   # ○ アイテム設定

  420.   #--------------------------------------------------------------------------

  421.   def item=(new_item)

  422.     @item = new_item

  423.     refresh

  424.   end

  425.   #--------------------------------------------------------------------------

  426.   # ○ リフレッシュ

  427.   #--------------------------------------------------------------------------

  428.   def refresh

  429.     @data = []

  430.     @can_gain_ap_skills = @actor.can_gain_ap_skills

  431.     @equipment_skills = @actor.equipment_skills(true)


  432.     skills = (@item == nil ? [] : @item.learn_skills)

  433.     skills.each { |i|

  434.       @data << $data_skills[i]

  435.     }

  436.     @item_max = @data.size

  437.     create_contents

  438.     draw_caption

  439.     @item_max.times { |i| draw_item(i) }

  440.   end

  441.   #--------------------------------------------------------------------------

  442.   # ○ キャプションを描画

  443.   #--------------------------------------------------------------------------

  444.   def draw_caption

  445.     self.contents.font.color = system_color

  446.     self.contents.draw_text(0, 0, width - 96, WLH,

  447.       KGC::ExtendedEquipScene::AP_WINDOW_CAPTION, 1)

  448.     self.contents.draw_text(width - 96, 0, 64, WLH, Vocab.ap, 1)

  449.     self.contents.font.color = normal_color

  450.   end

  451.   #--------------------------------------------------------------------------

  452.   # ○ スキルをマスク表示するかどうか

  453.   #     skill : スキル

  454.   #--------------------------------------------------------------------------

  455.   def mask?(skill)

  456.     return false

  457.   end

  458.   #--------------------------------------------------------------------------

  459.   # ○ 項目の描画

  460.   #     index : 項目番号

  461.   #--------------------------------------------------------------------------

  462.   def draw_item(index)

  463.     rect = item_rect(index)

  464.     rect.y += WLH

  465.     self.contents.clear_rect(rect)

  466.     skill = @data[index]

  467.     if skill != nil

  468.       draw_item_name(skill, rect.x, rect.y)

  469.       if skill.need_ap > 0

  470.         if @actor.ap_full?(skill) || @actor.skill_learn?(skill)

  471.           # マスター

  472.           text = Vocab.full_ap_skill

  473.         else

  474.           # AP 蓄積中

  475.           text = sprintf("%4d/%4d", @actor.skill_ap(skill.id), skill.need_ap)

  476.         end

  477.       end

  478.       # AP を描画

  479.       rect.x = rect.width - 80

  480.       rect.width = 80

  481.       self.contents.font.color = normal_color

  482.       self.contents.draw_text(rect, text, 2)

  483.     end

  484.   end

  485. end

  486. end  # <-- if $imported["EquipLearnSkill"]


  487. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★


  488. #==============================================================================

  489. # ■ Scene_Equip

  490. #==============================================================================


  491. class Scene_Equip < Scene_Base

  492.   #--------------------------------------------------------------------------

  493.   # ○ 定数

  494.   #--------------------------------------------------------------------------

  495.   STANDARD_WIDTH  = Graphics.width / 2

  496.   ANIMATION_SPPED = 8

  497.   #--------------------------------------------------------------------------

  498.   # ● 開始処理

  499.   #--------------------------------------------------------------------------

  500.   alias start_KGC_ExtendedEquipScene start

  501.   def start

  502.     start_KGC_ExtendedEquipScene


  503.     # ステータスウィンドウを作り直す

  504.     @status_window.dispose

  505.     @status_window = Window_ExtendedEquipStatus.new(0, 0, @actor)


  506.     create_command_window


  507.     @last_item = RPG::Weapon.new

  508.     @base_info_window = Window_EquipBaseInfo.new(

  509.       0, @help_window.height, @actor)


  510.     if $imported["EquipLearnSkill"] && KGC::ExtendedEquipScene::SHOW_AP_WINDOW

  511.       @ap_window = Window_ExtendedEquipAPViewer.new(0, 0, 64, 64, @actor)

  512.     end


  513.     adjust_window_for_extended_equiop_scene

  514.     Graphics.frame_reset

  515.   end

  516.   #--------------------------------------------------------------------------

  517.   # ○ ウィンドウの座標・サイズを拡張装備画面向けに調整

  518.   #--------------------------------------------------------------------------

  519.   def adjust_window_for_extended_equiop_scene

  520.     @base_info_window.width = @equip_window.width


  521.     @equip_window.x = 0

  522.     @equip_window.y = @base_info_window.y + @base_info_window.height

  523.     @equip_window.height = Graphics.height - @equip_window.y

  524.     @equip_window.active = false

  525.     @equip_window.z = 100


  526.     @status_window.x = 0

  527.     @status_window.y = @equip_window.y

  528.     @status_window.width = STANDARD_WIDTH

  529.     @status_window.height = @equip_window.height

  530.     @status_window.visible = false

  531.     @status_window.z = 100


  532.     @item_windows.each { |window|

  533.       window.x = @equip_window.width

  534.       window.y = @help_window.height

  535.       window.z = 50

  536.       window.height = Graphics.height - @help_window.height

  537.     }


  538.     if @ap_window != nil

  539.       @ap_window.width = @item_windows[0].width

  540.       @ap_window.height =

  541.         (KGC::ExtendedEquipScene::AP_WINDOW_SKILLS + 1) * Window_Base::WLH + 32

  542.       @ap_window.x = @equip_window.width

  543.       @ap_window.y = Graphics.height - @ap_window.height

  544.       @ap_window.z = @item_windows[0].z + 10

  545.       @ap_window.refresh

  546.     end


  547.     # コマンドウィンドウ不使用の場合

  548.     unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW

  549.       @command_window.visible = false

  550.       @command_window.active = false

  551.       @equip_window.active = true

  552.       @equip_window.call_update_help

  553.     end

  554.   end

  555.   #--------------------------------------------------------------------------

  556.   # ○ コマンドウィンドウの作成

  557.   #--------------------------------------------------------------------------

  558.   def create_command_window

  559.     @command_window = Window_ExtendedEquipCommand.new

  560.     @command_window.help_window = @help_window

  561.     @command_window.active = true

  562.     @command_window.x = (Graphics.width - @command_window.width) / 2

  563.     @command_window.y = (Graphics.height - @command_window.height) / 2

  564.     @command_window.update_help


  565.     # 装備固定なら「最強装備」「すべて外す」を無効化

  566.     if @actor.fix_equipment

  567.       @command_window.draw_item(1, false)

  568.       @command_window.draw_item(2, false)

  569.     end

  570.   end

  571.   #--------------------------------------------------------------------------

  572.   # ● 終了処理

  573.   #--------------------------------------------------------------------------

  574.   alias terminate_KGC_ExtendedEquipScene terminate

  575.   def terminate

  576.     terminate_KGC_ExtendedEquipScene


  577.     @command_window.dispose

  578.     @base_info_window.dispose

  579.     @ap_window.dispose if @ap_window != nil

  580.   end

  581.   #--------------------------------------------------------------------------

  582.   # ○ ウィンドウをリフレッシュ

  583.   #--------------------------------------------------------------------------

  584.   def refresh_window

  585.     @base_info_window.refresh

  586.     @equip_window.refresh

  587.     @status_window.refresh

  588.     @item_windows.each { |window| window.refresh }

  589.     @ap_window.refresh if @ap_window != nil

  590.     Graphics.frame_reset

  591.   end

  592.   #--------------------------------------------------------------------------

  593.   # ● フレーム更新

  594.   #--------------------------------------------------------------------------

  595.   alias update_KGC_ExtendedEquipScene update

  596.   def update

  597.     update_command_window

  598.     if @command_window.active

  599.       update_KGC_ExtendedEquipScene

  600.       update_command_selection

  601.     else

  602.       update_KGC_ExtendedEquipScene

  603.       update_ap_window

  604.     end

  605.   end

  606.   #--------------------------------------------------------------------------

  607.   # ○ コマンドウィンドウの更新

  608.   #--------------------------------------------------------------------------

  609.   def update_command_window

  610.     @command_window.update

  611.   end

  612.   #--------------------------------------------------------------------------

  613.   # ● ステータスウィンドウの更新

  614.   #--------------------------------------------------------------------------

  615.   def update_status_window

  616.     @base_info_window.update

  617.     @status_window.update


  618.     if @command_window.active || @equip_window.active

  619.       @status_window.set_new_parameters({}, nil)

  620.     elsif @item_window.active

  621.       return if @last_item == @item_window.item


  622.       @last_item = @item_window.item

  623.       temp_actor = Marshal.load(Marshal.dump(@actor))

  624.       temp_actor.change_equip(@equip_window.index, @item_window.item, true)

  625.       param = {

  626.         :maxhp => temp_actor.maxhp,

  627.         :maxmp => temp_actor.maxmp,

  628.         :atk   => temp_actor.atk,

  629.         :def   => temp_actor.def,

  630.         :spi   => temp_actor.spi,

  631.         :agi   => temp_actor.agi,

  632.         :hit   => temp_actor.hit,

  633.         :eva   => temp_actor.eva,

  634.         :cri   => temp_actor.cri,

  635.       }

  636.       @status_window.equip_type = @equip_window.index

  637.       @status_window.set_new_parameters(param, @last_item)

  638.       Graphics.frame_reset

  639.     end

  640.   end

  641.   #--------------------------------------------------------------------------

  642.   # ○ AP ウィンドウの更新

  643.   #--------------------------------------------------------------------------

  644.   def update_ap_window

  645.     return if @ap_window == nil


  646.     # 表示/非表示切り替え

  647.     button = KGC::ExtendedEquipScene::AP_WINDOW_BUTTON

  648.     if button != nil && Input.trigger?(button)

  649.       Sound.play_decision

  650.       if @ap_window.openness == 255

  651.         @ap_window.close

  652.       else

  653.         @ap_window.open

  654.       end

  655.     end


  656.     # 表示内容更新

  657.     @ap_window.update

  658.     new_item = (@equip_window.active ? @equip_window.item : @item_window.item)

  659.     @ap_window.item = new_item if @ap_window.item != new_item


  660.     # 位置更新

  661.     ay = @ap_window.y

  662.     ayb = @ap_window.y + @ap_window.height  # AP window: Bottom

  663.     cy = @item_window.y + 16

  664.     cy += @item_window.cursor_rect.y if @item_window.active

  665.     cyb = cy + Window_Base::WLH             # Cursor rect: Bottom

  666.     bottom = (ay != @item_window.y)

  667.     if bottom

  668.       # 下で被る

  669.       @ap_window.y = @item_window.y if ay < cyb

  670.     else

  671.       # 上で被る

  672.       @ap_window.y = Graphics.height - @ap_window.height if cy < ayb

  673.     end

  674.   end

  675.   #--------------------------------------------------------------------------

  676.   # ○ コマンド選択の更新

  677.   #--------------------------------------------------------------------------

  678.   def update_command_selection

  679.     update_window_position_for_equip_selection

  680.     if Input.trigger?(Input::B)

  681.       Sound.play_cancel

  682.       return_scene

  683.     elsif Input.trigger?(Input::R)

  684.       Sound.play_cursor

  685.       next_actor

  686.     elsif Input.trigger?(Input::L)

  687.       Sound.play_cursor

  688.       prev_actor

  689.     elsif Input.trigger?(Input::C)

  690.       case @command_window.index

  691.       when 0  # 装備変更

  692.         Sound.play_decision

  693.         # 装備部位ウィンドウに切り替え

  694.         @equip_window.active   = true

  695.         @command_window.active = false

  696.         @command_window.close

  697.       when 1  # 最強装備

  698.         if @actor.fix_equipment

  699.           Sound.play_buzzer

  700.           return

  701.         end

  702.         Sound.play_equip

  703.         process_equip_strongest

  704.       when 2  # すべて外す

  705.         if @actor.fix_equipment

  706.           Sound.play_buzzer

  707.           return

  708.         end

  709.         Sound.play_equip

  710.         process_remove_all

  711.       end

  712.     end

  713.   end

  714.   #--------------------------------------------------------------------------

  715.   # ● 装備部位選択の更新

  716.   #--------------------------------------------------------------------------

  717.   alias update_equip_selection_KGC_ExtendedEquipScene update_equip_selection

  718.   def update_equip_selection

  719.     update_window_position_for_equip_selection

  720.     if Input.trigger?(Input::A)

  721.       if @actor.fix_equipment

  722.         Sound.play_buzzer

  723.         return

  724.       end

  725.       # 選択している装備品を外す

  726.       Sound.play_equip

  727.       @actor.change_equip(@equip_window.index, nil)

  728.       refresh_window

  729.     elsif Input.trigger?(Input::B)

  730.       Sound.play_cancel

  731.       if KGC::ExtendedEquipScene::USE_COMMAND_WINDOW

  732.         show_command_window

  733.       else

  734.         # コマンドウィンドウ不使用なら終了

  735.         return_scene

  736.       end

  737.       return

  738.     elsif Input.trigger?(Input::R)

  739.       unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW

  740.         # コマンドウィンドウ不使用時のみ切り替え

  741.         Sound.play_cursor

  742.         next_actor

  743.         return

  744.       end

  745.     elsif Input.trigger?(Input::L)

  746.       unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW

  747.         # コマンドウィンドウ不使用時のみ切り替え

  748.         Sound.play_cursor

  749.         prev_actor

  750.         return

  751.       end

  752.     elsif Input.trigger?(Input::C)

  753.       # 前回のアイテムをダミーにする

  754.       @last_item = RPG::Weapon.new

  755.     end


  756.     update_equip_selection_KGC_ExtendedEquipScene

  757.   end

  758.   #--------------------------------------------------------------------------

  759.   # ○ コマンドウィンドウに切り替え

  760.   #--------------------------------------------------------------------------

  761.   def show_command_window

  762.     @equip_window.active   = false

  763.     @command_window.active = true

  764.     @command_window.open

  765.   end

  766.   #--------------------------------------------------------------------------

  767.   # ● アイテム選択の更新

  768.   #--------------------------------------------------------------------------

  769.   alias update_item_selection_KGC_ExtendedEquipScene update_item_selection

  770.   def update_item_selection

  771.     update_window_position_for_item_selection


  772.     update_item_selection_KGC_ExtendedEquipScene


  773.     if Input.trigger?(Input::C)

  774.       @base_info_window.refresh

  775.     end

  776.   end

  777.   #--------------------------------------------------------------------------

  778.   # ○ ウィンドウ位置の更新 (装備部位選択)

  779.   #--------------------------------------------------------------------------

  780.   def update_window_position_for_equip_selection

  781.     return if @item_window.x == @equip_window.width


  782.     @base_info_window.width = @equip_window.width

  783.     @item_window.x = [@item_window.x + ANIMATION_SPPED, @equip_window.width].min

  784.     if @ap_window != nil

  785.       @ap_window.x = @item_window.x

  786.     end

  787.     @equip_window.visible  = true

  788.     @status_window.visible = false

  789.   end

  790.   #--------------------------------------------------------------------------

  791.   # ○ ウィンドウ位置の更新 (アイテム選択)

  792.   #--------------------------------------------------------------------------

  793.   def update_window_position_for_item_selection

  794.     return if @item_window.x == STANDARD_WIDTH


  795.     @base_info_window.width = STANDARD_WIDTH

  796.     @item_window.x = [@item_window.x - ANIMATION_SPPED, STANDARD_WIDTH].max

  797.     if @ap_window != nil

  798.       @ap_window.x = @item_window.x

  799.     end

  800.     @equip_window.visible  = false

  801.     @status_window.visible = true

  802.   end

  803.   #--------------------------------------------------------------------------

  804.   # ○ 最強装備の処理

  805.   #--------------------------------------------------------------------------

  806.   def process_equip_strongest

  807.     # 以前のパラメータを保存

  808.     last_hp = @actor.hp

  809.     last_mp = @actor.mp

  810.     # 最強装備対象の種別を取得

  811.     types = [-1]

  812.     types += ($imported["EquipExtension"] ? @actor.equip_type : [0, 1, 2, 3])

  813.     ignore_types   = KGC::ExtendedEquipScene::IGNORE_STRONGEST_KIND.clone

  814.     judged_indices = []

  815.     weapon_range   = 0..(@actor.two_swords_style ? 1 : 0)


  816.     # 装備対象の武具をすべて外す

  817.     types.each_with_index { |t, i|

  818.       @actor.change_equip(i, nil) unless ignore_types.include?(t)

  819.     }


  820.     # 最強武器装備

  821.     weapon_range.each { |i|

  822.       judged_indices << i

  823.       # 1本目が両手持ちの場合は2本目を装備しない

  824.       if @actor.two_swords_style

  825.         weapon = @actor.weapons[0]

  826.         next if weapon != nil && weapon.two_handed

  827.       end

  828.       weapon = get_strongest_weapon(i)

  829.       @actor.change_equip(i, weapon) if weapon != nil

  830.     }


  831.     # 両手持ち武器を持っている場合は盾 (防具1) を装備しない

  832.     weapon = @actor.weapons[0]

  833.     if weapon != nil && weapon.two_handed

  834.       judged_indices |= [1]

  835.     end


  836.     # 最強防具装備

  837.     exist = true

  838.     while exist

  839.       strongest = get_strongest_armor(types, ignore_types, judged_indices)

  840.       if strongest != nil

  841.         @actor.change_equip(strongest.index, strongest.item)

  842.         judged_indices << strongest.index

  843.       else

  844.         exist = false

  845.       end

  846.     end


  847.     # 以前のパラメータを復元

  848.     @actor.hp = last_hp

  849.     @actor.mp = last_mp


  850.     refresh_window

  851.   end

  852.   #--------------------------------------------------------------------------

  853.   # ○ 最も強力な武器を取得

  854.   #     equip_type : 装備部位

  855.   #    該当するアイテムがなければ nil を返す。

  856.   #--------------------------------------------------------------------------

  857.   def get_strongest_weapon(equip_type)

  858.     # 装備可能な武器を取得

  859.     equips = $game_party.items.find_all { |item|

  860.       valid = item.is_a?(RPG::Weapon) && @actor.equippable?(item)

  861.       if valid && $imported["EquipExtension"]

  862.         valid = @actor.ep_condition_clear?(equip_type, item)

  863.       end

  864.       valid

  865.     }

  866.     return nil if equips.empty?


  867.     param_order = KGC::ExtendedEquipScene::STRONGEST_WEAPON_PARAM_ORDER

  868.     return get_strongest_item(equips, param_order)

  869.   end

  870.   #--------------------------------------------------------------------------

  871.   # ○ 最も強力なアイテムを取得

  872.   #     equips      : 装備品リスト

  873.   #     param_order : パラメータ優先順位

  874.   #--------------------------------------------------------------------------

  875.   def get_strongest_item(equips, param_order)

  876.     result = []

  877.     param_order.each { |param|

  878.       # パラメータ順にソート

  879.       get_proc = KGC::ExtendedEquipScene::GET_PARAM_PROC[param]

  880.       equips   = equips.sort_by { |item| -get_proc.call(item) }

  881.       # 最もパラメータが高いアイテムを取得

  882.       highest = equips[0]

  883.       result  = equips.find_all { |item|

  884.         get_proc.call(highest) == get_proc.call(item)

  885.       }

  886.       # 候補が1つに絞れたら終了

  887.       break if result.size == 1

  888.       equips = result.clone

  889.     }


  890.     # 最も ID が大きいアイテムを取得

  891.     return (result.sort_by { |v| -v.id })[0]

  892.   end

  893.   #--------------------------------------------------------------------------

  894.   # ○ 最も強力な防具を取得 (StrongestItem)

  895.   #     types          : 装備部位リスト

  896.   #     ignore_types   : 無視する部位リスト

  897.   #     judged_indices : 判定済み部位番号リスト

  898.   #    該当するアイテムがなければ nil を返す。

  899.   #--------------------------------------------------------------------------

  900.   def get_strongest_armor(types, ignore_types, judged_indices)

  901.     # 装備可能な防具を取得

  902.     equips = $game_party.items.find_all { |item|

  903.       item.is_a?(RPG::Armor) &&

  904.         !ignore_types.include?(item.kind) &&

  905.         @actor.equippable?(item)

  906.     }

  907.     return nil if equips.empty?


  908.     param_order = KGC::ExtendedEquipScene::STRONGEST_ARMOR_PARAM_ORDER


  909.     # 最強防具を探す

  910.     until equips.empty?

  911.       armor = get_strongest_item(equips, param_order)

  912.       types.each_with_index { |t, i|

  913.         next if judged_indices.include?(i)

  914.         next if armor.kind != t

  915.         if $imported["EquipExtension"]

  916.           next unless @actor.ep_condition_clear?(i, armor)

  917.         end

  918.         return KGC::ExtendedEquipScene::StrongestItem.new(i, armor)

  919.       }

  920.       equips.delete(armor)

  921.     end

  922.     return nil

  923.   end

  924.   #--------------------------------------------------------------------------

  925.   # ○ すべて外す処理

  926.   #--------------------------------------------------------------------------

  927.   def process_remove_all

  928.     type_max = ($imported["EquipExtension"] ? @actor.equip_type.size : 4) + 1

  929.     type_max.times { |i| @actor.change_equip(i, nil) }

  930.     refresh_window

  931.   end

  932. end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1