#****************************************************************************** # # * ステータスウィンドウ # # -------------------------------------------------------------------------- # バージョン : 1.0.0 # 対 応 : RPGツクールVX Ace : RGSS3 # 制 作 者 : CACAO # 配 布 元 : http://cacaosoft.web.fc2.com/ # -------------------------------------------------------------------------- # == 概 要 == # # : デフォルトっぽいステータスです。 # # -------------------------------------------------------------------------- # == 注意事項 == # # ※ このスクリプトの動作には、Custom Menu Base が必要です。 # ※ 横1列のみの場合は左右に、それ以外は上下のみスクロールします。 # # #****************************************************************************** #============================================================================== # ◆ 設定項目 #============================================================================== module CAO::CM::Status #-------------------------------------------------------------------------- # ◇ ウィンドウの位置・サイズ #-------------------------------------------------------------------------- WINDOW_X = 0 # x座標 WINDOW_Y = 108 # y座標 WINDOW_W = 640 # 横幅 WINDOW_H = 300 # 縦幅 #-------------------------------------------------------------------------- # ◇ 1アクターのサイズ #-------------------------------------------------------------------------- ITEM_W = 155 ITEM_H = 270 #-------------------------------------------------------------------------- # ◇ 項目を横に並べる数 #-------------------------------------------------------------------------- COLUMN_MAX = 4 #-------------------------------------------------------------------------- # ◇ 表示項目の設定 #-------------------------------------------------------------------------- ITEM_PARAMS = [] ITEM_PARAMS << [:bust, 2, 10] ITEM_PARAMS << [:pict, -8, -5, "Menu"] ITEM_PARAMS << [:pict, 24, 50, "Menu2"] ITEM_PARAMS << [:name, 4, 5, 108] #ITEM_PARAMS << [:pict, 78, 0, ["mbattler", ""]] ITEM_PARAMS << [:text, 84, 188, "\\C[16]Lv"] ITEM_PARAMS << [:num, 110, 180, "'%2d'%actor.level", "mnum"] ITEM_PARAMS << [:state, 116, 7, 72] ITEM_PARAMS << [:w_hp, 3, 210, 145] ITEM_PARAMS << [:w_mp, 3, 240, 145] #-------------------------------------------------------------------------- # ◇ 戦闘メンバーのみ表示 #-------------------------------------------------------------------------- ::CAO::CM::BATTLER_ONLY = false #-------------------------------------------------------------------------- # ◇ ウィンドウの可視状態 #-------------------------------------------------------------------------- VISIBLE_BACKWINDOW = true end #/////////////////////////////////////////////////////////////////////////////# # # # 下記のスクリプトを変更する必要はありません。 # # # #/////////////////////////////////////////////////////////////////////////////# class Window_MenuStatus include CAO::CM::Status #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y) super(WINDOW_X, WINDOW_Y, window_width, window_height) self.opacity = VISIBLE_BACKWINDOW ? 255 : 0 @canvas = CAO::CM::Canvas.new(self) @pending_index = -1 refresh end #-------------------------------------------------------------------------- # ○ 横に項目が並ぶときの空白の幅を取得 #-------------------------------------------------------------------------- def spacing return 0 end #-------------------------------------------------------------------------- # ○ ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width WINDOW_W end #-------------------------------------------------------------------------- # ○ ウィンドウ高さの取得 #-------------------------------------------------------------------------- def window_height WINDOW_H end #-------------------------------------------------------------------------- # ○ ウィンドウ内容の幅を計算 #-------------------------------------------------------------------------- def contents_width (item_width + spacing) * col_max - spacing end #-------------------------------------------------------------------------- # ● 項目数の取得 #-------------------------------------------------------------------------- def item_max $game_party.members.size end #-------------------------------------------------------------------------- # ● 桁数の取得 #-------------------------------------------------------------------------- def col_max return COLUMN_MAX end #-------------------------------------------------------------------------- # ○ 項目の幅を取得 #-------------------------------------------------------------------------- def item_width ITEM_W end #-------------------------------------------------------------------------- # ○ 項目の高さを取得 #-------------------------------------------------------------------------- def item_height ITEM_H end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) draw_item_background(index) actor = $game_party.members[index] rect = item_rect(index) @canvas.draw_actor_items(actor, rect.x, rect.y, ITEM_PARAMS) end #-------------------------------------------------------------------------- # ● カーソルを下に移動 #-------------------------------------------------------------------------- def cursor_down(wrap = false) if index < item_max - col_max || (wrap && col_max == 1) select((index + col_max) % item_max) elsif col_max != 1 && index < (item_max.to_f/col_max).ceil*col_max-col_max select(item_max - 1) end end end class Scene_Menu #-------------------------------------------------------------------------- # ● ステータスウィンドウの作成 #-------------------------------------------------------------------------- def create_status_window @status_window = Window_MenuStatus.new(0, 0) end #-------------------------------------------------------------------------- # ● ステータスウィンドウの更新 #-------------------------------------------------------------------------- def update_status_window @status_window.unselect unless @status_window.active end #-------------------------------------------------------------------------- # ○ #-------------------------------------------------------------------------- alias _cao_cm_status_check_refresh_window check_refresh_window def check_refresh_window(command) _cao_cm_status_check_refresh_window(command) @status_window.refresh if command.refresh.include?(:status) end end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :in_menu # メニュー中フラグ #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def in_menu return true if SceneManager.scene_is?(Scene_Menu) return SceneManager.instance_variable_get(:@stack).any? do |obj| obj.is_a?(Scene_Menu) end end #-------------------------------------------------------------------------- # ○ メンバーの取得 #-------------------------------------------------------------------------- def members return battle_members if in_battle return battle_members if CAO::CM::BATTLER_ONLY && in_menu return all_members end end class Scene_ItemBase < Scene_MenuBase #-------------------------------------------------------------------------- # ○ サブウィンドウの表示 #-------------------------------------------------------------------------- def show_sub_window(window) window.x = (Graphics.width - window.width) / 2 window.y = (Graphics.height - window.height) / 2 window.z = @viewport.z# + 1 @last_viewport_color = @viewport.color.dup @viewport.color.set(16, 16, 16, 128) window.show.activate end #-------------------------------------------------------------------------- # ○ サブウィンドウの非表示 #-------------------------------------------------------------------------- def hide_sub_window(window) @viewport.color.set(@last_viewport_color) if @last_viewport_color window.hide.deactivate activate_item_window end end