¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

ejqs19

avatar
Script: Advance Vehicle System
Autor: Falcao
Versión: 2.0

Descripción: Este script es para usar vehículos en el juego (eso es todo xD)

Script:


Código:

#======================================================================#
# Advance vehicle system 2.0 Falcao script
# Sirve para subirse a barcos, carros o vehículos aéreos de la forma más fácil que existe.
# (RPG Maker XP)
# makerpalace.onlinegoo.com                                           
#======================================================================#

module Falcao
 
# Terrain tag (Terreno) donde un bote va a navegar (Sólo acuáticos).
Terrain = 4

# Música al subirse al vehículo (si no quiere musica poner "NO").
ShipMusic = "045-Positive03"

# Botón para subirse al vehículo.
VehicleKey = Input::C

# Botón para acelerar cuando se está arriba del vehículo.
Run_key = Input::X
 
end

#-----------------------------------------------------------------------
# * Instrucciones:
#
# Copiar y pegar el script en un nuevo bloque encima de 'Main'.
# Para hacer que el script arranque poner uno de los siquientes
# comentarios desde el comando "Comentario" del evento.
#
#  CAR                Hace del evento un vehículo terrestre.
#  AIRSHIP          Hace del evento un vehículo aéreo.
#  BOAT              Hace del evento un vehículo acuático.
#
# Nota: Con poner esos comentarios en el evento le dices al script que
# dicho evento será un vehículo. Los comentarios deben ponerse en mayúsculas.
# Por lógica, si vas a teletransportarte a otro mapa con el vehículo el evento
# del vehículo debe estar en el otro mapa también.
# Cuando estás encima de un vehículo pulsa "A" y podrás acelerar.
#
# Comandos válidos para los 3 tipos de vehículos:
#
#  SPEED X          Esto le da velocidad personalizada al vehículo.
# En vez de X se pone un número del 1 al 10 (por defecto tiene 4).
#
# Comandos válidos solo para los vehículos acuáticos.
#
# PLAYER VISIBLE    Hace que el jugador se vea encima de dicho vehículo.
#
# Para hacer que el vehículo acuático navegue hay que ir a la base de datos, ir a la pestaña
# 'Tilesets' y pulsar 'terrain tag' (Terreno). Al autotile de agua darle un 4 por defecto.
#
# Notas del autor:
# Dar 'Créditos' al usar este script.
# Este script puede ser usado en juegos comerciales.
#---------------------------------------------------------------------------

class Game_Character
  attr_accessor :character_name
  attr_accessor :character_hue
  attr_accessor :move_speed
  attr_accessor :through
  attr_accessor :direction
  attr_accessor :inuse
  attr_accessor :x
  attr_accessor :y
  alias falcaoshipsystem_ini initialize
  def initialize
    falcaoshipsystem_ini
    @inuse = false
  end
  def mover(x, y)
    @x = x
    @y = y
    @real_x = @x * 128
    @real_y = @y * 128
    @prelock_direction = 0
  end
end

class Game_Event < Game_Character
  attr_reader    :boat
  attr_reader    :airship
  attr_reader    :car
  attr_reader    :visible
  attr_reader    :ship_speed
  alias falcaoboat_refresh refresh
  def refresh
    create_event_variables
    falcaoboat_refresh
    create_event_comments
  end
 
  def create_event_variables
    @boat = false
    @airship = false
    @visible = false
    @car = false
    @ship_speed = nil
  end
 
  def create_event_comments
    return if @page.nil?
    for i in @page.list
      if i.code == 108 or i.code == 408
        if i.parameters[0].upcase[/BOAT/] != nil
          @boat = true
        end
        if i.parameters[0].upcase[/AIRSHIP/] != nil
          @airship = true
        end
        if i.parameters[0].upcase[/CAR/] != nil
          @car = true
        end
        if i.parameters[0].upcase[/PLAYER VISIBLE/] != nil
          @visible = true
        end
        if i.parameters[0].upcase[/SPEED/] != nil
          @ship_speed = i.parameters[0].split[1].to_i
        end
      end
    end
  end
