#==============================================================================
# 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
#==============================================================================
#◆◇◆◇◆-----XRXS54. マップ上で簡易ウィンドウ表示 ver1.0 -----◇◆◇◆◇
# by 刻宮
# 「ディフォルト機能 & 仕様」
# ・$WIN_2 = true。としても、スイッチがONでかつ、アクターが存在しなければ
# ウィンドウは表示されません。この3要素が揃った時にウィンドウを表示します。
# ・逆にこの要素が一つでも欠けるとウィンドウは自動的に非表示になります。
# ・ツクール開始時はスイッチはOFFなので、ONにしないと表示されません。
#------------------------------------------------------------------
# カスタマイズポイント
#(*存在しないスイッチを指定されるとエラーになります。)
#----------------------------------------------------------------
# 使用说明(66RPG提示:本脚本其实难度不是很高,建议学习RGSS略有心得
# 的人尝试自己编写一个同类功能窗口)
#----------------------------------------------------------------
WIN_1 = true # 是否使用1号窗口,true为使用,false为不使用
SWITVH_1 = 56 # 当此编号开关打开的时候窗口显示。如设置为40则40号开关打开,1号窗口显示
OPACITY_1 = 0 # 1号窗口透明度
X_1 = 320 # 1号窗口X坐标
Y_1 = 384 # 1号窗口Y坐标
$WIN_2 = true # 是否使用2号窗口,true为使用,false为不使用
SWITVH_2 = 57 # 当此编号开关打开的时候窗口显示。如设置为41则41号开关打开,2号窗口显示
OPACITY_2 = 0 # 2号窗口透明度
X_2 = 160 # 2号窗口X坐标
Y_2 = 384 # 2号窗口Y坐标
WIN_3 = true # 是否使用3号窗口,true为使用,false为不使用
SWITVH_3 = 42 # 当此编号开关打开的时候窗口显示。如设置为42则42号开关打开,3号窗口显示
OPACITY_3 = 255 # 3号窗口透明度
X_3 = 320 # 3号窗口X坐标
Y_3 = 384 # 3号窗口Y坐标
WIN_4 = true # 是否使用4号窗口,true为使用,false为不使用
SWITVH_4 = 43 # 当此编号开关打开的时候窗口显示。如设置为43则43号开关打开,4号窗口显示
OPACITY_4 = 255 # 4号窗口透明度
X_4 = 480 # 4号窗口X坐标
Y_4 = 384 # 4号窗口Y坐标
SET_SP = [true,true,true,true] # 决定各个窗口是否显示SP数值,true为显示,false为不显示。
OPTION =44 # 决定在对话的时候是否让窗口隐藏的开关编号。
# 比如设置为44,则当44号开关打开,则在对话的时候窗口隐藏
# 否则窗口不隐藏。
#=========================================================================
# ■ Scene_Map
#=========================================================================
class Scene_Map
#---------------------------------------------------------------------
# ● フレーム更新
#---------------------------------------------------------------------
alias main_tokimiya main
def main
# 簡易ウィンドウ1を作成
@simple_window1 = Window_MapStatus.new(X_1,Y_1,0)
@simple_window1.opacity = OPACITY_1
@simple_window1.visible = $game_switches[SWITVH_1]
unless $game_party.actors.size > 0
@simple_window1.visible = false
end
# 簡易ウィンドウ2を作成
@simple_window2 = Window_MapStatus.new(X_2,Y_2,1)
@simple_window2.opacity = OPACITY_2
@simple_window2.visible = $game_switches[SWITVH_2]
unless $game_party.actors.size > 1
@simple_window2.visible = false
end
# 簡易ウィンドウ3を作成
@simple_window3 = Window_MapStatus.new(X_3,Y_3,2)
@simple_window3.opacity = OPACITY_3
@simple_window3.visible = $game_switches[SWITVH_3]
unless $game_party.actors.size > 2
@simple_window3.visible = false
end
# 簡易ウィンドウ4を作成
@simple_window4 = Window_MapStatus.new(X_4,Y_4,3)
@simple_window4.opacity = OPACITY_4
@simple_window4.visible = $game_switches[SWITVH_4]
unless $game_party.actors.size > 3
@simple_window4.visible = false
end
main_tokimiya # 旧メソッドの呼び出し
# 簡易ウィンドウの解放
@simple_window1.dispose
@simple_window2.dispose
@simple_window3.dispose
@simple_window4.dispose
end
#---------------------------------------------------------------------
# ● フレーム更新
#---------------------------------------------------------------------
alias update_tokimiya update
def update
update_tokimiya # 旧メソッドの呼び出し
# 以前のパラメーターと相違があれば、内容を更新する。
#
# ウィンドウ1の更新。
if WIN_1 == true and $game_party.actors.size > 0
# データの更新
actor = $game_party.actors[0]
factor_1 = @simple_window1.before_1[0] != actor.name
factor_2 = @simple_window1.before_1[1] != actor.hp
factor_3 = @simple_window1.before_1[2] != actor.sp
if factor_1 or factor_2 or factor_3
@simple_window1.before_1[0] = actor.name
@simple_window1.before_1[1] = actor.hp
@simple_window1.before_1[2] = actor.sp
@simple_window1.refresh(0)
end
# 非表示機能の実行
if @message_window.visible == true and $game_switches[OPTION] == true
@simple_window1.before_1[3] = false
@simple_window1.visible = false
elsif @simple_window1.before_1[3] != $game_switches[SWITVH_1]
@simple_window1.before_1[3] = $game_switches[SWITVH_1]
@simple_window1.visible = $game_switches[SWITVH_1]
end
end
# ウィンドウ2の更新。
if $WIN_2 == true and $game_party.actors.size > 1
# データの更新
actor = $game_party.actors[1]
factor_1 = @simple_window2.before_2[0] != actor.name
factor_2 = @simple_window2.before_2[1] != actor.hp
factor_3 = @simple_window2.before_2[2] != actor.sp
if factor_1 or factor_2 or factor_3
@simple_window2.before_2[0] = actor.name
@simple_window2.before_2[1] = actor.hp
@simple_window2.before_2[2] = actor.sp
@simple_window2.refresh(1)
# ウィンドウを強制的に生成
@simple_window2.before_2[3] = true
@simple_window2.visible = true
end
# 非表示機能の実行
if @message_window.visible == true and $game_switches[OPTION] == true
@simple_window2.before_2[3] = false
@simple_window2.visible = false
elsif @simple_window2.before_2[3] != $game_switches[SWITVH_2]
@simple_window2.before_2[3] = $game_switches[SWITVH_2]
@simple_window2.visible = $game_switches[SWITVH_2]
end
# アクターが存在しないのにウィンドウが表示されたままの場合。
elsif @simple_window2.visible == true and @simple_window2.before_2 != nil
# ウィンドウを消去。
@simple_window2.before_2[3] = false
@simple_window2.visible = false
end
# ウィンドウ3の更新。
if WIN_3 == true and $game_party.actors.size > 2
# データの更新
actor = $game_party.actors[2]
factor_1 = @simple_window3.before_3[0] != actor.name
factor_2 = @simple_window3.before_3[1] != actor.hp
factor_3 = @simple_window3.before_3[2] != actor.sp
if factor_1 or factor_2 or factor_3
@simple_window3.before_3[0] = actor.name
@simple_window3.before_3[1] = actor.hp
@simple_window3.before_3[2] = actor.sp
@simple_window3.refresh(2)
# ウィンドウを強制的に生成
@simple_window3.before_3[3] = true
@simple_window3.visible = true
end
# 非表示機能の実行
if @message_window.visible == true and $game_switches[OPTION] == true
@simple_window3.before_3[3] = false
@simple_window3.visible = false
elsif @simple_window3.before_3[3] != $game_switches[SWITVH_3]
@simple_window3.before_3[3] = $game_switches[SWITVH_3]
@simple_window3.visible = $game_switches[SWITVH_3]
end
# アクターが存在しないのにウィンドウが表示されたままの場合。
elsif @simple_window3.visible == true and @simple_window3.before_3 != nil
# ウィンドウを消去。
@simple_window3.before_3[3] = false
@simple_window3.visible = false
end
# ウィンドウ4の更新。
if WIN_4 == true and $game_party.actors.size > 3
# データの更新
actor = $game_party.actors[3]
factor_1 = @simple_window4.before_4[0] != actor.name
factor_2 = @simple_window4.before_4[1] != actor.hp
factor_3 = @simple_window4.before_4[2] != actor.sp
if factor_1 or factor_2 or factor_3
@simple_window4.before_4[0] = actor.name
@simple_window4.before_4[1] = actor.hp
@simple_window4.before_4[2] = actor.sp
@simple_window4.refresh(3)
# ウィンドウを強制的に生成
@simple_window4.before_4[3] = true
@simple_window4.visible = true
end
# 非表示機能の実行
if @message_window.visible == true and $game_switches[OPTION] == true
@simple_window4.before_4[3] = false
@simple_window4.visible = false
elsif @simple_window4.before_4[3] != $game_switches[SWITVH_4]
@simple_window4.before_4[3] = $game_switches[SWITVH_4]
@simple_window4.visible = $game_switches[SWITVH_4]
end
# アクターが存在しないのにウィンドウが表示されたままの場合。
elsif @simple_window4.visible == true and @simple_window4.before_4 != nil
# ウィンドウを消去。
@simple_window4.before_4[3] = false
@simple_window4.visible = false
end
end
end
#=========================================================================
# ■ Window_MapStatus,脚本来自[url]www.66rpg.com[/url],转载请注意说明
#=========================================================================
class Window_MapStatus < Window_Base
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :before_1 # 更新前のウィンドウ1のパラメーター
attr_accessor :before_2 # 更新前のウィンドウ2のパラメーター
attr_accessor :before_3 # 更新前のウィンドウ3のパラメーター
attr_accessor :before_4 # 更新前のウィンドウ4のパラメーター
#---------------------------------------------------------------------
# ● フレーム更新
#---------------------------------------------------------------------
def initialize(x,y,id)
#super(x,y,160,96)
super(0,0,640,128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.size = 18
@before_1=[]
@before_2=[]
@before_3=[]
@before_4=[]
# 現段階のアクターのパラメーターと可視状態を記憶。
data
# 項目の描画。
refresh(id)
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def data
# アクター1の記憶(ただし、パーティが1名以上の場合)
if $game_party.actors.size > 0
actor = $game_party.actors[0]
@before_1 = [actor.name, actor.hp, actor.sp,true]
end
# アクター2の記憶(ただし、パーティが2名以上の場合)
if $game_party.actors.size > 1
actor = $game_party.actors[1]
@before_2 = [actor.name, actor.hp, actor.sp,true]
end
# アクター3の記憶(ただし、パーティが3名以上の場合)
if $game_party.actors.size > 2
actor = $game_party.actors[2]
@before_3 = [actor.name, actor.hp, actor.sp,true]
end
# アクター3の記憶(ただし、パーティが4名以上の場合)
if $game_party.actors.size > 3
actor = $game_party.actors[3]
@before_4 = [actor.name, actor.hp, actor.sp,true]
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def refresh(id)
# 再描画のために一旦内容を破棄する
self.contents.clear
# 対応するアクターがいなければ、何もせずに終了する。
actor = $game_party.actors[id]
if actor == nil
return
end
# 名前の描画
draw_actor_name(actor, 0, -5)
# HPの描画
if SET_SP[id]
draw_actor_hp_bar(actor, 0, 18)
else
draw_actor_hp_bar(actor, 0, 28)
end
# SPの描画
if SET_SP[id]
draw_actor_sp_bar(actor, 0, 36)
end
end
end
class Window_Base < Window
#--------------------------------------------------------------------------
# ● HP ゲージの描画
#--------------------------------------------------------------------------
# オリジナルのHP描画を draw_actor_hp_original と名前変更
def draw_actor_hp_bar(actor, x, y, width = 144)
# 変数rateに 現在のHP/MHPを代入
if actor.maxhp != 0
rate = actor.hp.to_f / actor.maxhp
else
rate = 0
end
# plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
# plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
# align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
# align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
# align3:ゲージタイプ 0:左詰め 1:右詰め
plus_x = 0
rate_x = -20#HP条的X
plus_y = 25#HP条的Y
plus_width = 0
rate_width = 50 #HP条的高
height = 10#HP条的高
align1 = 1
align2 = 2
align3 = 0
# グラデーション設定 grade1:空ゲージ grade2:実ゲージ
# (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
grade1 = 1
grade2 = 0
# 色設定。color1:外枠,color2:中枠
# color3:空ゲージダークカラー,color4:空ゲージライトカラー
# color5:実ゲージダークカラー,color6:実ゲージライトカラー
color1 = Color.new(0, 0, 0, 192)
color2 = Color.new(255, 255, 192, 192)
color3 = Color.new(0, 0, 0, 192)
color4 = Color.new(64, 0, 0, 192)
color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
# 変数spに描画するゲージの幅を代入
if actor.maxhp != 0
hp = (width + plus_width) * actor.hp * rate_width / 100 / actor.maxhp
else
hp = 0
end
# ゲージの描画
gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
width, plus_width + width * rate_width / 100,
height, hp, align1, align2, align3,
color1, color2, color3, color4, color5, color6, grade1, grade2)
end
#--------------------------------------------------------------------------
# ● SP ゲージの描画
#--------------------------------------------------------------------------
# オリジナルのSP描画を draw_actor_sp_original と名前変更
def draw_actor_sp_bar(actor, x, y, width = 144)
# 変数rateに 現在のSP/MSPを代入
if actor.maxsp != 0
rate = actor.sp.to_f / actor.maxsp
else
rate = 1
end
# plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
# plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
# align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
# align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
# align3:ゲージタイプ 0:左詰め 1:右詰め
plus_x = 0
rate_x = -20#SP条的X
plus_y = 25#SP条的Y
plus_width = 0
rate_width = 50 #SP条宽
height = 10#SP条的高
align1 = 1
align2 = 2
align3 = 0
# グラデーション設定 grade1:空ゲージ grade2:実ゲージ
# (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
grade1 = 1
grade2 = 0
# 色設定。color1:外枠,color2:中枠
# color3:空ゲージダークカラー,color4:空ゲージライトカラー
# color5:実ゲージダークカラー,color6:実ゲージライトカラー
color1 = Color.new(0, 0, 0, 192)
color2 = Color.new(255, 255, 192, 192)
color3 = Color.new(0, 0, 0, 192)
color4 = Color.new(0, 64, 0, 192)
color5 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
color6 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
# 変数spに描画するゲージの幅を代入
if actor.maxsp != 0
sp = (width + plus_width) * actor.sp * rate_width / 100 / actor.maxsp
else
sp = (width + plus_width) * rate_width / 100
end
# ゲージの描画
gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
width, plus_width + width * rate_width / 100,
height, sp, align1, align2, align3,
color1, color2, color3, color4, color5, color6, grade1, grade2)
# オリジナルのSP描画処理を呼び出し
end
end
def gauge_rect(x, y, rect_width, width, height, gauge, align1, align2, align3,
color1, color2, color3, color4, color5, color6, grade1, grade2)
case align1
when 1
x += (rect_width - width) / 2
when 2
x += rect_width - width
end
case align2
when 1
y -= height / 2
when 2
y -= height
end
# 枠描画
self.contents.fill_rect(x, y, width, height, color1)
self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color2)
if align3 == 0
if grade1 == 2
grade1 = 3
end
if grade2 == 2
grade2 = 3
end
end
if (align3 == 1 and grade1 == 0) or grade1 > 0
color = color3
color3 = color4
color4 = color
end
if (align3 == 1 and grade2 == 0) or grade2 > 0
color = color5
color5 = color6
color6 = color
end
# 空ゲージの描画
self.contents.gradation_rect(x + 2, y + 2, width - 4, height - 4,
color3, color4, grade1)
if align3 == 1
x += width - gauge
end
# 実ゲージの描画
self.contents.gradation_rect(x + 2, y + 2, gauge - 4, height - 4,
color5, color6, grade2)
end
class Bitmap
#--------------------------------------------------------------------------
# ● 矩形をグラデーション表示
# color1 : スタートカラー
# color2 : エンドカラー
# align : 0:横にグラデーション
# 1:縦にグラデーション
# 2:斜めにグラデーション(激重につき注意)
#--------------------------------------------------------------------------
def gradation_rect(x, y, width, height, color1, color2, align = 0)
if align == 0
for i in x...x + width
red = color1.red + (color2.red - color1.red) * (i - x) / (width - 1)
green = color1.green +
(color2.green - color1.green) * (i - x) / (width - 1)
blue = color1.blue +
(color2.blue - color1.blue) * (i - x) / (width - 1)
alpha = color1.alpha +
(color2.alpha - color1.alpha) * (i - x) / (width - 1)
color = Color.new(red, green, blue, alpha)
fill_rect(i, y, 1, height, color)
end
elsif align == 1
for i in y...y + height
red = color1.red +
(color2.red - color1.red) * (i - y) / (height - 1)
green = color1.green +
(color2.green - color1.green) * (i - y) / (height - 1)
blue = color1.blue +
(color2.blue - color1.blue) * (i - y) / (height - 1)
alpha = color1.alpha +
(color2.alpha - color1.alpha) * (i - y) / (height - 1)
color = Color.new(red, green, blue, alpha)
fill_rect(x, i, width, 1, color)
end
elsif align == 2
for i in x...x + width
for j in y...y + height
red = color1.red + (color2.red - color1.red) *
((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
green = color1.green + (color2.green - color1.green) *
((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
blue = color1.blue + (color2.blue - color1.blue) *
((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
alpha = color1.alpha + (color2.alpha - color1.alpha) *
((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
color = Color.new(red, green, blue, alpha)
set_pixel(i, j, color)
end
end
elsif align == 3
for i in x...x + width
for j in y...y + height
red = color1.red + (color2.red - color1.red) *
((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
green = color1.green + (color2.green - color1.green) *
((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
blue = color1.blue + (color2.blue - color1.blue) *
((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
alpha = color1.alpha + (color2.alpha - color1.alpha) *
((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
color = Color.new(red, green, blue, alpha)
set_pixel(i, j, color)
end
end
end
end
end
#==============================================================================
# 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
#==============================================================================