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

Script de plataforma do Khas - Problema com colisões ~~ VXA

Iniciado por MayLeone, 17/12/2012 às 11:30

17/12/2012 às 11:30 Última edição: 04/01/2013 às 17:19 por MayLeone
Então meus LINDJOS scripters, hoje quero encher um pouco vocês.
Minha dúvida é a seguinte...

Temos um script do João Neto, que era para XP e o Raizen converteu para VXA, o script de colisão entre eventos!
Eu gostaria de saber se tem como fazer o evento colidir com o personagem, e não com outro evento. Se sim, qual seria o comando? O code para um evento colidir com o outro seria esse: colisao(id_do_obstáculo,id_do_objeto,1)
Em id do objeto seria o personagem, certo? E qual seria então?

O script:

=begin
#######################################################
Sistema de Colisão integrado aos Eventos
Este Script foi encontrado no Site www.mundorpgmaker.com
E foi Desenvolvido por JoãoNeto - jneto@centershop.com.br
#######################################################
# Vantagens em relação ao método por eventos:
* Não necessita de declaração de variáveis
* pode ser usado por TODOS os eventos do jogo ao mesmo tempo.
#######################################################
Este sistema permite verificar a colisão de eventos,
seja com sobreposição(um sobre o outro) ou aproximação
(um do lado do outro).

Coloque este Script acima do Main apenas.

Para usar, O evento obstáculo deve ser um processo
paralelo, com uma condição -> Quarta aba -> Script:
#####
colisao(id_do_obstáculo,id_do_objeto,tipo_de_verificação)
#####

Sendo que:

*id_do_obstáculo - O ID do objeto que conterá a condição
*id_do_objeto = O ID do objeto que colidirá com o obstáculo
*tipo_de_verificação =  Se for 0(zero) será de sobreposição
( um sobre o outro), se for 1 será de aproximação( um ao lado
do outro).

De brinde, uma declaração para facilitar encontrar "este objeto"
Basta declarar "this_id", onde seria o ID do objeto, no caso
do sistema acima, o obstáculo. Pode ser usado por qualquer evento
para qualquer outra coisa, como uma verificação, assim:

$game_map.events[this_id].direction - retorna a direção
atual deste evento.

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

class Game_Interpreter
  def this_id
    return @event_id.to_i
  end
  def colisao(obstaculo=@event_id,objeto=@event_id,tipo = 0)
    obst = $game_map.events[obstaculo]
    objt = $game_map.events[objeto]
    case tipo
      when 0 # um emcima do outro
        if obst.x == objt.x and obst.y == objt.y
          return true
        else
          return false
        end
      when 1 # um do lado do outro, não importa o lado
        objt_direc = $game_map.events[objeto].direction
        obj_x = objt.x + (objt_direc == 6 ? 1 : objt_direc == 4 ? -1 : 0)
        obj_y = objt.y + (objt_direc == 2 ? 1 : objt_direc == 8 ? -1 : 0)
        if obst.x == obj_x and obst.y == obj_y
          return true
        else
          return false
        end
    end
  end
end


Lembrando que estou usando o script de plataforma do Khas: http://arcthunder.com/br-arc-engine/

Estou sem RMXP, mas tenta isso daqui.
no lugar do ID do evento, basta colocar 0 para que seja considerado o personagem, veja se funciona, ainda tenho que baixar o RMXP aqui x_x
=begin
#######################################################
Sistema de Colisão integrado aos Eventos
Este Script foi encontrado no Site www.mundorpgmaker.com
E foi Desenvolvido por JoãoNeto - jneto@centershop.com.br
#######################################################
# Vantagens em relação ao método por eventos:
* Não necessita de declaração de variáveis
* pode ser usado por TODOS os eventos do jogo ao mesmo tempo.
#######################################################
Este sistema permite verificar a colisão de eventos,
seja com sobreposição(um sobre o outro) ou aproximação
(um do lado do outro).

Coloque este Script acima do Main apenas.

