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

Project1

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

[已经过期] 求大神把这个【自动战斗】脚本改成全体【普通攻击】效果

[复制链接]

Lv2.观梦者

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
帖子
793
跳转到指定楼层
1
发表于 2015-12-4 10:14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
#==============================================================================
#
# ▼ Yanfly Engine Ace - Command Autobattle v1.01
# -- Last Updated: 2011.12.26
# -- Level: Normal
# -- Requires: n/a
#
#==============================================================================

$imported = {} if $imported.nil?
$imported["YEA-CommandAutobattle"] = true

#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2011.12.26 - Bug Fixed: Autobattle cancelled after each battle.
# 2011.12.12 - Started Script and Finished.
#
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Anyone remember the Autobattle command from RPG Maker 2000? Well, now it's
# back and you can choose to tack it onto the Party Command Window or the Actor
# Command Window. When autobattle is selected, it will let the game determine
# what action to use for the party and/or actors depending on the game's A.I.
#
# Furthermore, there is an option to have Autobattle continously remain in
# effect if selected from the Party Command Window. When Autobattle is selected
# in the Actor Command Window, it'll cause the game to automatically choose an
# action for that actor instead.
#
# In addition to this, there exists the functionality of having all battle
# members but the first member autobattle. This feature can be turned off.
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
#
# Adjust the settings in the module to your liking.
#
#==============================================================================
# ▼ Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
#
#==============================================================================

module YEA
  module AUTOBATTLE
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Party Autobattle Command Settings -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # Adjust the command settings for Autobattle under the Party Command Window
    # here. If you decide to let Party Autobattle be continuous, it will keep
    # going until the player decides to cancel it with X.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    ENABLE_PARTY_AUTOBATTLE = true      # Enables autobattle in Party Window.
    PARTY_COMMAND_NAME  = "自動作戰"        # Text that appears for Autobattle.
    PARTY_SHOW_SWITCH   = 0             # Switch used to show Autobattle.
    PARTY_ENABLE_SWITCH = 0             # Switch used to enable Autobattle.
    # Note: For both of the switches, if they are set to 0, then the feature
    # will not be used at all. The command will always be shown and/or the
    # command will always be enabled.
   
    # These settings adjust continous autobattle. If enabled, these settings
    # will be applied. Otherwise, they won't be.
    ENABLE_CONTINOUS = true             # If true, autobattle is continous.
    DISABLE_MESSAGE = "自動作戰中"
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Actor Autobattle Command Settings -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # Adjust the command settings for Autobattle under the Actor Command Window
    # here. Actors do not have continous autobattle. Instead, they just simply
    # choose whatever action the game decides is most suitable for them.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    ENABLE_ACTOR_AUTOBATTLE = false      # Enables autobattle in Party Window.
    ACTOR_COMMAND_NAME  = "自動"        # Text that appears for Autobattle.
    ACTOR_SHOW_SWITCH   = 0             # Switch used to show Autobattle.
    ACTOR_ENABLE_SWITCH = 0             # Switch used to enable Autobattle.
    # Note: For both of the switches, if they are set to 0, then the feature
    # will not be used at all. The command will always be shown and/or the
    # command will always be enabled.
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Secondary Members Autobattle -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # For those who only want to grant command control to the first actor in
    # battle, enable the setting below. All of the battle members who aren't
    # first in line will automatically choose their action for the turn.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    ENABLE_SECONDARY_AUTOBATTLE = false
   
  end # AUTOBATTLE
end # YEA

#==============================================================================
# ▼ Editting anything past this point may potentially result in causing
# computer damage, incontinence, explosion of user's head, coma, death, and/or
# halitosis so edit at your own risk.
#==============================================================================

#==============================================================================
# ■ BattleManager
#==============================================================================

module BattleManager
  
  #--------------------------------------------------------------------------
  # alias method: process_victory
  #--------------------------------------------------------------------------
  class <<self; alias battlemanager_process_victory_cab process_victory; end
  def self.process_victory
    SceneManager.scene.close_disable_autobattle_window
    return battlemanager_process_victory_cab
  end
  
  #--------------------------------------------------------------------------
  # alias method: process_abort
  #--------------------------------------------------------------------------
  class <<self; alias battlemanager_process_abort_cab process_abort; end
  def self.process_abort
    SceneManager.scene.close_disable_autobattle_window
    return battlemanager_process_abort_cab
  end
  
  #--------------------------------------------------------------------------
  # alias method: process_defeat
  #--------------------------------------------------------------------------
  class <<self; alias battlemanager_process_defeat_cab process_defeat; end
  def self.process_defeat
    SceneManager.scene.close_disable_autobattle_window
    return battlemanager_process_defeat_cab
  end
  
end # BattleManager

#==============================================================================
# ■ Game_Temp
#==============================================================================

class Game_Temp
  
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :continous_autobattle
  
end # Game_Temp

