Script Sideview - Personagens não Morrem

2 Respostas   327 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

Ludo

  • Veterano
  • *
  • Posts: 873
  • Ouros: 1227
  • Um homem não moldado pela dor, ainda é um menino
Tópico criado em: 21/02/2015 às 09:06 - Última modificação por Akiyoshi em 23/02/2015 às 12:20

Esse script é bastante simples e não necessita de muito trabalho para configurar, faz com que apareçam chars durante as batalhas como a maioria dos sideviews.
O problema é que quando um personagem morre, ele simplesmente continua na batalha, animado, como se estivesse vivo ainda.
Eu gostaria que o personagem desaparecesse quando fosse nocauteado.

(Dica: Verificar caso de bug quando usar um item de reviver para o char retornar a aparecer)


Eis o script
Código: [Selecionar]
#==============================================================================
#
# ¥ Yanfly Engine Ace - Visual Battlers v1.01
# -- Last Updated: 2012.07.24
# -- Level: Easy
# -- Requires: n/a
#
# ¥ Modified by:
# -- Yami
# -- Kread-Ex
# -- Archeia_Nessiah
#==============================================================================

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

#==============================================================================
# ¥ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.12.18 - Added preset views and able to change direction in-game.
# 2012.07.24 - Finished Script.
# 2012.01.05 - Started Script.
#
#==============================================================================
# ¥ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script provides a visual for all actors by default charsets. The actions
# and movements are alike Final Fantasy 1, only move forward and backward when
# start and finish actions.
#
#==============================================================================
# ¥ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To change the player direction in-game, use the snippet below in a script
# call:
#
# $game_system.party_direction = n
#
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ¥ Materials but above ¥ Main. Remember to save.
#
#==============================================================================
# ¥ Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
#
#==============================================================================

module YEA
  module VISUAL_BATTLERS
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Party Location Setting -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # These settings are adjusted for Party Location. Each Actor will have
    # coordinates calculated by below formula. There are two samples coordinates
    # below, change PARTY_DIRECTION to the base index you want to use.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    PARTY_DIRECTION = 6 # This direction is opposite from actual direction.
   
    PARTY_LOCATION_BASE_COORDINATES ={
    # Index => [base_x, base_y, mod_x, mod_y],
          2 => [   250,    290,    40,     0], #UP
          4 => [   150,    280,    20,   -20], #LEFT
          3 => [   460,    280,    30,   -10], #RIGHT
          6 => [   400,    180,    40,    45], #DEFAULT RIGHT
          8 => [   260,    230,    40,     0], #DOWN
    } # Do not remove this.
   
    PARTY_LOCATION_FORMULA_X = "base_x + index * mod_x"
    PARTY_LOCATION_FORMULA_Y = "base_y + index * mod_y"
   
  end # VISUAL_BATTLERS
end # YEA

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

#==============================================================================
# ? ¥  Direction
#==============================================================================

module Direction
 
  #--------------------------------------------------------------------------
  # self.correct
  #--------------------------------------------------------------------------
  def self.correct(direction)
    case direction
    when 1; return 4
    when 3; return 6
    when 7; return 4
    when 9; return 6
    else; return direction
    end
  end
 
  #--------------------------------------------------------------------------
  # self.opposite
  #--------------------------------------------------------------------------
  def self.opposite(direction)
    case direction
    when 1; return 6
    when 2; return 8
    when 3; return 4
    when 4; return 6
    when 6; return 4
    when 7; return 6
    when 8; return 2
    when 9; return 4
    else; return direction
    end
  end
 
end # Direction

#==============================================================================
# ? ¥  Game_System
#==============================================================================

class Game_System; attr_accessor :party_direction; end

#==============================================================================
# ? ¥  Game_BattleCharacter
#==============================================================================

