#============================================================================== # # ▼ Yanfly Engine Ace - 战斗信息记录 v1.02 # -- 最后更新: 2012.01.24 # -- 使用难度: 简单 # -- 需要脚本: 无 # #============================================================================== $imported = {} if $imported.nil? $imported["YEA-CombatLogDisplay"] = true #============================================================================== # ▼ Updates # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # 2012.01.24 - Bug Fixed: Confirm window crash with Battle Command List. # 2012.01.16 - Prevented subsequent line inserts. # 2011.12.10 - Started Script and Finished. # #============================================================================== # ▼ 介绍 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # 有时候战斗信息跳的太快了,玩家根本来不及看,很可能错过重要的战斗信息。 # 本脚本提供战斗信息记录的功能,玩家可以在角色行动时在"战斗/撤退"窗口中点击 # 相应指令来回顾之前的全部战斗信息. # #============================================================================== # ▼ 安装方式 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # 打开脚本编辑器,将本脚本拷贝/复制到一个在▼ 插件脚本之下▼ Main之上的新 # 脚本页/槽中.记得保存你的工程以使脚本生效. # #============================================================================== # ▼ 兼容性 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # 本脚本仅为RPG Maker VX Ace编写.极不可能在无任何修改的情况下运行于RPG Maker VX. # #============================================================================== module YEA module COMBAT_LOG #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - 战斗信息设置 - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- COMMAND_NAME = "记录" # 战斗信息记录的指令名. LINE_COLOUR = 0 # 拆分动作行的颜色. LINE_COLOUR_ALPHA = 48 # 拆分动作行的不透明度. TEXT_BATTLE_START = "\\c[4]战斗开始!" # 战斗开始的文本. TEXT_TURN_NUMBER = "\\c[4]回合数: \\c[6]%d" # 回合数的文本. end # COMBAT_LOG end # YEA #============================================================================== # ▼ 编辑以下内容可能会出现电脑损坏、死机,电脑主人脑袋爆炸、昏迷、死亡或口臭 # 所以编辑了后果自负。 #============================================================================== #============================================================================== # ■ Window_BattleLog #============================================================================== class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # new method: combatlog_window= #-------------------------------------------------------------------------- def combatlog_window=(window) @combatlog_window = window end #-------------------------------------------------------------------------- # new method: combatlog #-------------------------------------------------------------------------- def combatlog(text) return if @combatlog_window.nil? return if text == "" @combatlog_window.add_line(text) end #-------------------------------------------------------------------------- # alias method: add_text #-------------------------------------------------------------------------- alias window_battlelog_add_text_cld add_text def add_text(text) combatlog(text) window_battlelog_add_text_cld(text) end #-------------------------------------------------------------------------- # alias method: replace_text #-------------------------------------------------------------------------- alias window_battlelog_replace_text_cld replace_text def replace_text(text) combatlog(text) window_battlelog_replace_text_cld(text) end #-------------------------------------------------------------------------- # Start Ace Battle Engine Compatibility #-------------------------------------------------------------------------- if $imported["YEA-BattleEngine"] #-------------------------------------------------------------------------- # alias method: display_current_state #-------------------------------------------------------------------------- alias window_battlelog_display_current_state_cld display_current_state def display_current_state(subject) window_battlelog_display_current_state_cld(subject) return if YEA::BATTLE::MSG_CURRENT_STATE return if subject.most_important_state_text.empty? combatlog(subject.name + subject.most_important_state_text) end #-------------------------------------------------------------------------- # alias method: display_use_item #-------------------------------------------------------------------------- alias window_battlelog_display_use_item_cld display_use_item def display_use_item(subject, item) window_battlelog_display_use_item_cld(subject, item) return if YEA::BATTLE::MSG_CURRENT_ACTION if item.is_a?(RPG::Skill) combatlog(subject.name + item.message1) unless item.message2.empty? combatlog(item.message2) end else combatlog(sprintf(Vocab::UseItem, subject.name, item.name)) end end #-------------------------------------------------------------------------- # alias method: display_counter #-------------------------------------------------------------------------- alias window_battlelog_display_counter_cld display_counter def display_counter(target, item) window_battlelog_display_counter_cld(target, item) return if YEA::BATTLE::MSG_COUNTERATTACK combatlog(sprintf(Vocab::CounterAttack, target.name)) end #-------------------------------------------------------------------------- # alias method: display_reflection #-------------------------------------------------------------------------- alias window_battlelog_display_reflection_cld display_reflection def display_reflection(target, item) window_battlelog_display_reflection_cld(target, item) return if YEA::BATTLE::MSG_REFLECT_MAGIC combatlog(sprintf(Vocab::MagicReflection, target.name)) end #-------------------------------------------------------------------------- # alias method: display_substitute #-------------------------------------------------------------------------- alias window_battlelog_display_substitute_cld display_substitute def display_substitute(substitute, target) window_battlelog_display_substitute_cld(substitute, target) return if YEA::BATTLE::MSG_SUBSTITUTE_HIT combatlog(sprintf(Vocab::Substitute, substitute.name, target.name)) end #-------------------------------------------------------------------------- # alias method: display_failure #-------------------------------------------------------------------------- alias window_battlelog_display_failure_cld display_failure def display_failure(target, item) window_battlelog_display_failure_cld(target, item) return if YEA::BATTLE::MSG_FAILURE_HIT if target.result.hit? && !target.result.success combatlog(sprintf(Vocab::ActionFailure, target.name)) end end #-------------------------------------------------------------------------- # alias method: display_critical #-------------------------------------------------------------------------- alias window_battlelog_display_critical_cld display_critical def display_critical(target, item) window_battlelog_display_critical_cld(target, item) return if YEA::BATTLE::MSG_CRITICAL_HIT if target.result.critical text = target.actor? ? Vocab::CriticalToActor : Vocab::CriticalToEnemy combatlog(text) end end #-------------------------------------------------------------------------- # alias method: display_miss #-------------------------------------------------------------------------- alias window_battlelog_display_miss_cld display_miss def display_miss(target, item) window_battlelog_display_miss_cld(target, item) return if YEA::BATTLE::MSG_HIT_MISSED if !item || item.physical? fmt = target.actor? ? Vocab::ActorNoHit : Vocab::EnemyNoHit else fmt = Vocab::ActionFailure end combatlog(sprintf(fmt, target.name)) end #-------------------------------------------------------------------------- # alias method: display_evasion #-------------------------------------------------------------------------- alias window_battlelog_display_evasion_cld display_evasion def display_evasion(target, item) window_battlelog_display_evasion_cld(target, item) return if YEA::BATTLE::MSG_EVASION if !item || item.physical? fmt = Vocab::Evasion else fmt = Vocab::MagicEvasion end combatlog(sprintf(fmt, target.name)) end #-------------------------------------------------------------------------- # alias method: display_hp_damage #-------------------------------------------------------------------------- alias window_battlelog_display_hp_damage_cld display_hp_damage def display_hp_damage(target, item) window_battlelog_display_hp_damage_cld(target, item) return if YEA::BATTLE::MSG_HP_DAMAGE return if target.result.hp_damage == 0 && item && !item.damage.to_hp? combatlog(target.result.hp_damage_text) end #-------------------------------------------------------------------------- # alias method: display_mp_damage #-------------------------------------------------------------------------- alias window_battlelog_display_mp_damage_cld display_mp_damage def display_mp_damage(target, item) window_battlelog_display_mp_damage_cld(target, item) return if YEA::BATTLE::MSG_MP_DAMAGE combatlog(target.result.mp_damage_text) end #-------------------------------------------------------------------------- # alias method: display_tp_damage #-------------------------------------------------------------------------- alias window_battlelog_display_tp_damage_cld display_tp_damage def display_tp_damage(target, item) window_battlelog_display_tp_damage_cld(target, item) return if YEA::BATTLE::MSG_TP_DAMAGE combatlog(target.result.tp_damage_text) end #-------------------------------------------------------------------------- # alias method: display_added_states #-------------------------------------------------------------------------- alias window_battlelog_display_added_states_cld display_added_states def display_added_states(target) window_battlelog_display_added_states_cld(target) return if YEA::BATTLE::MSG_ADDED_STATES target.result.added_state_objects.each do |state| state_msg = target.actor? ? state.message1 : state.message2 next if state_msg.empty? combatlog(target.name + state_msg) end end #-------------------------------------------------------------------------- # alias method: display_removed_states #-------------------------------------------------------------------------- alias window_battlelog_display_removed_states_cld display_removed_states def display_removed_states(target) window_battlelog_display_removed_states_cld(target) return if YEA::BATTLE::MSG_REMOVED_STATES target.result.removed_state_objects.each do |state| next if state.message4.empty? combatlog(target.name + state.message4) end end #-------------------------------------------------------------------------- # alias method: display_buffs #-------------------------------------------------------------------------- alias window_battlelog_display_buffs_cld display_buffs def display_buffs(target, buffs, fmt) window_battlelog_display_buffs_cld(target, buffs, fmt) return if YEA::BATTLE::MSG_CHANGED_BUFFS buffs.each do |param_id| combatlog(sprintf(fmt, target.name, Vocab::param(param_id))) end end #-------------------------------------------------------------------------- # End Ace Battle Engine Compatibility #-------------------------------------------------------------------------- end # $imported["YEA-BattleEngine"] end # Window_BattleLog #============================================================================== # ■ Window_CombatLog #============================================================================== class Window_CombatLog < Window_Selectable #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize @data = [] super(0, 0, Graphics.width, Graphics.height-120) deactivate hide end #-------------------------------------------------------------------------- # add_line #-------------------------------------------------------------------------- def add_line(text) return if text == "-" && @data[@data.size - 1] == "-" @data.push(text) end #-------------------------------------------------------------------------- # refresh #-------------------------------------------------------------------------- def refresh create_contents draw_all_items end #-------------------------------------------------------------------------- # item_max #-------------------------------------------------------------------------- def item_max; return @data.size; end #-------------------------------------------------------------------------- # draw_item #-------------------------------------------------------------------------- def draw_item(index) text = @data[index] return if text.nil? rect = item_rect_for_text(index) if text == "-" draw_horz_line(rect.y) else draw_text_ex(rect.x, rect.y, text) end end #-------------------------------------------------------------------------- # draw_horz_line #-------------------------------------------------------------------------- def draw_horz_line(y) line_y = y + line_height / 2 - 1 contents.fill_rect(4, line_y, contents_width-8, 2, line_colour) end #-------------------------------------------------------------------------- # line_colour #-------------------------------------------------------------------------- def line_colour colour = text_color(YEA::COMBAT_LOG::LINE_COLOUR) colour.alpha = YEA::COMBAT_LOG::LINE_COLOUR_ALPHA return colour end #-------------------------------------------------------------------------- # show #-------------------------------------------------------------------------- def show super refresh activate select([item_max-1, 0].max) end #-------------------------------------------------------------------------- # hide #-------------------------------------------------------------------------- def hide deactivate super end end # Window_CombatLog #============================================================================== # ■ Window_PartyCommand #============================================================================== class Window_PartyCommand < Window_Command #-------------------------------------------------------------------------- # alias method: make_command_list #-------------------------------------------------------------------------- alias window_partycommand_make_command_list_cld make_command_list def make_command_list window_partycommand_make_command_list_cld return if $imported["YEA-BattleCommandList"] add_command(YEA::COMBAT_LOG::COMMAND_NAME, :combatlog) end end # Window_PartyCommand #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # alias method: create_log_window #-------------------------------------------------------------------------- alias scene_battle_create_log_window_cld create_log_window def create_log_window scene_battle_create_log_window_cld create_combatlog_window end #-------------------------------------------------------------------------- # new method: create_combatlog_window #-------------------------------------------------------------------------- def create_combatlog_window @combatlog_window = Window_CombatLog.new @log_window.combatlog_window = @combatlog_window @combatlog_window.set_handler(:cancel, method(:close_combatlog)) @combatlog_window.add_line("-") @combatlog_window.add_line(YEA::COMBAT_LOG::TEXT_BATTLE_START) @combatlog_window.add_line("-") end #-------------------------------------------------------------------------- # new method: open_combatlog #-------------------------------------------------------------------------- def open_combatlog @combatlog_window.show end #-------------------------------------------------------------------------- # new method: close_combatlog #-------------------------------------------------------------------------- def close_combatlog @combatlog_window.hide if $imported["YEA-BattleCommandList"] if !@confirm_command_window.nil? && @confirm_command_window.visible @confirm_command_window.activate else @party_command_window.activate end else @party_command_window.activate end end #-------------------------------------------------------------------------- # alias method: create_party_command_window #-------------------------------------------------------------------------- alias create_party_command_window_cld create_party_command_window def create_party_command_window create_party_command_window_cld @party_command_window.set_handler(:combatlog, method(:open_combatlog)) end #-------------------------------------------------------------------------- # alias method: turn_start #-------------------------------------------------------------------------- alias scene_battle_turn_start_cld turn_start def turn_start scene_battle_turn_start_cld @combatlog_window.add_line("-") text = sprintf(YEA::COMBAT_LOG::TEXT_TURN_NUMBER, $game_troop.turn_count) @combatlog_window.add_line(text) @combatlog_window.add_line("-") end #-------------------------------------------------------------------------- # alias method: execute_action #-------------------------------------------------------------------------- alias scene_battle_execute_action_cld execute_action def execute_action @combatlog_window.add_line("-") scene_battle_execute_action_cld @combatlog_window.add_line("-") end #-------------------------------------------------------------------------- # alias method: turn_end #-------------------------------------------------------------------------- alias scene_battle_turn_end_cld turn_end def turn_end scene_battle_turn_end_cld @combatlog_window.add_line("-") end end # Scene_Battle #============================================================================== # # ▼ End of File # #==============================================================================