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

Activar evento com outro evento

Iniciado por RajaNaga, 05/09/2021 às 20:46

05/09/2021 às 20:46 Última edição: 13/09/2021 às 18:17 por Gabriel
Olá, venho perguntar se é possível ativar e desativar um evento através de outro evento infinitamente. Bom, dito assim toda a gente me diz que sim mas o que eu estou tentando fazer é o seguinte, no meu mapa tenho um inimigo que se move só para cima e para baixo e gostaria que os os tiles ao lado do inimigo infligissem dano no personagem ao serem tocados ou seja, os tiles do lado esquerdo, inimigo no centro e os tiles do lado direito. À medida que o inimigo se move vai ativando os tiles de dano na mesma linha do inimigo e desativando os outros. Quando o inimigo for derrotado todos os tiles de dano ficam desativados.
No geral o meu objetivo com isso é fazer com que toda a sprite do inimigo inflija dano no personagem visto que estou usando um sprite de boss no mapa que ocupa 3 tiles de largura. Penso que seja possível através de coordenadas mas não sei muito bem por onde começar a criar esses eventos. Será que me podem dar uma ajuda?
Obrigado.

Deixe-me ver se entendi. O seu inimigo está se movendo em um corredor central, mas tem dois braços ocupando os tiles laterais que devem causar dano no personagem quando tocados. Tipo um motor com duas serras, correto? Você não precisa de vários eventos pra isso. Faça o seguinte:

Separe três variáveis: duas para as coordenadas x e y do jogador e uma para o eixo x do inimigo.
Em uma primeira condição, verifique se o eixo x do jogador corresponde ao eixo x do inimigo. Caso sim, significa que eles estão na mesma linha.
Dentro desta condição, crie mais duas que analisam o eixo y do jogador. Se ele for igual às colunas y pré-definidas (já que o inimigo não se move lateralmente), aplique o dano. Lembrando que os valores fixos serão y do inimgo -1 e y do inimigo +1.
E pronto. Tentando ilustrar, seria mais ou menos o seguinte:

<variável_a> = Coordenada[X] do Herói
<variável_b> = Coordenada[Y] do Herói
<variável_c> = Coordenada[X] do Inimigo
<variável_d> = Coordenada[Y] do Inimigo
Se variável_a for igual à variável_b:
    Se variável_b for igual à (variável_d + 1):
        Causar dano ao Herói
    Se variável_b for igual à (variável_d - 1):
        Causar dano ao Herói
Esperar 1 Frame #Comando pra evitar que o evento trave o jogo.


Pode parecer confuso, mas é porque é mais complicad explicar sem o RPG Maker. No entanto são comandos simples rodando em um evento definido como "Processo Paralelo". Pode até ser o próprio evento do inimigo.


Obrigado Corvo mais uma vez por responder, e sim, você entendeu direitinho, é isso mesmo que quero fazer. Já estive experimentando e ainda não funciona direito, o que acontece é que logo que o personagem entra no eixo Y dá logo dano independentemente da posição X e se eu alinhar o personagem no eixo X nada acontece. O personagem continua a passar pelos "braços" do inimigo. Vou postar uns prints para ver o que está errado.https://imgur.com/a/ExWqTFo

A sua variável do Eixo Y do inimigo também pegou o Eixo Y do Jogador, daí ela é sempre verdadeira. Além disso, na verificação dos braços você precisa colocar na condição o valor do braço já alterado. Tipo, se o eixo Y do braço for igual a (InimigoY - 1), este é o valor que você compara com a posição do jogador. Pra ficar um pouco mais organizado, você pode usar a opção "Script" no menu de condições de fazer direto. Basta colocar a expressão:

$game_variables[ID] == $game_variables[ID] - 1
Onde ID são os números das variáveis a serem comparadas. No teu caso, a primeira teria o ID 6 e a segunda, 4. Para comparar os eixos Y.


Para referência dos comandos com variáveis, veja isto.

