Arena RPG Maker
Olá, visitante!
Seja bem-vindo ao fórum Arena RPG Maker, caso queira aprender sobre criação de jogos, está no fórum certo. Esperamos que possa aprender tanto quanto possa nos ensinar aqui.

Atenciosamente,
Equipe Arena RPG Maker.
Arena RPG Maker

Estamos de volta o/ ... Ou não.Eu amo a -Dark
Doações para o fórum abertas, clique aqui e saiba mais.
Últimos assuntos
» Tileset Converter to MV
Sex 12 Maio 2017, 13:07 por Douggi

» [Dúvida] Como tirar a porcentagem de esquiva
Ter 09 Maio 2017, 22:15 por Neil Flame Runner

» Pack Resources, Sprites e etc
Qua 23 Dez 2015, 09:30 por raydengv

» Download RPG Maker 2003 + RTP em português
Ter 22 Dez 2015, 08:14 por ::KimMax::

» Fantasy Art Online
Dom 18 Out 2015, 16:42 por daviih123

» Você vai ter medo do Nerve gear?
Sab 25 Jul 2015, 16:02 por Kirito-kun

» O Barato é louco
Sab 27 Jun 2015, 15:26 por Halt

» Download RPG Maker 2000 + RTP em português
Qui 21 Maio 2015, 19:28 por Wismael

» Divulgando meu grupo e página do Facebook
Ter 19 Maio 2015, 13:06 por Halt

» Craftage Engine (Eclipse Origins totalmente modificado e sem bugs)
Seg 27 Abr 2015, 18:24 por pigot98


Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 Script 2 players Vx em Seg 14 Jan 2013, 12:55

-Dark

avatar
Sub Admnistrador
Sub Admnistrador

Introdução:
Este script permitirá que você crie um 2 Player que você pode controlar, interagir com outros eventos no mapa, igualmente como o Player Principal.


Características:

Cria um 2º Player controlado por você pelo teclado, esse novo Player tambem pode:

*Andar em 8 direções e correr (Shift).
*O jogador pode interagir com acontecimentos no mapa.

O Segundo Player é controlado por você com:
S (baixo)
A (esquerda)
D (direita)
W (cima)
Q (enter "conversar")

Você pode editar os comandos nas linhas 44 a 49

Como usar:
Bom, agora vamos ver como se ultiliza o Script:
Para poder ultilizar o 2º Player você precisa chamar os seguintes scripts:
Código:

$game_player2 = Game_Player2.new
$game_player2.create(x,y,actor id,follow?)
*Na segunda linha em "x,y" coloque as coordenadas da onde o novo player vai aparecer.
(Exemplo: "9,9" ele ira aparecer na 9º linha na verticar e na 9º na horizontal).

*Em " actor id," coloque o id do Heroi.
(Exemplo: "4" Nesse caso vai chamar a Sara).

*Em "fallow", coloque "true"(verdadeiro) ou "false"(falso) para seguir o Heroi principal.
(Não é recomendado colocar para seguir "true").

Veja como deve ficar o exemplo para chamar a Sara:
Código:

$game_player2 = Game_Player2.new
$game_player2.create(9,9,4,false)

Para excluir o 2º Player chame o script:
Código:

$game_player2.delete


Cole o Script abaixo abaixo de "Scripts Adicionais".

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 [Você precisa estar registrado e conectado para ver este link.]
      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

Creditos:

-Woratana (Modificador para VX)
-Hima (Criador em XP)
-Articoscoe (Tradução)

Demo:

[Você precisa estar registrado e conectado para ver este link.]


__________________________________________
É meu fan? Gosta dos meus trabalhos? Use:

[Você precisa estar registrado e conectado para ver esta imagem.]
Ver perfil do usuário

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum