O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Pegar e lançar

Iniciado por CDCyoshi, 04/10/2015 às 09:38

04/10/2015 às 09:38 Última edição: 04/10/2015 às 14:56 por CDCyoshi
Alguém tem algum script ou sistema (vxAce) para fazer o herói pegar um objeto e lançar, estilo Zelda? (Já uso o Pearl Abs)
♦Gifts♦

04/10/2015 às 10:00 #1 Última edição: 04/10/2015 às 10:23 por Makers
PICKUP AND THROW (V1.2)

CARACTERÍSTICAS

Sistema de carregar e arremessar eventos, útil para criar puzzles.

UTILIZAÇÃO

Para definir quais os eventos serão arremessáveis basta nomear o evento da seguinte forma.

<ThrowX>

X é a distância que o evento pode ser arremessado.
Exemplo

<Throw5>

Sprite do personagem carregando objeto. (Opcional)

É preciso ter uma imagem do personagem em posição de carregar objeto e nomear a imagem da sequinte forma.

Character_Name + _Pickup


Exemplo

Actor1_Pickup.png

script

esse e oo nome do script: MOG_Pichup_and_Throw

#==============================================================================
# +++ MOG - PICKUP AND THROW (v1.2) +++
#==============================================================================
# By Moghunter
# https://atelierrgss.wordpress.com/
#==============================================================================
# Sistema de carregar e arremessar eventos, útil para criar puzzles.
#==============================================================================
# Para definir quais os eventos serão arremessáveis basta nomear o evento 
# da seguinte forma.
#
# <ThrowX>
#
# X é a distância que o evento pode ser arremessado.
#
# Exemplo
#
# Event01<Throw4>
#
#==============================================================================
# Sprite do personagem carregando o Objeto (Opcional)
#==============================================================================
# É preciso ter uma imagem do personagem em posição de carregar objeto e
# nomear a imagem da sequinte forma.
#
# Character_Name + _Pickup
#
# Exemplo
#
# Actor1_Pickup.png
#==============================================================================

#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v 1.2 - Melhor codificação.
# v 1.1 - Melhor compatibilidade com scripts de terceiros.
#==============================================================================

module MOG_PICK_THROW
  #Altura do sprite do objeto carregado.
  SPRITE_POSITION = 20
  #Definição do Som quando o objeto é arremessado. 
  THROW_SE = "Jump2"
  #Definição do Som quando o objeto é carregado. 
  PICK_UP_SE = "Jump1"
  #ID da Switch que desativa o sistema de carregar. 
  DISABLE_PICKUP_SWITCH_ID = 100
  # Definição do botão de carregar(Arremeçar) objetos.
  PICKUP_BUTTON = Input::C
end  
 
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
 
  attr_accessor :pickup_lock  
  attr_accessor :pickup_lock_time
  attr_accessor :character_pre_name
  attr_accessor :can_throw
  attr_accessor :throw_position
  
  #--------------------------------------------------------------------------
  # ● initialize
  #--------------------------------------------------------------------------  
  alias mog_pick_initialize initialize
  def initialize
      @pickup_lock = false 
      @pickup_lock_time = 0   
      @character_pre_name = ""
      @can_throw = true
      @throw_position = []
      mog_pick_initialize
  end  
end

#==============================================================================
# ■ Game_Event
#==============================================================================
class Game_Event < Game_Character
  attr_reader   :jump_count  
  attr_accessor :x
  attr_accessor :y
  attr_accessor :bush_depth
  attr_accessor :direction
  
  #--------------------------------------------------------------------------
  # ● initialize
  #--------------------------------------------------------------------------
  alias mog_pickup_initialize initialize
  def initialize(map_id, event)
      mog_pickup_initialize(map_id, event)    
      @throw_active = false
      if event.name =~ /<Throw(\d+)>/i
         @throw = $1.to_i
      end      
  end      
end

#==============================================================================
# ■ Game_CharacterBase
#==============================================================================
class Game_CharacterBase
  attr_accessor :throw_active
  attr_accessor :throw
  
  #--------------------------------------------------------------------------
  # ● initialize
  #--------------------------------------------------------------------------  
  alias x_pickup_initialize initialize
  def initialize
      @throw_active = false
      @throw = 0
      x_pickup_initialize
  end  
  
end