class Game_BattleCharacter < Game_Character
 
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
    super()
    setup_actor(actor)
    @move_x_rate = 0
    @move_y_rate = 0
  end
 
  #--------------------------------------------------------------------------
  # setup_actor
  #--------------------------------------------------------------------------
  def setup_actor(actor)
    @actor = actor
    @step_anime = true
    set_graphic(@actor.character_name, @actor.character_index)
    setup_coordinates
    dr = $game_system.party_direction || YEA::VISUAL_BATTLERS::PARTY_DIRECTION
    direction = Direction.opposite(dr)
    set_direction(Direction.correct(direction))
  end
 
  #--------------------------------------------------------------------------
  # sprite=
  #--------------------------------------------------------------------------
  def sprite=(sprite)
    @sprite = sprite
  end
 
  #--------------------------------------------------------------------------
  # setup_coordinates
  #--------------------------------------------------------------------------
  def setup_coordinates
    location = ($game_system.party_direction ||
    YEA::VISUAL_BATTLERS::PARTY_DIRECTION)
    base_x = YEA::VISUAL_BATTLERS::PARTY_LOCATION_BASE_COORDINATES[location][0]
    base_y = YEA::VISUAL_BATTLERS::PARTY_LOCATION_BASE_COORDINATES[location][1]
    mod_x = YEA::VISUAL_BATTLERS::PARTY_LOCATION_BASE_COORDINATES[location][2]
    mod_y = YEA::VISUAL_BATTLERS::PARTY_LOCATION_BASE_COORDINATES[location][3]
    @actor.screen_x = eval(YEA::VISUAL_BATTLERS::PARTY_LOCATION_FORMULA_X)
    @actor.screen_y = eval(YEA::VISUAL_BATTLERS::PARTY_LOCATION_FORMULA_Y)
    @actor.origin_x = @actor.screen_x
    @actor.origin_y = @actor.screen_y
    @actor.create_move_to(screen_x, screen_y, 1)
  end
 
  #--------------------------------------------------------------------------
  # index
  #--------------------------------------------------------------------------
  def index
    return @actor.index
  end
 
  #--------------------------------------------------------------------------
  # screen_x
  #--------------------------------------------------------------------------
  def screen_x
    return @actor.screen_x
  end
 
  #--------------------------------------------------------------------------
  # screen_y
  #--------------------------------------------------------------------------
  def screen_y
    return @actor.screen_y
  end
 
  #--------------------------------------------------------------------------
  # screen_z
  #--------------------------------------------------------------------------
  def screen_z
    return @actor.screen_z
  end
 
end # Game_BattleCharacter

#==============================================================================
# ? ¥  Game_Battler
#==============================================================================

