| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 2 |  
| 积分 | 2 |  
| 经验 | 3063 |  
| 最后登录 | 2016-7-20 |  
| 在线时间 | 54 小时 |  
 Lv1.梦旅人 
	梦石0 星屑235 在线时间54 小时注册时间2012-12-28帖子31 | 
| 
先上腳本原碼。
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  具體效果是醬复制代码#==============================================================================
# +++ MOG - Ayesha AT Gauge (ver 1.9) +++
#==============================================================================
# By Moghunter
# https://atelierrgss.wordpress.com/
#==============================================================================
# Adiciona um medidor animado de AT, incluindo os ícones dos respectivos 
# battlers.
#==============================================================================
# Arquivos necessários.
#
# ATB_Layout.png
# ATB_Enemy.png
# ATB_Actor.png
#
# Coloque as imagens na pasta
#
#            /Graphics/Ayesha_ATB/
#
#==============================================================================
# Opcional - Ícones específicos dos battlers.
#==============================================================================
# Nomeie os arquivos das seguinte forma.
#
# Actor_ + ID.png
# Enemy_ + ID.png
#
#==============================================================================
# Compatível com :
#
# - MOG ATB System (v 1.0)
# - Victor's Active Time Battle (1.05)
# - C Winter's Active Time Battle (1.62)
#
#==============================================================================
# Histórico
#==============================================================================
# v1.9 - Correção do requerimento do script MOG ATB.
# v1.8 - Apresentar o ícone da skill na função "Cast Time"
# v1.7 - Refresh da hud ao mudar a posição dos personagens.
# v1.6 - Correção de não apresentar o ícone ao reviver o battler inimigo.
#==============================================================================
$imported = {} if $imported.nil?
$imported[:mog_ayesha_at_gauge] = true
module AYESHA_ATB_GAUGE
  #Definição do tipo de medidor. (Nota - A imagem original deve ser na vertical)
  # 0 - Vertical  /  1 - Horizontal
  GAUGE_TYPE = 0 
  #Posição geral do medidor
  LAYOUT_POS = [480,0]
  #Posição do Ícones dos battlers.
  POINT_POS = [2,50]
  #Posição do Ícone quando o battler estiver ativo.
  CENTER_POS = [11,9]
  #Tamanho do medidor. [Altura e largura]
  GAUGE_SIZE = [170,31]
  #Posição Z do sprite.
  SPRITE_Z = 51
  #Definir a posição z do sprite baseado na altura.
  Z_FIX = false
  #Definição da posição dos ícones das skills.
  CHARGE_ICON_POS_FOR_ACTORS = [0,0]
  CHARGE_ICON_POS_FOR_ENEMIES = [0,0]
end
#==============================================================================
# ■ Cache
#==============================================================================
module Cache
  #--------------------------------------------------------------------------
  # * Hud
  #--------------------------------------------------------------------------
  def self.ayesha_atb(filename)
      load_bitmap("Graphics/Ayesha_ATB/", filename)
  end
end
#==============================================================================
# ■ Game BattlerBase
#==============================================================================
class Game_BattlerBase
   attr_accessor :hidden
end
 
#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp
  attr_accessor :ay_gauge_data
  attr_accessor :battle_end
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias mog_ayesha_gauge_initialize initialize
  def initialize
      @ay_gauge_data = [false,false,[0,0]] ; @battle_end = false
      mog_ayesha_gauge_initialize
  end
  
end
#==============================================================================
# ■ Game System
#==============================================================================
class Game_System
  attr_accessor :ay_gauge_type
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias mog_ayesha_gauge_sys_initialize initialize
  def initialize
      @ay_gauge_type = AYESHA_ATB_GAUGE::GAUGE_TYPE
      mog_ayesha_gauge_sys_initialize
  end  
  