Para usar, O evento obstáculo deve ser um processo
paralelo, com uma condição -> Quarta aba -> Script:
#####
colisao(id_do_obstáculo,id_do_objeto,tipo_de_verificação)
#####

Sendo que:

*id_do_obstáculo - O ID do objeto que conterá a condição
*id_do_objeto = O ID do objeto que colidirá com o obstáculo
*tipo_de_verificação =  Se for 0(zero) será de sobreposição
( um sobre o outro), se for 1 será de aproximação( um ao lado
do outro).

De brinde, uma declaração para facilitar encontrar "este objeto"
Basta declarar "this_id", onde seria o ID do objeto, no caso
do sistema acima, o obstáculo. Pode ser usado por qualquer evento
para qualquer outra coisa, como uma verificação, assim:

$game_map.events[this_id].direction - retorna a direção
atual deste evento.

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

class Game_Interpreter
  def this_id
    return @event_id.to_i
  end
  def colisao(obstaculo=@event_id,objeto=@event_id,tipo = 0)
    obstaculo == 0 ? obst = $game_player : obst = $game_map.events[obstaculo]
    objeto == 0 ? objt = $game_player : objt = $game_map.events[objeto]
    case tipo
      when 0 # um emcima do outro
        if obst.x == objt.x and obst.y == objt.y
          return true
        else
          return false
        end
      when 1 # um do lado do outro, não importa o lado
        objt_direc = $game_map.events[objeto].direction
        obj_x = objt.x + (objt_direc == 6 ? 1 : objt_direc == 4 ? -1 : 0)
        obj_y = objt.y + (objt_direc == 2 ? 1 : objt_direc == 8 ? -1 : 0)
        if obst.x == obj_x and obst.y == obj_y
          return true
        else
          return false
        end
    end
  end
end

Eu não sou scripter, muito menos mexi no VXA. Nem baixei ele.
Mas o pouco que sei, é que o id 0 é o player. Tipo onde é posto do id do evento, tenta por 0 ou -1 e vê o que acontece.

Edit:
Quando comecei a criar o tópico o Raizen não havia postado ainda. Sorry.

Então minhas paçocas! Eu fiz exatamente isso, e não funcionou, mas não culpo ninguém, esse script deve ter alguma incompatibilidade com o script de plataforma do Khas.
Vamos esquecer esse script, pois não vai dar certo mesmo...

Então, eu queria arrumar um jeito de fazer com que meu personagem ao encostar no inimigo perca vida, e etc...
Vamos analisar a situação:

Eu coloco o comando 'ao tocar evento' (super necessário para o evento funcionar corretamente) só que se o inimigo encostar no personagem, ele irá ignora-lo, e irá voltar ao seu percurso normal, e não irá executar os comandos de eventos que eu havia programado, no caso retirar uma vida.
Os comandos só serão ativados, se eu encostar no inimigo, e ir à direção dele, mas se eu ficar parada na frente dele, nada ocorrerá.
Claro que isso é muito ruim, que graça tem o inimigo só matar a gente se estivermos andando, e parados não?

Pra quem não entendeu, irei deixar o download uma demo para vocês: http://www.mediafire.com/?f8z39vmav0b5s5p
Primeiro, fiquem à frente do evento(inimigo) e vejam... Nada acontece! Depois, tentem andar na direção dele e encosta-lo. Aí sim tudo funciona, o que não é legal.

Se puderem também, gostaria de saber como desabilita temporariamente o sistema de ''pular sobre as paredes'', através de uma switch, ou coisa do tipo.

Claro que eu perguntaria pro próprio Khas, mas ele sumiu.

Obrigada desde já.

Citação de: MayLeone online 18/12/2012 às 17:59
Então minhas paçocas! Eu fiz exatamente isso, e não funcionou, mas não culpo ninguém, esse script deve ter alguma incompatibilidade com o script de plataforma do Khas.
Vamos esquecer esse script, pois não vai dar certo mesmo...