#==============================================================================
# ■ Game_BattlerBase
#==============================================================================

class Game_BattlerBase
  
  #--------------------------------------------------------------------------
  # alias method: auto_battle?
  #--------------------------------------------------------------------------
  alias game_battlerbase_auto_battle_cab auto_battle?
  def auto_battle?
    return true if continuous_autobattle?
    return true if secondary_auto_battle?
    return game_battlerbase_auto_battle_cab
  end
  
  #--------------------------------------------------------------------------
  # new method: continuous_autobattle?
  #--------------------------------------------------------------------------
  def continuous_autobattle?
    return false unless actor?
    return $game_temp.continous_autobattle
  end
  
  #--------------------------------------------------------------------------
  # new method: secondary_auto_battle?
  #--------------------------------------------------------------------------
  def secondary_auto_battle?
    return false unless actor?
    return false if index == 0
    return YEA::AUTOBATTLE::ENABLE_SECONDARY_AUTOBATTLE
  end
  
end # Game_BattlerBase

#==============================================================================
# ■ Game_Unit
#==============================================================================

class Game_Unit
  
  #--------------------------------------------------------------------------
  # alias method: make_actions
  #--------------------------------------------------------------------------
  alias game_unit_make_actions_cab make_actions
  def make_actions
    game_unit_make_actions_cab
    refresh_autobattler_status_window
  end
  
  #--------------------------------------------------------------------------
  # new method: refresh_autobattler_status_window
  #--------------------------------------------------------------------------
  def refresh_autobattler_status_window
    return unless SceneManager.scene_is?(Scene_Battle)
    return unless self.is_a?(Game_Party)
    SceneManager.scene.refresh_autobattler_status_window
  end
  
end # Game_Unit

#==============================================================================
# ■ Window_PartyCommand
#==============================================================================

class Window_PartyCommand < Window_Command
  
  #--------------------------------------------------------------------------
  # alias method: make_command_list
  #--------------------------------------------------------------------------
  alias window_partycommand_cab make_command_list
  def make_command_list
    window_partycommand_cab
    return if $imported["YEA-BattleCommandList"]
    add_autobattle_command if YEA::AUTOBATTLE::ENABLE_PARTY_AUTOBATTLE
  end
  
  #--------------------------------------------------------------------------
  # new method: add_autobattle_command
  #--------------------------------------------------------------------------
  def add_autobattle_command
    return unless show_autobattle?
    text = YEA::AUTOBATTLE::PARTY_COMMAND_NAME
    add_command(text, :autobattle, enable_autobattle?)
  end
  
  #--------------------------------------------------------------------------
  # new method: show_autobattle?
  #--------------------------------------------------------------------------
  def show_autobattle?
    return true if YEA::AUTOBATTLE::PARTY_SHOW_SWITCH <= 0
    return $game_switches[YEA::AUTOBATTLE::PARTY_SHOW_SWITCH]
  end
  
  #--------------------------------------------------------------------------
  # new method: enable_autobattle?
  #--------------------------------------------------------------------------
  def enable_autobattle?
    return true if YEA::AUTOBATTLE::PARTY_ENABLE_SWITCH <= 0
    return $game_switches[YEA::AUTOBATTLE::PARTY_ENABLE_SWITCH]
  end
  
end # Window_PartyCommand

#==============================================================================
# ■ Window_ActorCommand
#==============================================================================

class Window_ActorCommand < Window_Command
  
  #--------------------------------------------------------------------------
  # alias method: make_command_list
  #--------------------------------------------------------------------------
  alias window_actorcommand_make_command_list_cab make_command_list
  def make_command_list
    return if @actor.nil?
    unless $imported["YEA-BattleCommandList"]
      add_autobattle_command if YEA::AUTOBATTLE::ENABLE_ACTOR_AUTOBATTLE
    end
    window_actorcommand_make_command_list_cab
  end
  
  #--------------------------------------------------------------------------
  # new method: add_autobattle_command
  #--------------------------------------------------------------------------
  def add_autobattle_command
    return unless show_autobattle?
    text = YEA::AUTOBATTLE::ACTOR_COMMAND_NAME
    add_command(text, :autobattle, enable_autobattle?)
  end
  
  #--------------------------------------------------------------------------
  # new method: show_autobattle?
  #--------------------------------------------------------------------------
  def show_autobattle?
    return true if YEA::AUTOBATTLE::ACTOR_SHOW_SWITCH <= 0
    return $game_switches[YEA::AUTOBATTLE::ACTOR_SHOW_SWITCH]
  end
  
  #--------------------------------------------------------------------------
  # new method: enable_autobattle?
  #--------------------------------------------------------------------------
  def enable_autobattle?
    return true if YEA::AUTOBATTLE::ACTOR_ENABLE_SWITCH <= 0
    return $game_switches[YEA::AUTOBATTLE::ACTOR_ENABLE_SWITCH]
  end
  