end
#===============================================================================
# ■ Spriteset_Battle
#===============================================================================
class Spriteset_Battle
  include AYESHA_ATB_GAUGE
  #--------------------------------------------------------------------------
  # ● Update Battle Start
  #--------------------------------------------------------------------------        
  alias mog_ayesha_atb_initialize initialize
  def initialize
      mog_ayesha_atb_initialize
      create_ayesha_atb
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  alias mog_ayesha_atb_dispose dispose
  def dispose
      dispose_ayesha_atb
      mog_ayesha_atb_dispose      
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------          
  alias mog_ayesha_atb_update update
  def update
      mog_ayesha_atb_update
      update_ayesha_atb
  end  
  #--------------------------------------------------------------------------
  # ● Create Ayesha ATB
  #--------------------------------------------------------------------------    
  def create_ayesha_atb
      return if @schala_atb != nil
      view = Z_FIX ? @viewport1 : nil
      @ayesha_atb = Ayesha_ATB_Gauge.new(view)
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose ayesha ATB
  #--------------------------------------------------------------------------    
  def dispose_ayesha_atb
      return if @ayesha_atb == nil
      @ayesha_atb.dispose ; @ayesha_atb = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Update Schala ATB
  #--------------------------------------------------------------------------    
  def update_ayesha_atb
      return if @ayesha_atb == nil      
      @ayesha_atb.update
  end
  
end 
#==============================================================================
# ** Game Interpreter
#==============================================================================
class Game_Interpreter
  
 #--------------------------------------------------------------------------
 # ● Command_129
 #--------------------------------------------------------------------------
 alias mog_ayesha_gauge_command_129 command_129
 def command_129
     mog_ayesha_gauge_command_129
     $game_temp.ay_gauge_data[1] = true if SceneManager.scene_is?(Scene_Battle)
 end
  
 #--------------------------------------------------------------------------
 # ● Command 335
 #--------------------------------------------------------------------------
 alias mog_ayesha_at_command_335 command_335
 def command_335
     mog_ayesha_at_command_335
     $game_temp.ay_gauge_data[1] = true if SceneManager.scene_is?(Scene_Battle)
 end 
 
end
#==============================================================================
# ** Game Party
#==============================================================================
class Game_Party < Game_Unit
    
 #--------------------------------------------------------------------------
 # * Swap Order
 #--------------------------------------------------------------------------
 alias mog_ayesha_gauge_swap_order swap_order
 def swap_order(index1, index2)
      mog_ayesha_gauge_swap_order(index1, index2)
      $game_temp.ay_gauge_data[1] = true if SceneManager.scene_is?(Scene_Battle)
 end  
  
end
#==============================================================================
# ■ Ayesha ATB Gauge
#==============================================================================
class Ayesha_ATB_Gauge
  include AYESHA_ATB_GAUGE
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------            
  def initialize(viewport = nil)
      $game_temp.ay_gauge_data[0] = false ; @faces = [] ; create_sprites(viewport)
  end
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------            
  def create_sprites(viewport = nil)
      return if $game_party.members.size == 0 or $game_troop.members.size == 0
      @layout = Sprite.new ; @layout.bitmap = Cache.ayesha_atb("ATB_Layout")
      @layout.z = SPRITE_Z ; @layout.opacity = 0 ; @layout.viewport = viewport
      $game_temp.ay_gauge_data[2] = [@layout.bitmap.width, @layout.height]
      @layout.x = LAYOUT_POS[0] + @layout.ox
      @layout.y = LAYOUT_POS[1] + @layout.oy 
     (@layout.angle = 270 ; @layout.x += @layout.bitmap.width) if $game_system.ay_gauge_type == 1
      battlers.each do |i| @faces.push(Ayesha_Sprite_Icon.new(viewport,i)) end
  end    
      
  #--------------------------------------------------------------------------
  # ● Initialize
  #-------------------------------------------------------------------------- 
  def battlers
      return $game_troop.members + $game_party.battle_members
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------
  def dispose
      @faces.each {|sprite| sprite.dipose_schala_point }
      return if @layout == nil
      @layout.bitmap.dispose ; @layout.dispose ; @layout = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update
      return if @layout == nil
      @faces.each {|sprite| sprite.update_schala_point }
      @layout.opacity += !sprite_visible? ? - 10 : 10
      @layout.visible = !$game_message.visible
      refresh_ayesha_gauge if $game_temp.ay_gauge_data[1]
  end
  
  #--------------------------------------------------------------------------
  # ● Sprite Visible
  #--------------------------------------------------------------------------              
  def sprite_visible?
      return false if $game_temp.ay_gauge_data[0]
      return false if $game_message.visible
      return false if $game_temp.battle_end
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Ayesha Gauge
  #--------------------------------------------------------------------------    
  def refresh_ayesha_gauge
      $game_temp.ay_gauge_data[1] = false ; dispose ; create_sprites(nil)
  end
  
