225 lines
9.2 KiB
Ruby
225 lines
9.2 KiB
Ruby
#******************************************************************************
|
||
#
|
||
# * ステータスウィンドウ
|
||
#
|
||
# --------------------------------------------------------------------------
|
||
# バージョン : 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
|