Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


2 participantes

    Liberar Movimentos enquanto se faz Magia

    Kotol
    Kotol
    Moderador Local
    Moderador Local


    Mensagens : 77
    Créditos : 17

    Liberar Movimentos enquanto se faz Magia Empty Liberar Movimentos enquanto se faz Magia

    Mensagem por Kotol Seg Jan 30, 2017 8:01 pm

    Não lembro de ver este tutorial por aqui, já que não tem como pesquisar, e eu li pessoas procurando esta modificação na seção de "Dúvidas e pedidos", então vamos lá.

    Começaremos pelo server.

    Server~Side


    Primeiramente, abra seu "Server.Vbp", e então, em "ModHandleData", na sub:

    Código:
    Sub HandlePlayerMove(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)

    Procure por:

    Código:
    ' Prevent player from moving if they have casted a spell
        If TempPlayer(Index).spellBuffer.Spell > 0 Then
            Call SendPlayerXY(Index)
            Exit Sub
        End If

    E substitua por:

    Código:
    ' Prevent player from moving if they have casted a spell
        'If TempPlayer(Index).spellBuffer.Spell > 0 Then
        '    Call SendPlayerXY(Index)
        '    Exit Sub
        'End If
        'Não apague, só comente, não se sabe quando vai precisar

    Basicamente, esta parte é a do servidor que checa se você se move enquanto tenta ou faz magia.
    OBS: Deixe sempre alguma modificação de sua máquina em comentários, nunca se sabe quando você irá precisar. Nunca apague um sistema (se possível).


    Hora do "Client.Vbp".

    Client~Side

    Agora, em "ModGameLogic", na "Sub":

    Código:
    Public Sub CastSpell(ByVal spellslot As Long)

    Procure por:

    Código:
    If PlayerSpells(spellslot) > 0 Then
            If GetTickCount > Player(MyIndex).AttackTimer + 1000 Then
                If Player(MyIndex).Moving = 0 Then
                    Set Buffer = New clsBuffer
                    Buffer.WriteLong CCast
                    Buffer.WriteLong spellslot
                    SendData Buffer.ToArray()
                    Set Buffer = Nothing
                    SpellBuffer = spellslot
                    SpellBufferTimer = GetTickCount
                Else
                    Call AddText("Cannot cast while walking!", BrightRed)
                End If
            End If
        Else
            Call AddText("No spell here.", BrightRed)
        End If

    E substitua por:

    Código:
    If PlayerSpells(spellslot) > 0 Then
            If GetTickCount > Player(MyIndex).AttackTimer + 1000 Then
                'If Player(MyIndex).Moving = 0 Then
                    Set Buffer = New clsBuffer
                    Buffer.WriteLong CCast
                    Buffer.WriteLong spellslot
                    SendData Buffer.ToArray()
                    Set Buffer = Nothing
                    SpellBuffer = spellslot
                    SpellBufferTimer = GetTickCount
                'Else
                '    Call AddText("Cannot cast while walking!", BrightRed)
                'End If
            End If
        Else
            Call AddText("No spell here.", BrightRed)
        End If

    Agora, ainda em "ModGameLogic", procure por esta "Function":

    Código:
    Function CanMove() As Boolean

    E nesta function, procure por isto:

    Código:
    ' Make sure they haven't just casted a spell
        If SpellBuffer > 0 Then
            CanMove = False
            Exit Function
        End If

    E substitua por isto:

    Código:
    ' Make sure they haven't just casted a spell
        'If SpellBuffer > 0 Then
        '    CanMove = False
        '    Exit Function
        'End If

    E está feito!
    Amigos, por que não simplesmente apagar o que está escrito ao invés de comentar?
    Simples, muita das vezes, os sistemas que vocês querem, são simplesmente já existentes na própria máquina que vocês programam....isso mesmo!
    Basta saber onde fazer as modificações.

    Por exemplo, a E.O vem com esse sistema de magias bloqueando o jogador de movimentar quando está fazendo uma magia.
    Pense se você quisesse fazer um sistema de criação de itens, o english "Crafting System".

    Sistemas que existem das magias:
    Código:
    Cliente: Barra visual de casting = copiar e modificar para o craft time
    Cliente:"bloqueio visual" o jogador de não andar com mensagem = o mesmo para o craft
    Server: Bloqueio real de movimento na magia = bloqueia andar enquanto crafta
    Server: Restrições de duplo conjuramento enquanto se conjura uma magia = restringir duplo casting de craft
    Server: Sistema de Chance de critico = Adaptar pra fazer a probabilidade
    Server: Sistema de evoluir nivel jogador = adaptar pra nivel de craft
    Server: sistema de dar itens = adaptar pra ser o item dado quando craft
    E muitos outros...

    Resumindo, raramente algo será criado originalmente se for se ver a fundo. Na maioria das coisas da programação, ironicamente "nada se cria, tudo se transforma" , e o poder de transformar é nosso, aproveitem isso!
    Motodark
    Motodark
    Ocasional
    Ocasional


    Mensagens : 169
    Créditos : 5

    Liberar Movimentos enquanto se faz Magia Empty Re: Liberar Movimentos enquanto se faz Magia

    Mensagem por Motodark Ter Jan 31, 2017 3:34 am

    tipo, quando você mata boss ou player de one da aquela bugadas, o player fica pulando. Isso resolve?
    Kotol
    Kotol
    Moderador Local
    Moderador Local


    Mensagens : 77
    Créditos : 17

    Liberar Movimentos enquanto se faz Magia Empty Re: Liberar Movimentos enquanto se faz Magia

    Mensagem por Kotol Sex Fev 03, 2017 12:41 am

    É bem provável que não seja esse o motivo.
    Veja se quando você não mata o jogador, não esta tendo nenhum "SendPlayerData" vindo do servidor, pois isso na maioria dos casos, atualiza o jogador em sua posição, e isso gera esses pequenos travamentos e bug temporário na movimentação. Isso ocorre, pois quem programou, não separou a data dos dados gerais, dos que atualizam e setam o "X", "Y" e o mapa do jogador.
    Enfim, veja as condições que existem quando se mata o jogador, se houver algo que mande atualizar o jogador no mapa com suas posições, pode ser isso, pois neste sistema, não se relaciona nada a este bug que você indicou, mas que eu já vi acontecendo.

    Conteúdo patrocinado


    Liberar Movimentos enquanto se faz Magia Empty Re: Liberar Movimentos enquanto se faz Magia

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Qui Nov 21, 2024 10:20 pm