end

# Actualizar eventos en cada mapa
class Game_Map
  attr_accessor :map
  alias falcaomap_setup setup
  def setup(map_id)
    falcaomap_setup(map_id)
    update_eventos
  end
  def update_eventos
    for event in $game_map.events.values
      event.through = true if event.airship == true
      if event.boat and $game_player.abordo
        event.through = true
        if $game_player.name_hue[0] == event.character_name and
          $game_player.name_hue[1] == event.character_hue
          event.transparent = true
          event.inuse = true
        end
      end
      if event.airship and $game_player.inairship
        if $game_player.character_name == event.character_name
          event.inuse = true
          event.transparent = true
        end
      end
      if event.car and $game_player.incar
        if $game_player.character_name == event.character_name
          event.inuse = true
          event.transparent = true
        end
      end
    end
  end
 
  def pasa?(x, y, d)
    unless valid?(x, y)
      return false
    end
    bit = (1 << (d / 2 - 1)) & 0x0f
    for i in [2, 1, 0]
      tile_id = data[x, y, i]
      if tile_id == nil
        return false
      elsif @passages[tile_id] & bit != 0
        $pasa = false
        return false
      elsif @passages[tile_id] & 0x0f == 0x0f
        $pasa = false
        return false
      elsif @priorities[tile_id] == 0
        $pasa = true
        return true
      end
    end
    $pasa = true
    return true
  end
 
  alias falcaoautoplay_auto autoplay
  def autoplay
    unless $nomusic
      return if $game_player.abordo || $game_player.inairship ||
      $game_player.incar
    end
    falcaoautoplay_auto
  end
end

