设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 349|回复: 0
打印 上一主题 下一主题

[原创发布] 配合バトルリトライ战败重来脚本的失败信息扩展脚本

[复制链接]

Lv3.寻梦者

梦石
1
星屑
1174
在线时间
58 小时
注册时间
2023-9-8
帖子
35
跳转到指定楼层
1
发表于 2026-4-17 00:10:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 Ruigi 于 2026-4-17 00:37 编辑

RUBY 代码复制
  1. #==============================================================================
  2. #  ★ RGSS3 ★
  3. #    战斗重试失败信息扩展
  4. #    作者:ruigi
  5. #    功能:显示最后对你造成伤害的敌人的自定义备注信息。
  6. #    备注格式:Over:"信息" 或 Over:“信息”(中英文引号均可)
  7. #
  8. #    放置位置:请在脚本列表最底部(Main之前)插入本脚本。
  9. #==============================================================================
  10.  
  11. module Rokan
  12.   module DefeatMessage
  13.     DEBUG_MODE = true   # 改为 true 可在控制台查看详细信息
  14.   end
  15. end
  16.  
  17. #==============================================================================
  18. # ■ 数据记录模块(直接嵌入 Game_Battler,保证记录)
  19. #==============================================================================
  20. class Game_Battler < Game_BattlerBase
  21.   alias :defeat_msg_execute_damage :execute_damage
  22.   def execute_damage(user)
  23.     defeat_msg_record_last_attacker(user)
  24.     defeat_msg_execute_damage(user)
  25.   end
  26.  
  27.   def defeat_msg_record_last_attacker(user)
  28.     return unless SceneManager.scene_is?(Scene_Battle)
  29.     return unless user.is_a?(Game_Enemy)      # 仅当攻击者是敌人
  30.     return if $game_party.all_dead?           # 已全灭不再记录(可选)
  31.  
  32.     scene = SceneManager.scene
  33.     scene.instance_variable_set(:@_last_attacker_enemy, user)
  34.  
  35.     if Rokan::DefeatMessage::DEBUG_MODE
  36.       p "[记录] 敌人 #{user.name} 造成了伤害,已被记录为最后攻击者"
  37.     end
  38.   end
  39. end
  40.  
  41. #==============================================================================
  42. # ■ Scene_Battle(管理记录重置与信息显示)
  43. #==============================================================================
  44. class Scene_Battle < Scene_Base
  45.   #--------------------------------------------------------------------------
  46.   # ● 开始处理(初始化记录)
  47.   #--------------------------------------------------------------------------
  48.   alias defeat_msg_start start
  49.   def start
  50.     defeat_msg_start
  51.     @_last_attacker_enemy = nil
  52.   end
  53.  
  54.   #--------------------------------------------------------------------------
  55.   # ● 回合开始(每回合重置记录)
  56.   #--------------------------------------------------------------------------
  57.   alias defeat_msg_turn_start turn_start
  58.   def turn_start
  59.     @_last_attacker_enemy = nil
  60.     defeat_msg_turn_start
  61.   end
  62.  
  63.   #--------------------------------------------------------------------------
  64.   # ● 开始重试选择(显示信息窗口)
  65.   #--------------------------------------------------------------------------
  66.   alias defeat_msg_start_retry_selection start_retry_selection
  67.   def start_retry_selection
  68.     create_defeat_message_window if defeat_message_text != ""
  69.     defeat_msg_start_retry_selection
  70.   end
  71.  
  72.   #--------------------------------------------------------------------------
  73.   # ● 放弃战斗(释放窗口)
  74.   #--------------------------------------------------------------------------
  75.   alias defeat_msg_giveup_battle giveup_battle
  76.   def giveup_battle
  77.     dispose_defeat_message_window
  78.     defeat_msg_giveup_battle
  79.   end
  80.  
  81.   #--------------------------------------------------------------------------
  82.   # ● 重置战斗(释放窗口)
  83.   #--------------------------------------------------------------------------
  84.   alias defeat_msg_reset_battle reset_battle
  85.   def reset_battle
  86.     dispose_defeat_message_window
  87.     defeat_msg_reset_battle
  88.   end
  89.  
  90.   #--------------------------------------------------------------------------
  91.   # ● 结束处理(保险释放)
  92.   #--------------------------------------------------------------------------
  93.   alias defeat_msg_terminate terminate
  94.   def terminate
  95.     dispose_defeat_message_window
  96.     defeat_msg_terminate
  97.   end
  98.  
  99.   #--------------------------------------------------------------------------
  100.   # ● 提取失败信息文本
  101.   #--------------------------------------------------------------------------
  102.   def defeat_message_text
  103.     return @defeat_message_text if @defeat_message_text
  104.  
  105.     # 1. 优先最后攻击者
  106.     last_enemy = @_last_attacker_enemy
  107.     if last_enemy && last_enemy.is_a?(Game_Enemy)
  108.       text = extract_over_text(last_enemy.enemy.note)
  109.       if text
  110.         @defeat_message_text = text
  111.         p "[成功] 从最后攻击者 #{last_enemy.name} 提取到信息:#{text}" if Rokan::DefeatMessage::DEBUG_MODE
  112.         return text
  113.       end
  114.     end
  115.  
  116.     # 2. 兜底:遍历当前敌群
  117.     $game_troop.members.each do |enemy|
  118.       text = extract_over_text(enemy.enemy.note)
  119.       if text
  120.         @defeat_message_text = text
  121.         p "[兜底] 从敌群敌人 #{enemy.name} 提取到信息:#{text}" if Rokan::DefeatMessage::DEBUG_MODE
  122.         return text
  123.       end
  124.     end
  125.  
  126.     @defeat_message_text = ""
  127.   end
  128.  
  129.   #--------------------------------------------------------------------------
  130.   # ● 从备注中提取 Over 信息(支持中英文引号)
  131.   #--------------------------------------------------------------------------
  132.   def extract_over_text(note)
  133.     # 匹配格式:Over:"内容"  或  Over:“内容”
  134.     if note =~ /Over[::]\s*["“](.*?)["]/
  135.       return $1.to_s
  136.     end
  137.     nil
  138.   end
  139.  
  140.   #--------------------------------------------------------------------------
  141.   # ● 创建信息窗口
  142.   #--------------------------------------------------------------------------
  143.   def create_defeat_message_window
  144.     @defeat_message_window = Window_DefeatMessage.new(@viewport)
  145.   end
  146.  
  147.   #--------------------------------------------------------------------------
  148.   # ● 释放信息窗口
  149.   #--------------------------------------------------------------------------
  150.   def dispose_defeat_message_window
  151.     return unless @defeat_message_window
  152.     @defeat_message_window.close
  153.     update_basic while @defeat_message_window.openness > 0
  154.     @defeat_message_window.dispose
  155.     @defeat_message_window = nil
  156.   end
  157. end
  158.  
  159. #==============================================================================
  160. # ■ Window_DefeatMessage(信息窗口)
  161. #==============================================================================
  162. class Window_DefeatMessage < Window_Base
  163.   def initialize(viewport = nil)
  164.     super(0, 0, Graphics.width, fitting_height(1))
  165.     self.viewport = viewport
  166.     self.z = 200
  167.     self.openness = 0
  168.     refresh
  169.     update_placement
  170.     open
  171.   end
  172.  
  173.   def update_placement
  174.     self.x = 0
  175.     self.y = 0
  176.   end
  177.  
  178.   def refresh
  179.     contents.clear
  180.     message = SceneManager.scene.defeat_message_text rescue ""
  181.     return if message.empty?
  182.     draw_text(contents.rect, message, 1)
  183.   end
  184. end

]2S)_TH)CZ}($9_ZOI6PML7.png (58.72 KB, 下载次数: 21)

]2S)_TH)CZ}($9_ZOI6PML7.png

9E0NR})Z2W(WH~LIU)@BTEL.png (52.67 KB, 下载次数: 20)

9E0NR})Z2W(WH~LIU)@BTEL.png

HWQ8Z%FNPA)N@~[~M%YUPOU.png (52.14 KB, 下载次数: 22)

HWQ8Z%FNPA)N@~[~M%YUPOU.png

%FM210H8CPI`%2UY@1)Y15S.png (52.03 KB, 下载次数: 20)

%FM210H8CPI`%2UY@1)Y15S.png
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2026-6-4 11:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表