| 赞 | 0 |
| VIP | |
| 好人卡 | |
| 积分 | 13 |
| 经验 | |
| 最后登录 | 2026-4-22 |
| 在线时间 | 135 小时 |
- 梦石
- 0
- 星屑
- 1250
- 在线时间
- 135 小时
- 注册时间
- 2021-2-28
- 回帖
- 26
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
有没有大佬能帮我看下这个脚本,在RGD模式下使用会出现界面重叠,要如何解决?图片在附件
战斗中查看状态指令 Ver1.05 by 星潟#==============================================================================
# ■ RGSS3 战斗中查看状态指令 Ver1.05 by 星潟
#------------------------------------------------------------------------------
# RPG maker VXAce 中、没有查看当前能力值强化/弱化的功能,确认信息很不方便。
#
# 所以、使用了本脚本后,玩家可以最多查看22个自身状态、強化/弱体信息全部显示。
#
# 队伍指令中添加“查看状态”指令、显示敌我方当前能力值、状态和强化/弱化状态
# 一开始显示的查看角色状态、按下L键或R键可以切换到查看敌人。
# 在某个敌人或角色上点击确定即可查看状态。
# 详细状态显示中,按下确定键,可以在属性抗性、状态抗性间切换。
#
# 你可以设定敌人是否显示状态详情
# 也可以单独设定状态/强化/弱化是否显示。
#
# 可以设定本功能是否仅能用于测试模式。
#------------------------------------------------------------------------------
# Ver1.01 %表示に関する設定や、属性/ステート耐性の表示機能が追加されました。
# Ver1.02 操作性を向上させました。
# Ver1.03 隠れている敵を表示しないようにする機能を追加しました。
# Ver1.04 詳細モードで敵のHPが表示限界でも見えてしまう不具合を修正しました。
# また、表示限界の適用を敵のみにする機能を追加しました。
# Ver1.05 システム側のTP表示設定が無効化されていてもTPが表示される不具合を修正。
#==============================================================================
module B_CONFIRM
#是否限制脚本功能只能用于测试模式。
#(true限制/false始终可用)
TONLY = false
#队伍指令中,“状态”指令的名称。
WORD1 = "状态"
#状态名称。
WORD2 = "状态"
#強化/弱体名称。
WORD3 = ""
#背景不透明度。
BOPAC = 255
#是否显示非参战队员的信息。
#(true显示/false不显示)
PTMT = false
#是否显示队员详细信息。
#(true显示/false不显示)
PTDT = true
#是否可以通过切换键显示敌人信息。
#(true显示/false不显示)
TROK = true
#是否显示敌人详细信息。
#(true显示/false不显示)
TRDT = true
#是否显示隐藏敌人的信息。
HIDE = false
#设定HP/MP/TP显示的最大值。
#数值超过最大值时,显TEXT的文本。
OVER = 10000
#HP/MP/TP超过最大值时、取而代之显示的文本。
TEXT = "?????"
#当达到显示限制时是否只显示敌人。(?)
#true只有敌人、false敌我双方。
EN_O = true
#是否启用第二页。
#(true是/false否)
P2 = true
#详细信息中,添加能力的显示设定。
#[添加能力ID(0~9の数字), 添加能力値名称(文字列),敌人是否显示(true/false)]
# 显示顺序:添加能力名+文字+数字+%。
XPRM = [
[0, "命中率", true],
[1, "闪避率", true],
[2, "暴击率", true],
[3, "暴击闪避率", true],
[4, "魔法闪避率", true],
[5, "魔法反射率", true],
[6, "反击率", true],
[7, "HP再生率", true],
[8, "MP再生率", true],
[9, "TP再生率", true]
]
#添加能力数字后是否显示%。
#(true是/false否)
ADP = true#false
#详细信息中,特殊能力的显示设定。
#[特殊能力ID(0~9数字), 特殊能力名称(字符), 敌人是否显示(true/false)]
# 显示顺序:特殊能力名+文字+数字+%。
SPRM = [
[0, "受到伤害率", true],
[1, "防御效果", true],
[2, "回复效果", true],
[3, "药理知识", true],
[4, "MP消耗率", true],
[5, "TP补充率", true],
[6, "物攻抗性", true],
[7, "魔法抗性", true],
[9, "经验加成", true]
]
#特殊能力数字后是否显示%。
#(true是/false否)
SPP = true #false
#详细信息中,属性有效度的显示设定。
#[属性ID, 属性名后面的文字,是否显示敌人(true/false),是否取而代之显示100减去该
# 值的数字],
#显示顺序:属性名+文字+数字+%。
ELEM = [
[3, "有效度", false, false],
[4, "有效度", false, false],
[5, "有效度", false, false],
[6, "有效度", false, false],
[7, "有效度", false, false],
[8, "有效度", false, false],
[9, "有效度", false, false],
[10, "有效度", false, false],
]
#是否显示属性有效度数字后的%。
#(true是/false否)
ELP = true #false
#1行目に表示するステートの最大数を指定します。
#(2行目までしか想定していません)
MAX = 11
#详细信息中,状态有效度的显示设定。
#[状态ID(如果使用0~-7、其绝对值代表能力值ID,如MP、物攻等),
# 状态名后面的文字,是否显示敌人(true/false),是否取而代之显示100减去该
# 值的数字],
# 显示顺序:状态名+文字+数字+%。
STAT = [
[1, "几率", false, false],
[2, "几率", false, false],
[-3, "几率", false, false],
[4, "几率", false, false],
[5, "几率", false, false],
[6, "几率", false, false],
[7, "几率", false, false],
[8, "几率", false, false],
]
#是否显示状态有效度数字后的%。
#(true是/false否)
STP = true#false
end
#テストモード限定化されており、なおかつテストモードの場合か
#テストモード限定化されていない場合は処理を行う。
if (B_CONFIRM::TONLY && ($TEST or $BTEST)) or !B_CONFIRM::TONLY
class Game_Troop < Game_Unit
def unhidden_members
B_CONFIRM::HIDE ? members : members.select {|e| !e.hidden?}
end
end
class Game_Temp
attr_accessor :b_confirm_limit_flag
end
class Window_Base < Window
alias draw_current_and_max_values_overnumber draw_current_and_max_values
def draw_current_and_max_values(x, y, width, current, max, color1, color2)
#状況確認ウィンドウである場合のみ
#現在値と最大値を必要に応じて読み替える。
if (self.is_a?(Window_B_Confirm) or self.is_a?(Window_B_Confirm_Detail)) && $game_temp.b_confirm_limit_flag
current = B_CONFIRM::TEXT if current >= B_CONFIRM::OVER
max = B_CONFIRM::TEXT if max >= B_CONFIRM::OVER
end
#本来の処理を実行する。
draw_current_and_max_values_overnumber(x, y, width, current, max, color1, color2)
end
end
class Window_PartyCommand < Window_Command
#--------------------------------------------------------------------------
# コマンドリストの作成
#--------------------------------------------------------------------------
alias make_command_list_b_confirm make_command_list
def make_command_list
#本来の処理を実行する。
make_command_list_b_confirm
#状況確認コマンドを追加する。
add_command(B_CONFIRM::WORD1, :b_confirm)
end
end
class Window_B_Confirm < Window_Selectable
attr_accessor :end_flag
attr_accessor :display_mode
attr_accessor :last_actor
def initialize(x, y, type, actor = nil)
#各種データを取得する。
@display_mode = type
@last_actor = actor
@end_flag = false
#ウィンドウを作成する。
super(x, y, window_width, window_height)
#背景透過度を設定する。
self.back_opacity = B_CONFIRM::BOPAC
activate
self.index = 0
#描写を行う。
refresh
end
#--------------------------------------------------------------------------
# フレーム更新
#--------------------------------------------------------------------------
def update
#ウィンドウを閉じている最中は何もしない。
return if @end_flag
super
return if !self.active
if Input.trigger?(:B)#キャンセルキーを押した場合
#キャンセルのSEを鳴らす。
Sound.play_cancel
@end_flag = true
@last_actor = nil
@display_mode = 2
elsif Input.trigger?(:C)#決定キーを押した場合
#バトラーが指定されていない場合はウィンドウを閉じる。
#バトラーが指定されている場合はウィンドウを切り替える。
case @display_mode
when 0
actor = B_CONFIRM::PTMT ? $game_party.all_members[index] : $game_party.members[index]
when 1
actor = $game_troop.unhidden_members[index]
end
#バトラーがアクターであり、なおかつアクターの詳細表示が可能な場合
#あるいはバトラーがエネミーであり、なおかつエネミーの詳細表示が可能な場合続行。
return if actor.actor? && !B_CONFIRM::PTDT
return if !actor.actor? && !B_CONFIRM::TRDT
#OKのSEを鳴らす。
Sound.play_ok
@end_flag = true
@last_actor = actor
elsif (Input.trigger?(:L) or Input.trigger?(:R)) && B_CONFIRM::TROK
#カーソルのSEを鳴らす。
Sound.play_cursor
#ウィンドウを作り直す準備を行う。
@end_flag = true
@last_actor = nil
@display_mode = @display_mode == 0 ? 1 : 0
end
end
#--------------------------------------------------------------------------
# ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
Graphics.width
end
#--------------------------------------------------------------------------
# ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height
Graphics.height
end
#--------------------------------------------------------------------------
# 項目数の取得
#--------------------------------------------------------------------------
def item_max
#バトラーが指定されていない場合は項目数は1個にする。
return 1 if @last_actor != nil
#アクターかエネミーのどちらを表示するかで処理を分岐し
#それぞれ設定に適した値を返す。
case @display_mode
when 0
B_CONFIRM::PTMT ? $game_party.all_members.size : $game_party.members.size
when 1
$game_troop.unhidden_members.size
end
end
#--------------------------------------------------------------------------
# 項目の高さを取得
#--------------------------------------------------------------------------
def item_height
(height - standard_padding * 2) / 4
end
#--------------------------------------------------------------------------
# 項目の描画
#--------------------------------------------------------------------------
def draw_item(index)
#バトラーが指定されているか否かで処理を分岐。
if @last_actor == nil
#アクターかエネミーのどちらを表示するかで設定に応じて処理を分岐。
case @display_mode
when 0
actor = B_CONFIRM::PTMT ? $game_party.all_members[index] : $game_party.members[index]
when 1
actor = $game_troop.unhidden_members[index]
end
#項目の矩形を取得。
rect = item_rect(index)
#項目内のデータを描写していく。
$game_temp.b_confirm_limit_flag = (!B_CONFIRM::EN_O or (B_CONFIRM::EN_O && @display_mode == 1))
draw_actor_name(actor, rect.x, rect.y)
contents.font.size = 20
draw_actor_hp(actor, rect.x + 4, rect.y + line_height * 1)
draw_actor_mp(actor, rect.x + 4, rect.y + line_height * 2)
draw_actor_tp(actor, rect.x + 4, rect.y + line_height * 3) if $data_system.opt_display_tp
self.contents.font.color = system_color
draw_text(rect.x + 150, rect.y + line_height * 1, 96, line_height, B_CONFIRM::WORD2)
draw_text(rect.x + 150, rect.y + line_height * 3, 96, line_height, B_CONFIRM::WORD3)
self.contents.font.color = normal_color
icons_width = (rect.width - rect.x - 150 - 96) / 24
icons = (actor.state_icons)[0, icons_width]
icons.each_with_index {|n, i| draw_icon(n, rect.x + 246 + 24 * i, rect.y + line_height * 1) }
icons = (actor.state_icons)[icons_width, icons_width * 2]
icons.each_with_index {|n, i| draw_icon(n, rect.x + 246 + 24 * i, rect.y + line_height * 2) } if icons != nil
icons = (actor.buff_icons)[0, icons_width]
icons.each_with_index {|n, i| draw_icon(n, rect.x + 246 + 24 * i, rect.y + line_height * 3) }
end
end
#--------------------------------------------------------------------------
# 決定ボタンが押されたときの処理(邪魔なので消す)
#--------------------------------------------------------------------------
def process_ok
end
#--------------------------------------------------------------------------
# キャンセルボタンが押されたときの処理(邪魔なので消す)
#--------------------------------------------------------------------------
def process_cancel
end
#--------------------------------------------------------------------------
# Lボタンが押されたときの処理(邪魔なので消す)
#--------------------------------------------------------------------------
def process_pageup
end
#--------------------------------------------------------------------------
# Rボタンが押されたときの処理(邪魔なので消す)
#--------------------------------------------------------------------------
def process_pagedown
end
end
class Window_B_Confirm_Detail < Window_Base
attr_accessor :window_b_confirm
attr_accessor :end_flag
#--------------------------------------------------------------------------
# 初期化
#--------------------------------------------------------------------------
def initialize(window_b_confirm)
@page_data = 0
@window_b_confirm = window_b_confirm
@end_flag = false
super(0, 0, window_width, window_height)
#背景透過度を設定する。
self.back_opacity = B_CONFIRM::BOPAC
refresh
end
#--------------------------------------------------------------------------
# ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
Graphics.width
end
#--------------------------------------------------------------------------
# ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height
Graphics.height
end
#--------------------------------------------------------------------------
# フレーム更新
#--------------------------------------------------------------------------
def update
super
if Input.trigger?(:B)#キャンセルキーを押した場合
#キャンセルのSEを鳴らす。
Sound.play_cancel
@end_flag = true
elsif page_change? #決定キー、左右キー、LRボタンを押した場合
Sound.play_cursor
@page_data = @page_data == 0 ? 1 : 0
contents.clear
refresh
end
end
#--------------------------------------------------------------------------
# ページ切り替えを行うか?
#--------------------------------------------------------------------------
def page_change?
flag = false
[:C, :L, :R, :LEFT, :RIGHT].each {|k|flag = true if Input.trigger?(k)}
flag
end
#--------------------------------------------------------------------------
# リフレッシュ
#--------------------------------------------------------------------------
def refresh
#バトラーを取得。
actor = @window_b_confirm.last_actor
#項目内のデータを描写していく。
draw_actor_name(actor, x, y)
$game_temp.b_confirm_limit_flag = (!B_CONFIRM::EN_O or (B_CONFIRM::EN_O && !actor.actor?))
contents.font.size = 24
draw_actor_hp(actor, x + 4, y + line_height * 1)
draw_actor_mp(actor, x + 4, y + line_height * 2)
draw_actor_tp(actor, x + 4, y + line_height * 3) if $data_system.opt_display_tp
self.contents.font.color = system_color
draw_text(x + 150, y + line_height * 1, 96, line_height, B_CONFIRM::WORD2)
draw_text(x + 150, y + line_height * 3, 96, line_height, B_CONFIRM::WORD3)
self.contents.font.color = normal_color
icons_width = (width - x - 162 - 96) / 24
icons = (actor.state_icons)[0, icons_width]
icons.each_with_index {|n, i| draw_icon(n, x + 246 + 24 * i, y + line_height * 1) }
icons = (actor.state_icons)[icons_width, icons_width * 2]
icons.each_with_index {|n, i| draw_icon(n, x + 246 + 24 * i, y + line_height * 2) } if icons != nil
icons = (actor.buff_icons)[0, icons_width]
icons.each_with_index {|n, i| draw_icon(n, x + 246 + 24 * i, y + line_height * 3) }
draw_horz_line(line_height * 4)
if @page_data == 0
#设定文字排版
6.times {|i|draw_actor_param(actor, x, y + line_height * (5 + i),(i + 2))}
ex_xprms_draw(actor, x-20, y)
ex_sprms_draw(actor, x, y)
else
ex_elem_draw(actor, x+50, y)
ex_state_draw(actor, x+50, y)
end
end
#--------------------------------------------------------------------------
# 水平線の色を取得(Window_Statusからそのままコピー)
#--------------------------------------------------------------------------
def line_color
color = normal_color
color.alpha = 48
color
end
#--------------------------------------------------------------------------
# 水平線の描画(Window_Statusからそのままコピー)
#--------------------------------------------------------------------------
def draw_horz_line(y)
line_y = y + line_height / 2 - 1
contents.fill_rect(0, line_y, contents_width, 2, line_color)
end
#--------------------------------------------------------------------------
# 追加能力値
#--------------------------------------------------------------------------
def ex_xprms_draw(actor, x, y)
#追加能力値の描写対象がない場合は飛ばす。
return if B_CONFIRM::XPRM.empty?
#追加能力値を描写する。
B_CONFIRM::XPRM.each_with_index do |xp, i|
next if !actor.actor? && !xp[2]
change_color(system_color)
draw_text(x + 180, y + line_height * (5 + i), 120, line_height, xp[1])
change_color(normal_color)
draw_text(x + 280, y + line_height * (5 + i), 66, line_height, (actor.xparam(xp[0]) * 100).to_i.to_s + (B_CONFIRM::ADP ? "%" : ""), 2)
end
end
#--------------------------------------------------------------------------
# 特殊能力値
#--------------------------------------------------------------------------
def ex_sprms_draw(actor, x, y)
#特殊能力値の描写対象がない場合は飛ばす。
return if B_CONFIRM::SPRM.empty?
#特殊能力値を描写する。
B_CONFIRM::SPRM.each_with_index do |sp, i|
next if !actor.actor? && !sp[2]
change_color(system_color)
draw_text(x + 344, y + line_height * (5 + i), 120, line_height, sp[1])
change_color(normal_color)
draw_text(x + 444, y + line_height * (5 + i), 66, line_height, (actor.sparam(sp[0]) * 100).to_i.to_s + (B_CONFIRM::SPP ? "%" : ""), 2)
end
end
#--------------------------------------------------------------------------
# 属性有効度
#--------------------------------------------------------------------------
def ex_elem_draw(actor, x, y)
#属性有効度の描写対象がない場合は飛ばす。
return if B_CONFIRM::ELEM.empty?
#属性有効度を描写する。
B_CONFIRM::ELEM.each_with_index do |elem, i|
next if !actor.actor? && !elem[2]
change_color(system_color)
name = $data_system.elements[elem[0]]
data = (actor.element_rate(elem[0]) * 100).to_i
data = (elem[3] ? (100 - data) : data).to_s
draw_text(x, y + line_height * (5 + i), 120, line_height, name + elem[1])
change_color(normal_color)
draw_text(x + 90, y + line_height * (5 + i), 66, line_height, data + (B_CONFIRM::ELP ? "%" : ""), 2)
end
end
#--------------------------------------------------------------------------
# ステート有効度
#--------------------------------------------------------------------------
def ex_state_draw(actor, x, y)
#ステート有効度の描写対象がない場合は飛ばす。
return if B_CONFIRM::STAT.empty?
#ステート有効度を描写する。
B_CONFIRM::STAT.each_with_index do |state, i|
next if !actor.actor? && !state[2]
change_color(system_color)
x_data = i < B_CONFIRM::MAX ? 170 : 344
if state[0] > 0
name = $data_states[state[0]].name
data = (actor.state_rate(state[0]) * 100).to_i
data = (state[3] ? (100 - data) : data).to_s
else
state_id = state[0].abs
name = Vocab.param(state_id)
data = (actor.debuff_rate(state_id) * 100).to_i
data = (state[3] ? (100 - data) : data).to_s
end
draw_text(x + x_data+ 110, y + line_height * (5 + i - (i < B_CONFIRM::MAX ? 0 : B_CONFIRM::MAX)), 120, line_height, name + state[1])
change_color(normal_color)
draw_text(x + x_data + 210, y + line_height * (5 + i - (i < B_CONFIRM::MAX ? 0 : B_CONFIRM::MAX)), 66, line_height, data + (B_CONFIRM::STP ? "%" : ""), 2)
end
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# パーティコマンドウィンドウの作成
#--------------------------------------------------------------------------
alias create_party_command_window_b_confirm create_party_command_window
def create_party_command_window
#本来の処理を実行。
create_party_command_window_b_confirm
#状況確認コマンド用のハンドラを追加。
@party_command_window.set_handler(:b_confirm, method(:command_b_confirm))
end
#--------------------------------------------------------------------------
# コマンド[状況確認]
#--------------------------------------------------------------------------
def command_b_confirm
#状況確認コマンドの処理内容を実行。
b_confirm_execute
end
#--------------------------------------------------------------------------
# 状況確認開始
#--------------------------------------------------------------------------
def b_confirm_execute
#状況確認ウィンドウを作成。
@b_confirm_window = Window_B_Confirm.new(0, 0, 0)
#処理をループで処理。
loop do
#とりあえずアップデートは行う。
update
#状況確認ウィンドウがアクティブであり
#なおかつ操作終了フラグが有効な場合は分岐。
if @b_confirm_window.active && @b_confirm_window.end_flag
#表示モードが2の時、ループを終了する。
break if @b_confirm_window.display_mode == 2
#操作終了フラグをfalseにする。
@b_confirm_window.end_flag = false
#最後にキャラクターを選択している場合
if @b_confirm_window.last_actor != nil
#状況確認ウィンドウのアクティブ状態を解除し
#詳細ウィンドウを作成する。
@b_confirm_window.deactivate
@b_confirm_detail_window = Window_B_Confirm_Detail.new(@b_confirm_window)
#最後にキャラクターを選択していない場合
else
#状況確認ウィンドウを解放する。
@b_confirm_window.dispose
#状況確認ウィンドウを作り直す。
@b_confirm_window = Window_B_Confirm.new(0, 0, (@b_confirm_window.display_mode == 0 ? 0 : 1))
end
#詳細ウィンドウが存在し、なおかつ終了フラグが有効な場合。
elsif @b_confirm_detail_window != nil && @b_confirm_detail_window.end_flag
#詳細ウィンドウを解放し、nil扱いとする。
@b_confirm_detail_window.dispose
@b_confirm_detail_window = nil
#最後に選択したアクターをnilとする。
@b_confirm_window.last_actor = nil
#状況確認ウィンドウをアクティブ化する。
@b_confirm_window.activate
end
end
#状況確認ウィンドウを解放する。
@b_confirm_window.dispose
#パーティコマンドウィンドウをアクティブにする。
@party_command_window.activate
end
end
end |
-
RGD下
-
非RGD下
|