查看: 1530|回复: 0

[已经过期] 怎样让遇敌时自定义优势条

[复制链接]
梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2015-6-10 14:30:01 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 KB.Driver 于 2015-6-10 14:31 编辑

所谓优势条,指的是:
QQ截图20150610142815.png
像这样的东西 遇敌就会弹出然后滑动 在不同位置停下会有不同效果
但是脚本中设定是优势一定在最左,劣势一定在最右,变化的只是长度。
我希望能够自定义不同敌群的遇敌条,有办法实现吗?要怎么实现呢?
优势条脚本[pre lang="ruby"]#==============================================================================
#
# ▼ Yanfly Engine Ace - Active Battle Advantage v1.00
# -- Last Updated: 2012.02.01
# -- Level: Easy, Normal, Hard
# -- Requires: n/a
#
#==============================================================================

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

#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.02.01 - Started Script and Finished.
#
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Whenever a random encounter initiates, a gauge will appear on screen. And
# depending on the timing regarding a player's button input, the battle will
# start off as a pre-emptive attack for the party, a normal battle, or even a
# surprise attack from the enemy.
#
#==============================================================================
# ▼ 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.
#
# Create or download an image with the filename "BattleAdvantage" within the
# Graphics\Pictures\ folder of your project.
#
#==============================================================================
# ▼ 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 ACTIVE_ADVANTAGE
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Visual Settings -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # These are some visual settings applied to the Active Advantage gauge.
    # Change the colour settings here, the cursor used for indicating the
    # position of the the player advantage, and
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    PREEMPTIVE_COLOUR = 28    # Text Colour used for pre-emptives. #default:3
    NORMAL_COLOUR     =  6    # Text Colour used for normal.
    SURPRISE_COLOUR   = 10    # Text Colour used for surprise attacks.
    BACK_GAUGE_COLOUR = 19    # Text Colour of the back of the gauge.
   
    CURSOR_ICON = 318         # Icon used for the gauge.
   
    # This picture is used for the battle advantage display. The following
    # string below determines what filename is used. Place this file inside of
    # the Graphics\Pictures\ folder.
    ADVANTAGE_PICTURE = "BattleAdvantage"
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Advantage Formulas -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # For those who would like to adjust the encounter advantage formulas, you
    # may do so below. It's highly recommended that you don't touch this unless
    # you are familiar with how encounter rates work.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    USE_CUSTOM_RATES = true   # Must be enabled to use formulas below.
   
    # This is the formula used for pre-emptive advantage.
    PRE_RATE = "(agi >= troop_agi ? 0.40 : 0.25) * (raise_preemptive? ? 2 : 1)"
   
    # This is the formula used for surprise attack.
    BAD_RATE = "cancel_surprise? ? 0 : (agi >= troop_agi ? 0.25 : 0.50)"
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Other Settings -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # These are some other settings used for this script. You can change the
    # sound played when the gauge appears, the flash colour, and the flash
    # length. Adjust them as you see fit.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    APPEAR_SOUND = RPG::SE.new("Battle2", 150)    # Sound played for advantage.
    FLASH_COLOUR = Color.new(255, 255, 255, 255)  # Flash colour for advantage.
    FLASH_LENGTH = 20                             # Duration of flash.
   
    # If for some reason, you wish to disable Active Advantage from occuring,
    # set the following value to a Switch ID you want to use. If it is 0, then
    # Active Advantage will always be on for random encounters.
    SWITCH = 0
   
  end # ACTIVE_ADVANTAGE
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.
#==============================================================================

#==============================================================================
# ■ Switch
#==============================================================================

module Switch
  
  #--------------------------------------------------------------------------
  # self.active_advantage
  #--------------------------------------------------------------------------
  def self.active_advantage
    return true if YEA::ACTIVE_ADVANTAGE::SWITCH <= 0
    return $game_switches[YEA::ACTIVE_ADVANTAGE::SWITCH]
  end
  
end # Switch

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

module BattleManager
  
  #--------------------------------------------------------------------------
  # overwrite method: on_encounter
  #--------------------------------------------------------------------------
  def self.on_encounter
    if SceneManager.scene_is?(Scene_Map) && Switch.active_advantage
      SceneManager.scene.process_active_battle_advantage
    else
      @preemptive = (rand < rate_preemptive)
      @surprise = (rand < rate_surprise && !@preemptive)
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: set_advantage
  #--------------------------------------------------------------------------
  def self.set_advantage(preemptive, surprise)
    @preemptive = preemptive
    @surprise = surprise
  end
  
end # BattleManager

#==============================================================================
# ■ Game_Party
#==============================================================================

