CheckPoint System
Versão 1.0
Um script simples que permite ao maker adicionar pontos de "respawn" durante o jogo, e ao dar game-over, o jogador pode voltar ao ultimo ponto salvo.
Plataforma : RPG Maker VX Ace
Compatiblidade : Boa
Lag Gerado : Muito baixo
Caracteristicas
Uso extremamente simples
Fácil configuração
Como Usar
Apenas cole o script acima do main e siga as instruções, configurando o script corretamente
Script
- Código:
#==============================================================================
# -- RESPAWN SYSTEM 1.0
#==============================================================================
#------------------------------------------------------------------------------
# Créditos: Leon-S.K --- ou --- AndreMaker --- ou --- 4ndreMTM
#------------------------------------------------------------------------------
# O script cria a possibilidade de quando o player morrer ele voltar para
# um ponto definido ( como um hospital ou sei la ) e com todos os seus membros
# curados.
#
# Para salvar uma localização de "respaw", apenas adicione em um evento
# o comando "chamar script" com:
# $game_party.save_respaw
#
# Para desabilitar o respaw em uma determinada parte, use a switch definida
# nas configurações. Quando ela estiver ON o player poderá dar respaw, se ela
# estiver OFF o player NÃO pode dar respaw.
#
# Incompatibilidade:
# - Scripts que modificam o game-over
#
#------------------------------------------------------------------------------
module Respaw_Config
#------------------------------------------------------------------------------
# CONFIGURAÇÕES GERAIS
#------------------------------------------------------------------------------
# Switch que ativa e desativa a opção de respaw
Respaw_Switch = 1
# Nome mostrado na opção "respaw"
Respaw_Vocab = "Reviver"
# Nome mostrado na opção "sair"
Exit_Vocab = "Sair"
# Alinhamento do texto ( 0 esquerda, 1 centro e 2 direita)
Alignment = 1
# Animação ao reviver ( 0 para desativar )
Respaw_Anim = 37
# Animação ao salvar a localização de respaw ( 0 para desativar )
Save_Anim = 38
# A window de reviver aparecerá exatamente no centro da tela.
# Para mudar seu X, coloque aqui a quantidade de mudança desejada
X_Plus = 0
# Para mudar seu Y, coloque aqui a quantidade de mudança desejada
Y_Plus = 120
#------------------------------------------------------------------------------
# FIM DAS CONFIGURAÇÕES
#------------------------------------------------------------------------------
end
#------------------------------------------------------------------------------
class Respaw_Window < Window_Command
include Respaw_Config
def make_command_list
respaw_ok = !$game_party.last_respawpoint.nil?
active = $game_switches[Respaw_Switch]
enabled = respaw_ok and active
self.add_command(Respaw_Vocab, :respaw, enabled)
self.add_command(Exit_Vocab, :exit)
end
def move
self.x = (Graphics.width - self.width) / 2 + X_Plus
self.y = (Graphics.height - self.height) / 2 + Y_Plus
end
def alignment
return Alignment rescue 0
end
alias :down :cursor_down
def cursor_down(wrap = false)
return if !command_enabled?(0)
down(wrap)
end
alias :up :cursor_up
def cursor_up(wrap = false)
return if !command_enabled?(0)
up(wrap)
end
end
class Scene_Gameover < Scene_Base
alias :w_start :start
def start
w_start
create_choose_window
end
alias :upd :update
def update
upd
@choose.opacity += 5 if @choose.opacity < 255
end
def normal_respaw
fadeout_all
last_respawpoint = $game_party.last_respawpoint
$game_map.setup(last_respawpoint.map_id)
SceneManager.goto(Scene_Map)
$game_party.members.each {|actor| actor.hp = actor.mhp; actor.mp = actor.mmp}
$game_player.moveto(last_respawpoint.x, last_respawpoint.y)
$game_player.set_direction(last_respawpoint.dir)
$game_player.spaw_debug!
$game_player.animation_id = Respaw_Config::Respaw_Anim if Respaw_Config::Respaw_Anim != 0
$game_player.refresh
end
def normal_exit
fadeout_all
SceneManager.goto(Scene_Title)
end
def create_choose_window
@choose = Respaw_Window.new(0, 0)
@choose.move
@choose.select(1) if not @choose.command_enabled?(0)
@choose.set_handler(:respaw, method(:normal_respaw))
@choose.set_handler(:exit, method(:normal_exit))
@choose.opacity = 155
@choose.refresh
end
end
class Game_Player < Game_Character
attr_accessor :spaw_debug
alias :init :initialize
def initialize
init
@spaw_debug = false
end
alias :debug_move :move_straight
def move_straight(d, turn_ok = true)
debug_move(d, turn_ok)
return unless @spaw_debug
if passable?(@x,@y,d)
@spaw_debug = false
@through = false if @through
end
end
def spaw_debug!
@spaw_debug = true; @through = true
end
end
class Respaw_Point
attr_accessor :map_id
attr_accessor :dir
attr_accessor :x
attr_accessor :y
def initialize(map_id, x, y, dir)
@map_id, @x, @y, @dir = map_id, x, y, dir
end
end
class Game_Party < Game_Unit
attr_accessor :last_respawpoint
alias :init :initialize
def initialize
init
@last_respawpoint = nil
end
def save_respaw
@last_respawpoint = nil
@last_respawpoint = Respaw_Point.new($game_map.map_id, $game_player.x, $game_player.y, $game_player.direction)
$game_player.animation_id = Respaw_Config::Save_Anim if Respaw_Config::Save_Anim != 0
end
end
Creditos
AndreMaker por criar e disponibilizar