Forums » RPG MAKER 2K e 2003

Colando 4 Players no jogo + Demo - MRM Recomenda #71

    • 683 posts
    14 de maio de 2015 23:09:53 ART

    Imagem Postada


    Opa. Que tal aprender como colocar num jogo 4 players? É muito simples. O código está mais otimizado e possui outra novidade! Foi feito, na maior parte, pelo DestinyScript. Ou seja, o seu trabalho será quase nulo. Eu tinha feito mais complexo, de um modo em que o NPC dava uma resposta para cada posição de cada herói. Mas como ninguém vai fazer isso, deixei uma resposta única. Qualquer dúvida é só responder nesse tópico! Não espero que ninguém me mande MP porque a dúvida de um pode ser a mesma dúvida do coleguinha ao lado ou de todos. Espero que gostem!


    Imagem Postada


    Irei explicar como fazer por aqui. Vamos por parte. Ok? Como eu não tenho imagens suficientes disponíveis para categorizar cada tópico, farei isso a grosso modo. PS: Não preciso nem falar que você precisa ter um conhecimento básico para que possa entender essa explicação. Inclusive eu irei evitar ensinar coisas óbvias. Por exemplo, 'abra o RPG Maker'. 
    Mas, antes, o que é ter um conhecimento básico? É saber mexer com switches além de abrir baús. Mexer com variáveis além de alterar a fala dos personagens. Mexer com condições. O seu conhecimento em DestinyScript deve ser um pouco maior do que 0 para que possa entender e modificar o sistema, posteriormente.


    Primeiro Passo



    [É IMPORTANTE QUE OS 4 PRIMEIROS EVENTOS SEJAM OS DOS PLAYERS!]

    • Crie 4 eventos com gráficos pré determinados ( quaisquer ). Eles serão os players. Crie um NPC.

    • Crie um evento em Início Automático com os seguintes comandos:
    - Set Chara Movement (1P) Move Speed UP // Faça isso para os demais players.
    - Disable Menu
    - Clear Timer Events

    Se tudo deu certo, deverá ficar assim:

    Spoiler 
     





    Segundo Passo

    • Crie um evento em processo paralelo, abaixo do herói, que atribuirá o movimento aos 4 Players.

    Dentro dos comandos do evento, cole os seguintes códigos:

    [spoiler=Movimento 1P]

    $ if(Keyboard.GetKeyState(VK_W))Command.MoveEvent(1, MC_STEPUP); endif;if(Keyboard.GetKeyState(VK_D))Command.MoveEvent(1, MC_STEPRIGHT); endif;if(Keyboard.GetKeyState(VK_S))Command.MoveEvent(1, MC_STEPDOWN); endif;if(Keyboard.GetKeyState(VK_A))Command.MoveEvent(1, MC_STEPLEFT); endif;

    [/spoiler]
    [spoiler=Movimento 2P]

    $ if(Keyboard.GetKeyState(VK_G))Command.MoveEvent(2, MC_STEPUP); endif;if(Keyboard.GetKeyState(VK_N))Command.MoveEvent(2, MC_STEPRIGHT); endif;if(Keyboard.GetKeyState(VK_B))Command.MoveEvent(2, MC_STEPDOWN); endif;if(Keyboard.GetKeyState(VK_V))Command.MoveEvent(2, MC_STEPLEFT); endif;

    [/spoiler]
    [spoiler=Movimento 3P]

    $ if(Keyboard.GetKeyState(VK_UP))Command.MoveEvent(3, MC_STEPUP); endif;if(Keyboard.GetKeyState(VK_RIGHT))Command.MoveEvent(3, MC_STEPRIGHT); endif;if(Keyboard.GetKeyState(VK_DOWN))Command.MoveEvent(3, MC_STEPDOWN); endif;if(Keyboard.GetKeyState(VK_LEFT))Command.MoveEvent(3, MC_STEPLEFT); endif;

    [/spoiler]
    [spoiler=Movimento 4P]

    $ if(Keyboard.GetKeyState(VK_NUMPAD5))Command.MoveEvent(4, MC_STEPUP); endif;if(Keyboard.GetKeyState(VK_NUMPAD3))Command.MoveEvent(4, MC_STEPRIGHT); endif;if(Keyboard.GetKeyState(VK_NUMPAD2))Command.MoveEvent(4, MC_STEPDOWN); endif;if(Keyboard.GetKeyState(VK_NUMPAD1))Command.MoveEvent(4, MC_STEPLEFT); endif;

    [/spoiler]


    É muito melhor separá-los. Dá para copiar e colar numa boa. Ou seja, menos trabalho. (y)

    Nota: Eu estou usando 4 NPC's para tomarem o papel de 4 jogadores. O hero eu deixei de lado por opção mesmo. Porque eu sou ousado. =)



    Terceiro Passo

    • Esse terceiro passo é para consertar o bug presente no movimento. Repara que quando você tenta olhar numa direção e há um NPC do seu lado você não consegue virar o Player. Essa medida serve para consertar isso. Um efeito bacana ( bug ) que isso gera é que dá para andar e 'deslizar' com o player. Muito interativo. Recomendo.

    • Crie um outro evento em Processo Paralelo também abaixo do herói.

    E, nele, coloque os seguintes códigos:

    [spoiler=Consertar 1P]

    $ if(Keyboard.GetKeyState(VK_W))Event[1].DirLook=Dir_UP; endif;if(Keyboard.GetKeyState(VK_D))Event[1].DirLook=Dir_RIGHT; endif;if(Keyboard.GetKeyState(VK_S))Event[1].DirLook=Dir_DOWN; endif;if(Keyboard.GetKeyState(VK_A))Event[1].DirLook=Dir_LEFT; endif;

    [/spoiler]
    [spoiler=Consertar 2P]

    $ if(Keyboard.GetKeyState(VK_G))Event[2].DirLook=Dir_UP; endif;if(Keyboard.GetKeyState(VK_N))Event[2].DirLook=Dir_RIGHT; endif;if(Keyboard.GetKeyState(VK_B))Event[2].DirLook=Dir_DOWN; endif;if(Keyboard.GetKeyState(VK_V))Event[2].DirLook=Dir_LEFT; endif;

    [/spoiler]
    [spoiler=Consertar 3P]

    $ if(Keyboard.GetKeyState(VK_UP)!=0)Event[3].DirLook=Dir_UP; endif;if(Keyboard.GetKeyState(VK_RIGHT)!=0)Event[3].DirLook=Dir_RIGHT; endif;if(Keyboard.GetKeyState(VK_DOWN))Event[3].DirLook=Dir_DOWN; endif;if(Keyboard.GetKeyState(VK_LEFT))Event[3].DirLook=Dir_LEFT; endif;

    [/spoiler]
    [spoiler=Consertar 4P]

    $ if(Keyboard.GetKeyState(VK_NUMPAD5))Event[4].DirLook=Dir_UP; endif;if(Keyboard.GetKeyState(VK_NUMPAD3))Event[4].DirLook=Dir_RIGHT; endif;if(Keyboard.GetKeyState(VK_NUMPAD2))Event[4].DirLook=Dir_DOWN; endif;if(Keyboard.GetKeyState(VK_NUMPAD1))Event[4].DirLook=Dir_LEFT; endif;

    [/spoiler]



    Quarto Passo

    Agora é a hora de criar os comandos no NPC.

    Bem, a lógica agora é criar inúmeras posições. Vamos verificar em qual tile o player está em relação ao NPC, além de saber para qual direção ele olha. Inclusive se ele apertará a tecla de comando. Nota: Cada player tem sua tecla de ação. Para cada direção dos 4 Players, haverá um valor para uma única variável.

    Cole esses códigos na página do NPC que deve estar em Processo Paralelo!

    [spoiler=Verificar 1P]

    $ if(Event[1].X ==Event[THIS].X &&Event[1].Y ==Event[THIS].Y -1&&Event[1].DirLook==Dir_DOWN&&Keyboard.GetKeyState(VK_Z)) v[1]=4; endif;if(Event[1].X ==Event[THIS].X +1&&Event[1].Y ==Event[THIS].Y &&Event[1].DirLook==Dir_LEFT&&Keyboard.GetKeyState(VK_Z)) v[1]=3; endif;if(Event[1].X ==Event[THIS].X -1&&Event[1].Y ==Event[THIS].Y &&Event[1].DirLook==Dir_RIGHT&&Keyboard.GetKeyState(VK_Z)) v[1]=2; endif;if(Event[1].X ==Event[THIS].X &&Event[1].Y ==Event[THIS].Y +1&&Event[1].DirLook==Dir_UP&&Keyboard.GetKeyState(VK_Z)) v[1]=1; endif;

    [/spoiler]
    [spoiler=Verificar 2P]

    $ if(Event[2].X ==Event[THIS].X &&Event[2].Y ==Event[THIS].Y -1&&Event[2].DirLook==Dir_DOWN&&Keyboard.GetKeyState(VK_SPACE)) v[1]=4; endif;if(Event[2].X ==Event[THIS].X +1&&Event[2].Y ==Event[THIS].Y &&Event[2].DirLook==Dir_LEFT&&Keyboard.GetKeyState(VK_SPACE)) v[1]=3; endif;if(Event[2].X ==Event[THIS].X -1&&Event[2].Y ==Event[THIS].Y &&Event[2].DirLook==Dir_RIGHT&&Keyboard.GetKeyState(VK_SPACE)) v[1]=2; endif;if(Event[2].X ==Event[THIS].X &&Event[2].Y ==Event[THIS].Y +1&&Event[2].DirLook==Dir_UP&&Keyboard.GetKeyState(VK_SPACE)) v[1]=1; endif;

    [/spoiler]
    [spoiler=Verificar 3P]

    $ if(Event[3].X ==Event[THIS].X &&Event[3].Y ==Event[THIS].Y -1&&Event[3].DirLook==Dir_DOWN&&Keyboard.GetKeyState(VK_RETURN)) v[1]=4; endif;if(Event[3].X ==Event[THIS].X +1&&Event[3].Y ==Event[THIS].Y &&Event[3].DirLook==Dir_LEFT&&Keyboard.GetKeyState(VK_RETURN)) v[1]=3; endif;if(Event[3].X ==Event[THIS].X -1&&Event[3].Y ==Event[THIS].Y &&Event[3].DirLook==Dir_RIGHT&&Keyboard.GetKeyState(VK_RETURN)) v[1]=2; endif;if(Event[3].X ==Event[THIS].X &&Event[3].Y ==Event[THIS].Y +1&&Event[3].DirLook==Dir_UP&&Keyboard.GetKeyState(VK_RETURN)) v[1]=1; endif;

    [/spoiler]
    [spoiler=Verificar 4P]

    $ if(Event[4].X ==Event[THIS].X &&Event[4].Y ==Event[THIS].Y -1&&Event[4].DirLook==Dir_DOWN&&Keyboard.GetKeyState(VK_NUMPAD0)) v[1]=4; endif;if(Event[4].X ==Event[THIS].X +1&&Event[4].Y ==Event[THIS].Y &&Event[4].DirLook==Dir_LEFT&&Keyboard.GetKeyState(VK_NUMPAD0)) v[1]=3; endif;if(Event[4].X ==Event[THIS].X -1&&Event[4].Y ==Event[THIS].Y &&Event[4].DirLook==Dir_RIGHT&&Keyboard.GetKeyState(VK_NUMPAD0)) v[1]=2; endif;if(Event[4].X ==Event[THIS].X &&Event[4].Y ==Event[THIS].Y +1&&Event[4].DirLook==Dir_UP&&Keyboard.GetKeyState(VK_NUMPAD0)) v[1]=1; endif;

    [/spoiler]

    Volto a falar que o bom de estarem separados é que você pode copiar e colar numa boa!

    Agora está na hora de criar as condições. 

    [spoiler=NPC gera fala única para todos os players]Basta dar um valor único à uma variável qualquer. E mudar o código no Destiny Script, além de mudar nas condições.. Dessa maneira:  Imagem Postada[/spoiler]



    Se algo ficou mal explicado, terei o maior prazer em responder aqui no tópico. Mas se não foi, não se preocupe que a demo falará por si só.

    Imagem Postada


    Número de:

    - Switches = 1
    - Condições = 4 ( De acordo com cada NPC )
    - Variáveis = 1 
    - Itens necessários = 0
    - Eventos comuns = 0
    - Controles = Explicado na demo.



    Imagem Postada


    http://www.youtube.com/watch?v=AHYCjWNZdGQ&feature=youtu.be

    Imagem Postada


    Clique aqui para fazer o download. Hospedado pelo Media Fire.


    [center]Imagem Postada

     


    Créditos a Avenger_B7 por ter criado o tutorial e o sistema.