class Game_Party < Game_Unit
  
  if YEA::ACTIVE_ADVANTAGE::USE_CUSTOM_RATES
  #--------------------------------------------------------------------------
  # overwrite method: rate_preemptive
  #--------------------------------------------------------------------------
  def rate_preemptive(troop_agi)
    return [eval(YEA::ACTIVE_ADVANTAGE::PRE_RATE), 0.90].min
  end
  
  #--------------------------------------------------------------------------
  # overwrite method: rate_surprise
  #--------------------------------------------------------------------------
  def rate_surprise(troop_agi)
    return [eval(YEA::ACTIVE_ADVANTAGE::BAD_RATE), 0.90].min
  end
  end # YEA::ACTIVE_ADVANTAGE::USE_CUSTOM_RATES
  
end # Game_Party

#==============================================================================
# ■ Sprite_BattleAdvantage
#==============================================================================

class Sprite_AdvantageTitle < Sprite
  
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    super(viewport)
    create_bitmap
    reposition
  end
  
  #--------------------------------------------------------------------------
  # create_bitmap
  #--------------------------------------------------------------------------
  def create_bitmap
    self.bitmap = Cache.picture(YEA::ACTIVE_ADVANTAGE::ADVANTAGE_PICTURE)
  end
  
  #--------------------------------------------------------------------------
  # create_bitmap
  #--------------------------------------------------------------------------
  def reposition
    self.z = 800
    self.ox = self.bitmap.width / 2
    self.oy = self.bitmap.height
    self.x = Graphics.width / 2
    self.y = Graphics.height / 2 - 16
  end
  
  #--------------------------------------------------------------------------
  # dispose
  #--------------------------------------------------------------------------
  def dispose
    self.bitmap.dispose
    super
  end
  
end # Sprite_AdvantageTitle

#==============================================================================
# ■ Sprite_BattleAdvantage
#==============================================================================

class Sprite_BattleAdvantage < Sprite
  
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    super(viewport)
    create_bitmap
    reposition
  end
  
  #--------------------------------------------------------------------------
  # create_bitmap
  #--------------------------------------------------------------------------
  def create_bitmap
    self.bitmap = Bitmap.new(450, 26)
    back_colour = text_colour(YEA::ACTIVE_ADVANTAGE::BACK_GAUGE_COLOUR)
    self.bitmap.fill_rect(self.bitmap.rect, back_colour)
    colour1 = text_colour(YEA::ACTIVE_ADVANTAGE::PREEMPTIVE_COLOUR)
    colour2 = text_colour(YEA::ACTIVE_ADVANTAGE::NORMAL_COLOUR)
    colour3 = text_colour(YEA::ACTIVE_ADVANTAGE::SURPRISE_COLOUR)
    #---
    @dw1 = (BattleManager.rate_preemptive * 200).to_i
    @dw3 = (BattleManager.rate_surprise * 200).to_i
    @dw2 = 400 - @dw1 - @dw3
    #---
    rect = Rect.new(1, 1, @dw1, 24)
    self.bitmap.fill_rect(rect, colour1)
    #---
    rect = Rect.new(rect.x + rect.width, 1, 24, 24)
    self.bitmap.gradient_fill_rect(rect, colour1, colour2)
    #---
    rect = Rect.new(rect.x + rect.width, 1, @dw2, 24)
    self.bitmap.fill_rect(rect, colour2)
    #---
    rect = Rect.new(rect.x + rect.width, 1, 24, 24)
    self.bitmap.gradient_fill_rect(rect, colour2, colour3)
    #---
    rect = Rect.new(rect.x + rect.width, 1, @dw3, 24)
    self.bitmap.fill_rect(rect, colour3)
  end
  
  #--------------------------------------------------------------------------
  # reposition
  #--------------------------------------------------------------------------
  def reposition
    self.z = 800
    self.ox = self.bitmap.width / 2
    self.oy = self.bitmap.height / 2
    self.x = Graphics.width / 2
    self.y = Graphics.height / 2 + 32
  end
  
  #--------------------------------------------------------------------------
  # text_colour
  #--------------------------------------------------------------------------
  def text_colour(n)
    windowskin = Cache.system("Window")
    windowskin.get_pixel(64 + (n % 8) * 8, 96 + (n / 8) * 8)
  end
  
  #--------------------------------------------------------------------------
  # dispose
  #--------------------------------------------------------------------------
  def dispose
    self.bitmap.dispose
    super
  end
  
end # Sprite_BattleAdvantage

#==============================================================================
# ■ Sprite_AdvantageCursor
#==============================================================================

