Vai al contenuto

Rilevato Ad-Blocker. Per favore disabilita il tuo adblocker quando navighi su makerando.com - Non c'Γ¨ nessun annuncio invasivo.

Ally

BS/Battlers Addon ATB/Stamina Battle System Standard

Recommended Posts

Nome Script: ATB/Stamina Battle System Standard
Versione: 1.1
Autore/i: Fomar0153

Informazioni:
Script che aggiunge la barra ATB al sistema di battaglia di default di RMVX Ace.

Istruzioni:
Inserite lo script sotto Material.
Istruzioni all'interno dello script.

Script:
 

=begin
Customisable ATB/Stamina Based Battle System Script
by Fomar0153
Version 1.1
----------------------
Notes
----------------------
No requirements
Customises the battle system to be similar to
ATB or Stamina based battle systems.
----------------------
Instructions
----------------------
Edit variables in CBS to suit your needs.
The guard status should be set to 2~2 turns.
----------------------
Change Log
----------------------
1.0 -> 1.1 Restored turn functionality and a glitch
           related to message windows
----------------------
Known bugs
----------------------
None
=end
module CBS

  MAX_STAMINA = 1000
  RESET_STAMINA = true
  SAMINA_GAUGE_NAME = "ATB"

  ESCAPE_COST = 500
  # If reset stamina is set to true then all characters
  # will start with a random amount of stamina capped at
  # the percentage you set.
  # If reset stamina is set to false then this just
  # affects enemies.
  STAMINA_START_PERCENT = 20

  # Default skill cost
  # If you want to customise skill costs do it like this
  # SKILL_COST[skill_id] = cost
  SKILL_COST = []
  SKILL_COST[0] = 1000
  # Attack
  SKILL_COST[1] = 1000
  # Guard
  SKILL_COST[2] = 500
  ITEM_COST = 1000


  #--------------------------------------------------------------------------
  # ● New Method stamina_gain
  #--------------------------------------------------------------------------
  def self.stamina_gain(battler)
        return 2 + [0, battler.agi / 10].max
  end
  #--------------------------------------------------------------------------
  # ● New Method stamina_start
  #--------------------------------------------------------------------------
  def self.stamina_start(battler)
        battler.stamina = rand(MAX_STAMINA * STAMINA_START_PERCENT / 100)
  end
end

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● New attr_accessor
  #--------------------------------------------------------------------------
  attr_accessor :stamina
  #--------------------------------------------------------------------------
  # ● Aliases initialize
  #--------------------------------------------------------------------------
  alias cbs_initialize initialize
  def initialize
        cbs_initialize
        @stamina = 0
  end
  #--------------------------------------------------------------------------
  # ● New Method stamina_rate
  #--------------------------------------------------------------------------
  def stamina_rate
        @stamina.to_f / CBS::MAX_STAMINA
  end
  #--------------------------------------------------------------------------
  # ● New Method stamina_rate
  #--------------------------------------------------------------------------
  def stamina_gain
        return if not movable?
        @stamina = [CBS].min
  end
end

#--------------------------------------------------------------------------
# ● New Class Window_PartyHorzCommand
#--------------------------------------------------------------------------
class Window_PartyHorzCommand < Window_HorzCommand
  #--------------------------------------------------------------------------
  # ● New Method initialize
  #--------------------------------------------------------------------------
  def initialize
        super(0, 0)
        self.openness = 0
        deactivate
  end
  #--------------------------------------------------------------------------
  # ● New Method window_width
  #--------------------------------------------------------------------------
  def window_width
        return Graphics.width
  end
  #--------------------------------------------------------------------------
  # ● New Method visible_line_number
  #--------------------------------------------------------------------------
  def visible_line_number
        return 1
  end
  #--------------------------------------------------------------------------
  # ● New Method make_command_list
  #--------------------------------------------------------------------------
  def make_command_list
        add_command(Vocab::fight,  :fight)
        add_command(Vocab::escape, :escape, BattleManager.can_escape?)
  end
  #--------------------------------------------------------------------------
  # ● New Method setup
  #--------------------------------------------------------------------------
  def setup
        clear_command_list
        make_command_list
        refresh
        select(0)
        activate
        open
  end
end

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● Rewrote update
  #--------------------------------------------------------------------------
  def update
        super
        if BattleManager.in_turn? and !inputting?
          process_stamina
          process_event
          process_action
        end
        BattleManager.judge_win_loss
  end
  #--------------------------------------------------------------------------
  # ● New Method inputting?
  #--------------------------------------------------------------------------
  def inputting?
        return @actor_command_window.active || @skill_window.active ||
          @item_window.active || @actor_window.active || @enemy_window.active
  end
  #--------------------------------------------------------------------------
  # ● New Method process_stamina
  #--------------------------------------------------------------------------
  def process_stamina
        @actor_command_window.close
        return if @subject
        all_battle_members.each do |battler|
          battler.stamina_gain
        end
        @status_window.refresh
        if @status_window.close?
          @status_window.open
        end
        if BattleManager.escaping?
          $game_party.battle_members.each do |battler|
                if battler.stamina < CBS::MAX_STAMINA
                  $game_troop.members.each do |enemy|
                        if enemy.stamina == CBS::MAX_STAMINA
                          enemy.make_actions
                          @subject = enemy
                        end
                  end
                  return
                end
          end
          unless BattleManager.process_escape
                $game_party.battle_members.each do |actor|
                  actor.stamina -= CBS::ESCAPE_COST
                end
          end
        end
        all_battle_members.each do |battler|
          if battler.stamina == CBS::MAX_STAMINA
                battler.make_actions
                @subject = battler
                if @subject.inputable? and battler.is_a?(Game_Actor)
                  @actor_command_window.setup(@subject)
                  BattleManager.set_actor(battler)
                end
                return
          end
        end
  end
  #--------------------------------------------------------------------------
  # ● Rewrote create_info_viewport
  #--------------------------------------------------------------------------
  def create_info_viewport
        @info_viewport = Viewport.new
        @info_viewport.rect.y = Graphics.height - @status_window.height - 48
        @info_viewport.rect.height = @status_window.height + 48
        @info_viewport.z = 100
        @info_viewport.ox = 0
        @status_window.viewport = @info_viewport
  end
  #--------------------------------------------------------------------------
  # ● Rewrote create_party_command_window
  #--------------------------------------------------------------------------
  def create_party_command_window
        @party_command_window = Window_PartyHorzCommand.new
        @party_command_window.viewport = @info_viewport
        @party_command_window.set_handler(:fight,  method(:command_fight))
        @party_command_window.set_handler(:escape, method(:command_escape))
        @party_command_window.unselect
  end
  #--------------------------------------------------------------------------
  # ● Rewrote create_status_window
  #--------------------------------------------------------------------------
  def create_status_window
        @status_window = Window_BattleStatus.new
  end
  #--------------------------------------------------------------------------
  # ● Rewrote create_actor_command_window
  #--------------------------------------------------------------------------
  def create_actor_command_window
        @actor_command_window = Window_ActorCommand.new
        @actor_command_window.viewport = @info_viewport
        @actor_command_window.set_handler(:attack, method(:command_attack))
        @actor_command_window.set_handler(:skill,  method(:command_skill))
        @actor_command_window.set_handler(:guard,  method(:command_guard))
        @actor_command_window.set_handler(:item,   method(:command_item))
        @actor_command_window.set_handler(:cancel, method(:prior_command))
        @actor_command_window.x = Graphics.width - 128
        @actor_command_window.y = 48
  end
  #--------------------------------------------------------------------------
  # ● Destroyed update_info_viewport
  #--------------------------------------------------------------------------
  def update_info_viewport
        # no thank you
  end
