¡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.]

#1 [VX]Dos Jugadores el Mar Feb 28, 2012 2:01 pm

FIGO

avatar
[VX] 2 Players Engine
Créditos:
By Woratana [woratana@hotmail.com] (adaptación para VX)
Versión: 1.1
Hima (Creador en XP)


Este script le permite crear un segundo jugador que se puede controlar e interactuar con otros eventos en el mapa, al igual que el actor principal.
Crea un jugador controlado por un segundo a través del teclado, este personaje también puede:
* Caminar y correr en ocho direcciones (SHIFT).
* El jugador puede interactuar con los eventos en el mapa.

El segundo jugador es controlado por usted con:
S (abajo)
A (izquierda)
D (derecha)
W (arriba)
Q ("hablar o interactuar")

Puede editar los comandos en las líneas 44-49

Modo de empleo:
Bueno, ahora vamos a ver cómo ultiliza el script:
Para ultilizar el segundo jugador es necesario llamar a los siguientes scripts:
Código:
$game_player2 = Game_Player2.new
$game_player2.create(x,y,actor id,follow?)

* En la segunda línea en "x, y" son las coordenadas del lugar donde el nuevo jugador aparecerá.
(Ejemplo: "9,9" aparecerá en la fila 9 en vertical y 9 en horizontal).

* En "Identificación del actor"(id) , poner el id del héroe.
(Ejemplo: "4" en este caso se llama a Sara).

* En "follow", poner "true" (verdadero) o "false" (falso) para seguir la página de héroe.
(Se recomienda colocar "true").

Así es como debería escribirse para llamar a Sara:
Código:
$game_player2 = Game_Player2.new
$game_player2.create(9,9,4,false)

Para quitar el segundo jugador llamar al script:
Código:
$game_player2.delete

Código del Script:
Código:
#================================================
# [VX] 2 Players Engine
#------------------------------------------------
# By Woratana [woratana@hotmail.com]
# Version: 1.1
# Date: 14/03/2008
#
# CREDITOS: Original XP Version by Hima
# EXTRA: Tradução Portugues: [c.o.e]Articos (Tradusi apenas o basico =D)
=begin

+[FEATURES]+
- Este script permitirá que você crie um 2 Player que você pode controlar,
interagir com outros eventos no mapa, igualmente como o Player Principal.

- O jogador pode interagir com acontecimentos no mapa.

- o 2º Jogador pode andar em 8 direções e correr (Shift).

+[Como Usar]+
Para Chamar o 2º Player, chame o Script:
$game_player2 = Game_Player2.new
$game_player2.create(x, y, actor id, follow?)

x e y = X e Y para saber onde o player vai aparecer (coordenadas)

actor id = Id do Heroi que você vai chamar (exemplo: "4" chamara a Sara)
(ID no Database)

follow? = true (Segir o player principal), false (não seguir o player)
*NÃO É RECOMENDADO COLOCAR TRUE*

Para deletar Player 2, use Chamar script:
$game_player2.delete

=end
#==============================================================================