end
#=============================================================================
# ■ Ayesha Sprite Icon
#==============================================================================
class Ayesha_Sprite_Icon < Sprite
  include AYESHA_ATB_GAUGE
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------              
  def initialize(viewport = nil,battler)
      super(viewport)
      @target = battler ; @gauge_size = GAUGE_SIZE[0] 
      return if @target == nil
      create_bitmap 
      self.ox = @cw / 2 ; self.oy = @ch / 2 ; self.x = 0 ; self.y = 0
      self.z = @sz ; self.opacity = 0 ; @pos_y = 0 
      @gy = $game_temp.ay_gauge_data[2][0] - self.oy
      if $game_system.ay_gauge_type == 1
         @x2 = self.ox + LAYOUT_POS[0] + POINT_POS[0] - (@gauge_size + 5)
         @y2 = self.oy + LAYOUT_POS[1] + POINT_POS[1] - @gy
         @y2 += GAUGE_SIZE[1] if @target.is_a?(Game_Enemy)       
      else  
         @x2 = self.ox + LAYOUT_POS[0] + POINT_POS[0]
         @y2 = self.oy + LAYOUT_POS[1] + POINT_POS[1] + @gauge_size
         @x2 += GAUGE_SIZE[1] if @target.is_a?(Game_Enemy)
      end
      @x = 0 ; @y = 0 ; @cast_time = [false,0] ; @wait_fade = 2
      @center = [LAYOUT_POS[0] + self.ox + 11,LAYOUT_POS[1] + self.oy + 9]
      catb = ATB::MAX_AP rescue nil ; @ccwinter_atb = true if catb != nil  
      @atb = actor_at ; create_charge 
  end
  #--------------------------------------------------------------------------
  # ● Create Charge
  #--------------------------------------------------------------------------              
  def create_charge
      @icon_image = Cache.system("Iconset") ; @charge_cast
      @charge = Sprite.new ; @charge.bitmap = Bitmap.new(24,24)
      @charge_org = CHARGE_ICON_POS_FOR_ACTORS if @target.is_a?(Game_Actor)
      @charge_org = CHARGE_ICON_POS_FOR_ENEMIES if @target.is_a?(Game_Enemy)
      update_charge
  end
  #--------------------------------------------------------------------------
  # ● Update Charge
  #--------------------------------------------------------------------------              
  def update_charge
      @charge.z = self.z ; @charge.x = self.x + @charge_org[0] 
      @charge.y = self.y + @charge_org[1] 
      @charge.opacity = self.opacity 
  end    
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------              
  def refresh_charge 
      @charge_cast = @cast_time[0]
      @charge.bitmap.clear
      if !$imported[:mog_atb_system]
         self.bitmap = Cache.ayesha_atb("Cast") if self.bitmap == nil
      else
        return if @target.atb_cast.empty?
        b_rect = Rect.new(@target.atb_cast[0].icon_index % 16 * 24, @target.atb_cast[0].icon_index / 16 * 24, 24, 24)
        @charge.bitmap.blt(0,0,@icon_image,b_rect)
      end
  end
    
  #--------------------------------------------------------------------------
  # ● Create Bitmap
  #--------------------------------------------------------------------------             
  def create_bitmap      
      @face_index = [0,0] ; @s_bitmap = []
      b_nm = @target.is_a?(Game_Actor) ? "Actor" : "Enemy"
      b_id = @target.is_a?(Game_Actor) ? @target.id : @target.enemy_id
      @s_bitmap.push(Cache.ayesha_atb(b_nm.to_s + "_" + b_id.to_s)) rescue nil
      @s_bitmap.push(Cache.ayesha_atb(b_nm.to_s + "_ATB")) if @s_bitmap[0] == nil rescue nil
      @s_bitmap[0] = Bitmap.new(32,32) if @s_bitmap[0] == nil
      @s_bitmap.push(Cache.ayesha_atb(b_nm.to_s + "_" + b_id.to_s + "B")) rescue nil
      @cw = @s_bitmap[0].width ; @ch = @s_bitmap[0].height ; @sz = SPRITE_Z + 1
      self.bitmap = @s_bitmap[0] ; refresh_bitmap
  end
  #--------------------------------------------------------------------------
  # ● Refresh Bitmap
  #--------------------------------------------------------------------------             
  def refresh_bitmap
      @face_index[1] = @face_index[0] ; self.bitmap = @s_bitmap[@face_index[0]]
      self.zoom_x = 1.00
      @center = [LAYOUT_POS[0] + self.ox + CENTER_POS[0],LAYOUT_POS[1] + self.oy + CENTER_POS[1]]
      if self.bitmap == nil
         self.bitmap = @s_bitmap[0] ; self.zoom_x = 1.4
         @center = [LAYOUT_POS[0] + self.ox + CENTER_POS[0] + 6,LAYOUT_POS[1] + self.oy + CENTER_POS[1] + 7]
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Schala Point
  #--------------------------------------------------------------------------             
  def dipose_schala_point
      return if self.bitmap == nil or self.bitmap.disposed?
      self.bitmap.dispose ; self.bitmap = nil ; dispose_charge
  end
  #--------------------------------------------------------------------------
  # ● Dispose Charge
  #--------------------------------------------------------------------------              
  def dispose_charge
      @charge.bitmap.dispose if @charge.bitmap != nil
      @charge.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Schala Point
  #--------------------------------------------------------------------------              
  def update_schala_point
      return if self.bitmap == nil or self.bitmap.disposed? or !self.visible
      if can_update_atb?
         self.opacity += 10 unless @wait_fade > 0; update_atb
      else
         self.opacity -= 10 # ; check_all_dead? if self.opacity == 0 
         self.zoom_x = 1.00 ; @cast_time[0] = false ; @wait_fade = 2
      end
      execute_move(0,self.x,@x) ; execute_move(1,self.y,@y)      
      self.zoom_y = self.zoom_x ; self.opacity = 0 if sprite_visible?
      update_charge ; @wait_fade -= 1 if @wait_fade > 0
  end
  
  #--------------------------------------------------------------------------
  # ● Sprite Visible
  #--------------------------------------------------------------------------              
  def sprite_visible?
      return true if $game_message.visible
      return true if $game_temp.battle_end
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Check All Dead?
  #--------------------------------------------------------------------------              
  def check_all_dead?
      return if [email protected]_a?(Game_Enemy)      
      self.visible = false ; $game_temp.ay_gauge_data[0] = true
      $game_troop.members.each {|b| $game_temp.ay_gauge_data[0] = false if !b.dead?}
  end
  
  #--------------------------------------------------------------------------
  # ● Can Update ATB
  #--------------------------------------------------------------------------  
  def can_update_atb?
      return false if @target == nil or @target.dead? or @target.hidden
      return false if $game_temp.ay_gauge_data[0]
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Update ATB
  #--------------------------------------------------------------------------                
  def update_atb
      update_atb_type
      if atb_max?
         @x = @center[0]; @y = @center[1] ; @face_index[0] = 1
      else
        if $game_system.ay_gauge_type == 1
           if actor_cast?
              @x = @x2 + gauge_cast - (@gauge_size * @atb / @atb_max) ; @y = @y2 
           else   
              @x = @x2 + @gauge_size * @atb / @atb_max ; @y = @y2 
           end  
           self.z = @sz + @x if Z_FIX
        else
           if actor_cast?
              @y = @y2 - gauge_cast + (@gauge_size * @atb / @atb_max) ; @x = @x2 
           else   
              @y = @y2 - @gauge_size * @atb / @atb_max ; @x = @x2 
           end
           self.z = @sz + (@gauge_size - @y) if Z_FIX
        end   
        @face_index[0] = 0 ; self.zoom_x = 1.00
      end      
      refresh_bitmap if @face_index[0] != @face_index[1]
  end
  #--------------------------------------------------------------------------
  # ● ATB Max
  #--------------------------------------------------------------------------                  
  def atb_max?
      if @atb.abs >= @atb_max.abs 
         if $imported[:mog_atb_system]
            return true if BattleManager.battler_in_turn?(@target)
         else
            return true
         end
      end
      return true if @cast_time[1] > 0
      return false
  end
    
  #--------------------------------------------------------------------------
  # ● Update ATB Type
  #--------------------------------------------------------------------------                  
  def update_atb_type
      if actor_cast?         
         @atb_max = actor_max_cast ; @atb = actor_cast ; @cast_time = [true,0]
         @charge.visible = true
      else
         @atb_max = actor_max_at ; @atb = actor_at
         @cast_time[1] = cast_wait_time if @cast_time[0] ; @cast_time[1] -= 1 if @cast_time[1] > 0
         @cast_time[0] = false ; @charge.visible = false unless @cast_time[1] > 55
      end
      refresh_charge if @cast_time[0] != @charge_cast
      @atb_max = 1 if @atb_max == 0  
  end
  #--------------------------------------------------------------------------
  # ● Execute Move
  #--------------------------------------------------------------------------      
  def execute_move(type,cp,np)
      sp = 5 + ((cp - np).abs / 20)
      if cp > np 
         cp -= sp ; cp = np if cp < np
      elsif cp < np 
         cp += sp ; cp = np if cp > np
      end     
      self.x = cp if type == 0 ; self.y = cp if type == 1
  end    
  #--------------------------------------------------------------------------
  # * AT
  #--------------------------------------------------------------------------  
  def actor_at
      return @target.atb if $imported[:mog_atb_system]
      return @target.atb if $imported[:ve_active_time_battle]
      return @target.catb_value if $imported["YSA-CATB"]
      return @target.ap if @ccwinter_atb != nil
      return 0
  end
  #--------------------------------------------------------------------------
  # * Max AT
  #--------------------------------------------------------------------------  
  def actor_max_at
      return @target.atb_max if $imported[:mog_atb_system]
      return @target.max_atb if $imported[:ve_active_time_battle]
      return @target.max_atb if $imported["YSA-CATB"]
      return ATB::MAX_AP if @ccwinter_atb != nil
      return 1
  end
  #--------------------------------------------------------------------------
  # ● Actor Cast
  #--------------------------------------------------------------------------            
  def actor_cast
      return @target.atb_cast[1] rescue nil if $imported[:mog_atb_system]
      return [email protected] if $imported[:ve_active_time_battle]
      return @target.chant_count rescue 0 if @ccwinter_atb != nil 
      return 0
  end
  #--------------------------------------------------------------------------
  # ● Actor Max Cast
  #--------------------------------------------------------------------------            
  def actor_max_cast
      if $imported[:mog_atb_system]
         return @target.atb_cast[2] if @target.atb_cast[2] != 0
         return @target.atb_cast[0].speed.abs
      end   
      return @target.max_atb if $imported[:ve_active_time_battle]
      return [email protected]_chant_count rescue 1 if @ccwinter_atb != nil 
      return 1
  end
  #--------------------------------------------------------------------------
  # ● Actor Max Cast
  #--------------------------------------------------------------------------            
  def gauge_cast
      return @gauge_size if $imported[:mog_atb_system]
      return 0
  end
  
  #--------------------------------------------------------------------------
  # ● Actor Cast?
  #--------------------------------------------------------------------------            
  def actor_cast?
      if $imported[:mog_atb_system]
         return true if [email protected]_cast.empty? rescue false
      end   
      if $imported[:ve_active_time_battle]
         return true if @target.cast_action? rescue false
      end       
      if @ccwinter_atb 
         return true if @target.chanting? rescue false
      end
      return false
  end   
  
  #--------------------------------------------------------------------------
  # ● Cast Wait Time
  #--------------------------------------------------------------------------            
  def cast_wait_time
      return 10 if @ccwinter_atb 
      return 60
  end
  
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase     
   attr_accessor :chant_count
   attr_accessor :max_chant_count
end 
 ![]() 
 但在用這腳本時,選擇目標時根本不知道是ATB槽上哪個敵人...(除非製作大量的圖像素材,但也同樣的怪物也無法判斷是A怪物還是B)
 
 可以做到選擇目標時,使那個ATB槽的怪物圖標有閃爍效果嗎? (就像選擇目標時,目標的敵人圖在閃爍,只是現在閃爍的是那個ATB槽上的圖標)
 
 自己搞了半天,還是搞不懂orz 求大大指教orz
 | 
 评分
查看全部评分
 |