napco, dice:
mettici il "-", che equivale a: prendi la variabile scelta e sottraici il valore selezionato...
Ok ho fatto e FUNZIONA tutto perfettamente! Grazie davvero! :sorr3:
Vorrei sapere un'altra cosa senza aprire un'altro topic...
Volevo usare i veicoli e quindi ho messo questo script:
#------------------------------------------------------------------------------
# *Traduzido por: Diogo Pegasus
#
#
#------------------------------------------------------------------------------
# Histórico da Versão:
# Version 1.1: 16 de dezembro de 2009
# - Corrigido problemas de compatibilidade com XAS
# Version 1.0: 14 de dezembro de 2009
# - inicial
#------------------------------------------------------------------------------
# Descriçao:
# Este Scripst adiciona vehículos no RPG Maker XP.
#------------------------------------------------------------------------------
# Recursos:
# - Velocidade do veículo Configurável
# - Gráfico do veículo Configurável
# - Fácil de configurar e usar e extremamente amigável
#
#------------------------------------------------------------------------------
# Instruções de uso:
# Crie um evento no mapa onde você deseja que seja o veículo . Defina o
# Evento gráfico para o gráfico que deseja que o veículo seja. Nome do evento
# Como se segue:
# v_land = veículo terrestre , você pode viajar nos mesmos lugares que você faz
# A pé, mas a uma velocidade diferente
# v_raft = veículo aquático, você pode viajar em águas rasas
# v_ship = veículo aquático, você pode viajar em águas rasas e profundas
# v_airship = veículo aéreo, você pode viajar sobre qualquer coisa
#------------------------------------------------------------------------------
# Instruçoes de instalaçao:
# coloque este scripst em cima de main
#==============================================================================
#==============================================================================
# ** Configuraçoes do vehículo
#------------------------------------------------------------------------------
# Este módulo contém os dados de configuração para os veículos.
#------------------------------------------------------------------------------
# Comece a área editável.
#==============================================================================
module Vehicle_Config
# Isto é onde você configura a velocidade do veículo.
# Mais rápido eles se movem, então quando você está em pé.
# Este valor determina a velocidade do veículo terrestre
# Default: 1
LAND_VEHICLE_SPEED = 1
# Este valor determina a velocidade do veículo aquático(raft)
# Default: 0
RAFT_SPEED = 0
# Este valor determina a velocidade do veículo aquático(ship)
# Default: 1
SHIP_SPEED = 1
# Este valor determina a velocidade do veículo aéreo
# Default: 2
AIRSHIP_SPEED = 2
end
#==============================================================================
# Fim da area Editável.
#------------------------------------------------------------------------------
# Atenção! Não edite além deste ponto a menos que você saiba o que está fazendo!
#==============================================================================
#==============================================================================
# ** Veículo
#------------------------------------------------------------------------------
# Esta classe realiza o processamento do veículo.
#==============================================================================
class Vehicle
#--------------------------------------------------------------------------
# * Incluir modulo
#--------------------------------------------------------------------------
include Vehicle_Config
#--------------------------------------------------------------------------
# * Inicializaçao do objeto
#--------------------------------------------------------------------------
def initialize(event, type)
# Velocidade de diferentes veícuilos
@speeds = [LAND_VEHICLE_SPEED, RAFT_SPEED, SHIP_SPEED, AIRSHIP_SPEED]
@player_speed = $game_player.get_speed
# o evento do jogo
@event = event
@type = type
@wait = 0
@vehicle_entering = true
@in_vehicle = false
# Armazenar o nome do gráficos dos actors
actor = $game_actors[1]
@character_graphic = @graphic = actor.character_name
end
#--------------------------------------------------------------------------
# * Mudar gráfico do actor
# graphic_name : graphic file name
#--------------------------------------------------------------------------
def change_actor_graphic(graphic_name)
# Defina o nome do gráfico do Player para graphic_name
actor = $game_actors[1]
actor.set_graphic(graphic_name, actor.character_hue, actor.battler_name,
actor.battler_hue)
# Actualizar os gráficos do player
$game_player.refresh
end
#--------------------------------------------------------------------------
# * Mover
#--------------------------------------------------------------------------
def move
# Faz o jogador se mover através de todos os tiles
$game_player.through = true
# Mover o jogador para frente
$game_player.move_forward
# Não permitir a entrada do jogador quando entrar no veículo
$game_system.map_interpreter.switch_vehicle(true)
# Faz o jogador parar de se mover através de de todos os tiles
$game_player.through = false if @type != 3
end
#--------------------------------------------------------------------------
# * Pegando o gráfico do veículo
#--------------------------------------------------------------------------
def get_vehicle_graphic
# Move o player
move
# Definir o tempo de espera para atrasar a aguardar o ator se mover antes
# mudando gráficos
@wait = 20
# Player está agora no veículo
@in_vehicle = true
# Retorne o nome do gráfico do veículo
return @event.character_name
end
def exit
# Muda o gráfico do actor de volta ao que era
change_actor_graphic(@character_graphic)
# Unanimate do veículo
$game_player.step_anime = false
# Mover o jogador de fora do veículo
move
# Faz o jogador parar de se mover através de de todos os tiles
$game_player.through = false
# Já não está em um veículo
@in_vehicle = false
# Reexibir o evento veículo
@event.recreate
# Ajusta a velocidade do movimento
$game_player.vehicle_speed(@player_speed)
# Permitir que o jogador se mover novamente
$game_system.map_interpreter.switch_vehicle(false)
# Não interaje com outros eventos
$game_player.in_vehicle = false
# Defina o tipo do veículo
$game_player.vehicle_type = -1
end
#--------------------------------------------------------------------------
# * Dirigível Sair
# x : x-cordenar
# y : y-cordenar
#--------------------------------------------------------------------------
def exit_airship(x, y)
$game_player.through = false
for i in 1..4
if $game_player.passable?(x, y, i * 2)
case i
when 1
$game_player.turn_down
when 2
$game_player.turn_left
when 3
$game_player.turn_right
when 4
$game_player.turn_up
end
exit
return true
end
end
$game_player.through = true
return false
end
#--------------------------------------------------------------------------
# * Dirigível Sair
# x : x-cordenar
# y : y-cordenar
# d : direçao (0,2,4,6,8)
# * 0 = Determina se todos sao impassáveis (ao pular)
#--------------------------------------------------------------------------
def exit_vehicle(x, y, d)
if @type == 3
return exit_airship(x, y)
end
if $game_player.can_pass?(x, y, d)
exit
return true
end
return false
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
def update
if @wait == 0
if @vehicle_entering
# Pega o gráfico do veículo
@graphic = get_vehicle_graphic if !@in_vehicle
# Se houver um atraso, não continue
return if @wait != 0
# Muda o gráfico dos actors para o gráfico do veículo
change_actor_graphic(@graphic)
# Anima o veículo
$game_player.step_anime = true if @type != 0
# Apaga o evento do veículo
@event.erase
# Adjust move speed
$game_player.vehicle_speed(@player_speed + @speeds[@type])
# Mais nenhuma alteração no veículo
@vehicle_entering = false
# Permite o jogador se mover de novo
$game_system.map_interpreter.switch_vehicle(false)
# Nao interaje com outros eventos
$game_player.in_vehicle = true
# Define o tipo de veículo
$game_player.vehicle_type = @type
end
# Se em um veículo
if @in_vehicle
# Move o evento do veículo para a player cordenado
@event.moveto($game_player.x, $game_player.y)
end
else
@wait -= 1
end
end
#--------------------------------------------------------------------------
# * Dentro
#--------------------------------------------------------------------------
def inside
return @in_vehicle && @wait == 0
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# Esta classe realiza processamento de ecrã de mapa.
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# * Main Processando
#--------------------------------------------------------------------------
alias af_veh_sm_main main
def main
@vehicle = nil
af_veh_sm_main
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
alias af_veh_sm_update update
def update
# atualiza o objeto do veículo
@vehicle.update if @vehicle != nil
af_veh_sm_update
# Pegue novas cordenadas
d = $game_player.direction
new_x = $game_player.x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = $game_player.y + (d == 2 ? 1 : d == 8 ? -1 : 0)
# Se o butão C For Pressionado
if Input.trigger?(Input::C)
# Se dentro de um veículo
if @vehicle != nil && @vehicle.inside
# Se saiu do veículo
if @vehicle.exit_vehicle($game_player.x, $game_player.y, d)
# Remove o objeto do veículo
@vehicle = nil
end
elsif is_vehicle?(new_x, new_y)
# Entre no veículo
enter_vehicle(new_x, new_y)
end
end
end
#--------------------------------------------------------------------------
# * Pegue os eventos
# x : evento x-cordenar
# y : evento y-cordenar
#--------------------------------------------------------------------------
def get_event_keys(x, y)
events = []
for key in $game_map.events.keys
# Se há um evento de frente do player
if $game_map.events[key].x == x && $game_map.events[key].y == y
# Adiciona evento para eventos
###events.push($game_map.events[key])###
events.push(key)
end
end
return events
end
#--------------------------------------------------------------------------
# * È o nome do veículo?
# name : event name
#--------------------------------------------------------------------------
def is_vehicle_name?(name)
# Nomes dos Veículos
names = ["v_land", "v_raft", "v_ship", "v_airship"]
for i in names
# Se o nome é igual a um nome de veículos
if i == name.downcase
return true
end
end
return false
end
#--------------------------------------------------------------------------
# * È veículo?
# x : evento x-coordenar
# y : evento y-coordenar
#--------------------------------------------------------------------------
def is_vehicle?(x, y)
for key in get_event_keys(x, y)
# Se o nome de eventos é o nome de um veículo
if is_vehicle_name?($game_map.map.events[key].name)
return true
end
end
return false
end
#--------------------------------------------------------------------------
# * Pegue o ID do veículo
# x : evento x-coordenar
# y : evento y-coordenar
#--------------------------------------------------------------------------
def get_vehicle_id(x, y)
for key in get_event_keys(x, y)
# Se o nome de eventos é o nome de um veículo
if is_vehicle_name?($game_map.map.events[key].name)
return $game_map.events[key].id
end
end
end
#--------------------------------------------------------------------------
# * Pegue o veículo
# x : evento x-coordenar
# y : evento y-coordenar
#--------------------------------------------------------------------------
def get_vehicle(x, y)
# Obter o Id do veículo De frente do Player
vehicle_id = get_vehicle_id(x, y)
for key in $game_map.events.keys
if $game_map.events[key].id == vehicle_id
# Devolver o objeto de evento com o ID do evento correspondente
return $game_map.events[key]
end
end
end
#--------------------------------------------------------------------------
# * Obter nome do veículo
# x : evento x-coordenar
# y : evento y-coordenar
#--------------------------------------------------------------------------
def get_vehicle_name(x, y)
# Obter id do veículo de frente do Player
vehicle_id = get_vehicle_id(x, y)
for key in $game_map.map.events.keys
if $game_map.map.events[key].id == vehicle_id
# Retornar o nome do evento
return $game_map.map.events[key].name
end
end
end
#--------------------------------------------------------------------------
# * Entre no veículo
# x : evento x-coordnar
# y : evento y-coordenar
#--------------------------------------------------------------------------
def enter_vehicle(x, y)
# obter objeto do evento do veículo
type = {"v_land" => 0, "v_raft" => 1, "v_ship" => 2, "v_airship" => 3}
# Cria o objeto do veículo
@vehicle = Vehicle.new(get_vehicle(x, y), type[get_vehicle_name(x, y)])
end
end
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
# Esta classe lida com os personagens. É utilizado como uma superclasse para a
# Game_Player e classes Game_Event.
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# * Definida através
# throught : new boolean throught value
#--------------------------------------------------------------------------
def through=(through)
@through = through
end
#--------------------------------------------------------------------------
# * Define a velocidade do veículo
# speed : speed increment
#--------------------------------------------------------------------------
def vehicle_speed(speed)
@move_speed = [[1, speed].max, speed].min
end
#--------------------------------------------------------------------------
# * Obter velocidade do veículo
#--------------------------------------------------------------------------
def get_speed
return @move_speed
end
end
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# * Público Instância Variáveis
#--------------------------------------------------------------------------
attr_accessor :in_vehicle # In vehicle
attr_accessor :vehicle_type # In vehicle
#--------------------------------------------------------------------------
# * inicializaçao do Objeto
#--------------------------------------------------------------------------
alias af_veh_gp_init initialize
def initialize
@in_vehicle = false
@vehicle_type = -1
af_veh_gp_init
end
#--------------------------------------------------------------------------
# * Define a animaçao do veículo
# step_anime : animation boolean
#--------------------------------------------------------------------------
def step_anime=(step_anime)
@step_anime = step_anime
end
#--------------------------------------------------------------------------
# * Razoável Determinantes
# x : x-coordenar
# y : y-coordenar
# d : direçao (0,2,4,6,8)
# * 0 = Determina se todas as direçoes sao impassáveis(ao pular)
#--------------------------------------------------------------------------
def passable?(x, y, d)
# Obter novas cordenadas
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
# Se a cordenada está fora do mapa
unless $game_map.valid?(new_x, new_y)
# Impassável
return false
end
# Se o modo de depuração está ON e a tecla Ctrl for pressionada
if $DEBUG and Input.press?(Input::CTRL)
# Passável
return true
end
# Se estiver em um veículo da água e sobre a água
if $game_map.terrain_tag(new_x, new_y) == 1 && @vehicle_type == 1 ||
@vehicle_type == 2 && ($game_map.terrain_tag(new_x, new_y) == 1 ||
$game_map.terrain_tag(new_x, new_y) == 2)
return true
end
super
end
#--------------------------------------------------------------------------
# * Mesma posição inicial Determinante
#--------------------------------------------------------------------------
alias af_veh_gp_ceth check_event_trigger_here
def check_event_trigger_here(triggers)
unless @in_vehicle
af_veh_gp_ceth(triggers)
else
return false
end
end
#--------------------------------------------------------------------------
# * Frente Envento Iniciando Determinante
#--------------------------------------------------------------------------
alias af_veh_gp_cett check_event_trigger_there
def check_event_trigger_there(triggers)
unless @in_vehicle
af_veh_gp_cett(triggers)
else
return false
end
end
#--------------------------------------------------------------------------
# * Toque Evento Iniciando Determinante
#--------------------------------------------------------------------------
alias af_veh_gp_cettouch check_event_trigger_touch
def check_event_trigger_touch(x, y)
unless @in_vehicle
af_veh_gp_cettouch(x, y)
else
return false
end
end
#--------------------------------------------------------------------------
# * Determine se é passável
# x : x-coordenar
# y : y-coordenar
# d : direçao (0,2,4,6,8)
# * 0 = Determina se todas as direçoes sao impassáveis(ao pular)
#--------------------------------------------------------------------------
def can_pass?(x, y, d)
# Obter novas cordenadas
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
# Se as cordenads estao fora do mapa
unless $game_map.valid?(new_x, new_y)
# Impassable
return false
end
# Se o modo de depuração está ON e a tecla Ctrl for pressionada
if $DEBUG and Input.press?(Input::CTRL)
# Passável
return true
end
# Se estiver em um veículo da água e sobre a água
if $game_map.terrain_tag(new_x, new_y) == 1 && @vehicle_type == 1 ||
@vehicle_type == 2 && ($game_map.terrain_tag(new_x, new_y) == 1 ||
$game_map.terrain_tag(new_x, new_y) == 2)
return true
end
# Ise through iestiver ON
if @through
# passável
return true
end
# Se não for possível mover no tile mover em direção designada
unless $game_map.passable?(new_x, new_y, 10 - d)
# impassável
return false
end
# Loop todos os eventos
for event in $game_map.events.values
# Se caso as coordenadas são consistentes com destino mover
if event.x == new_x and event.y == new_y
# Se through Estiver OFF
unless event.through
# Se self é evento
if self != $game_player
# impassável
return false
end
# Com self como jogador e parceira gráfico como personagem
if event.character_name != ""
# impassável
return false
end
end
end
end
# Se as coordenadas do player são consistentes com destino mover
if $game_player.x == new_x and $game_player.y == new_y
# Se through estiver OFF
unless $game_player.through
# Se o seu próprio gráfico é o caracter
if @character_name != ""
# impassável
return false
end
end
end
# passável
return true
end
end
#================================================= =============================
# ** Game_Event
#------------------------------------------------- -----------------------------
# Esta classe lida com eventos. Ele lida com as funções, incluindo a página de eventos
# Comutação via determinantes da condição, e executando eventos do processo paralelo.
# É usado dentro da classe Game_Map.
#================================================= =============================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * Recriar
#--------------------------------------------------------------------------
def recreate
@erased = false
refresh
end
end
#================================================= =============================
# ** Game_Map
#------------------------------------------------- -----------------------------
# Essa classe manipula o mapa. Ela inclui a determinação de rolagem e passável
# Funções. Consulte "$ game_map" para a instância da classe.
#================================================= =============================
class Game_Map
#--------------------------------------------------------------------------
# * publica a instancia de Variáveis
#--------------------------------------------------------------------------
attr_reader :map
end
#================================================= =============================
# ** Intérprete
#------------------------------------------------- -----------------------------
# Este intérprete executa comandos de eventos. Essa classe é usada no
# Game_System classe e da classe Game_Event.
#================================================= =============================
class Interpreter
#--------------------------------------------------------------------------
# * inicializaçao do Objeto
#--------------------------------------------------------------------------
alias af_veh_int_init initialize
def initialize(depth = 0, main = false)
@switching_vehicle = false
af_veh_int_init(depth, main)
end
#--------------------------------------------------------------------------
# * Switch Veículo
#--------------------------------------------------------------------------
def switch_vehicle(value)
@switching_vehicle = value
end
#--------------------------------------------------------------------------
# * Determinar se Running
#--------------------------------------------------------------------------
def running?
return @list != nil || @switching_vehicle
end
end
Dopo averlo messo ho chiamato un evento v_land e ho messo come grafica l'auto. Nel gioco l'ho provato e ho visto che funzionava correttamente, cioè se lasciavo il veicolo in punto diverso dalla posizione iniziale dell'evento questo rimaneva. Poi però ho notato che se cambio mappa esso ritorna al punto iniziale... Ora come faccio a non far ritornare l'evento alla posizione iniziale con il cambio mappa?
Grazie in anticipo... :ciau: