quarta-feira, 18 de julho de 2012

Sistema de Teletransporte - RMXP

Eae pessoal, vim trazer um sistema de teletransporte para RPG Maker XP, olhem:


Habilidade - Teleporte
por KGC
Modificado por Atoa



Scripts RGSS, Resources, Tutorials and Translations by Atoa is licensed under a
Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil License.
Permissions beyond the scope of this license may be available at Santuário RPG Maker

Introdução 

Esse script permite que você crie habilidades e/ou itens que teleportam você para locais previamente memorizados. Eu adicionei um sistema de "Negar Teleporte" ao script, assim a habilidade não funciona se você ligar um switch (defindo por você). Útil para alguns momentos da história onde o personagem tem que ir a um local e nao pode voltar.

Características 

• Permite adicionar o atributo "Teleporte" a Habilidades e/ou Itens.
• Sistema de Negar teleporte adicionado por Atoa

Screenshots



Como usar

Para instalá-lo, apenas cole o script acima do main.

Primeiro você deve criar um atributo na aba de sistemas com o nome de "Teleporte"

Você deve então criar uma habilidade e/ou um item e adicionar a ele este atributo. Lembre-se de permitir seu uso apenas no Menu. Pois  em batalha ela não tem efeito.

Para memorizar um novo local, use o comando Chamar Script e adicione:

Código:
add_teleport(nome, id, x, y, direção)Onde:
- nome: Este é o nome do local para onde você vai se teletransportar.
Não precisa ser necessáriamente o nome do mapa.
Para criar mais de um ponto de teleporte no mesmo mapa, você deve usar nomes diferentes. Por exemplo "Cidade - Saida Norte" e "Cidade - Saida Sul"
- id: ID do mapa para onde o personagem será teleportado.
- x: coordenada X onde o personagem irá aparecer
- y: coordenada Y onde o personagem irá aparecer
- direção: a direção para qual o personagem estará virado ao aparecer no mapa deve ser um valor igual a 2, 4, 6 ou 8
  2 = o personagem aparece olhando para baixo
  4 = o personagem aparece olhando para esquerda
  6 = o personagem aparece olhando para direita
  8 = o personagem aparece olhando para direita

Você pode desativar o teleporte ativando o switch de negação de teleporte
"NO_TELEPORT_SWITCH"
Você pode definir a ID desse Switch

Demo

Habilidade de Teleporte.rar


Código:
=begin
#==============================================================================
#?? KGC_Teleport ?
#==============================================================================

Esse script permite criar habilidades ou itens de Teletransporte.
Com ela você pode se teletransportar para locais previamente memorizados

Primeiro você deve criar um atributo na aba de sistemas com o nome
de "Teleporte"

Você deve então criar uma habilidade e/ou um item e adicionar a ele
este atributo. Lembre-se de permitir seu uso apenas no Menu. Pois
em batalha ela não tem efeito.

Para memorizar um novo local, use o comando Chamar Script e adicione:

add_teleport(nome, id, x, y, direção)

Onde:
- nome: Este é o nome do local para onde você vai se teletransportar.
    Não precisa ser necessáriamente o nome do mapa.
    Para criar mais de um ponto de teleporte no mesmo mapa, você deve usar
    nomes diferentes. Por exemplo "Cidade - Saida Norte" e "Cidade - Saida Sul"
- id: ID do mapa para onde o personagem será teleportado.
- x: coordenada X onde o personagem irá aparecer
- y: coordenada Y onde o personagem irá aparecer
- direção: a direção para qual o personagem estará virado ao aparecer no mapa
  deve ser um valor igual a 2, 4, 6 ou 8
  2 = o personagem aparece olhando para baixo
  4 = o personagem aparece olhando para esquerda
  6 = o personagem aparece olhando para direita
  8 = o personagem aparece olhando para direita

Você pode desativar o teleporte ativando o switch de negação de teleporte
"NO_TELEPORT_SWITCH"

=end
module KGC
  #Som ao se teleportar
  TELEPORT_SE = RPG::AudioFile.new("018-Teleport01", 80)
  #ID Switch de Negação de Teleporte
  NO_TELEPORT_SWITCH = 1
end

$game_special_elements  = {} if $game_special_elements == nil
$imported = {} if $imported == nil
$data_states = load_data("Data/States.rxdata") if $data_states == nil
$data_system = load_data("Data/System.rxdata") if $data_system == nil

$imported["Teleport"] = true

$game_special_elements["teleport"] = $data_system.elements.index("Teleporte")

#--------------------------------------------------------------------------
def add_teleport(name, id, x, y, dir = 2)
  for dest in $game_system.teleport_dest
    return if dest == nil || dest[0] == name
  end
  $game_system.teleport_dest.push([name, id, x, y, dir])
end
#--------------------------------------------------------------------------
def add_teleport_now_place
  place = [$game_map.map_name,
    $game_map.map_id,
    $game_player.x,
    $game_player.y,
    $game_player.direction]
  for dest in $game_system.teleport_dest
    return if dest == nil || dest[0] == place[0]
  end
  $game_system.teleport_dest.push(place)
end
#--------------------------------------------------------------------------
def delete_teleport(name)
  for dest in $game_system.teleport_dest
    next if dest == nil
    if dest[0] == name
      $game_system.teleport_dest.delete(dest)
      break
    end
  end
end

#==============================================================================
# ? Game_Temp
#==============================================================================

class Game_Temp
  #--------------------------------------------------------------------------
  attr_accessor :teleport_calling       
  attr_accessor :teleport_item           
  attr_accessor :teleport_user           
  attr_accessor :teleport_cost_sp       
  #--------------------------------------------------------------------------
  alias initialize_KGC_Teleport initialize
  def initialize
    initialize_KGC_Teleport
    @teleport_item, @teleport_user = nil, nil
    @teleport_cost_sp, @teleport_calling = 0, false
  end
end

#==============================================================================
# ? Game_System
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  attr_accessor :teleport_dest         
  attr_accessor :teleport_permit         
  #--------------------------------------------------------------------------
  alias initialize_KGC_Teleport initialize
  def initialize
    initialize_KGC_Teleport
    @teleport_dest, @teleport_permit = [], true
  end
end

#==============================================================================
# ? Game_Map
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  def map_name
    mapinfo = load_data("Data/MapInfos.rxdata")
    return mapinfo[@map_id].name
  end
end


#==============================================================================
# ? Window_Teleport
#==============================================================================

class Window_Teleport < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(80, 80, 480, 320)
    @column_max = 2
    refresh
    self.back_opacity = 160
    self.visible = false
    self.index = 0
  end
  #--------------------------------------------------------------------------
  def dest
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for dest in $game_system.teleport_dest
      next if dest == nil
      @data.push(dest)
    end
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  def draw_item(index)
    dest = @data[index]
    x = 4 + index % 2 * 224
    y = index / 2 * 32
    self.contents.draw_text(x, y, 224, 32, dest[0], 0)
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
      return
    end
    row = @index / @column_max
    if row < self.top_row
      self.top_row = row
    end
    if row > self.top_row + (self.page_row_max - 1)
      self.top_row = row - (self.page_row_max - 1)
    end
    cursor_width = (self.width - 32) / @column_max
    x = @index % @column_max * cursor_width
    y = @index / @column_max * 32 - self.oy
    self.cursor_rect.set(x, y, cursor_width, 32)
  end
end


#==============================================================================
# ? Scene_Map
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  alias main_KGC_Teleport main
  def main
    @teleport_window = Window_Teleport.new
    main_KGC_Teleport
    @teleport_window.dispose
  end
  #--------------------------------------------------------------------------
  alias update_KGC_Teleport update
  def update
    update_KGC_Teleport
    unless $game_player.moving?
      if $game_temp.teleport_calling
        call_teleport
      end
    end
  end
  #--------------------------------------------------------------------------
  def call_teleport
    $game_temp.teleport_calling = false
    if $game_switches[KGC::NO_TELEPORT_SWITCH] == true
      $game_system.se_play($data_system.buzzer_se)
      @message_waiting = true
      $game_temp.message_proc = Proc.new { @message_waiting = false }
      $game_temp.message_text = "Não é possível se teletransportar agora."     
    else
    teleport_flag = false
    @teleport_window.refresh
    @teleport_window.opacity = 0
    @teleport_window.visible = true
    @teleport_window.active = true
    loop do
      @teleport_window.opacity += 16 if @teleport_window.opacity < 255
      @teleport_window.update
      Graphics.update
      Input.update
      if Input.trigger?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        if $game_temp.teleport_item != nil
          item = $game_temp.teleport_item
          $game_party.gain_item(item.id, 1) if item.consumable
          $game_temp.teleport_item = nil
        elsif $game_temp.teleport_user != nil
          $game_temp.teleport_user.sp += $game_temp.teleport_cost_sp
          $game_temp.teleport_user = nil
          $game_temp.teleport_cost_sp = 0
        end
        Graphics.freeze
        break
      end
      if Input.trigger?(Input::C)
        dest = @teleport_window.dest
        if dest == nil
          $game_system.se_play($data_system.buzzer_se)
          next
        end
        $game_temp.player_new_map_id = dest[1]
        $game_temp.player_new_x = dest[2]
        $game_temp.player_new_y = dest[3]
        $game_temp.player_new_direction = dest[4]
        teleport_flag = true
        break
      end
    end
    @teleport_window.visible = false
    @teleport_window.active = false
    if teleport_flag
      $game_temp.player_transferring = true
      $game_temp.transition_processing = true
      Graphics.freeze
      if KGC::TELEPORT_SE.is_a?(RPG::AudioFile)
        $game_system.se_play(KGC::TELEPORT_SE)
      elsif KGC::TELEPORT_SE.is_a?(String)
        Audio.se_play("Audio/SE/" + KGC::TELEPORT_SE)
      end
      transfer_player
    else
      Graphics.transition
    end
    end
  end
end

#==============================================================================
# ? Scene_Item
#==============================================================================

class Scene_Item
  #--------------------------------------------------------------------------
  alias update_item_KGC_Teleport update_item
  def update_item
    if Input.trigger?(Input::C)
      @item = @item_window.item
      if @item != nil && @item.is_a?(RPG::Item) &&
          @item.element_set.include?($game_special_elements["teleport"])
        if $game_system.teleport_permit && @item.is_a?(RPG::Item) &&
            $game_party.item_can_use?(@item.id)
          $game_system.se_play(@item.menu_se)
          $game_party.lose_item(@item.id, 1) if @item.consumable
          $game_temp.teleport_item = @item
          $game_temp.teleport_calling = true
          $scene = Scene_Map.new
        else
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        return
      end
    end
    update_item_KGC_Teleport
  end
end


#==============================================================================
# ? Scene_Skill
#==============================================================================

class Scene_Skill
  #--------------------------------------------------------------------------
  alias update_skill_KGC_Teleport update_skill
  def update_skill
    if Input.trigger?(Input::C)
      @skill = @skill_window.skill
      if @skill != nil && @skill.element_set.include?($game_special_elements["teleport"])
        if @skill != nil && @actor.skill_can_use?(@skill.id) &&
            $game_system.teleport_permit
          $game_system.se_play(@skill.menu_se)
          @actor.sp -= @skill.sp_cost
          $game_temp.teleport_user = @actor
          $game_temp.teleport_cost_sp = @skill.sp_cost
          $game_temp.teleport_calling = true
          $scene = Scene_Map.new
        else
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        return
      end
    end
    update_skill_KGC_Teleport
  end
end

Perguntas Frequentes

Nenhuma Pergunta Frequente

Créditos e Agradecimentos
Feito por KGC
Modificado por Atoa


É isso pessoal, esperem que gostem. =D

Nenhum comentário:

Postar um comentário