end # Window_ActorCommand

#==============================================================================
# ■ Window_DisableAutobattle
#==============================================================================

class Window_DisableAutobattle < Window_Base
  
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize
    super(64, 0, Graphics.width - 128, fitting_height(1))
    self.y = Graphics.height - fitting_height(1) + 12
    self.opacity = 0
    self.z = 1000
    hide
    refresh
  end
  
  #--------------------------------------------------------------------------
  # refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_background(contents.rect)
    text = YEA::AUTOBATTLE::DISABLE_MESSAGE
    draw_text(contents.rect, text, 1)
  end
  
  #--------------------------------------------------------------------------
  # draw_background
  #--------------------------------------------------------------------------
  def draw_background(rect)
    temp_rect = rect.clone
    temp_rect.width /= 2
    contents.gradient_fill_rect(temp_rect, back_color2, back_color1)
    temp_rect.x = temp_rect.width
    contents.gradient_fill_rect(temp_rect, back_color1, back_color2)
  end
  
  #--------------------------------------------------------------------------
  # back_color1
  #--------------------------------------------------------------------------
  def back_color1; return Color.new(0, 0, 0, 192); end
  
  #--------------------------------------------------------------------------
  # back_color2
  #--------------------------------------------------------------------------
  def back_color2; return Color.new(0, 0, 0, 0); end
  
end # Window_DisableAutobattle

#==============================================================================
# ■ Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # alias method: create_all_windows
  #--------------------------------------------------------------------------
  alias scene_battle_create_all_windows_cab create_all_windows
  def create_all_windows
    $game_temp.continous_autobattle = false
    scene_battle_create_all_windows_cab
    create_disable_autobattle_window
  end
  
  #--------------------------------------------------------------------------
  # alias method: create_party_command_window
  #--------------------------------------------------------------------------
  alias create_party_command_window_cab create_party_command_window
  def create_party_command_window
    create_party_command_window_cab
    @party_command_window.set_handler(:autobattle, method(:command_pautobattle))
  end
  
  #--------------------------------------------------------------------------
  # new method: command_pautobattle
  #--------------------------------------------------------------------------
  def command_pautobattle
    for member in $game_party.battle_members
      next unless member.inputable?
      member.make_auto_battle_actions
    end
    $game_temp.continous_autobattle = YEA::AUTOBATTLE::ENABLE_CONTINOUS
    @disable_autobattle_window.show if $game_temp.continous_autobattle
    refresh_autobattler_status_window
    turn_start
  end
  
  #--------------------------------------------------------------------------
  # new method: create_disable_autobattle_window
  #--------------------------------------------------------------------------
  def create_disable_autobattle_window
    @disable_autobattle_window = Window_DisableAutobattle.new
  end
  
  #--------------------------------------------------------------------------
  # alias method: update
  #--------------------------------------------------------------------------
  alias scene_battle_update_cab update
  def update
    scene_battle_update_cab
    update_continous_autobattle_window
  end
  
  #--------------------------------------------------------------------------
  # alias method: update_basic
  #--------------------------------------------------------------------------
  alias scene_battle_update_basic_cab update_basic
  def update_basic
    scene_battle_update_basic_cab
    update_continous_autobattle_window
  end
  
  #--------------------------------------------------------------------------
  # new method: update_continous_autobattle_window
  #--------------------------------------------------------------------------
  def update_continous_autobattle_window
    return unless @disable_autobattle_window.visible
    opacity = $game_message.visible ? 0 : 255
    @disable_autobattle_window.contents_opacity = opacity
    close_disable_autobattle_window if Input.press?(:B)
  end
  
  #--------------------------------------------------------------------------
  # new method: close_disable_autobattle_window
  #--------------------------------------------------------------------------
  def close_disable_autobattle_window
    Sound.play_cancel if Input.press?(:B) && @disable_autobattle_window.visible
    $game_temp.continous_autobattle = false
    @disable_autobattle_window.hide
  end
  
  #--------------------------------------------------------------------------
  # alias method: create_actor_command_window
  #--------------------------------------------------------------------------
  alias create_actor_command_window_cab create_actor_command_window
  def create_actor_command_window
    create_actor_command_window_cab
    @actor_command_window.set_handler(:autobattle, method(:command_aautobattle))
  end
  
  #--------------------------------------------------------------------------
  # new method: command_aautobattle
  #--------------------------------------------------------------------------
  def command_aautobattle
    BattleManager.actor.make_auto_battle_actions
    next_command
  end
  
  #--------------------------------------------------------------------------
  # new method: refresh_autobattler_status_window
  #--------------------------------------------------------------------------
  def refresh_autobattler_status_window
    for member in $game_party.battle_members
      next unless member.auto_battle?
      @status_window.draw_item(member.index)
    end
  end
  
end # Scene_Battle

#==============================================================================
#
# ▼ End of File
#
#==============================================================================
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-17 01:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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