class Game_Player2 < Game_Character
  #--------------------------------------------------------------------------
  # START SETUP SCRIPT PART
  # * Constants: INPUT BUTTONS FOR Game_Player 2
  #--------------------------------------------------------------------------
  BAIXO = Input::Y # S in Keyboard
  ESQUERDA = Input::X # A in Keyboard
  DIREITA = Input::Z # D in Keyboard
  CIMA = Input::R # W in Keyboard
  ENTER = Input::L # Q in Keyboard
  CORRER = Input::A # Shift in Keyboard
  #--------------------------------------------------------------------------
  # END SETUP SCRIPT PART
  #--------------------------------------------------------------------------
 
  CENTER_X = (544 / 2 - 16) * 8    # Screen center X coordinate * 8
  CENTER_Y = (416 / 2 - 16) * 8    # Screen center Y coordinate * 8
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader  :vehicle_type      # type of vehicle currenting being ridden
  attr_accessor :character_name
  #--------------------------------------------------------------------------
  # * Create and Set Player 2 Location
  #--------------------------------------------------------------------------
  def create(x,y,id,need_center = false)
    @actor_id = id
    moveto(x,y)
    @need_center = need_center
    refresh
  end
  #--------------------------------------------------------------------------
  # * Clear Player 2
  #--------------------------------------------------------------------------
  def delete
  @actor_id = nil
  refresh
  $game_player2 = nil
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
  super
  @vehicle_type = -1
  @vehicle_getting_on = false    # Boarding vehicle flag
  @vehicle_getting_off = false  # Getting off vehicle flag
  @transferring = false        # Player transfer flag
  @new_map_id = 0            # Destination map ID
  @new_x = 0                # Destination X coordinate
  @new_y = 0                # Destination Y coordinate
  @new_direction = 0          # Post-movement direction
  @walking_bgm = nil          # For walking BGM memory
  end
  #--------------------------------------------------------------------------
  # * Determine if Stopping
  #--------------------------------------------------------------------------
  def stopping?
  return false if @vehicle_getting_on
  return false if @vehicle_getting_off
  return super
  end
  #--------------------------------------------------------------------------
  # * Player Transfer Reservation
  #    map_id  : Map ID
  #    x : x-coordinate
  #    y      : y coordinate
  #    direction : post-movement direction
  #--------------------------------------------------------------------------
  def reserve_transfer(map_id, x, y, direction)
  @transferring = true
  @new_map_id = map_id
  @new_x = x
  @new_y = y
  @new_direction = direction
  end
  #--------------------------------------------------------------------------
  # * Determine if Player Transfer is Reserved
  #--------------------------------------------------------------------------
  def transfer?
  return @transferring
  end
  #--------------------------------------------------------------------------
  # * Execute Player Transfer
  #--------------------------------------------------------------------------
  def perform_transfer
  return unless @transferring
  @transferring = false
  set_direction(@new_direction)
  if $game_map.map_id != @new_map_id
    $game_map.setup(@new_map_id)    # Move to other map
  end
  moveto(@new_x, @new_y)
  end
  #--------------------------------------------------------------------------
  # * Determine if Map is Passable
  #    x : x-coordinate
  #    y : y-coordinate
  #--------------------------------------------------------------------------
  def map_passable?(x, y)
  case @vehicle_type
  when 0  # Boat
    return $game_map.boat_passable?(x, y)
  when 1  # Ship
    return $game_map.ship_passable?(x, y)
  when 2  # Airship
    return true
  else  # Walking
    return $game_map.passable?(x, y)
  end
  end
  #--------------------------------------------------------------------------
  # * Determine if Walking is Possible
  #    x : x-coordinate
  #    y : y-coordinate
  #--------------------------------------------------------------------------
  def can_walk?(x, y)
  last_vehicle_type = @vehicle_type  # Remove vehicle type
  @vehicle_type = -1              # Temporarily set to walking
  result = passable?(x, y)        # Determine if passable
  @vehicle_type = last_vehicle_type  # Restore vehicle type
  return result
  end
  #--------------------------------------------------------------------------
  # * Determine if Airship can Land
  #    x : x-coordinate
  #    y : y-coordinate
  #--------------------------------------------------------------------------
  def airship_land_ok?(x, y)
  unless $game_map.airship_land_ok?(x, y)
    return false  # The tile passable attribute is unlandable
  end
  unless $game_map.events_xy(x, y).empty?
    return false  # Cannot land where there is an event
  end
  return true      # Can land
  end
  #--------------------------------------------------------------------------
  # * Determine if Riding in Some Kind of Vehicle
  #--------------------------------------------------------------------------
  def in_vehicle?
  return @vehicle_type >= 0
  end
  #--------------------------------------------------------------------------
  # * Determine if Riding in Airship
  #--------------------------------------------------------------------------
  def in_airship?
  return @vehicle_type == 2
  end
  #--------------------------------------------------------------------------
  # * Determine if Dashing
  #--------------------------------------------------------------------------
  def dash?
  return false if @move_route_forcing
  return false if $game_map.disable_dash?
  return false if in_vehicle?
  return Input.press?(CORRER)
  end
  #--------------------------------------------------------------------------
  # * Determine if Debug Pass-through State
  #--------------------------------------------------------------------------
  def debug_through?
  return false unless $TEST
  return Input.press?(Input::CTRL)
  end
  #--------------------------------------------------------------------------
  # * Set Map Display Position to Center of Screen
  #    x : x-coordinate
  #    y : y-coordinate
  #--------------------------------------------------------------------------
  def center(x, y)
  display_x = x * 256 - CENTER_X              # Calculate coordinates
  unless $game_map.loop_horizontal?            # No loop horizontally?
    max_x = ($game_map.width - 17) * 256        # Calculate max value
    display_x = [0, [display_x, max_x].min].max    # Adjust coordinates
  end
  display_y = y * 256 - CENTER_Y              # Calculate coordinates
  unless $game_map.loop_vertical?              # No loop vertically?
    max_y = ($game_map.height - 13) * 256        # Calculate max value
    display_y = [0, [display_y, max_y].min].max    # Adjust coordinates
  end
  $game_map.set_display_pos(display_x, display_y)  # Change map location
  end
  #--------------------------------------------------------------------------
  # * Move to Designated Position
  #    x : x-coordinate
  #    y : y-coordinate
  #--------------------------------------------------------------------------
  def moveto(x, y)
  super
  # center(x, y)
  make_encounter_count                      # Initialize encounter
  if in_vehicle?                          # Riding in vehicle
    vehicle = $game_map.vehicles[@vehicle_type]    # Get vehicle
    vehicle.refresh                        # Refresh
  end
  end
  #--------------------------------------------------------------------------
  # * Increase Steps
  #--------------------------------------------------------------------------
  def increase_steps
  super
  return if @move_route_forcing
  return if in_vehicle?
  $game_party.increase_steps
  $game_party.on_player_walk
  end
  #--------------------------------------------------------------------------
  # * Get Encounter Count
  #--------------------------------------------------------------------------
  def encounter_count
  return @encounter_count
  end
  #--------------------------------------------------------------------------
  # * Make Encounter Count
  #--------------------------------------------------------------------------
  def make_encounter_count
  if $game_map.map_id != 0
    n = $game_map.encounter_step
    @encounter_count = rand(n) + rand(n) + 1  # As if rolling 2 dice
  end
  end
  #--------------------------------------------------------------------------
  # * Determine if in Area
  #    area : Area data (RPG::Area)
  #--------------------------------------------------------------------------
  def in_area?(area)
  return false if area == nil
  return false if $game_map.map_id != area.map_id
  return false if @x < area.rect.x
  return false if @y < area.rect.y
  return false if @x >= area.rect.x + area.rect.width
  return false if @y >= area.rect.y + area.rect.height
  return true
  end
  #--------------------------------------------------------------------------
  # * Create Group ID for Troop Encountered
  #--------------------------------------------------------------------------
  def make_encounter_troop_id
  encounter_list = $game_map.encounter_list.clone
  for area in $data_areas.values
    encounter_list += area.encounter_list if in_area?(area)
  end
  if encounter_list.empty?
    make_encounter_count
    return 0
  end
  return encounter_list[rand(encounter_list.size)]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
  if @actor_id != nil and $game_actors[@actor_id] != nil
    actor = $game_actors[@actor_id]  # Get front actor
    @character_name = actor.character_name
    @character_index = actor.character_index
  else
    @character_name = ""
    end
  end
  #--------------------------------------------------------------------------
  # * Determine if Same Position Event is Triggered
  #    triggers : Trigger array
  #--------------------------------------------------------------------------
  def check_event_trigger_here(triggers)
  return false if $game_map.interpreter.running?
  result = false
  for event in $game_map.events_xy(@x, @y)
    if triggers.include?(event.trigger) and event.priority_type != 1
      event.start
      result = true if event.starting
    end
  end
  return result
  end
  #--------------------------------------------------------------------------
  # * Determine if Front Event is Triggered
  #    triggers : Trigger array
  #--------------------------------------------------------------------------
  def check_event_trigger_there(triggers)
  return false if $game_map.interpreter.running?
  result = false
  front_x = $game_map.x_with_direction(@x, @direction)
  front_y = $game_map.y_with_direction(@y, @direction)
  for event in $game_map.events_xy(front_x, front_y)
    if triggers.include?(event.trigger) and event.priority_type == 1
      event.start
      result = true
    end
  end
  if result == false and $game_map.counter?(front_x, front_y)
    front_x = $game_map.x_with_direction(front_x, @direction)
    front_y = $game_map.y_with_direction(front_y, @direction)
    for event in $game_map.events_xy(front_x, front_y)
      if triggers.include?(event.trigger) and event.priority_type == 1
        event.start
        result = true
      end
    end
  end
  return result
  end
  #--------------------------------------------------------------------------
  # * Determine if Touch Event is Triggered
  #    x : x-coordinate
  #    y : y-coordinate
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
  return false if $game_map.interpreter.running?
  result = false
  for event in $game_map.events_xy(x, y)
    if [1,2].include?(event.trigger) and event.priority_type == 1
      event.start
      result = true
    end
  end
  return result
  end
  #--------------------------------------------------------------------------
  # * Processing of Movement via input from the Directional Buttons
  #--------------------------------------------------------------------------
  def move_by_input
  return unless movable?
  return if $game_map.interpreter.running?
  if Input.press?(BAIXO)
    move_down
  end
  if Input.press?(ESQUERDA)
    move_left
  end
  if Input.press?(DIREITA)
    move_right
  end
  if Input.press?(CIMA)
    move_up
  end
  end
  #--------------------------------------------------------------------------
  # * Determine if Movement is Possible
  #--------------------------------------------------------------------------
  def movable?
  return false if moving?                # Moving
  return false if @move_route_forcing      # On forced move route
  return false if @vehicle_getting_on      # Boarding vehicle
  return false if @vehicle_getting_off      # Getting off vehicle
  return false if $game_message.visible      # Displaying a message
  return false if in_airship? and not $game_map.airship.movable?
  return true
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
  last_real_x = @real_x
  last_real_y = @real_y
  last_moving = moving?
  move_by_input
  super
  update_scroll(last_real_x, last_real_y) if @need_center
  update_vehicle
  update_nonmoving(last_moving)
  end
  #--------------------------------------------------------------------------
  # * Update Scroll
  #--------------------------------------------------------------------------
  def update_scroll(last_real_x, last_real_y)
  ax1 = $game_map.adjust_x(last_real_x)
  ay1 = $game_map.adjust_y(last_real_y)
  ax2 = $game_map.adjust_x(@real_x)
  ay2 = $game_map.adjust_y(@real_y)
  if ay2 > ay1 and ay2 > CENTER_Y
    $game_map.scroll_down(ay2 - ay1)
  end
  if ax2 < ax1 and ax2 < CENTER_X
    $game_map.scroll_left(ax1 - ax2)
  end
  if ax2 > ax1 and ax2 > CENTER_X
    $game_map.scroll_right(ax2 - ax1)
  end
  if ay2 < ay1 and ay2 < CENTER_Y
    $game_map.scroll_up(ay1 - ay2)
  end
  end
  #--------------------------------------------------------------------------
  # * Update Vehicle
  #--------------------------------------------------------------------------
  def update_vehicle
  return unless in_vehicle?
  vehicle = $game_map.vehicles[@vehicle_type]
  if @vehicle_getting_on              # Boarding?
    if not moving?
      @direction = vehicle.direction      # Change direction
      @move_speed = vehicle.speed        # Change movement speed
      @vehicle_getting_on = false        # Finish boarding operation
      @transparent = true              # Transparency
    end
  elsif @vehicle_getting_off            # Getting off?
    if not moving? and vehicle.altitude == 0
      @vehicle_getting_off = false        # Finish getting off operation
      @vehicle_type = -1              # Erase vehicle type
      @transparent = false              # Remove transparency
    end
  else                            # Riding in vehicle
    vehicle.sync_with_player            # Move at the same time as player
  end
  end
  #--------------------------------------------------------------------------
  # * Processing when not moving
  #    last_moving : Was it moving previously?
  #--------------------------------------------------------------------------
  def update_nonmoving(last_moving)
  return if $game_map.interpreter.running?
  return if moving?
  return if check_touch_event if last_moving
  if not $game_message.visible and Input.trigger?(ENTER)
    return if get_on_off_vehicle
    return if check_action_event
  end
  update_encounter if last_moving
  end
  #--------------------------------------------------------------------------
  # * Update Encounter
  #--------------------------------------------------------------------------
  def update_encounter
  return if $TEST and Input.press?(Input::CTRL)  # During test play?
  return if in_vehicle?                    # Riding in vehicle?
  if $game_map.bush?(@x, @y)                # If in bush
    @encounter_count -= 2                  # Reduce encounters by 2
  else                                # If not in bush
    @encounter_count -= 1                  # Reduce encounters by 1
  end
  end
  #--------------------------------------------------------------------------
  # * Determine Event Start Caused by Touch (overlap)
  #--------------------------------------------------------------------------
  def check_touch_event
  return false if in_airship?
  return check_event_trigger_here([1,2])
  end
  #--------------------------------------------------------------------------
  # * Determine Event Start Caused by [OK] Button
  #--------------------------------------------------------------------------
  def check_action_event
  return false if in_airship?
  return true if check_event_trigger_here([0])
  return check_event_trigger_there([0,1,2])
  end
  #--------------------------------------------------------------------------
  # * Getting On and Off Vehicles
  #--------------------------------------------------------------------------
  def get_on_off_vehicle
  return false unless movable?
  if in_vehicle?
    return get_off_vehicle
  else
    return get_on_vehicle
  end
  end
  #--------------------------------------------------------------------------
  # * Board Vehicle
  #  Assumes that the player is not currently in a vehicle.
  #--------------------------------------------------------------------------
  def get_on_vehicle
  front_x = $game_map.x_with_direction(@x, @direction)
  front_y = $game_map.y_with_direction(@y, @direction)
  if $game_map.airship.pos?(@x, @y)      # Is it overlapping with airship?
    get_on_airship
    return true
  elsif $game_map.ship.pos?(front_x, front_y)  # Is there a ship in front?
    get_on_ship
    return true
  elsif $game_map.boat.pos?(front_x, front_y)  # Is there a boat in front?
    get_on_boat
    return true
  end
  return false
  end
  #--------------------------------------------------------------------------
  # * Board Boat
  #--------------------------------------------------------------------------
  def get_on_boat
  @vehicle_getting_on = true      # Boarding flag
  @vehicle_type = 0            # Set vehicle type
  force_move_forward            # Move one step forward
  @walking_bgm = RPG::BGM::last    # Memorize walking BGM
  $game_map.boat.get_on          # Boarding processing
  end
  #--------------------------------------------------------------------------
  # * Board Ship
  #--------------------------------------------------------------------------
  def get_on_ship
  @vehicle_getting_on = true      # Board
  @vehicle_type = 1            # Set vehicle type
  force_move_forward            # Move one step forward
  @walking_bgm = RPG::BGM::last    # Memorize walking BGM
  $game_map.ship.get_on          # Boarding processing
  end
  #--------------------------------------------------------------------------
  # * Board Airship
  #--------------------------------------------------------------------------
  def get_on_airship
  @vehicle_getting_on = true      # Start boarding operation
  @vehicle_type = 2            # Set vehicle type
  @through = true              # Passage ON
  @walking_bgm = RPG::BGM::last    # Memorize walking BGM
  $game_map.airship.get_on        # Boarding processing
  end
  #--------------------------------------------------------------------------
  # * Get Off Vehicle
  #  Assumes that the player is currently riding in a vehicle.
  #--------------------------------------------------------------------------
  def get_off_vehicle
  if in_airship?                        # Airship
    return unless airship_land_ok?(@x, @y)    # Can't land?
  else                                # Boat/ship
    front_x = $game_map.x_with_direction(@x, @direction)
    front_y = $game_map.y_with_direction(@y, @direction)
    return unless can_walk?(front_x, front_y)  # Can't touch land?
  end
  $game_map.vehicles[@vehicle_type].get_off    # Get off processing
  if in_airship?                        # Airship
    @direction = 2                      # Face down
  else                                # Boat/ship
    force_move_forward                    # Move one step forward
    @transparent = false                  # Remove transparency
  end
  @vehicle_getting_off = true              # Start getting off operation
  @move_speed = 4                        # Return move speed
  @through = false                      # Passage OFF
  @walking_bgm.play                      # Restore walking BGM
  make_encounter_count                    # Initialize encounter
  end
  #--------------------------------------------------------------------------
  # * Force One Step Forward
  #--------------------------------------------------------------------------
  def force_move_forward
  @through = true      # Passage ON
  move_forward        # Move one step forward
  @through = false      # Passage OFF
  end
