设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 137|回复: 0

[转载发布] Battle Swap & Last Resort

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    2026-7-12 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    9071

    主题

    864

    回帖

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    58883
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    68848

    灌水之王

    发表于 2026-8-2 21:51:10 | 显示全部楼层 |阅读模式
    Battle Swap & Last Resort v 1.0
    By Ebanyle


    Have you ever felt the need to try another strategy in the middle of the battle, but not being able to pull your warrior or archer into the team? Did you ever helplessly watch a Game Over after your party was beaten to a pulp, even though it has 1001 members who are not currently in battle?
    Fear no more! This script will (perhaps) help you!

    Features

    • Call members in reserve to battle;
    • Call a reserve member to battle when your current battle members have been defeated;
    • Set a cooldown for swaps;
    • Set a limit for swaps.

    How to Use

    Paste this below materials but above main. If you have any battle scripts, I recommend you to paste this below them.

    Compatibility

    This script may not work with any scripts that modify the battle scene, such as HUDs and some battle systems, especially ATB.
    It is supposed to be compatible with the following:
    - Yanfly Engine Ace - Battle Engine
    - Theolized Sideview Battlescript
    I may or may not be able to make some scripts compatible if asked.


    Screenshots
    Spoiler










    With YEA - Battle Engine





    Script
    Github
    Spoiler                Ruby:       
    1. #==============================================================================
    2. # Battle Swap & Last Resort 1.0
    3. # By Ebanyle
    4. #==============================================================================
    5. $imported = {} if $imported.nil?
    6. $imported["EBONY_BattleSwap"] = true
    7. #==============================================================================
    8. # Version History (DD/MM/YY)
    9. # 24/01/23 - v. 1.0 - Release
    10. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    11. # This script allows you to swap members mid-battle. No more lazy backup!
    12. # You can also set cooldowns and a limit for swaps per battle.
    13. #==============================================================================
    14. # Instructions
    15. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    16. # Paste this script above Main and below Materials, preferably under all battle
    17. # scripts.
    18. #==============================================================================
    19. # Terms of Use
    20. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    21. # - You may post this anywhere, edited or not;
    22. # - You may use it in any games, commercial or not;
    23. # - Credit me as Ebanyle;
    24. # - Do not remove this header.
    25. #==============================================================================
    26. # Thanks
    27. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    28. # Yanfly - For some coding reference
    29. # Traverse - Snippet fix for adding members mid-battle in TSBS
    30. #==============================================================================
    31. # Compatibility
    32. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    33. # This script may need some patches with any script that changes the battle
    34. # scene, including HUDs, ATB, etc.
    35. # It is currently (supposed to be) compatible with the following:
    36. # - Yanfly Engine Ace - Battle Engine
    37. # - Theolized Sideview Battle System
    38. #==============================================================================
    39. # Know issues
    40. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    41. # - If you are using YEA - Battle Engine and have too many members, it might not
    42. # look good;
    43. # - If you have a Popup script, it may pop up the Death state when swapping.
    44. #==============================================================================
    45. # Configuration
    46. #==============================================================================
    47. module EBONY
    48.   module SWAP
    49. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    50. #   Vocab: Name of the command in battle
    51.     Vocab = "Swap"   
    52. #
    53. #   Cooldown: Amount of turns that command will be inactive after swapping.
    54. #   Set to zero if you don't want to use this option.
    55.     Cooldown = 2
    56. #
    57. #   Max_Uses: Amount of times you can use command per battle.
    58. #   Set to zero if you don't want to use this option.
    59.     Max_Uses = 3
    60. #
    61. #   Log: Message to appear in the battle log when swapping.
    62. #   Names must be set by %s. 1st is the battle member, 2nd the reserve member.
    63. #   If you don't want a log to appear, simply leave string empty like this: ""
    64.     Log = "%s swapped places with %s."
    65. #
    66. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    67. # Configuration for Yanfly Engine Ace - Battle Engine
    68. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    69. #   Style: Layout of the reserve members window for YEA - Battle Engine.
    70. #          Does not affect anything if the aforementioned script is not present.
    71. #          For Battle Engine, actors will get real squishy if there's too
    72. #          many of them. Unfortunately there's no scroll option (yet?).
    73. #
    74. #   :side    - Reserve window will appear to the side of the party window.
    75. #              Recommended if you have 1 or 2 reserve members as it is tiny
    76. #              and any more members than that get REAL squishy.
    77. #   :default - Reserve window will appear above party window.
    78.     Style = :default
    79. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    80.   end
    81. end
    82. #==============================================================================
    83. # ** Game_Troop
    84. #==============================================================================
    85. class Game_Troop
    86.   attr_reader    :swap_cooldown
    87.   attr_reader    :swap_max
    88.   attr_accessor  :allow_swap
    89.   #--------------------------------------------------------------------------
    90.   # * aliased method: clear
    91.   #--------------------------------------------------------------------------
    92.   alias eb_swap_clear clear
    93.   def clear
    94.       eb_swap_clear
    95.       @swap_cooldown = 0
    96.       @swap_max = 0
    97.       @allow_swap = false
    98.   end
    99.   #--------------------------------------------------------------------------
    100.   # * new method: apply swap cooldown
    101.   #--------------------------------------------------------------------------
    102.   def apply_swap_cooldown
    103.     unless EBONY::SWAP::Cooldown == 0
    104.       @swap_cooldown = (EBONY::SWAP::Cooldown)
    105.       @swap_max += 1
    106.     end
    107.   end
    108.   #--------------------------------------------------------------------------
    109.   # * new method: allow swap?
    110.   #--------------------------------------------------------------------------
    111.   def allow_swap?
    112.     if @swap_max == EBONY::SWAP::Max_Uses && EBONY::SWAP::Max_Uses != 0
    113.       @allow_swap = false
    114.     elsif @swap_cooldown != 0 or !$game_party.reserve_exist?
    115.       @allow_swap = false
    116.     else
    117.       @allow_swap = true
    118.     end
    119.   end
    120.   #--------------------------------------------------------------------------
    121.   # * aliased method: Increase Turns
    122.   #--------------------------------------------------------------------------
    123.   alias eb_swap_increase_turn increase_turn
    124.   def increase_turn
    125.     eb_swap_increase_turn
    126.     @swap_cooldown -= 1 unless @swap_cooldown == 0
    127.   end
    128. end # Game_Troop
    129. #==============================================================================
    130. # ** Game_Party
    131. #==============================================================================
    132. class Game_Party
    133.   attr_accessor :dead_reserve_members
    134.   attr_accessor :after_swap_dead_members
    135.   #--------------------------------------------------------------------------
    136.   # * alias method: initalize
    137.   #--------------------------------------------------------------------------
    138.   alias eb_swap_initialize initialize
    139.   def initialize
    140.     eb_swap_initialize
    141.     @dead_reserve_members = []
    142.   end
    143.   #--------------------------------------------------------------------------
    144.   # * new method: last resort
    145.   #--------------------------------------------------------------------------
    146.   def last_resort
    147.     all_dead? && reserve_exist? && !reserve_all_dead?
    148.   end
    149.   #--------------------------------------------------------------------------
    150.   # * new method: reserve_all_dead?
    151.   #--------------------------------------------------------------------------
    152.   def reserve_all_dead?
    153.     return if reserve_members == nil
    154.     dead_reserve_members.size == reserve_members.size
    155.   end
    156.   #--------------------------------------------------------------------------
    157.   # * Get Array of Incapacitated Reserve Members
    158.   #--------------------------------------------------------------------------
    159.   def dead_reserve_members
    160.     unless reserve_members == nil
    161.       @dead_reserve_members = reserve_members.select {|member| member.dead? }
    162.     end
    163.   end
    164.   #--------------------------------------------------------------------------
    165.   # * new method: party_will_be_dead?
    166.   #--------------------------------------------------------------------------
    167.   def party_will_be_dead?(battle_member,reserve_member)
    168.     party_after_swap = members.map { |member| member }
    169.     party_after_swap[battle_member] = all_members[reserve_member]
    170.     @after_swap_dead_members = party_after_swap.select {|member| member.dead? }
    171.     if @after_swap_dead_members.size == members.size
    172.       return true
    173.     else
    174.       return false
    175.     end
    176.   end
    177.   #--------------------------------------------------------------------------
    178.   # * new method: reserve amount
    179.   #--------------------------------------------------------------------------
    180.   def reserve_amount
    181.     all_members.size - max_battle_members
    182.   end
    183.   #--------------------------------------------------------------------------
    184.   # * new method: reserve members
    185.   #--------------------------------------------------------------------------
    186.   def reserve_members
    187.     return [] if all_members.size < max_battle_members
    188.     all_members[max_battle_members, reserve_amount].select {|actor| actor.exist? }
    189.   end
    190.   #--------------------------------------------------------------------------
    191.   # * new method: reserve_exist?
    192.   #--------------------------------------------------------------------------
    193.   def reserve_exist?
    194.     return true if $game_party.all_members.size > $game_party.max_battle_members
    195.   end
    196. end # Game_Party
    197. #==============================================================================
    198. # ** Window_ReserveActor
    199. #  Window for showing party that is currently not in battle.
    200. #==============================================================================
    201. class Window_ReserveActor < Window_BattleStatus
    202.   #--------------------------------------------------------------------------
    203.   # * Object Initialization
    204.   #--------------------------------------------------------------------------
    205.   def initialize
    206.     super()
    207.     self.x = Graphics.width - width
    208.     self.visible = false
    209.     self.openness = 255
    210.   end
    211.   #--------------------------------------------------------------------------
    212.   # * Activate Window
    213.   #--------------------------------------------------------------------------
    214.   def activate
    215.     select(0)
    216.     super
    217.   end
    218.   #--------------------------------------------------------------------------
    219.   # * Get Number of Items
    220.   #--------------------------------------------------------------------------
    221.   def item_max
    222.     if $game_party.all_members.size > $game_party.max_battle_members
    223.       return $game_party.reserve_members.size
    224.     else
    225.       super
    226.     end
    227.   end
    228.   #--------------------------------------------------------------------------
    229.   # * Draw Item
    230.   #--------------------------------------------------------------------------
    231.   def draw_item(index)
    232.     if $game_party.all_members.size > $game_party.max_battle_members
    233.       actor = $game_party.reserve_members[index]
    234.       draw_basic_area(basic_area_rect(index), actor)
    235.       draw_gauge_area(gauge_area_rect(index), actor)
    236.     else
    237.       super
    238.     end
    239.   end
    240. end  # Window_ReserveActor
    241. #==============================================================================
    242. # ** Window_PartyCommand
    243. #==============================================================================
    244. class Window_PartyCommand < Window_Command
    245.   #--------------------------------------------------------------------------
    246.   # * aliased method: create Command List
    247.   #--------------------------------------------------------------------------
    248.   alias eb_swap_make_command_list make_command_list
    249.   def make_command_list
    250.     eb_swap_make_command_list
    251.     add_command(EBONY::SWAP::Vocab, :swap, $game_troop.allow_swap?)
    252.   end
    253. end
    254. #==============================================================================
    255. # ** Window_BattleLog
    256. #==============================================================================
    257. class Window_BattleLog < Window_Selectable
    258.   #--------------------------------------------------------------------------
    259.   # * new method: Display Swap
    260.   #--------------------------------------------------------------------------
    261.   def display_swap(target,subject)
    262.     add_text(sprintf(EBONY::SWAP::Log, target, subject))
    263.     wait if line_number > 0
    264.   end
    265. end # Window_BattleLog
    266. #==============================================================================
    267. # ** Scene_Battle
    268. #==============================================================================
    269. class Scene_Battle
    270.   #--------------------------------------------------------------------------
    271.   # * aliased method: create All Windows
    272.   #--------------------------------------------------------------------------
    273.   alias eb_swap_create_all_windows create_all_windows
    274.   def create_all_windows
    275.     eb_swap_create_all_windows
    276.     create_reserve_window
    277.     create_swap_actor_window
    278.     create_dactor_window
    279.   end
    280.   #--------------------------------------------------------------------------
    281.   # * new method: create Reserve Window
    282.   #--------------------------------------------------------------------------
    283.   def create_reserve_window
    284.     @reserve_window = Window_ReserveActor.new
    285.     @reserve_window.set_handler(:ok,     method(:on_reserve_ok))
    286.     @reserve_window.set_handler(:cancel, method(:on_reserve_cancel))
    287.     oy = Graphics.height - @reserve_window.height - @status_window.height
    288.     @reserve_window.y = oy
    289.   end
    290.   #--------------------------------------------------------------------------
    291.   # * new method: Create Swap Actor Window
    292.   #--------------------------------------------------------------------------
    293.   def create_swap_actor_window
    294.     @swap_actor_window = Window_BattleActor.new(@info_viewport)
    295.     @swap_actor_window.set_handler(:ok,     method(:on_s_actor_ok))
    296.     @swap_actor_window.set_handler(:cancel, method(:on_s_actor_cancel))
    297.   end
    298.   #--------------------------------------------------------------------------
    299.   # * aliased method: Create Party Commands Window
    300.   #--------------------------------------------------------------------------
    301.   alias eb_swap_create_party_command_window create_party_command_window
    302.   def create_party_command_window
    303.     eb_swap_create_party_command_window
    304.     @party_command_window.set_handler(:swap, method(:command_swap))
    305.   end
    306.   #--------------------------------------------------------------------------
    307.   # * new method: Create Dead Actor Window
    308.   #--------------------------------------------------------------------------
    309.   def create_dactor_window
    310.     @dactor_window = Window_BattleActor.new(@info_viewport)
    311.     @dactor_window.set_handler(:ok,     method(:on_dactor_ok))
    312.     @dactor_window.x = (@party_command_window.width / 2)
    313.   end
    314.   #--------------------------------------------------------------------------
    315.   # * new method: on_dactor_ok
    316.   #--------------------------------------------------------------------------
    317.   def on_dactor_ok
    318.     on_s_actor_ok
    319.   end
    320.   #--------------------------------------------------------------------------
    321.   # * aliased method: Processing at End of Action
    322.   #--------------------------------------------------------------------------
    323.   alias eb_swap_process_action_end process_action_end
    324.   def process_action_end
    325.     apply_last_resort if $game_party.last_resort
    326.     eb_swap_process_action_end
    327.   end
    328.   #--------------------------------------------------------------------------
    329.   # * new method: apply last resort
    330.   #--------------------------------------------------------------------------
    331.   def apply_last_resort
    332.     @dactor_window.refresh
    333.     @dactor_window.show.activate
    334.     @status_window.hide
    335.     @reserve_window.refresh
    336.     @reserve_window.show
    337.     @reserve_window.unselect
    338.   end
    339.   #--------------------------------------------------------------------------
    340.   # * new method: Reserve actor [OK]
    341.   #--------------------------------------------------------------------------
    342.   def on_reserve_ok
    343.     if check_for_disallow_swap_process
    344.       disallow_swap_process
    345.     else
    346.       process_swap
    347.     end
    348.   end
    349.   #--------------------------------------------------------------------------
    350.   # * new metod: Check if to Disallow Swap Process
    351.   #--------------------------------------------------------------------------
    352.   def check_for_disallow_swap_process
    353.     bm = battle_member_to_swap
    354.     rm = reserve_member_to_swap
    355.     bmd = both_members_dead?
    356.     ald = $game_party.all_dead?
    357.     return true if $game_party.party_will_be_dead?(bm,rm) or bmd && ald
    358.   end
    359.   #--------------------------------------------------------------------------
    360.   # * new method: disallow swap process
    361.   #--------------------------------------------------------------------------
    362.   def disallow_swap_process
    363.     Sound.play_buzzer
    364.     $game_party.reserve_amount != 1 ? w = @reserve_window : w = @swap_actor_window
    365.     i = w.index
    366.     w.refresh
    367.     w.activate
    368.     w.select(i)
    369.   end
    370.   #--------------------------------------------------------------------------
    371.   # * new method: Reserve actor [Cancel]
    372.   #--------------------------------------------------------------------------
    373.   def on_reserve_cancel
    374.     if !$game_party.last_resort
    375.       @swap_actor_window.refresh
    376.       @swap_actor_window.activate
    377.     else
    378.       @dactor_window.refresh
    379.       @dactor_window.activate
    380.     end
    381.     @reserve_window.unselect
    382.   end
    383.   #--------------------------------------------------------------------------
    384.   # * new method: both_members_dead?
    385.   #--------------------------------------------------------------------------
    386.   def both_members_dead?
    387.     bm = $game_party.members[battle_member_to_swap]
    388.     rm = $game_party.reserve_members[@reserve_window.index]
    389.     return true if bm.dead? && rm.dead?
    390.   end
    391.   #--------------------------------------------------------------------------
    392.   # * new method: battle_member_to_swap
    393.   #--------------------------------------------------------------------------
    394.   def battle_member_to_swap
    395.     if $game_party.last_resort
    396.       return @dactor_window.index
    397.     else
    398.       return @swap_actor_window.index
    399.     end
    400.   end
    401.   #--------------------------------------------------------------------------
    402.   # * new method: reserve_member_to_swap
    403.   #--------------------------------------------------------------------------
    404.   def reserve_member_to_swap
    405.     ra = $game_party.reserve_amount
    406.     mxb = $game_party.max_battle_members
    407.     if ra != 1
    408.       return mxb + @reserve_window.index
    409.     else
    410.       return mxb
    411.     end
    412.   end
    413.   #--------------------------------------------------------------------------
    414.   # * new method: process direct swap
    415.   #--------------------------------------------------------------------------
    416.   def process_swap
    417.     $game_troop.apply_swap_cooldown
    418.     rmn = $game_party.reserve_members[@reserve_window.index].name
    419.     bmn = $game_party.members[battle_member_to_swap].name
    420.     @reserve_window.hide
    421.     @swap_actor_window.hide
    422.     @dactor_window.hide
    423.     @status_window.show
    424.     start_party_command_selection
    425.     $game_party.swap_order(battle_member_to_swap,reserve_member_to_swap)
    426.     $game_party.make_actions
    427.     refresh_status
    428.     unless (EBONY::SWAP::Log).empty?
    429.       @party_command_window.show
    430.       @log_window.display_swap(rmn,bmn)
    431.       @log_window.wait_and_clear
    432.     end
    433.   end
    434.   #--------------------------------------------------------------------------
    435.   # * new method: Command Swap
    436.   #--------------------------------------------------------------------------
    437.   def command_swap
    438.     select_s_actor_selection
    439.     @reserve_window.refresh && @reserve_window.show && @reserve_window.unselect
    440.   end
    441.   #--------------------------------------------------------------------------
    442.   # * new method: Start Swap Actor Selection
    443.   #--------------------------------------------------------------------------
    444.   def select_s_actor_selection
    445.     @swap_actor_window.refresh
    446.     @swap_actor_window.show.activate
    447.   end
    448.   #--------------------------------------------------------------------------
    449.   # * new metod: start reserve selection (unused?)
    450.   #--------------------------------------------------------------------------
    451.   def select_reserve_selection
    452.     @reserve_window.activate
    453.   end
    454.   #--------------------------------------------------------------------------
    455.   # * new metod: Swap Actor [OK]
    456.   #--------------------------------------------------------------------------
    457.   def on_s_actor_ok
    458.     if $game_party.reserve_amount != 1
    459.       @reserve_window.activate
    460.     else
    461.       check_for_disallow_swap_process ? disallow_swap_process : process_swap
    462.     end
    463.   end
    464.   #--------------------------------------------------------------------------
    465.   # * new method: Swap Actor [Cancel]
    466.   #--------------------------------------------------------------------------
    467.   def on_s_actor_cancel
    468.     @party_command_window.refresh
    469.     @party_command_window.activate
    470.     @swap_actor_window.hide
    471.     @reserve_window.hide
    472.   end
    473. end # Scene_Battle
    474. class << BattleManager
    475.   #--------------------------------------------------------------------------
    476.   # * overwrite: Determine Win/Loss Results
    477.   #--------------------------------------------------------------------------
    478.   alias eb_swap_judge_win_loss judge_win_loss
    479.   def judge_win_loss
    480.     if $game_party.last_resort
    481.       turn_end
    482.       @phase = :input
    483.       return
    484.     else
    485.       eb_swap_judge_win_loss
    486.     end
    487.   end
    488. end # BattleManager
    489. if $imported["YEA-BattleEngine"]
    490. #==============================================================================
    491. # ** Window_ReserveActor
    492. #==============================================================================
    493. class Window_ReserveActor < Window_BattleStatus
    494.   #--------------------------------------------------------------------------
    495.   # overwrite method: col_max
    496.   #--------------------------------------------------------------------------
    497.   def col_max
    498.     if $game_party.reserve_members.empty?
    499.       return 1
    500.     else
    501.       return $game_party.reserve_amount
    502.     end
    503.   end
    504.   #--------------------------------------------------------------------------
    505.   # new method: battle_members
    506.   #--------------------------------------------------------------------------
    507.   def battle_members; return $game_party.reserve_members; end
    508.   #--------------------------------------------------------------------------
    509.   # new method: actor
    510.   #--------------------------------------------------------------------------
    511.   def actor; return battle_members[@index]; end
    512.   #--------------------------------------------------------------------------
    513.   # overwrite method: item_rect
    514.   #--------------------------------------------------------------------------
    515.   def item_rect(index)
    516.     rect = Rect.new
    517.     rect.width = [[128, contents.width / col_max].min,0].max
    518.     rect.height = contents.height
    519.     rect.x = index * rect.width
    520.     if YEA::BATTLE::BATTLESTATUS_CENTER_FACES
    521.       rect.x += (contents.width - $game_party.reserve_amount * rect.width) / 2
    522.     end
    523.     rect.y = 0
    524.     return rect
    525.   end
    526.   #--------------------------------------------------------------------------
    527.   # overwrite method: draw_item
    528.   #--------------------------------------------------------------------------
    529.   def draw_item(index)
    530.     return if index.nil?
    531.     clear_item(index)
    532.     actor = battle_members[index]
    533.     rect = item_rect(index)
    534.     return if actor.nil?
    535.     draw_actor_face(actor, rect.x+2, rect.y+2, actor.alive?)
    536.     draw_actor_name(actor, rect.x-20, rect.y, rect.width)
    537.     draw_actor_icons(actor, rect.x, line_height*1, rect.width)
    538.     gx = YEA::BATTLE::BATTLESTATUS_HPGAUGE_Y_PLUS
    539.     contents.font.size = YEA::BATTLE::BATTLESTATUS_TEXT_FONT_SIZE
    540.     draw_actor_hp(actor, rect.x+2, line_height*2+gx, rect.width-4)
    541.     if draw_tp?(actor) && draw_mp?(actor)
    542.       dw = rect.width/2-2
    543.       dw += 1 if $imported["YEA-CoreEngine"] && YEA::CORE::GAUGE_OUTLINE
    544.       draw_actor_tp(actor, rect.x+2, line_height*3, dw)
    545.       dw = rect.width - rect.width/2 - 2
    546.       draw_actor_mp(actor, rect.x+rect.width/2, line_height*3, dw)
    547.     elsif draw_tp?(actor) && !draw_mp?(actor)
    548.       draw_actor_tp(actor, rect.x+2, line_height*3, rect.width-4)
    549.     else
    550.       draw_actor_mp(actor, rect.x+2, line_height*3, rect.width-4)
    551.     end
    552.   end
    553.   #--------------------------------------------------------------------------
    554.   # * Get Window Width
    555.   #--------------------------------------------------------------------------
    556.   def window_width
    557.     if EBONY::SWAP::Style == :side
    558.       return 128
    559.     else
    560.       super
    561.     end
    562.   end
    563. end # Window_ReserveActor
    564. class Scene_Battle
    565.   #--------------------------------------------------------------------------
    566.   # * new method: window_side?
    567.   #--------------------------------------------------------------------------
    568.   def window_side?
    569.     EBONY::SWAP::Style == :side
    570.   end
    571.   #--------------------------------------------------------------------------
    572.   # * overwrite method: create Reserve Window
    573.   #--------------------------------------------------------------------------
    574.   def create_reserve_window
    575.     @reserve_window = Window_ReserveActor.new
    576.     @reserve_window.set_handler(:ok,     method(:on_reserve_ok))
    577.     @reserve_window.set_handler(:cancel, method(:on_reserve_cancel))
    578.     oy = Graphics.height - @reserve_window.height
    579.     oy = oy - @party_command_window.height unless window_side?
    580.     @reserve_window.y = oy
    581.   end
    582.   #--------------------------------------------------------------------------
    583.   # * overwrite method: Create Swap Actor Window
    584.   #--------------------------------------------------------------------------
    585.   def create_swap_actor_window
    586.     @swap_actor_window = Window_BattleActor.new(@info_viewport)
    587.     @swap_actor_window.set_handler(:ok,     method(:on_s_actor_ok))
    588.     @swap_actor_window.set_handler(:cancel, method(:on_s_actor_cancel))
    589.     @swap_actor_window.x = @party_command_window.width unless window_side?
    590.   end
    591.   #--------------------------------------------------------------------------
    592.   # * overwrite method: Create Dead Actor Window
    593.   #--------------------------------------------------------------------------
    594.   def create_dactor_window
    595.     @dactor_window = Window_BattleActor.new(@info_viewport)
    596.     @dactor_window.set_handler(:ok,     method(:on_dactor_ok))
    597.     @dactor_window.x = (@party_command_window.width / 2) if !window_side?
    598.   end
    599.   #--------------------------------------------------------------------------
    600.   # * alias method: apply last resort
    601.   #--------------------------------------------------------------------------
    602.   alias eb_yeab_apply_last_resort apply_last_resort
    603.   def apply_last_resort
    604.     eb_yeab_apply_last_resort
    605.     @party_command_window.show if !window_side?
    606.     @reserve_window.x = @dactor_window.x if !window_side? && $game_party.last_resort
    607.   end
    608.   #--------------------------------------------------------------------------
    609.   # * new method: hide windows on swap
    610.   #--------------------------------------------------------------------------
    611.   def hide_windows_on_swap
    612.     @help_window.hide
    613.     refresh_status
    614.     @status_window.show
    615.   end
    616.   #--------------------------------------------------------------------------
    617.   # * aliased method: Swap Actor [Cancel]
    618.   #--------------------------------------------------------------------------
    619.   alias yeab_on_s_actor_cancel on_s_actor_cancel
    620.   def on_s_actor_cancel
    621.     yeab_on_s_actor_cancel
    622.     hide_windows_on_swap
    623.     @party_command_window.show
    624.   end
    625.   #--------------------------------------------------------------------------
    626.   # * aliased method: process direct swap
    627.   #--------------------------------------------------------------------------
    628.   alias eb_yeab_process_swap process_swap
    629.   def process_swap
    630.     eb_yeab_process_swap
    631.     hide_windows_on_swap
    632.   end
    633.   #--------------------------------------------------------------------------
    634.   # * aliased method: command swap
    635.   #--------------------------------------------------------------------------
    636.   alias eb_yeab_command_swap command_swap
    637.   def command_swap
    638.     eb_yeab_command_swap
    639.     @party_command_window.hide if window_side?
    640.     @status_window.hide
    641.     @reserve_window.x = @party_command_window.width if !window_side?
    642.   end
    643.   #--------------------------------------------------------------------------
    644.   # * aliased method: disallow swap process
    645.   #--------------------------------------------------------------------------
    646.   alias eb_yeab_disallow_swap_process disallow_swap_process
    647.   def disallow_swap_process
    648.     eb_yeab_disallow_swap_process
    649.   end
    650. end # Scene_Battle
    651. #==============================================================================
    652. end # Imported
    653. if $imported[:TSBS]
    654. #==============================================================================
    655. # ** Game_Party
    656. #==============================================================================
    657. class Game_Party
    658.   #--------------------------------------------------------------------------
    659.   # * aliased method: Change Order
    660.   #--------------------------------------------------------------------------
    661.   alias eb_tsbs_swap_order swap_order
    662.   def swap_order(index1, index2)
    663.     eb_tsbs_swap_order(index1, index2)
    664.     if SceneManager.scene_is?(Scene_Battle)
    665.       SceneManager.scene.spriteset.actor_sprites.each_index { |i|
    666.           sprite = SceneManager.scene.spriteset.actor_sprites[i]
    667.           mem = $game_party.battle_members[i] ; return unless mem
    668.           if sprite.battler.nil? || sprite.battler != mem
    669.             mem.init_oripost ; mem.reset_pos(1) ; mem.battle_phase = :idle
    670.           end
    671.         }
    672.         SceneManager.scene.spriteset.update
    673.     end
    674.   end
    675. end # Game_Party
    676. #==============================================================================
    677. end # Imported
    复制代码






    Terms of Use

    • You may post this anywhere, edited or not;
    • You may use it in any games, commercial or not;
    • Credit me as Ebanyle;
    • Do not remove the header.

    Thanks

    • Yanfly - For some code reference
    • Traverse - Snippet fix for adding members mid-battle in TSBS (from here)



    本贴来自国际rpgmaker官方论坛作者:Ebanyle处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/battle-swap-last-resort.154407/

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-8-17 08:31 , Processed in 0.095022 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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