#==============================================================================
# ■ Game_Character
#==============================================================================
class Game_Character < Game_CharacterBase
 
 #--------------------------------------------------------------------------
 # ● Throw Action
 #--------------------------------------------------------------------------
  def throw_action(range)    
      moveto($game_player.x,$game_player.y)
      jump_range = range
      moveto($game_player.x,$game_player.y)
      range.times do 
      unless jumping? 
        case $game_player.direction
           when 6             
             jump(jump_range,0) if throw_range?(jump_range,0,jump_range) 
           when 4
             jump(-jump_range,0) if throw_range?(-jump_range,0,jump_range)
           when 2
             jump(0,jump_range) if throw_range?(0,jump_range,jump_range)
           when 8                       
             jump(0,-jump_range) if throw_range?(0,-jump_range,jump_range)
         end         
         if @x == $game_player.x and @y == $game_player.y and jump_range == 1
            $game_temp.can_throw = false
         end
         jump_range -= 1  
      end               
   end     
 end  
   
 #--------------------------------------------------------------------------
 # ● Throw Range?
 #--------------------------------------------------------------------------
 def throw_range?(x, y,range )  
    x = $game_player.x 
    y = $game_player.y 
    case $game_player.direction   
        when 2
            y += range
        when 6       
            x += range
        when 4  
            x -= range
        when 8
            y -= range 
    end      
    return false if collide_with_characters?(x, y) 
    return false unless map_passable?(x, y,$game_player.direction)   
    return true
  end     
    
end  

#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player < Game_Character  
  include MOG_PICK_THROW
  
  #--------------------------------------------------------------------------
  # ● Update Player Before Movement
  #--------------------------------------------------------------------------  
  alias pickup_update update
  def update
      pickup_update
      update_pickup_command
  end
  
  #--------------------------------------------------------------------------
  # ● Update Pickup Command
  #--------------------------------------------------------------------------  
  def update_pickup_command
      $game_temp.pickup_lock_time -= 1 if $game_temp.pickup_lock_time > 0
      return if $game_temp.pickup_lock_time > 0
      if Input.trigger?(PICKUP_BUTTON)
         throw_event if can_check_throw_event?
         check_event_pickup([0,1,2]) if can_check_pickup_event?
      end
  end
    
  #--------------------------------------------------------------------------
  # ● Check Action Event
  #--------------------------------------------------------------------------
  alias mog_pickup_check_action_event check_action_event
  def check_action_event
      return if $game_temp.pickup_lock_time > 0 or $game_temp.pickup_lock
      mog_pickup_check_action_event
  end  
    
  #--------------------------------------------------------------------------
  # ● Can Check Pickup Event
  #--------------------------------------------------------------------------  
  def can_check_pickup_event?
      return false if $game_temp.pickup_lock 
      return false if $game_temp.pickup_lock_time > 0     
      return false if $game_map.interpreter.running?
      return false if $game_message.visible
      return false if $game_switches[DISABLE_PICKUP_SWITCH_ID] 
      return true
  end    
  
  #--------------------------------------------------------------------------
  # ● Can Check Throw Event
  #--------------------------------------------------------------------------    
  def can_check_throw_event?
      return false if $game_temp.pickup_lock == false
      return false if $game_temp.pickup_lock_time > 0 
      return false if $game_map.interpreter.running?
      return false if $game_message.visible
      return false if $game_switches[DISABLE_PICKUP_SWITCH_ID] 
      return true
  end    
  
  #--------------------------------------------------------------------------
  # ● Reserve Transfer
  #-------------------------------------------------------------------------- 
  alias mog_pickup_reserve_transfer reserve_transfer
  def reserve_transfer(map_id, x, y, direction)
      if $game_temp.pickup_lock == true
         for event in $game_map.events.values
             if event.throw_active == true 
                event.throw_active = false
                event.moveto(@x,@y)
                case @direction 
                   when 2
                     event.jump(0,-1)     
                   when 4
                     event.jump(1,0)     
                   when 6
                     event.jump(-1,0)     
                   when 8  
                     event.jump(0,1)   
                end     
             end  
         end      
         $game_temp.pickup_lock = false
         $game_temp.pickup_lock_time = 0
         @character_name = $game_temp.character_pre_name
      end  
      mog_pickup_reserve_transfer(map_id, x, y, direction)
  end
 
  #--------------------------------------------------------------------------
  # ● Movable?
  #--------------------------------------------------------------------------  
  alias mog_pickup_movable movable?
  def movable?
      return false if $game_temp.pickup_lock_time > 0  
      mog_pickup_movable
  end  
  
  #--------------------------------------------------------------------------
  # ● Throw Event
  #--------------------------------------------------------------------------  
  def throw_event
      for event in $game_map.events.values
          if event.throw_active and not jumping?
             $game_temp.can_throw = true
             event.throw_action(event.throw) 
             return if $game_temp.can_throw == false
             $game_temp.pickup_lock_time = event.jump_count 
             $game_temp.throw_position[0] = event.x
             $game_temp.throw_position[1] = event.y
             event.throw_active = false
             $game_temp.pickup_lock = false           
             Audio.se_play("Audio/SE/" + THROW_SE, 100, 100)
             @character_name = $game_temp.character_pre_name
             break
          end         
      end    
      if event == nil
         $game_map.reset_pickup
      end       
  end
  
  #--------------------------------------------------------------------------
  # ● Check Event Pickup
  #--------------------------------------------------------------------------
  def check_event_pickup(triggers)
      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 event.throw > 0 and not jumping?
             event.throw_active = true
             $game_temp.pickup_lock = true
             event.jump(0,0)
             $game_temp.pickup_lock_time = event.jump_count 
             event.x = $game_player.x
             event.y = $game_player.y
             Audio.se_play("Audio/SE/" + PICK_UP_SE, 100, 100)
             $game_temp.character_pre_name = @character_name
             make_pickup_pose
             break
          end
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Img Pickup Exist?
  #--------------------------------------------------------------------------
  def img_pickup_exist?
      Cache.character(@character_name + "_Pickup") rescue return false
  end 
    
  #--------------------------------------------------------------------------
  # ● Make Pickup Pose
  #--------------------------------------------------------------------------  
  def make_pickup_pose
      @character_name = @character_name + "_Pickup" if img_pickup_exist?
  end
  
end

#==============================================================================
# ■ Sprite_Character
#==============================================================================
class Sprite_Character < Sprite_Base  
  include MOG_PICK_THROW
  
  #--------------------------------------------------------------------------
  # ● Update X Effects
  #--------------------------------------------------------------------------              
  alias mog_pickup_update_position update_position
  def update_position
      mog_pickup_update_position
      update_pickup_position if can_pickup_position?
  end  

  #--------------------------------------------------------------------------
  # ● Can Pickup Position
  #--------------------------------------------------------------------------        
  def can_pickup_position?
      return false if $game_temp.pickup_lock_time > 0
      return false if $game_temp.pickup_lock == false      
      return false if @character.throw_active == false      
      return false if @character.is_a?(Game_Player)
      return false if @character.jumping?
      return true
  end    
  
  #--------------------------------------------------------------------------
  # ● Update Pickup Position
  #--------------------------------------------------------------------------      
  def update_pickup_position
      @character.x = $game_player.x
      @character.y = $game_player.y
      @character.bush_depth = 0
      unless @character.direction_fix
          @character.direction = $game_player.direction
      end
      self.x = $game_player.screen_x 
      self.y = $game_player.screen_y - SPRITE_POSITION 
      self.z = $game_player.screen_z + 1
  end
end  

#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
  
  #--------------------------------------------------------------------------
  # ● Call Menu
  #--------------------------------------------------------------------------    
  alias mog_pickup_call_menu call_menu
  def call_menu
      return if $game_temp.pickup_lock == true 
      mog_pickup_call_menu
  end
  
end

#==============================================================================
# ■ Game Interpreter
#==============================================================================
class Game_Interpreter

  #--------------------------------------------------------------------------
  # ● Command 352
  #--------------------------------------------------------------------------      
  alias mog_pickup_command_352 command_352
  def command_352
      return if $game_temp.pickup_lock == true 
      mog_pickup_command_352
  end
     
end     

#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
  
 #--------------------------------------------------------------------------
 # ● Setup
 #--------------------------------------------------------------------------  
  alias mog_pickup_setup setup
  def setup(map_id)
      mog_pickup_setup(map_id)
      reset_pickup
  end  
  
 #--------------------------------------------------------------------------
 # ● Reset Pickup
 #--------------------------------------------------------------------------  
  def reset_pickup
      for i in $game_map.events.values 
          if i.throw_active
             i.throw_active = false
             i.moveto($game_player.x,$game_player.y)
             i.jump(0,0)             
             i.move_backward
             $game_player.character_name = $game_temp.character_pre_name
          end   
      end  
      $game_temp.pickup_lock_time = 0
      $game_temp.pickup_lock = false
  end  
end  

$mog_rgss3_pickup_and_throw = true


Moderação: Coloquei o script nem "code". Assim a mensagem não fica enorme.


[Anexo excluído pelo administrador]

Dá dando erro na linha 348...
♦Gifts♦


Todos continuam a dar erro  :=p:
♦Gifts♦

Tu baixou a Demo??
Na hora de testar deu erro?
Você importou o grafico do char?

Se tu baixou a demo testou a mesmo e não deu erro, provavelmente seja alguma coisa no seu projeto que ta bugando tudo, algum script talvez :=|:

Deve ser erro do meu projeto...
Imagem do erro anexada...

[Anexo excluído pelo administrador]
♦Gifts♦

Tenta colar o Script a sima dos outros, ou cola ele como o ultimo antes do main, não sei se isso tem alguma influencia, tenho quase certeza que nao vai mudar nada mas..
Se isso não der certo só alguém que manja de Scripts pra te ajudar nessa :ok:

Citação de: Magic D online 04/10/2015 às 14:13
Tenta colar o Script a sima dos outros, ou cola ele como o ultimo antes do main, não sei se isso tem alguma influencia, tenho quase certeza que nao vai mudar nada mas..
Se isso não der certo só alguém que manja de Scripts pra te ajudar nessa :ok:

Opa! Deu certo!  :ok:
Podem trancar  :lock:
♦Gifts♦