end

class Scene_Title < Scene_Base
  alias wor_twopla_scetit_cregam create_game_objects
  def create_game_objects
  wor_twopla_scetit_cregam
  $game_player2 = nil
  end
end

class Scene_Map < Scene_Base
  alias wor_twopla_scemap_upd update
  def update
  wor_twopla_scemap_upd
  $game_player2.update if $game_player2 != nil
  end
end

class Spriteset_Map
  alias wor_twopla_sprmap_crecha create_characters
  alias wor_twopla_sprmap_updcha update_characters
  def create_characters
  wor_twopla_sprmap_crecha
  @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  @chara_two_pushed = false
  end
 
  def update_characters
  if !(@chara_two_pushed) and $game_player2 != nil
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player2))
    @chara_two_pushed = true
  elsif @chara_two_pushed and $game_player2 == nil
    for i in 0..@character_sprites.size
      if @character_sprites[i].character.is_a?(Game_Player2)
        @character_sprites[i].character.character_name = ""
        @character_sprites[i].update
        @character_sprites.delete_at(i)
        break
      end
    end
    @chara_two_pushed = false
  end
  wor_twopla_sprmap_updcha
  end
end

class Game_Map
  alias wor_twopla_gammap_passable passable?
  def passable?(x, y, flag = 0x01)
  if $game_player2 != nil and flag
    return false if $game_player2.x == x and $game_player2.y == y
  end
  wor_twopla_gammap_passable(x, y, flag)
  end
end

#2 Re: [VX]Dos Jugadores el Vie Mar 02, 2012 3:30 pm

caleb465

avatar
faltan imágenes pero es interesanta Ópalo Sonriente

#3 Re: [VX]Dos Jugadores el Sáb Mar 03, 2012 5:20 pm

FIGO

avatar

No puse imágenes porque solo verías dos charas...con las única diferencia que podes manejar ambos...lo probé y anda perfecto.

#4 Re: [VX]Dos Jugadores el Vie Mar 09, 2012 5:45 pm

caleb465

avatar
Se le puede cambiar el equipo al 2º jugador?

#5 Re: [VX]Dos Jugadores el Sáb Mar 10, 2012 5:25 am

FIGO

avatar
Yo creo que si, porq es como si le cambiaras a un miebro del grupo (q es eso lo que es el segundo jugador). En cambiar equipamiento y elegís el personaje.

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.