#--------------------------------------------------------------------------
  # ● Rewrote start_party_command_selection
  #--------------------------------------------------------------------------
  def start_party_command_selection
        unless scene_changing?
          refresh_status
          @status_window.unselect
          @status_window.open
          if BattleManager.input_start
                @actor_command_window.close
                @party_command_window.setup
          else
                @party_command_window.deactivate
                turn_start
          end
        end
  end
  #--------------------------------------------------------------------------
  # ● Rewrote start_actor_command_selection
  #--------------------------------------------------------------------------
  def start_actor_command_selection
        @party_command_window.close
        BattleManager.set_escaping(false)
        turn_start
  end
  #--------------------------------------------------------------------------
  # ● Rewrote prior_command
  #--------------------------------------------------------------------------
  def prior_command
        start_party_command_selection
  end
  #--------------------------------------------------------------------------
  # ● Rewrote process_action
  #--------------------------------------------------------------------------
  def process_action
        return if scene_changing?
        if !@subject || !@subject.current_action
          @subject = BattleManager.next_subject
        end
        if Input.trigger?(: and (@subject == nil)
          start_party_command_selection
        end
        return unless @subject
        if @subject.current_action
          @subject.current_action.prepare
          if @subject.current_action.valid?
                @status_window.open
                execute_action
          end
          @subject.remove_current_action
          refresh_status
          @log_window.display_auto_affected_status(@subject)
          @log_window.wait_and_clear
        end
        process_action_end unless @subject.current_action
  end

  #--------------------------------------------------------------------------
  # ● Aliases use_item
  #--------------------------------------------------------------------------
  alias cbs_use_item use_item
  def use_item
        cbs_use_item
        @subject.on_turn_end
  end
  #--------------------------------------------------------------------------
  # ● Rewrote turn_end
  #--------------------------------------------------------------------------
  def turn_end
        all_battle_members.each do |battler|
          battler.on_turn_end
          refresh_status
          @log_window.display_auto_affected_status(battler)
          @log_window.wait_and_clear
        end
        BattleManager.turn_end
        process_event
        start_party_command_selection
  end
  #--------------------------------------------------------------------------
  # ● Rewrote command_fight
  #--------------------------------------------------------------------------
  def command_fight
        BattleManager.next_command
        start_actor_command_selection
  end
  #--------------------------------------------------------------------------
  # ● Rewrote command_escape
  #--------------------------------------------------------------------------
  def command_escape
        @party_command_window.close
        BattleManager.set_escaping(true)
        turn_start
  end
  #--------------------------------------------------------------------------
  # ● Destroyed next_command
  #--------------------------------------------------------------------------
  def next_command
        # no thank you
  end
end

class Window_BattleStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # ● Rewrote initialize
  #--------------------------------------------------------------------------
  def initialize
        super(0, 48, Graphics.width, window_height)
        refresh
        self.openness = 0
  end
  #--------------------------------------------------------------------------
  # ● Rewrote window_width
  #--------------------------------------------------------------------------
  def window_width
        Graphics.width - 128
  end
  #--------------------------------------------------------------------------
  # ● Rewrote refresh
  #--------------------------------------------------------------------------
  def refresh
        contents.clear
        draw_all_items
  end
  #--------------------------------------------------------------------------
  # ● Rewrote draw_item
  #--------------------------------------------------------------------------
  def draw_item(index)
        actor = $game_party.battle_members[index]
        draw_basic_area(basic_area_rect(index), actor)
        draw_gauge_area(gauge_area_rect(index), actor)
  end
  #--------------------------------------------------------------------------
  # ● Rewrote basic_area_rect
  #--------------------------------------------------------------------------
  def basic_area_rect(index)
        rect = item_rect_for_text(index)
        rect.width -= gauge_area_width + 10
        rect
  end
  #--------------------------------------------------------------------------
  # ● Rewrote gauge_area_rect
  #--------------------------------------------------------------------------
  def gauge_area_rect(index)
        rect = item_rect_for_text(index)
        rect.x += rect.width - gauge_area_width #- 128 ####
        rect.width = gauge_area_width
        rect
  end
  #--------------------------------------------------------------------------
  # ● Rewrote gauge_area_width
  #--------------------------------------------------------------------------
  def gauge_area_width
        return 220 + 128
  end
  #--------------------------------------------------------------------------
  # ● Rewrote draw_gauge_area_with_tp
  #--------------------------------------------------------------------------
  def draw_gauge_area_with_tp(rect, actor)
        draw_actor_hp(actor, rect.x + 0, rect.y, 72)
        draw_actor_mp(actor, rect.x + 82, rect.y, 64)
        draw_actor_tp(actor, rect.x + 156, rect.y, 64)
        draw_actor_stamina(actor, rect.x + 240, rect.y, 108)
  end
  #--------------------------------------------------------------------------
  # ● Rewrote draw_gauge_area_without_tp
  #--------------------------------------------------------------------------
  def draw_gauge_area_without_tp(rect, actor)
        draw_actor_hp(actor, rect.x + 0, rect.y, 134)
        draw_actor_mp(actor, rect.x + 144,  rect.y, 76)
        #
        draw_actor_stamina(actor, rect.x + 240, rect.y, 108)
  end
  #--------------------------------------------------------------------------
  # ● New Method draw_actor_stamina
  #--------------------------------------------------------------------------
  def draw_actor_stamina(actor, x, y, width = 124)
        draw_gauge(x, y, width, actor.stamina_rate, stamina_gauge_color2,

stamina_gauge_color)
        change_color(system_color)
        draw_text(x, y, 30, line_height, CBS::SAMINA_GAUGE_NAME)
  end
  #--------------------------------------------------------------------------
  # ● New Colour Definitions
  #--------------------------------------------------------------------------
  def stamina_gauge_color;   text_color(31);  end;
  def stamina_gauge_color2;      text_color(32);  end;
end

class Window_BattleSkill < Window_SkillList
  #--------------------------------------------------------------------------
  # ● Rewrote initialize
  #--------------------------------------------------------------------------
  def initialize(help_window, info_viewport)
        y = help_window.height
        super(0, y, Graphics.width, info_viewport.rect.y - y + 48)
        self.visible = false
        @help_window = help_window
        @info_viewport = info_viewport
  end
end

class Window_BattleActor < Window_BattleStatus
  #--------------------------------------------------------------------------
  # ● Rewrote initialize
  #--------------------------------------------------------------------------
  def initialize(info_viewport)
        super()
        self.y = info_viewport.rect.y + 48
        self.visible = false
        self.openness = 255
        @info_viewport = info_viewport
  end
end

class Window_BattleEnemy < Window_Selectable
  # ● Rewrote initialize
  #--------------------------------------------------------------------------
  def initialize(info_viewport)
        super(0, info_viewport.rect.y + 48, window_width, fitting_height(4))
        refresh
        self.visible = false
        @info_viewport = info_viewport
  end
end

class Window_BattleItem < Window_ItemList
  #--------------------------------------------------------------------------
  # ● Rewrote initialize
  #--------------------------------------------------------------------------
  def initialize(help_window, info_viewport)
        y = help_window.height
        super(0, y, Graphics.width, info_viewport.rect.y - y + 48)
        self.visible = false
        @help_window = help_window
        @info_viewport = info_viewport
  end
end

module BattleManager
  #--------------------------------------------------------------------------
  # ● Rewrote setup
  #--------------------------------------------------------------------------
  def self.setup(troop_id, can_escape = true, can_lose = false)
        init_members
        $game_troop.setup(troop_id)
        @can_escape = can_escape
        @can_lose = can_lose
        make_escape_ratio
        @escaping = false
        @turn_counter = 0
        @actions_per_turn = $game_party.members.size + $game_troop.members.size
        ($game_party.members + $game_troop.members).each do |battler|
          if battler.is_a?(Game_Enemy) or CBS::RESET_STAMINA
                CBS.stamina_start(battler)
          end
        end
  end
  #--------------------------------------------------------------------------
  # ● New Method set_escaping
  #--------------------------------------------------------------------------
  def self.set_escaping(escaping)
        @escaping = escaping
  end
  #--------------------------------------------------------------------------
  # ● New Method escaping?
  #--------------------------------------------------------------------------
  def self.escaping?
        return @escaping
  end
  #--------------------------------------------------------------------------
  # ● Rewrote turn_start
  #--------------------------------------------------------------------------
  def self.turn_start
        @phase = :turn
        clear_actor
        $game_troop.increase_turn
  end
  #--------------------------------------------------------------------------
  # ● New Method set_actor
  #--------------------------------------------------------------------------
  def self.set_actor(actor)
        @actor_index = actor.index
  end
  #--------------------------------------------------------------------------
  # ● New Increase action counter
  #--------------------------------------------------------------------------
  def self.add_action
        @turn_counter += 1
        if @turn_counter == @actions_per_turn
          $game_troop.increase_turn
          @turn_counter = 0
        end
  end
end

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● Rewrote on_turn_end
  #--------------------------------------------------------------------------
  def on_turn_end
        @result.clear
        regenerate_all
        update_state_turns
        update_buff_turns
        remove_states_auto(2)
        if self.actor?
          @stamina -= input.stamina_cost
        else
          @stamina -= @actions[0].stamina_cost
        end
        BattleManager.add_action
  end
end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● Rewrote input
  #--------------------------------------------------------------------------
  def input
        if @actions[@action_input_index] == nil
          @actions[@action_input_index] = Game_Action.new(self)
        end
        return @actions[@action_input_index]
  end
end

class Game_Action
  #--------------------------------------------------------------------------
  # ● New Method stamina_cost
  #--------------------------------------------------------------------------
  def stamina_cost
        if @item.is_skill?
          return CBS::SKILL_COST[item.id] if CBS::SKILL_COST[item.id]
          return CBS::SKILL_COST[0]
        end
        return CBS::ITEM_COST if @item.is_item?
        return CBS::MAX_STAMINA
  end
end

Demo:
http://www.cobbtocs.co.uk/fomar0153/demos/CBS%20Demo.zip

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

You need to be a member in order to leave a comment

Crea un account

Iscriviti per un nuovo account nella nostra comunità. È facile!

Registra un nuovo account

Accedi

Sei giΓ  registrato? Accedi qui.

Accedi Ora

  • Contenuti simili

    • Da Syddo
      Salve, non sono riuscito a trovare uno script che possa creare una sorta di sistema pokΓ©mon-team party, dove si utilizza un certo character senza che perΓ² questo appaia in battaglia, mentre nella battle scene appaiano altri eroi o mostri che non possono essere utilizzati nell'overworld. C'Γ¨ un qualche script che permetta di rendere 'inattivo' il personaggio principale (fisso, non scambiabile) del party rendendolo utilizzabile solo nell'overworld? Volendo mi accontenterei di un sistema interno senza scripting, purchΓ© non sia troppo legnoso (come ad esempio togliere il leader prima della battaglia). Il tutto, se possibile, sostenibile con gli script di follow come Caterpillar o Enhanced Squad Movement. Grazie mille! 
    • Da KenzaMe92
      Nome Script: KZM - Limit
      Versione: 1.0
      Autore:
      Descrizione:
      Questo script aggiunge la barra del limit e le abilitΓ  usate con questa barra in stile FFVII.
       
      Istruzioni:
      Installare sotto "β–Ό Materials" e sopra "β–Ό Main", dopodichΓ© nel database creare un nuovo tipo di tecniche, chiamato limit e per ogni tecnica inserita in quel tipo, mettere il seguente tag nelle note dell'abilitΓ :
              <limit>
      per farla riconoscere dallo script e permetterne l'uso solo a barra completamente carica.
       
      Screenshot:
      Devo ancora farne uno decente.
       
      Script:
      Pastebin [guarda] o [scarica]
       
      Bug e Conflitti Noti:
      Nessuno
       
      Note dell'autore:
      Condividetelo, usatelo nei vostri progetti free o commerciali, l'importante Γ¨ creditare l'autore.
    • Da Ally
      Nome Script: Crystal Engine - Mimic
      Versione: N/D
      Autore/i: Crystal Noel
       
      Informazioni:
      Questo script fornisce due abilitΓ  da utilizzare in battaglia. Uno degli effetti copia semplicemente l'effetto e lo utilizza sul nemico. L'altra mossa Γ¨ quella di mimare l'abilitΓ  fino alla fine della battaglia.
       
      Features:
      - Imparare temporaneamente (sostituisce l'abilitΓ  mimica fino alla fine della battaglia)
      - Copia Azione (Copia l'azione del bersaglio)
       
      Istruzioni:
      Script e istruzioni all'interno della demo.
       
      Nel note tag dei nemici, impostate in questo modo a seconda delle vostre esigenze:
       
      <mimic> Imposta la capacitΓ  di copiare l'ultima azione del bersaglio
       
      <borrow move> Imposta la capacitΓ  di prendere in prestito l'ultima abilitΓ  del bersaglio per il resto della battaglia
       
      Utilizzate questa opzione se desiderate che i nemici siano in grado di prendere in 'prestito' anche le abilitΓ :
       
       
      class RPG::Enemy < RPG::BaseItem def actions set = [] set += @actions ids = [] set.each {|action| ids.push(action.skill_id)} $data_skills.each do |skill| next if skill.nil? action = RPG::Enemy::Action.new action.skill_id = skill.id set.push(action) unless ids.include?(skill.id) end set endend Demo:http://crystalnoel42.wordpress.com/2013/06/10/crystal-engine-mimic/
    • Da Ally
      Nome Script: Actor Battler Graphics
      Versione: 1.05
      Autore/i: Victor Sant
       
      Informazioni:
      Bisogna avere lo script "Victor's Engine - Basic Module" installato per far funzionare gli script di Victor.
      http://victorscripts.wordpress.com/rpg-maker-vx-ace/basic-scripts/basic-module/
       
      Istruzioni:
      Lo script va inserito sotto la sezione "Materials" e sotto lo script *NECESSARIO* "Victor's Engine - Basic Module"
      LE ISTRUZIONI SONO ALL'INTERNO DELLO SCRIPT
       
      Script:
       
       
      #==============================================================================# ** Victor Engine - Actors Battlers#------------------------------------------------------------------------------# Author : Victor Sant## Version History:# v 1.00 - 2011.12.19 > First relase# v 1.01 - 2011.12.30 > Faster Regular Expressions# v 1.02 - 2012.01.15 > Compatibility with Target Arrow# v 1.03 - 2012.01.28 > Compatibility with Animated Battle# v 1.04 - 2012.03.11 > Added position distance settings# v 1.05 - 2012.03.17 > Fixed battle test glitch#------------------------------------------------------------------------------# This script adds visible battler graphics for the party actors actors# during combat. With the visible battlers, new options will be available# like setting actor's battlers positions and attack animations.#------------------------------------------------------------------------------# Compatibility# Requires the script 'Victor Engine - Basic Module' v 1.11 or higher# If used with 'Victor Engine | Animated Battle' paste this one bellow it.# # * Overwrite methods (Default)# class Spriteset_Battle# def create_actors# def update_actors## class Scene_Battle < Scene_Base# def show_attack_animation(targets)## * Alias methods (Default)# class << DataManager# def setup_new_game# def create_game_objects# def make_save_contents# def extract_save_contents(contents)## class Game_Actor < Game_Battler# def setup(actor_id)## * Alias methods (Basic Module)# class Game_Interpreter# def comment_call##------------------------------------------------------------------------------# Instructions:# To instal the script, open you script editor and paste this script on# a new section on bellow the Materials section. This script must also# be bellow the script 'Victor Engine - Basic'##------------------------------------------------------------------------------# Comment calls note tags:# Tags to be used in events comment box, works like a script call.# # <battler name id: x># This tag allows to change the actor battler graphic.# id : actor ID# x : battler graphic filename## <battler hue id: x># This tag allows to change the actor battler graphic.# id : actor ID# x : battler graphic hue (0-360)## <battler position i: x, y># This tag allows to change the battler position during combat.# only valid if VE_BATTLE_FORMATION = :custom# i : position index# x : new coorditante X# y : new coorditante X##------------------------------------------------------------------------------# Actors note tags:# Tags to be used on the Actors note box in the database## <battler name: x># This tag allows to set the initial battler graphic filename for the actor.# x : battler graphic filename## <battler hue: x># This tag allows to set the initial battler graphic hur for the actor.# x : battler graphic hue (0-360)##------------------------------------------------------------------------------# Enemies note tags:# Tags to be used on the Enemies note box in the database## <attack animation: x># This tag allows to set the normal attack animation for the enemy# x : animation ID# #==============================================================================#==============================================================================# ** Victor Engine#------------------------------------------------------------------------------# Setting module for the Victor Engine#==============================================================================module Victor_Engine #-------------------------------------------------------------------------- # * Set the battle formation # Choose here how the actors battlers will be placed on the combat. # :front : horizontal placement # :side : vertical placement # :iso : isometric placement # :custom : custom placement #-------------------------------------------------------------------------- VE_BATTLE_FORMATION = :front #-------------------------------------------------------------------------- # * Set battler centralization # When true, battlers are centralized automatically. # Not valid if VE_BATTLE_FORMATION = :custom #-------------------------------------------------------------------------- VE_BATTLE_CENTRALIZE = true #-------------------------------------------------------------------------- # * Set battlers custom positions # Only if VE_BATTLE_FORMATION = :custom, allows to set the position of # all party actors, don't forget to add values for all positions # available if using a party bigger than the default. #-------------------------------------------------------------------------- VE_CUSTOM_POSITION = { # Position 1 => {x: 460, y: 180}, # Position for the first actor. 2 => {x: 480, y: 210}, # Position for the second actor. 3 => {x: 500, y: 240}, # Position for the thrid actor. 4 => {x: 520, y: 270}, # Position for the fourth actor. } # Don't remove #-------------------------------------------------------------------------- # * Actors battlers position adjust # Used to adjust the position of all actors battlers. #-------------------------------------------------------------------------- VE_POSITION_ADJUST = {x: 0, y: 0} #-------------------------------------------------------------------------- # * Actors battlers position adjust # Used to adjust the position of all actors battlers. #-------------------------------------------------------------------------- VE_DISTANCE_ADJUST = {x: 48, y: 32} #-------------------------------------------------------------------------- # * required # This method checks for the existance of the basic module and other # VE scripts required for this script to work, don't edit this #-------------------------------------------------------------------------- def self.required(name, req, version, type = nil) if !$imported[:ve_basic_module] msg = "The script '%s' requires the scriptn" msg += "'VE - Basic Module' v%s or higher above it to work properlyn" msg += "Go to http://victorscripts.wordpress.com/ to download this script." msgbox(sprintf(msg, self.script_name(name), version)) exit else self.required_script(name, req, version, type) end end #-------------------------------------------------------------------------- # * script_name # Get the script name base on the imported value, don't edit this #-------------------------------------------------------------------------- def self.script_name(name, ext = "VE") name = name.to_s.gsub("_", " ").upcase.split name.collect! {|char| char == ext ? "#{char} -" : char.capitalize } name.join(" ") endend$imported ||= {}$imported[:ve_actor_battlers] = 1.04Victor_Engine.required(:ve_actor_battlers, :ve_basic_module, 1.11, :above)#==============================================================================# ** DataManager#------------------------------------------------------------------------------# This module handles the game and database objects used in game.# Almost all global variables are initialized on this module#==============================================================================class << DataManager #-------------------------------------------------------------------------- # * Alias method: setup_new_game #-------------------------------------------------------------------------- alias :setup_new_game_ve_actor_battlers :setup_new_game def setup_new_game setup_new_game_ve_actor_battlers $game_custom_positions = VE_CUSTOM_POSITION.dup end #-------------------------------------------------------------------------- # * Alias method: setup_battle_test #-------------------------------------------------------------------------- alias :setup_battle_test_ve_actor_battlers :setup_battle_test def setup_battle_test setup_battle_test_ve_actor_battlers $game_custom_positions = VE_CUSTOM_POSITION.dup end #-------------------------------------------------------------------------- # * Alias method: create_game_objects #-------------------------------------------------------------------------- alias :create_game_objects_ve_actor_battlers :create_game_objects def create_game_objects create_game_objects_ve_actor_battlers $game_custom_positions = {} end #-------------------------------------------------------------------------- # * Alias method: make_save_contents #-------------------------------------------------------------------------- alias :make_save_contents_ve_actor_battlers :make_save_contents def make_save_contents contents = make_save_contents_ve_actor_battlers contents[:formations_ve] = $game_custom_positions contents end #-------------------------------------------------------------------------- # * Alias method: extract_save_contents #-------------------------------------------------------------------------- alias :extract_save_contents_ve_actor_battlers :extract_save_contents def extract_save_contents(contents) extract_save_contents_ve_actor_battlers(contents) $game_custom_positions = contents[:formations_ve] endend#==============================================================================# ** Game_Actor#------------------------------------------------------------------------------# This class handles actors. It's used within the Game_Actors class# ($game_actors) and referenced by the Game_Party class ($game_party).#==============================================================================class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :screen_x # Coordenada X na tela attr_accessor :screen_y # Coordenada Y na tela #-------------------------------------------------------------------------- # * Alias method: setup #-------------------------------------------------------------------------- alias :setup_ve_actor_battlers :setup def setup(actor_id) setup_ve_actor_battlers(actor_id) @battler_name = actor_battler_name @battler_hue = actor_battler_hue end #-------------------------------------------------------------------------- # * Overwrite method: use_sprite? #-------------------------------------------------------------------------- def use_sprite? return true end #-------------------------------------------------------------------------- # * Overwrite method: screen_z #-------------------------------------------------------------------------- def screen_z return 100 end #-------------------------------------------------------------------------- # * New method: actor_battler_name #-------------------------------------------------------------------------- def actor_battler_name actor.note =~ /<BATTLER NAME: ([^><]*)>/i ? $1.to_s : "" end #-------------------------------------------------------------------------- # * New method: actor_battler_hue #-------------------------------------------------------------------------- def actor_battler_hue actor.note =~ /<BATTLER HUE: (d+)>/i ? $1.to_i : 0 end #-------------------------------------------------------------------------- # * New method: battler_name #-------------------------------------------------------------------------- def battler_name=(name) @battler_name = name if name.is_a?(String) end #-------------------------------------------------------------------------- # * New method: battler_hue #-------------------------------------------------------------------------- def battler_hue=(hue) @battler_hue = hue if hue.numeric? end #-------------------------------------------------------------------------- # * New method: screen_x #-------------------------------------------------------------------------- def screen_x setup_x end #-------------------------------------------------------------------------- # * New method: screen_y #-------------------------------------------------------------------------- def screen_y setup_y end #-------------------------------------------------------------------------- # * New method: setup_x #-------------------------------------------------------------------------- def setup_x case VE_BATTLE_FORMATION when :front then position = get_frontal_x when :side then position = get_sideview_x when :iso then position = get_isometric_x when :custom then position = $game_custom_positions[index + 1][:x] end position + VE_POSITION_ADJUST[:x] end #-------------------------------------------------------------------------- # * New method: setup_y #-------------------------------------------------------------------------- def setup_y case VE_BATTLE_FORMATION when :front then position = get_frontal_y when :side then position = get_sideview_y when :iso then position = get_isometric_y when :custom then position = $game_custom_positions[index + 1][:y] end position + VE_POSITION_ADJUST[:y] end #-------------------------------------------------------------------------- # * New method: get_frontal_x #-------------------------------------------------------------------------- def get_frontal_x if VE_BATTLE_CENTRALIZE size = $game_party.battle_members.size position = (index + 1) * Graphics.width / (size + 1) else size = $game_party.max_battle_members position = index * Graphics.width / size + 64 end position end #-------------------------------------------------------------------------- # * New method: get_frontal_y #-------------------------------------------------------------------------- def get_frontal_y Graphics.height - 16 end #-------------------------------------------------------------------------- # * New method: get_sideview_x #-------------------------------------------------------------------------- def get_sideview_x if VE_BATTLE_CENTRALIZE size = $game_party.max_battle_members x = dist[:x] / 8 position = -index * (index * x - x * size) + Graphics.width - 160 else position = index * dist[:x] + Graphics.width - 192 end position end #-------------------------------------------------------------------------- # * New method: get_sideview_y #-------------------------------------------------------------------------- def get_sideview_y if VE_BATTLE_CENTRALIZE size = $game_party.battle_members.size height = Graphics.height position = (index - size) * dist[:y] + size * dist[:y] / 2 + height - 160 else position = index * dist[:y] + Graphics.height - 192 end position end #-------------------------------------------------------------------------- # * New method: get_isometric_x #-------------------------------------------------------------------------- def get_isometric_x if VE_BATTLE_CENTRALIZE position = -index * (index * dist[:x] - 32) + Graphics.width - 160 else position = index * dist[:x] + Graphics.width - 192 end position end #-------------------------------------------------------------------------- # * New method: get_isometric_y #-------------------------------------------------------------------------- def get_isometric_y if VE_BATTLE_CENTRALIZE position = index * (dist[:y] - index * 6) + Graphics.height - 160 else position = Graphics.height - 96 - index * dist[:y] end position end #-------------------------------------------------------------------------- # * New method: dist #-------------------------------------------------------------------------- def dist VE_DISTANCE_ADJUST endend#==============================================================================# ** Game_Enemy#------------------------------------------------------------------------------# This class handles enemy characters. It's used within the Game_Troop class# ($game_troop).#==============================================================================class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # * New method: atk_animation_id1 #-------------------------------------------------------------------------- def atk_animation_id1 enemy.note =~ /<ATTACK ANIM(?:ATION): (d+)>/i ? $1.to_i : 1 end #-------------------------------------------------------------------------- # * New method: atk_animation_id2 #-------------------------------------------------------------------------- def atk_animation_id2 return 0 endend#==============================================================================# ** Game_Interpreter#------------------------------------------------------------------------------# An interpreter for executing event commands. This class is used within the# Game_Map, Game_Troop, and Game_Event classes.#==============================================================================class Game_Interpreter #-------------------------------------------------------------------------- # * Alias method: comment_call #-------------------------------------------------------------------------- alias :comment_call_ve_actor_battlers :comment_call def comment_call change_battler_name change_battler_hue change_position comment_call_ve_actor_battlers end #-------------------------------------------------------------------------- # * New method: change_battler_name #-------------------------------------------------------------------------- def change_battler_name note.scan(/<BATTLER NAME (d+): ([^><]*)>/i) do |id, name| $game_actors[id.to_i].battler_name = name end end #-------------------------------------------------------------------------- # * New method: change_battler_hue #-------------------------------------------------------------------------- def change_battler_hue note.scan(/<BATTLER HUE (d+): (d+)>/i) do |id, hue| $game_actors[id.to_i].battler_hue = hue end end #-------------------------------------------------------------------------- # * New method: change_position #-------------------------------------------------------------------------- def change_position regexp = /<BATTLER POSITION (d+): (d+) *, *(d+)>/i note.scan(regexp) do |i, x, y| $game_custom_positions[i.to_i][:x] = x.to_i $game_custom_positions[i.to_i][:y] = y.to_i end endend#==============================================================================# ** Spriteset_Battle#------------------------------------------------------------------------------# This class brings together battle screen sprites. It's used within the# Scene_Battle class.#==============================================================================class Spriteset_Battle #-------------------------------------------------------------------------- # * Overwrite method: create_actors #-------------------------------------------------------------------------- def create_actors @actor_sprites = $game_party.battle_members.reverse.collect do |actor| Sprite_Battler.new(@viewport1, actor) end @actors_party = $game_party.battle_members.dup end #-------------------------------------------------------------------------- # * Overwrite method: update_actors #-------------------------------------------------------------------------- def update_actors update_party if $game_party.battle_members != @actors_party @actor_sprites.each {|sprite| sprite.update } end #-------------------------------------------------------------------------- # * New method: update_party #-------------------------------------------------------------------------- def update_party @actor_sprites.each_index do |i| next if $game_party.battle_members.include?(@actor_sprites[i].battler) @actor_sprites[i].dispose @actor_sprites[i] = nil end $game_party.battle_members.collect do |actor| next if @actors_party.include?(actor) @actor_sprites.push(Sprite_Battler.new(@viewport1, actor)) end @actor_sprites.compact! @actors_party = $game_party.battle_members.dup $game_party.battle_members.each do |actor| old_position = [actor.screen_x, actor.screen_y] actor.setup_position if old_position != [actor.screen_x, actor.screen_y] sprite(actor).start_effect(:appear) end end endend#==============================================================================# ** Scene_Battle#------------------------------------------------------------------------------# This class performs battle screen processing.#==============================================================================class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # * Overwrite method: show_attack_animation #-------------------------------------------------------------------------- def show_attack_animation(targets) show_normal_animation(targets, @subject.atk_animation_id1, false) show_normal_animation(targets, @subject.atk_animation_id2, true) endend
    • Da Ally
      Nome Script: Equipment Requirements
      Versione: 1.2
      Autore/i: Fomar0153
       
      Informazioni:
      Consente di definire i requisiti per Armi e Armature, ed Γ¨ possibile utilizzare sia il loro livello o una delle loro statistiche.
       
      Istruzioni:
      Inserite lo script sotto Material.
      Istruzioni all'interno dello script.
       
      Script:
       
       
      =beginEquipment Requirementsby Fomar0153Version 1.2----------------------Notes----------------------Adds a level requirement to equipment.----------------------Instructions----------------------Notetag the weapons/armors like so:<levelreq x><mhpreq x><mmpreq x><atkreq x><defreq x><matreq x><mdfreq x><agireq x><lukreq x><switchreq x><wepreq x><armreq x>----------------------Change Log----------------------1.0 -> 1.1 Added stat requirements Changed script name from Equipment Level Requirements to just Equipment Requirements1.1 -> 1.2 Added switch and other equipment requirements----------------------Known bugs----------------------None=endclass Game_BattlerBase #-------------------------------------------------------------------------- # ● If set to true then it compares the requirement with the actor's base # stat rather than their current. #-------------------------------------------------------------------------- EQUIPREQ_USE_BASE_STAT = true #-------------------------------------------------------------------------- # ● Check the requirements #-------------------------------------------------------------------------- alias level_equippable? equippable? def equippable?(item) return false unless item.is_a?(RPG::EquipItem) return false if @level < item.levelreq return false if reqstat(0) < item.mhpreq return false if reqstat(1) < item.mmpreq return false if reqstat(2) < item.atkreq return false if reqstat(3) < item.defreq return false if reqstat(4) < item.matreq return false if reqstat(5) < item.mdfreq return false if reqstat(6) < item.agireq return false if reqstat(7) < item.lukreq if item.switchreq > 0 return false unless $game_switches[item.switchreq] end if item.wepreq > 0 e = [] for equip in @equips if equip.is_weapon? e.push(equip.object.id) end end return false unless e.include?(item.wepreq) unless equip.object.nil? end if item.armreq > 0 e = [] for equip in @equips if equip.is_armor? e.push(equip.object.id) unless equip.object.nil? end end return false unless e.include?(item.armreq) end return level_equippable?(item) end #-------------------------------------------------------------------------- # ● New Method #-------------------------------------------------------------------------- def reqstat(id) if EQUIPREQ_USE_BASE_STAT return param_base(id) else return param(id) end endendmodule RPG #-------------------------------------------------------------------------- # ● Equip Item is inherited by both Weapon and Armor #-------------------------------------------------------------------------- class EquipItem def levelreq if self.note =~ /<levelreq (.*)>/i return $1.to_i else return 0 end end def mhpreq if self.note =~ /<mhpreq (.*)>/i return $1.to_i else return 0 end end def mmpreq if self.note =~ /<mmpreq (.*)>/i return $1.to_i else return 0 end end def atkreq if self.note =~ /<atkreq (.*)>/i return $1.to_i else return 0 end end def defreq if self.note =~ /<defreq (.*)>/i return $1.to_i else return 0 end end def matreq if self.note =~ /<matreq (.*)>/i return $1.to_i else return 0 end end def mdfreq if self.note =~ /<mdfreq (.*)>/i return $1.to_i else return 0 end end def agireq if self.note =~ /<agireq (.*)>/i return $1.to_i else return 0 end end def lukreq if self.note =~ /<lukreq (.*)>/i return $1.to_i else return 0 end end def switchreq if self.note =~ /<switchreq (.*)>/i return $1.to_i else return 0 end end def wepreq if self.note =~ /<wepreq (.*)>/i return $1.to_i else return 0 end end def armreq if self.note =~ /<armreq (.*)>/i return $1.to_i else return 0 end end endend
Γ—