Então, eu queria arrumar um jeito de fazer com que meu personagem ao encostar no inimigo perca vida, e etc...
Vamos analisar a situação:

Eu coloco o comando 'ao tocar evento' (super necessário para o evento funcionar corretamente) só que se o inimigo encostar no personagem, ele irá ignora-lo, e irá voltar ao seu percurso normal, e não irá executar os comandos de eventos que eu havia programado, no caso retirar uma vida.
Os comandos só serão ativados, se eu encostar no inimigo, e ir à direção dele, mas se eu ficar parada na frente dele, nada ocorrerá.
Claro que isso é muito ruim, que graça tem o inimigo só matar a gente se estivermos andando, e parados não?

Pra quem não entendeu, irei deixar o download uma demo para vocês: http://www.mediafire.com/?f8z39vmav0b5s5p
Primeiro, fiquem à frente do evento(inimigo) e vejam... Nada acontece! Depois, tentem andar na direção dele e encosta-lo. Aí sim tudo funciona, o que não é legal.

Se puderem também, gostaria de saber como desabilita temporariamente o sistema de ''pular sobre as paredes'', através de uma switch, ou coisa do tipo.

Claro que eu perguntaria pro próprio Khas, mas ele sumiu.

Obrigada desde já.
Estou com o mesmo problema. Além disso, se eu pular na cabeça do inimigo, invés de perder uma vida, eu perco todas, enquanto se eu encostar nele pelos lados, acontece tudo normalmente...
Venha conferir!



O jeito é alguém informar isso ao Khas/Kbç@ e torcer para ele concertar o quanto antes, se num me engano eu tb tinha visto outro bug do sistema dele la no youtube, acho que o script dele num é muito estável ainda, vamos esperar torcendo pra ele concertar rápido  :¬¬:! ^^

Citação de: dodoop online 04/01/2013 às 15:10
O jeito é alguém informar isso ao Khas/Kbç@ e torcer para ele concertar o quanto antes, se num me engano eu tb tinha visto outro bug do sistema dele la no youtube, acho que o script dele num é muito estável ainda, vamos esperar torcendo pra ele concertar rápido  :¬¬:! ^^
Esse é um problema, não vejo ele faz um bom tempo :/, vou ver se hoje de noite consigo concertar issâe .-.

Muito obrigada, Raizenzudo! Só queria poder esbarrar no evento e fazer com que algo ocorra, sem ter que andar na direção dele, ficar simplesmente parada e ...PAH!

Que precisa de Raizen não.
Arrumei para você já.
http://www.mediafire.com/download.php?5o7z6bhodygq6w9
O script do Khas não usa sistemas normais de coordenadas e portanto o script de colisão usado não funciona.
Adicionei o script de colisao modificado, para funcionar com o sistema de coordenadas usado, observe o evento do caranguejo e verá como eu fiz.

04/01/2013 às 16:44 #11 Última edição: 04/01/2013 às 16:57 por MayLeone
Santa mãe de Deus! Muito obrigada, Thiago! Valeu mesmo, salvou o meu mini-projeto XD
Seu lindo.  :T.T:

+gold


@edit:
Só uma coisa: Eu coloquei dois eventos no mapa, um consegue ter os comandos de colisões e o outro não... mesmo eu alterando a ID na condição... e agora?

04/01/2013 às 17:01 #12 Última edição: 04/01/2013 às 17:09 por thiago_d_d
Tem como upar demo?
Testei colocar dois eventos, e deu certo.

EDIT
Você colocou o evento em processo paralelo?

Aqui: http://www.mediafire.com/?xeukvcl61c3qjac

Qual é a ID do outro evento, pra ele funcionar independente do primeiro?

@edit:
sim, claro rs

Bom o erro está na condição do segundo.
Era para ser colisao(0,2,0) em vez de colisao(2,1,0).
Se liga hem May, beber bebidas alcoolicas faz mal para o figado.
Ta, zueira.