class Game_Player < Game_Character
  include Falcao
  attr_accessor :abordo
  attr_accessor :inairship
  attr_accessor :incar
  attr_accessor :fref
  attr_accessor :name_hue
  attr_accessor :faltime
  alias falcaoboat_ini initialize
  def initialize
    falcaoboat_ini
    @abordo = false
    @inairship = false
    @incar = false
    @lastspeed = 0.0
    @faltime = 0
    @downtime = 0
    @fdelay = 0
    @fref = false
    @name_hue = [name = "", hue = 0]
  end

  alias falcaoboat_update update
  def update
    falcaoboat_update
    update_boat
    update_airship
    update_car
    chekar_xy
    update_frescue
    speedvariance
  end
 
  #-----------------------------------------------------------
  # * Boat system
  #-----------------------------------------------------------
  def update_boat
    return if @inairship or @incar
    if Input.trigger?(VehicleKey)
      case @direction
      when 2
        push_x = 0; push_y = 1
      when 4
        push_x = -1;  push_y = 0
      when 6
        push_x = 1; push_y = 0
      when 8
        push_x = 0; push_y = -1
      else
        push_x = 0; push_y = 0
      end
      for event in $game_map.events.values
        if event.x == x + push_x and event.y == y + push_y
          if event.boat and @abordo == false
            @faltime = 10
            @lastspeed = @move_speed
            event.inuse = true
            event.transparent = true
            @fref = true
            event.through = true
            event.visible ? @walk_anime = false : @transparent = true
            @through = true
            @abordo = true
            move_down if @direction == 2
            move_left if @direction == 4
            move_right if @direction == 6
            move_up if @direction == 8
            play_ships_music
          end
        end
      end
    end
    if @abordo
      chekar_terreno
      chekar_velocidad
      chekar_evento
    end
  end
 
  def chekar_evento
    for event in $game_map.events.values
      if event.x == x and event.y == y
        if not event.jumping? and not event.over_trigger?
          event.start
        end
      end
    end
  end
 
  def chekar_terreno 
    case terrain_tag
    when Falcao::Terrain
      return
    else
      event_fclear
    end
  end
 
  def event_fclear
    for event in $game_map.events.values 
      if event.boat
        @transparent = false
        @walk_anime = true
        event.transparent = false
        event.direction = @direction if event.inuse == true
        event.inuse = false
        @abordo = false
        @through = false
        event.through = false
        @fdelay = 2
        play_last_music
      end
    end
  end
 
  #-----------------------------------------------------------
  # * Airship system
  #-----------------------------------------------------------
  def update_airship
    return if @abordo or @incar
    if Input.trigger?(VehicleKey)
      for event in $game_map.events.values
        if event.x == x  and event.y == y
          if event.airship and @inairship == false
            @lastspeed = @move_speed
            event.transparent = true
            event.inuse = true
            @inairship = true
            @through = true
            @step_anime = true
            @always_on_top = true
            @move_speed = 2
            move_up
            @direction = event.direction
            @faltime = 40
            play_ships_music
          end
        end
      end
    end
    if @inairship
      fsetup_player
      chekar_bajada
      chekar_velocidad
      chekar_pasable
    end
  end
 
  def chekar_bajada
    return if $pasa == false
    if Input.trigger?(VehicleKey) and @faltime == 0 and @downtime == 0
      @downtime = 40
      @move_speed = 2
      @lasdir = @direction
      move_down
      turn_left if @lasdir == 2 or @lasdir == 4 or @lasdir == 8
      turn_right if @lasdir == 6
    end
    if @downtime > 0
      @downtime -= 1
      if @downtime == 1
      for event in $game_map.events.values
        if event.airship
          event.transparent = false
          event.direction = @direction if event.inuse
          event.inuse = false
          actor = $game_party.actors[0]
          $game_player.character_name = actor.character_name
          @inairship = false
          @through = false
          @step_anime = false
          @always_on_top = false
          @downtime = 0
          @fdelay = 2
          play_last_music
          end
        end
      end
    end
  end
 
  def chekar_pasable
    case @direction
    when 2; d = 2
    when 4; d = 4
    when 6; d = 6
    when 8; d = 8
    end
    $game_map.pasa?(x, y, d)
  end
 
  #-----------------------------------------------------------
  # * Car system
  #-----------------------------------------------------------
  def update_car
    return if @abordo or @inairship
    if Input.trigger?(VehicleKey)
      case @direction
      when 2; push_x = 0; push_y = 1
      when 4; push_x = -1;  push_y = 0
      when 6; push_x = 1; push_y = 0
      when 8; push_x = 0; push_y = -1
      else; push_x = 0; push_y = 0
      end
      for event in $game_map.events.values
        if event.x == x + push_x and event.y == y + push_y
          if event.car and @incar == false
            @lastspeed = @move_speed
            mover(event.x, event.y)
            event.transparent = true
            event.inuse = true
            @incar = true
            @direction = event.direction
            @faltime = 4
            play_ships_music
          end
        end
      end
    end
    if @incar
      fsetup_player
      chekar_car_bajada
      chekar_velocidad
    end
  end

  def chekar_car_bajada
    if Input.trigger?(VehicleKey) and @faltime == 0
      for event in $game_map.events.values
        if event.car
          event.transparent = false
          event.direction = @direction if event.inuse
          event.inuse = false
          actor = $game_party.actors[0]
          $game_player.character_name = actor.character_name
          @incar = false
          @fdelay = 2
          play_last_music
        end
      end
    end
  end
 
  #-----------------------------------------------------------
  # * Global Tracking
  #-----------------------------------------------------------
  def fsetup_player
    for event in $game_map.events.values 
      if event.airship or event.car and event.inuse
        def display_exist?(event)
          begin
            RPG::Cache.character(event.character_name,
            event.character_hue)
          rescue
            return false
          end
          return true
        end
        if display_exist?(event)
        $game_player.character_name = event.character_name
        end
      end
    end
  end
 
  def speedvariance
    if @faltime > 0
      @faltime -= 1
      @move_speed = 2 if @inairship and @faltime == 37
      if @faltime == 1
        for event in $game_map.events.values
          if event.inuse
            if event.ship_speed != nil
              @move_speed = event.ship_speed
            else
              @inairship ? @move_speed = 5 : @move_speed = @lastspeed
            end
          end
        end
        @faltime = 0
      end
    end
  end
 
  def chekar_velocidad
    return if @faltime > 0 and @inairship
    if Input.press?(Run_key)
      if @fcount == nil
        @vieja = @move_speed
        for event in $game_map.events.values
          if event.inuse
            if event.ship_speed != nil
              case event.ship_speed
              when 1; @move_speed = 1.8
              when 2; @move_speed = 2.8
              when 3; @move_speed = 3.8
              when 4; @move_speed = 4.8
              when 5; @move_speed = 5.8
              when 6; @move_speed = 6.8
              when 7; @move_speed = 7.8
              when 8; @move_speed = 8.8
              when 9...99; @move_speed = 9.9
              end
            else
              @inairship ? @move_speed = 5.8 : @move_speed = 4.8 
            end
          end
        end
        @fcount = 1
      end
    elsif @fcount != nil
      @move_speed = @vieja
      @fcount = nil
    end
  end
 
  def chekar_xy
    for event in $game_map.events.values
      if event.airship or event.boat or event.car
        if event.inuse
          event.move_speed = 10
          event.x = x
          event.y = y
        end
      end
    end
  end
 
  def update_frescue
    if @fdelay > 0
      @fdelay -= 1
      if @fdelay == 1
        @move_speed = @lastspeed
        @fdelay = 0
      end
    end
  end
 
  def nada
    Audio.bgm_play("") rescue nil
    $nomusic = true
  end
 
  def play_ships_music
    $game_system.bgm_memorize
    $game_system.bgs_memorize
    Audio.bgm_play("Audio/Bgm/" + Falcao::ShipMusic) rescue nada
  end
 
  def play_last_music
    if $game_map.map.autoplay_bgm
      $game_map.autoplay
    else
      $game_system.bgm_restore
      $game_system.bgs_restore
    end
  end