class Game_Battler < Game_BattlerBase
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :moved_back
  attr_accessor :origin_x
  attr_accessor :origin_y
  attr_accessor :screen_x
  attr_accessor :screen_y
  attr_accessor :started_turn
 
  #--------------------------------------------------------------------------
  # alias method: execute_damage
  #--------------------------------------------------------------------------
  alias game_battler_execute_damage_vb execute_damage
  def execute_damage(user)
    game_battler_execute_damage_vb(user)
    if @result.hp_damage > 0
      move_backward(24, 6) unless @moved_back
      @moved_back = true
    end
  end
 
  #--------------------------------------------------------------------------
  # face_opposing_party
  #--------------------------------------------------------------------------
  def face_opposing_party
    direction = ($game_system.party_direction ||
    YEA::VISUAL_BATTLERS::PARTY_DIRECTION)
    character.set_direction(Direction.correct(direction)) rescue 0
  end
 
  #--------------------------------------------------------------------------
  # new method: face_coordinate
  #--------------------------------------------------------------------------
  def face_coordinate(destination_x, destination_y)
    x1 = Integer(@screen_x)
    x2 = Integer(destination_x)
    y1 = Graphics.height - Integer(@screen_y)
    y2 = Graphics.height - Integer(destination_y)
    return if x1 == x2 and y1 == y2
    #---
    angle = Integer(Math.atan2((y2-y1),(x2-x1)) * 1800 / Math::PI)
    if (0..225) === angle or (-225..0) === angle
      direction = 6
    elsif (226..675) === angle
      direction = 9
    elsif (676..1125) === angle
      direction = 8
    elsif (1126..1575) === angle
      direction = 7
    elsif (1576..1800) === angle or (-1800..-1576) === angle
      direction = 4
    elsif (-1575..-1126) === angle
      direction = 1
    elsif (-1125..-676) === angle
      direction = 2
    elsif (-675..-226) === angle
      direction = 3
    end
    #---
    character.set_direction(Direction.correct(direction)) rescue 0
  end
 
  #--------------------------------------------------------------------------
  # create_move_to
  #--------------------------------------------------------------------------
  def create_move_to(destination_x, destination_y, frames = 12)
    @destination_x = destination_x
    @destination_y = destination_y
    frames = [frames, 1].max
    @move_x_rate = [(@screen_x - @destination_x).abs / frames, 2].max
    @move_y_rate = [(@screen_y - @destination_y).abs / frames, 2].max
  end
 
  #--------------------------------------------------------------------------
  # update_move_to
  #--------------------------------------------------------------------------
  def update_move_to
    @move_x_rate = 0 if @screen_x == @destination_x || @move_x_rate.nil?
    @move_y_rate = 0 if @screen_y == @destination_y || @move_y_rate.nil?
    value = [(@screen_x - @destination_x).abs, @move_x_rate].min
    @screen_x += (@destination_x > @screen_x) ? value : -value
    value = [(@screen_y - @destination_y).abs, @move_y_rate].min
    @screen_y += (@destination_y > @screen_y) ? value : -value
  end
 
  #--------------------------------------------------------------------------
  # move_forward
  #--------------------------------------------------------------------------
  def move_forward(distance = 100, frames = 12)
    direction = forward_direction
    move_direction(direction, distance, frames)
  end
 
  #--------------------------------------------------------------------------
  # move_backward
  #--------------------------------------------------------------------------
  def move_backward(distance = 24, frames = 12)
    direction = Direction.opposite(forward_direction)
    move_direction(direction, distance, frames)
  end
 
  #--------------------------------------------------------------------------
  # move_direction
  #--------------------------------------------------------------------------
  def move_direction(direction, distance = 24, frames = 12)
    case direction
    when 1; move_x = distance / -2; move_y = distance /  2
    when 2; move_x = distance *  0; move_y = distance *  1
    when 3; move_x = distance / -2; move_y = distance /  2
    when 4; move_x = distance * -1; move_y = distance *  0
    when 6; move_x = distance *  1; move_y = distance *  0
    when 7; move_x = distance / -2; move_y = distance / -2
    when 8; move_x = distance *  0; move_y = distance * -1
    when 9; move_x = distance /  2; move_y = distance / -2
    else; return
    end
    destination_x = @screen_x + move_x
    destination_y = @screen_y + move_y
    create_move_to(destination_x, destination_y, frames)
  end
 
  #--------------------------------------------------------------------------
  # forward_direction
  #--------------------------------------------------------------------------
  def forward_direction
    return ($game_system.party_direction ||
    YEA::VISUAL_BATTLERS::PARTY_DIRECTION)
  end
 
  #--------------------------------------------------------------------------
  # move_origin
  #--------------------------------------------------------------------------
  def move_origin
    create_move_to(@origin_x, @origin_y)
    face_coordinate(@origin_x, @origin_y)
    @moved_back = false
  end
 
  #--------------------------------------------------------------------------
  # moving?
  #--------------------------------------------------------------------------
  def moving?
    return false if dead? || !exist?
    return @move_x_rate != 0 || @move_y_rate != 0
  end
 
end # Game_Battler

#==============================================================================
# ? ¥  Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
 
  #--------------------------------------------------------------------------
  # overwrite method: use_sprite?
  #--------------------------------------------------------------------------
  def use_sprite?
    return true
  end
 
  #--------------------------------------------------------------------------
  # new method: screen_x
  #--------------------------------------------------------------------------
  def screen_x
    return @screen_x rescue 0
  end
 
  #--------------------------------------------------------------------------
  # new method: screen_y
  #--------------------------------------------------------------------------
  def screen_y
    return @screen_y rescue 0
  end
 
  #--------------------------------------------------------------------------
  # new method: screen_z
  #--------------------------------------------------------------------------
  def screen_z
    return 100
  end
 
  #--------------------------------------------------------------------------
  # new method: sprite
  #--------------------------------------------------------------------------
  def sprite
    index = $game_party.battle_members.index(self)
    return SceneManager.scene.spriteset.actor_sprites[index]
  end
 
  #--------------------------------------------------------------------------
  # new method: character
  #--------------------------------------------------------------------------
  def character
    return sprite.character_base
  end
 
  #--------------------------------------------------------------------------
  # face_opposing_party
  #--------------------------------------------------------------------------
  def face_opposing_party
    dr = $game_system.party_direction || YEA::VISUAL_BATTLERS::PARTY_DIRECTION
    direction = Direction.opposite(dr)
    character.set_direction(Direction.correct(direction)) rescue 0
  end
 
  #--------------------------------------------------------------------------
  # forward_direction
  #--------------------------------------------------------------------------
  def forward_direction
    return Direction.opposite(($game_system.party_direction ||
    YEA::VISUAL_BATTLERS::PARTY_DIRECTION))
  end
 
end # Game_Actor

#==============================================================================
# ? ¥  Game_Enemy
#==============================================================================

class Game_Enemy < Game_Battler
 
  #--------------------------------------------------------------------------
  # new method: sprite
  #--------------------------------------------------------------------------
  def sprite
    return SceneManager.scene.spriteset.enemy_sprites.reverse[self.index]
  end
 
  #--------------------------------------------------------------------------
  # new method: character
  #--------------------------------------------------------------------------
  def character
    return sprite
  end
 
end # Game_Enemy

#==============================================================================
# ? ¥  Game_Troop
#==============================================================================

class Game_Troop < Game_Unit
 
  #--------------------------------------------------------------------------
  # alias method: setup
  #--------------------------------------------------------------------------
  alias game_troop_setup_vb setup
  def setup(troop_id)
    game_troop_setup_vb(troop_id)
    set_coordinates
  end
 
  #--------------------------------------------------------------------------
  # new method: set_coordinates
  #--------------------------------------------------------------------------
  def set_coordinates
    for member in members
      member.origin_x = member.screen_x
      member.origin_y = member.screen_y
      member.create_move_to(member.screen_x, member.screen_y, 1)
    end
  end
 
end # Game_Troop

#==============================================================================
# ? ¥  Sprite_Battler
#==============================================================================

class Sprite_Battler < Sprite_Base
 
  #--------------------------------------------------------------------------
  # public instance_variable
  #--------------------------------------------------------------------------
  attr_accessor :character_base
  attr_accessor :character_sprite
 
  #--------------------------------------------------------------------------
  # alias method: dispose
  #--------------------------------------------------------------------------
  alias sprite_battler_dispose_vb dispose
  def dispose
    dispose_character_sprite
    sprite_battler_dispose_vb
  end
 
  #--------------------------------------------------------------------------
  # new method: dispose_character_sprite
  #--------------------------------------------------------------------------
  def dispose_character_sprite
    @character_sprite.dispose unless @character_sprite.nil?
  end
 
  #--------------------------------------------------------------------------
  # alias method: update
  #--------------------------------------------------------------------------
  alias sprite_battler_update_vb update
  def update
    sprite_battler_update_vb
    return if @battler.nil?
    update_move_to
    update_character_base
    update_character_sprite
  end
 
  #--------------------------------------------------------------------------
  # new method: update_character_base
  #--------------------------------------------------------------------------
  def update_character_base
    return if @character_base.nil?
    @character_base.update
  end
 
  #--------------------------------------------------------------------------
  # new method: update_character_sprite
  #--------------------------------------------------------------------------
  def update_character_sprite
    return if @character_sprite.nil?
    @character_sprite.update
  end
 
  #--------------------------------------------------------------------------
  # new method: update_move_to
  #--------------------------------------------------------------------------
  def update_move_to
    @battler.update_move_to
  end
 
  #--------------------------------------------------------------------------
  # new method: moving?
  #--------------------------------------------------------------------------
  def moving?
    return false if @battler.nil?
    return @battler.moving?
  end
 
end # Sprite_Battler

#==============================================================================
# ? ¥  Sprite_BattleCharacter
#==============================================================================

class Sprite_BattleCharacter < Sprite_Character
 
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(viewport, character = nil)
    super(viewport, character)
    character.sprite = self
  end
 
end # Sprite_BattleCharacter

#==============================================================================
# ? ¥  Spriteset_Battle
#==============================================================================