Obrigado pela dica do script call mas, lamento dizer que quando olho para script é como olhar para texto chinês, (sem ofensa) gostaria muito de aprender a usar script call mas é tanta letra e numero e mais símbolo misturado que me deixa um pouco confuso.
Quanto ao evento, embora ainda não tenha conseguido o efeito desejado, já vejo algo a funcionar visto que agora já dá dano no eixo X onde esta o braço esquerdo do inimigo, contudo, o braço direito continua passável não sei bem porquê. Já que falei em dano, o dano que configurei foi -150HP cada vez que o personagem ou o inimigo se tocam, o meu personagem tem 300HP no momento e quando entro na zona do braço esquerdo levo de dano 300HP, também não sei a causa disso.  Outro problema que acontece é quando o jogador fica parado em frente ao inimigo, ele simplesmente passa por cima (se for um braço) ou para (se for no centro), gostaria que o personagem levasse dano de todos os "lados" do inimigo independentemente de quem toca em quem. Se contornar o inimigo e me aproximar pelas costas não leva qualquer dano mesmo que entre na zona do braço esquerdo.
Se precisar posso fazer um pequeno vídeo pra poder ver melhor o que está causando tudo isso.
Obrigado mais uma vez e desculpa por estar tomando seu tempo com isso.

Citação de: RajaNaga online 06/09/2021 às 13:29
Obrigado pela dica do script call mas, lamento dizer que quando olho para script é como olhar para texto chinês, (sem ofensa) gostaria muito de aprender a usar script call mas é tanta letra e numero e mais símbolo misturado que me deixa um pouco confuso.

No começo é assim mesmo. Syureri fez uma série de aulas bem simplificadas. São vídeos curtos e práticos, dá pra aprender partindo do zero. Se quiser conferir, aqui está.

Citação de: RajaNaga online 06/09/2021 às 13:29[..]
Já que falei em dano, o dano que configurei foi -150HP cada vez que o personagem ou o inimigo se tocam, o meu personagem tem 300HP no momento e quando entro na zona do braço esquerdo levo de dano 300HP, também não sei a causa disso.

Essa verificação é muito rápida. Acontece que assim que os comandos de dano são executados, o evento já vai passar pra próxima verificação. Se o herói ainda estiver lá, outro dano será causado. Isto é mais um motivo para o comando "Esperar" no final, garantir que o jogador terá saído do caminho - e as variáveis sejam atualizadas.

Citação de: RajaNaga online 06/09/2021 às 13:29
  Outro problema que acontece é quando o jogador fica parado em frente ao inimigo, ele simplesmente passa por cima (se for um braço) ou para (se for no centro), gostaria que o personagem levasse dano de todos os "lados" do inimigo independentemente de quem toca em quem. Se contornar o inimigo e me aproximar pelas costas não leva qualquer dano mesmo que entre na zona do braço esquerdo.

Aqui já precisaria de testes pra avaliar. Coisas que podem estar acontecendo: a posição do personagem é atualizada pelo jogo no momento em que ele passa de um tile pro outro. Normalmente, definir uma variável como posição atual - comando usado no seu código - resolve. Mas se está causando problemas, teria ao menos de ver o evento em execução pra ter alguma ideia.

Pra tomar dano por todos os lados, você poderia passar estes comandos para outro evento e configurar neste aí só que acontece quando o jogador recebe o dano. Daí marcaria ele pra "Ao tocar Evento", permitindo que ele se ative sempre que o evento toar o jogador por qualquer lado. Porém, não funciona com gráficos maiores que o tile padrão. A solução mais fácil seria ter três eventos deste se movendo em sincronia: os braços e o centro. Tecnicamente é uma boa opção porque te dá controle individual sobre cada parte, caso seja possível interagir com elas. Daria pra quebrar um lado, por exemplo.

E não se preocupe, o fórum está aí pra ajudar. o/

Olá, peço desculpa a demora mas não consegui vir ao forum mais cedo, contudo como tinha dito deixo aqui um pequeno video dos meus problemas relacionados com alguns eventos.
Queria realçar que adicionei outros eventos no mesmo mapa e também não consigo fazer com que eles funcionem. Como são baseados em coordenadas (ou penso eu que sejam) achei por bem mostrar para verem o que acham.
Video:

Print dos eventos: https://imgur.com/a/8g3fZjW

Citação de: Corvo online 05/09/2021 às 21:30

Se variável_a for igual à variável_b:
    Se variável_b for igual à (variável_d + 1):
        Causar dano ao Herói
    Se variável_b for igual à (variável_d - 1):
        Causar dano ao Herói

Desculpa o duplo post mas tenho tentado fazer isto mas não sei como... pode me explicar como coloco o "-1" ou o "+1" na condição? Se eu colocar em uma condição variavel_b = à variavel_d, a caixa de inserção de valor da constante fica em cinzento (apagada) e não posso adicionar nenhum valor. A unica opção que conheço é controlar variavel e aí sim colocar um adicionar ou subtrair. Será que é isso?

Citação de: RajaNaga online 08/09/2021 às 21:31
Desculpa o duplo post mas tenho tentado fazer isto mas não sei como... pode me explicar como coloco o "-1" ou o "+1" na condição?
[...]

Para colocar o "+/-1" direto na condição você pode: usar as condições por script, como sugeri ali em cima, ou colocar os valores fixos. Se o inimigo não se move horizontalmente, você já sabe qual o oeixo Y dele. Nestas verificações é só colocar o número fixo que é igual à posição mais e menos uma coluna.

Estou testando umas gambiarras pra conseguir rodar o MV aqui e testar o funcionamento do inimigo, comento o que encontrar assim que tiver um tempinho pra olhar isso. o/

Obrigado Corvo pela ajuda, fico aguardando então, contudo eu fiz o scriptcall como você falou na condição e nada mudou, continua tudo na mesma.
https://imgur.com/a/8kcZ9O9

09/09/2021 às 10:59 #10 Última edição: 09/09/2021 às 11:09 por Corvo
A síntaxe de chamada de variáveis no MV é diferente. Seu evento está considerando as condições como sendo sempre falsas por isso. Tu até deveria receber um erro aí, porque o comando pode até crashar alguma coisa. Só que é javascript, né. Se depender da colaboração dele, pode esquecer.  :derp: O correto, se não me engano, seria:

$gameVariables.value(ID)


Pois bem. Eu consegui abrir o programa, mas não testar o jogo. Não usei nenhuma chamada por script para facilitar, mas isso me obrigou a usar duas novas variáveis pros braços do inimigo. Coisa que você pode pular se souber o número das colunas anteriormente, usando o valor fixo. A disposição dos eventos é a seguinte, o inimigo simplesmente se move para baixo e para cima na mesma linha:



O evento do inimigo está configurado pra causar dano ao toque:



E o evento à esquerda é quem verifica o dano dos braços. Eu me esqueci de colocar, mas é necessário ter um comando Wait no fim do evento, depois das condições, ou no começo, antes das variáveis. Pode ser um wait(10) ou qualquer valor pequeno, abaixo de 15. Se executar o evento sem este comando ele provavelmente vai travar o jogo num loop infinito.



Não sei se funcionou.  :shrug:
Já a forma como você causa dano no inimigo não tem relação com estes eventos, deve funcionar normalmente.

Funcionou amigo, muito obrigado pela ajuda, ainda que no inicio não estava funcionando mas ao testar notei que dava o dano na frente e nas costas do inimigo aí resolvi inverter os eixos Y pelos eixos X nas variaveis e nas condições e funcionou direitinho. Estou bastante empolgado pois já andava travado com estes eventos á quase uma semana. Agora só falta dar dano no inimigo, vamos ver se vou conseguir essa daí sozinho.
Mais uma vez Corvo, muito obrigado pelo apoio e pelo tempo que perdeu pra me ajudar, tudo de bom pra você. :ok:
Se quiser ver como ficou vou deixar aqui a imagem do evento.
https://imgur.com/a/OKIzvIa