end

#--------------------------------------------------------------------------
# * Sprite del Bote. Falcao easy system.
#--------------------------------------------------------------------------
class Sprite_Boat < RPG::Sprite
  attr_accessor :character               
  def initialize(viewport, character = nil)
    super(viewport)
    @character = character
    create_bitmap
    update
  end
 
  def update
    super
    update_rectangulo
    update_direction
  end
 
  def nimierda
    self.bitmap = RPG::Cache.character("",0)
  end
 
  def create_bitmap
    nimierda
    for event in $game_map.events.values
      if event.boat and $game_player.name_hue[0] != ""
        self.bitmap = RPG::Cache.character($game_player.name_hue[0],
        $game_player.name_hue[1])
      end
    end
    @cw = bitmap.width / 4
    @ch = bitmap.height / 4
    self.ox = @cw / 2
    self.oy = @ch
    self.visible = false
  end
 
  def update_rectangulo
    sx = @character.pattern * @cw
    sy = (@character.direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    $game_player.abordo ? self.visible = true : self.visible = false
  end
 
  def update_direction
    begin
    for event in $game_map.events.values
      if event.boat and event.inuse and $game_player.fref
        self.bitmap = RPG::Cache.character(event.character_name,
        event.character_hue)
        @cw = bitmap.width / 4
        @ch = bitmap.height / 4
        self.ox = @cw / 2
        self.oy = @ch
        $game_player.name_hue[0] = event.character_name
        $game_player.name_hue[1] = event.character_hue
        $game_player.fref = false
      end
    end
    end
    case $game_player.direction
    when 2
      self.x = @character.screen_x
      self.y = @character.screen_y + 26
    when 4
      self.x = @character.screen_x - 5
      self.y = @character.screen_y + 16
    when 6
      self.x = @character.screen_x + 5
      self.y = @character.screen_y + 16
    when 8
      self.x = @character.screen_x
      self.y = @character.screen_y + 22 
    end
    self.z = 60
    self.opacity = 255 #@character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
  end
end

#--------------------------------------------------------------------------
# * Spriteset_Map update sprites aliased
#--------------------------------------------------------------------------
class Spriteset_Map
  alias falcao13sprites_ini initialize
  def initialize
    falcao13sprites_ini
    @plugin = true
    @boat_sprites = []
    @boat_sprites.push(Sprite_Boat.new(@viewport1, $game_player))
  end
 
  alias falcao13sprites_dispose dispose
  def dispose
    falcao13sprites_dispose
    for boat in @boat_sprites
      boat.dispose
      @plugin = false
    end
  end
 
  alias falcao13sprites_update update
  def update
    falcao13sprites_update
    if @plugin
      for boat in @boat_sprites
        boat.update
      end
    end
  end
end

Instrucciones:


  1. Pegar encima de 'Main' (eso es todo lo que se necesita para que empiece a correr xD)
  2. El script por defecto usa la tecla "C" para entrar y salir de los vehículos.
    Hay varios tipos:

    Vehículo terrestre
    Vehículo aéreo
    Vehículo acuático

  3. Para poder hacer que el script funcione en los vehículos tiene que poner esto en una nota en el evento que van a usar:

    Vehículo terrestre: CAR
    Vehículo aéreo: AIRSHIP
    Vehículo acuático: BOAT

  4. También pueden ponerle la velocidad deseada asi: SPEED X (en vez de X pones el número que quieras del 1 al 10, si no pones nada, por defecto será un 4).
    Y si quieren que se vea el jugador (por ejemplo: en un bote) ponen esto en otra nota: PLAYER VISIBLE
    NOTA IMPORTANTE: Todo en las notas tiene que ir en MAYÜSCULA para que funcione.


Imágenes:
Spoiler:




Bueno creo que eso es todo, pero por si no me entendieron aquí les dejo la demo para que lo vean y lo entiendan mejor.



Última edición por ejqs19 el Lun Mayo 09, 2011 7:33 pm, editado 1 vez

D.A.C.

avatar
No he probado el script, pero si realmente funciona solucionarás los problemas de muchísimos usuarios de RPG Maker XP. ¿Puedes conseguir unas imágenes con mayor resolución? ¡Muchas gracias por el aporte!




Si quieres verlo, haz click aquí.

Jon_Maker

avatar
Pues es un aspecto muy clasico de los rpg, y que el xp no lo tenga en mi opinion le quita puntos.
Pero con este script se solucionaria eso ^^

Muy buen aporte.

Saludos ^^

ejqs19

avatar
Listo, ya puse mejores imagenes Ópalo Contento

D.A.C. escribió:No he probado el script, pero si realmente funciona solucionarás los problemas de muchísimos usuarios de RPG Maker XP. ¿Puedes conseguir unas imágenes con mayor resolución? ¡Muchas gracias por el aporte!

si el script si funciona, yo ya lo he provado Ópalo Contento

~Newa

avatar
Tengo un problema, al un si le pongo : PLAYER VISIBLE, mi char no se ve
Tienes alguna solucion para eso?

De todas maneras buen aporte

edisonherrera

avatar
pon lo en otra pàgina no en megaupload

Aarl

avatar
Buenas edison, lo primero bienvenido al foro.

Quería advertirte de que hace mucho tiempo que el usuario que aportó este script no se pasa por aquí (no hay más que mirar las fechas).

Alguien que lo tenga podría resubirlo a otro servidor, pero por favor te ruego que lo pidas de una manera más amable a la que has optado por usar en este topic.

Saludos~

link09

avatar
me sirvio el scrip  Ópalo Contento  pero se le puede cambiar la musica al subirse a un vehiculo?

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.