class Spriteset_Battle
 
  #--------------------------------------------------------------------------
  # public instance_variable
  #--------------------------------------------------------------------------
  attr_accessor :actor_sprites
  attr_accessor :enemy_sprites
 
  #--------------------------------------------------------------------------
  # overwrite method: create_actors
  #--------------------------------------------------------------------------
  def create_actors
    total = $game_party.max_battle_members
    @current_party = $game_party.battle_members.clone
    @actor_sprites = Array.new(total) { Sprite_Battler.new(@viewport1) }
    for actor in $game_party.battle_members
      @actor_sprites[actor.index].battler = actor
      create_actor_sprite(actor)
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: create_actor_sprite
  #--------------------------------------------------------------------------
  def create_actor_sprite(actor)
    character = Game_BattleCharacter.new(actor)
    character_sprite = Sprite_BattleCharacter.new(@viewport1, character)
    @actor_sprites[actor.index].character_base = character
    @actor_sprites[actor.index].character_sprite = character_sprite
    actor.face_opposing_party
  end
 
  #--------------------------------------------------------------------------
  # alias method: update_actors
  #--------------------------------------------------------------------------
  alias spriteset_battle_update_actors_vb update_actors
  def update_actors
    if @current_party != $game_party.battle_members
      dispose_actors
      create_actors
    end
    spriteset_battle_update_actors_vb
  end
 
  #--------------------------------------------------------------------------
  # new method: moving?
  #--------------------------------------------------------------------------
  def moving?
    return battler_sprites.any? {|sprite| sprite.moving? }
  end
 
end # Spriteset_Battle

#==============================================================================
# ? ¥  Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :spriteset
 
  #--------------------------------------------------------------------------
  # alias method: process_action_end
  #--------------------------------------------------------------------------
  alias scene_battle_process_action_end_vb process_action_end
  def process_action_end
    start_battler_move_origin
    scene_battle_process_action_end_vb
  end
 
  #--------------------------------------------------------------------------
  # alias method: execute_action
  #--------------------------------------------------------------------------
  alias scene_battle_execute_action_vb execute_action
  def execute_action
    start_battler_move_forward
    scene_battle_execute_action_vb
  end
 
  #--------------------------------------------------------------------------
  # new method: start_battler_move_forward
  #--------------------------------------------------------------------------
  def start_battler_move_forward
    return if @subject.started_turn
    @subject.started_turn = true
    @subject.move_forward
    wait_for_moving
  end
 
  #--------------------------------------------------------------------------
  # new method: start_battler_move_origin
  #--------------------------------------------------------------------------
  def start_battler_move_origin
    @subject.started_turn = nil
    move_battlers_origin
    wait_for_moving
    @subject.face_opposing_party rescue 0
  end
 
  #--------------------------------------------------------------------------
  # new method: move_battlers_origin
  #--------------------------------------------------------------------------
  def move_battlers_origin
    for member in all_battle_members
      next if member.dead?
      next unless member.exist?
      member.move_origin
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: wait_for_moving
  #--------------------------------------------------------------------------
  def wait_for_moving
    update_for_wait
    update_for_wait while @spriteset.moving?
  end
 
end # Scene_Battle

#==============================================================================
#
#  ¥  End of File
#
#==============================================================================
Clique e conheça o meu canal - Canal RPG Maker Zone

Raizen

  • Administrador
  • *
  • Posts: 3224
  • Ouros: 3192
  • Medalhas Vencedor do Protótipo Premiado Participante notável do evento "A Estação das Luzes do Norte" Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!
Resposta 1: 21/02/2015 às 17:19

vish, não é melhor trocar o script todo xD? porque é o segundo problema com ele kk, porque acho que ele nem sequer criou esse esquema dos battlers quando morrem

Ludo

  • Veterano
  • *
  • Posts: 873
  • Ouros: 1227
  • Um homem não moldado pela dor, ainda é um menino
Resposta 2: 23/02/2015 às 12:10

vish, não é melhor trocar o script todo xD? porque é o segundo problema com ele kk, porque acho que ele nem sequer criou esse esquema dos battlers quando morrem
Realmente, ele abandonou o script mas, procurando no site dele, li todas as mensagens dos outros usuários até encontrei um cara que fez a correção, então tá resolvido.
o outro problema foi com o script Transformation Skill
Por hora tudo bem, eu não poderia trocar por outro sideview, testei muitos outros mas nao foram compativeis com o Yan FLy Engine

Clique e conheça o meu canal - Canal RPG Maker Zone