class Sprite_AdvantageCursor < Sprite
  
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    super(viewport)
    create_bitmap
    reposition
    @pos = 0
    @input_advantage = false
  end
  
  #--------------------------------------------------------------------------
  # create_bitmap
  #--------------------------------------------------------------------------
  def create_bitmap
    icon_bitmap = Cache.system("Iconset")
    icon_index = YEA::ACTIVE_ADVANTAGE::CURSOR_ICON
    src_rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
    self.bitmap = Bitmap.new(48, 48)
    self.bitmap.stretch_blt(self.bitmap.rect, icon_bitmap, src_rect)
  end
  
  #--------------------------------------------------------------------------
  # reposition
  #--------------------------------------------------------------------------
  def reposition
    self.x = Graphics.width / 2 - 224
    self.y = Graphics.height / 2 + 32
  end
  
  #--------------------------------------------------------------------------
  # dispose
  #--------------------------------------------------------------------------
  def dispose
    self.bitmap.dispose
    super
  end
  
  #--------------------------------------------------------------------------
  # update
  #--------------------------------------------------------------------------
  def update
    super
    return if end?
    return @input_advantage = true if Input.trigger?(:C)
    self.x += 8
    @pos += 8
  end
  
  #--------------------------------------------------------------------------
  # end?
  #--------------------------------------------------------------------------
  def end?
    return true if @input_advantage
    return @pos >= pos_end
  end
  
  #--------------------------------------------------------------------------
  # pos_end
  #--------------------------------------------------------------------------
  def pos_end
    return 440
  end
  
  #--------------------------------------------------------------------------
  # input_advantage
  #--------------------------------------------------------------------------
  def input_advantage
    dw1 = (BattleManager.rate_preemptive * 200).to_i
    dw3 = (BattleManager.rate_surprise * 200).to_i
    dw2 = 448 - dw1 - dw3
    if @pos <= dw1
      BattleManager.set_advantage(true, false)
    elsif @pos <= dw2
      BattleManager.set_advantage(false, false)
    else
      BattleManager.set_advantage(false, true)
    end
  end
  
end # Sprite_AdvantageCursor

#==============================================================================
# ■ Spriteset_Map
#==============================================================================

class Spriteset_Map
  
  #--------------------------------------------------------------------------
  # new method: create_battle_advantage_sprites
  #--------------------------------------------------------------------------
  def create_battle_advantage_sprites
    @battle_advantage_title  = Sprite_AdvantageTitle.new(@viewport3)
    @battle_advantage_sprite = Sprite_BattleAdvantage.new(@viewport3)
    @battle_advantage_cursor = Sprite_AdvantageCursor.new(@viewport3)
    @battle_advantage_cursor.z = @battle_advantage_sprite.z + 1
  end
  
  #--------------------------------------------------------------------------
  # alias method: dispose
  #--------------------------------------------------------------------------
  alias spriteset_map_dispose_aba dispose
  def dispose
    dispose_battle_advantage_sprites
    spriteset_map_dispose_aba
  end
  
  #--------------------------------------------------------------------------
  # new method: dispose_battle_advantage_sprites
  #--------------------------------------------------------------------------
  def dispose_battle_advantage_sprites
    @battle_advantage_title.dispose unless @battle_advantage_title.nil?
    @battle_advantage_sprite.dispose unless @battle_advantage_sprite.nil?
    @battle_advantage_cursor.dispose unless @battle_advantage_cursor.nil?
  end
  
  #--------------------------------------------------------------------------
  # alias method: update
  #--------------------------------------------------------------------------
  alias spriteset_map_update_aba update
  def update
    spriteset_map_update_aba
    update_battle_advantage_sprites
  end
  
  #--------------------------------------------------------------------------
  # new method: update_battle_advantage_sprites
  #--------------------------------------------------------------------------
  def update_battle_advantage_sprites
    @battle_advantage_title.update unless @battle_advantage_title.nil?
    @battle_advantage_sprite.update unless @battle_advantage_sprite.nil?
    @battle_advantage_cursor.update unless @battle_advantage_cursor.nil?
  end
  
  #--------------------------------------------------------------------------
  # new method: advantage_cursor
  #--------------------------------------------------------------------------
  def advantage_cursor
    return @battle_advantage_cursor
  end
  
end # Spriteset_Map

#==============================================================================
# ■ Scene_Map
#==============================================================================

class Scene_Map < Scene_Base
  
  #--------------------------------------------------------------------------
  # new method: process_active_battle_advantage
  #--------------------------------------------------------------------------
  def process_active_battle_advantage
    @spriteset.create_battle_advantage_sprites
    YEA::ACTIVE_ADVANTAGE::APPEAR_SOUND.play
    flash_colour = YEA::ACTIVE_ADVANTAGE::FLASH_COLOUR
    flash_length = YEA::ACTIVE_ADVANTAGE::FLASH_LENGTH
    $game_map.screen.start_flash(flash_colour, flash_length)
    update_active_battle_advantage
  end
  
  #--------------------------------------------------------------------------
  # new method: update_active_battle_advantage
  #--------------------------------------------------------------------------
  def update_active_battle_advantage
    loop do
      break if @spriteset.advantage_cursor.end?
      update_battle_advantage_graphics
    end
    @spriteset.advantage_cursor.input_advantage
  end
  
  #--------------------------------------------------------------------------
  # new method: update_battle_advantage_graphics
  #--------------------------------------------------------------------------
  def update_battle_advantage_graphics
    Graphics.update
    Input.update
    update_all_windows
    $game_map.update
    @spriteset.update
  end
  
end # Scene_Map

#==============================================================================
#
# ▼ End of File
#
#==============================================================================[/pre]
用头画头像,用脚写脚本
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部