Vai al contenuto

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

  • Chatbox

    You don't have permission to chat.
    Load More
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 || [email protected]_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
×