#============================================================================== # ■ XP-RGSS-19 動くアクター(ショップ) by Claimh #------------------------------------------------------------------------------ #  ・ショップ画面にて、装備可能なアクターのみ動きます。 #============================================================================== module Move_Actor # 動作タイプ # 0:歩く  1:回る SHOP_MOVE = 0 # 動作タイプ<歩く>の向き(2:下 4:左 6:右 8:上) SHOP_WA_DIREC = 2 end class Window_ShopStatus < Window_Base #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :actor_shop_sprite # アクター #-------------------------------------------------------------------------- # ● オブジェクト初期化(再定義) #-------------------------------------------------------------------------- def initialize super(368, 128, 272, 352) self.contents = Bitmap.new(width - 32, height - 32) @item = nil @actor_shop_sprite = [] for i in 0...$game_party.actors.size actor = $game_party.actors[i] @actor_shop_sprite[actor.id] = Sprite_MoveActor.new(nil, actor) @actor_shop_sprite[actor.id].move_type = Move_Actor::SHOP_MOVE @actor_shop_sprite[actor.id].direction = Move_Actor::SHOP_WA_DIREC @actor_shop_sprite[actor.id].x = 400 @actor_shop_sprite[actor.id].y = i * 69 + 228 @actor_shop_sprite[actor.id].z = 160 @actor_shop_sprite[actor.id].move_stop = true end refresh end #-------------------------------------------------------------------------- # ● リフレッシュ(再定義) #-------------------------------------------------------------------------- def refresh for actor in $game_party.actors @actor_shop_sprite[actor.id].move_stop = true @actor_shop_sprite[actor.id].z = 160 end 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) equip_name = $data_system.words.atk.to_s when RPG::Armor number = $game_party.armor_number(@item.id) equip_name = "防御力" # Window_ShopStatusの仕様上仕方ない。。。 end 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) if @item.is_a?(RPG::Item) return end # 装備品追加情報 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 @item.is_a?(RPG::Weapon) item1 = $data_weapons[actor.weapon_id] elsif @item.kind == 0 item1 = $data_armors[actor.armor1_id] elsif @item.kind == 1 item1 = $data_armors[actor.armor2_id] elsif @item.kind == 2 item1 = $data_armors[actor.armor3_id] else item1 = $data_armors[actor.armor4_id] end # 装備可能な場合 if actor.equippable?(@item) @actor_shop_sprite[actor.id].move_stop = false # 武器の場合 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 # パラメータの変化値を描画 self.contents.draw_text(124, 80 + 69 * i, 112, 32, sprintf("%+d", change), 2) end # アイテムを描画 if item1 != nil x = 4 y = 80 + 69 * i bitmap = RPG::Cache.icon(item1.icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 212, 32, item1.name) end end self.contents.font.color = normal_color # 攻撃/防御 名前表示 self.contents.draw_text(144, 48, 96, 32, equip_name, 2) end #-------------------------------------------------------------------------- # ● 動くアクタースプライト消去 #-------------------------------------------------------------------------- def dispose super for actor in $game_party.actors @actor_shop_sprite[actor.id].dispose end end end class Scene_Shop #-------------------------------------------------------------------------- # ● フレーム更新 (コマンドウィンドウがアクティブの場合) #-------------------------------------------------------------------------- alias update_command_move update_command def update_command update_command_move # C ボタンが押された場合 if Input.trigger?(Input::C) and @command_window.index == 1 for actor in $game_party.actors @status_window.actor_shop_sprite[actor.id].z = 0 end end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias update_shop_move update_buy def update_buy update_shop_move for actor in $game_party.actors @status_window.actor_shop_sprite[actor.id].update end # B ボタンが押された場合 if Input.trigger?(Input::B) for actor in $game_party.actors @status_window.actor_shop_sprite[actor.id].z = 0 end end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias update_sellend_move update_sell def update_sell update_sellend_move for actor in $game_party.actors @status_window.actor_shop_sprite[actor.id].update end # B ボタンが押された場合 if Input.trigger?(Input::B) for actor in $game_party.actors @status_window.actor_shop_sprite[actor.id].z = 0 end end # C ボタンが押された場合 if Input.trigger?(Input::C) # アイテムが無効の場合、または価格が 0 (売却不可) の場合 if @item == nil or @item.price == 0 for actor in $game_party.actors @status_window.actor_shop_sprite[actor.id].z = 0 end return else for actor in $game_party.actors @status_window.actor_shop_sprite[actor.id].z = 160 end end end end #-------------------------------------------------------------------------- # ● フレーム更新 (個数入力ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- alias update_number_move update_number def update_number update_number_move for actor in $game_party.actors @status_window.actor_shop_sprite[actor.id].update end # B ボタンが押された場合 if Input.trigger?(Input::B) and @command_window.index == 1 for actor in $game_party.actors @status_window.actor_shop_sprite[actor.id].z = 0 end end # C ボタンが押された場合 if Input.trigger?(Input::C) and @command_window.index == 1 for actor in $game_party.actors @status_window.actor_shop_sprite[actor.id].z = 0 end end end end