#============================================================================== # ★ RGSS3 ★ # 战斗重试失败信息扩展 # 作者:ruigi # 功能:显示最后对你造成伤害的敌人的自定义备注信息。 # 备注格式:Over:"信息" 或 Over:“信息”(中英文引号均可) # # 放置位置:请在脚本列表最底部(Main之前)插入本脚本。 #============================================================================== module Rokan module DefeatMessage DEBUG_MODE = true # 改为 true 可在控制台查看详细信息 end end #============================================================================== # ■ 数据记录模块(直接嵌入 Game_Battler,保证记录) #============================================================================== class Game_Battler < Game_BattlerBase alias :defeat_msg_execute_damage :execute_damage def execute_damage(user) defeat_msg_record_last_attacker(user) defeat_msg_execute_damage(user) end def defeat_msg_record_last_attacker(user) return unless SceneManager.scene_is?(Scene_Battle) return unless user.is_a?(Game_Enemy) # 仅当攻击者是敌人 return if $game_party.all_dead? # 已全灭不再记录(可选) scene = SceneManager.scene scene.instance_variable_set(:@_last_attacker_enemy, user) if Rokan::DefeatMessage::DEBUG_MODE p "[记录] 敌人 #{user.name} 造成了伤害,已被记录为最后攻击者" end end end #============================================================================== # ■ Scene_Battle(管理记录重置与信息显示) #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 开始处理(初始化记录) #-------------------------------------------------------------------------- alias defeat_msg_start start def start defeat_msg_start @_last_attacker_enemy = nil end #-------------------------------------------------------------------------- # ● 回合开始(每回合重置记录) #-------------------------------------------------------------------------- alias defeat_msg_turn_start turn_start def turn_start @_last_attacker_enemy = nil defeat_msg_turn_start end #-------------------------------------------------------------------------- # ● 开始重试选择(显示信息窗口) #-------------------------------------------------------------------------- alias defeat_msg_start_retry_selection start_retry_selection def start_retry_selection create_defeat_message_window if defeat_message_text != "" defeat_msg_start_retry_selection end #-------------------------------------------------------------------------- # ● 放弃战斗(释放窗口) #-------------------------------------------------------------------------- alias defeat_msg_giveup_battle giveup_battle def giveup_battle dispose_defeat_message_window defeat_msg_giveup_battle end #-------------------------------------------------------------------------- # ● 重置战斗(释放窗口) #-------------------------------------------------------------------------- alias defeat_msg_reset_battle reset_battle def reset_battle dispose_defeat_message_window defeat_msg_reset_battle end #-------------------------------------------------------------------------- # ● 结束处理(保险释放) #-------------------------------------------------------------------------- alias defeat_msg_terminate terminate def terminate dispose_defeat_message_window defeat_msg_terminate end #-------------------------------------------------------------------------- # ● 提取失败信息文本 #-------------------------------------------------------------------------- def defeat_message_text return @defeat_message_text if @defeat_message_text # 1. 优先最后攻击者 last_enemy = @_last_attacker_enemy if last_enemy && last_enemy.is_a?(Game_Enemy) text = extract_over_text(last_enemy.enemy.note) if text @defeat_message_text = text p "[成功] 从最后攻击者 #{last_enemy.name} 提取到信息:#{text}" if Rokan::DefeatMessage::DEBUG_MODE return text end end # 2. 兜底:遍历当前敌群 $game_troop.members.each do |enemy| text = extract_over_text(enemy.enemy.note) if text @defeat_message_text = text p "[兜底] 从敌群敌人 #{enemy.name} 提取到信息:#{text}" if Rokan::DefeatMessage::DEBUG_MODE return text end end @defeat_message_text = "" end #-------------------------------------------------------------------------- # ● 从备注中提取 Over 信息(支持中英文引号) #-------------------------------------------------------------------------- def extract_over_text(note) # 匹配格式:Over:"内容" 或 Over:“内容” if note =~ /Over[::]\s*["“](.*?)["”]/ return $1.to_s end nil end #-------------------------------------------------------------------------- # ● 创建信息窗口 #-------------------------------------------------------------------------- def create_defeat_message_window @defeat_message_window = Window_DefeatMessage.new(@viewport) end #-------------------------------------------------------------------------- # ● 释放信息窗口 #-------------------------------------------------------------------------- def dispose_defeat_message_window return unless @defeat_message_window @defeat_message_window.close update_basic while @defeat_message_window.openness > 0 @defeat_message_window.dispose @defeat_message_window = nil end end #============================================================================== # ■ Window_DefeatMessage(信息窗口) #============================================================================== class Window_DefeatMessage < Window_Base def initialize(viewport = nil) super(0, 0, Graphics.width, fitting_height(1)) self.viewport = viewport self.z = 200 self.openness = 0 refresh update_placement open end def update_placement self.x = 0 self.y = 0 end def refresh contents.clear message = SceneManager.scene.defeat_message_text rescue "" return if message.empty? draw_text(contents.rect, message, 1) end end
]2S)_TH)CZ}($9_ZOI6PML7.png (58.72 KB, 下载次数: 21)
9E0NR})Z2W(WH~LIU)@BTEL.png (52.67 KB, 下载次数: 21)
HWQ8Z%FNPA)N@~[~M%YUPOU.png (52.14 KB, 下载次数: 23)
%FM210H8CPI`%2UY@1)Y15S.png (52.03 KB, 下载次数: 20)
| 欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |