Suporte ao desenvolvimento de jogos!


    [Pedido] - Mostrar HP de outro player

    Compartilhe
    avatar
    ~Felipe
    Semi-Experiente
    Semi-Experiente

    Mensagens : 85
    Créditos : 10

    [Pedido] - Mostrar HP de outro player

    Mensagem por ~Felipe em Seg Abr 30, 2018 8:15 pm

    Iae Galera
    Como eu faço para poder colocar para mostrar o hp dos outros players. pois quando entra em pvp não tem como saber se ele ta ou não morrendo.
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 728
    Créditos : 125

    Re: [Pedido] - Mostrar HP de outro player

    Mensagem por Profane ~ em Seg Abr 30, 2018 11:41 pm

    Ahm c;c

    Vamos ver se dá certo /o/

    Servidor,

    Procura pela:
    Código:
    Sub SendVital(ByVal index As Long, ByVal Vital As Vitals)

    No Fim dela tem:

    Código:
    SendDataTo index, Buffer.ToArray()

    troca por

    Código:
    SendDataToMap GetPlayerMap(index), Buffer.ToArray()

    Com isso o valor vai estar sendo enviado para todo o mapa.

    Agora no Cliente,

    Procura por..

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

    Na EO 2.0 É assim:

    Código:
    Private Sub HandlePlayerHp(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
    Dim Buffer As clsBuffer

        ' If debug mode, handle error then exit out
        If Options.Debug = 1 Then On Error GoTo errorhandler
       
        Set Buffer = New clsBuffer
        Buffer.WriteBytes Data()
        Player(MyIndex).MaxVital(Vitals.HP) = Buffer.ReadLong
        Call SetPlayerVital(MyIndex, Vitals.HP, Buffer.ReadLong)

        If GetPlayerMaxVital(MyIndex, Vitals.HP) > 0 Then
            'frmMain.lblHP.Caption = Int(GetPlayerVital(MyIndex, Vitals.HP) / GetPlayerMaxVital(MyIndex, Vitals.HP) * 100) & "%"
            frmMain.lblHP.Caption = GetPlayerVital(MyIndex, Vitals.HP) & "/" & GetPlayerMaxVital(MyIndex, Vitals.HP)
            ' hp bar
            frmMain.imgHPBar.width = ((GetPlayerVital(MyIndex, Vitals.HP) / HPBar_Width) / (GetPlayerMaxVital(MyIndex, Vitals.HP) / HPBar_Width)) * HPBar_Width
        End If

        ' Error handler
        Exit Sub
    errorhandler:
        HandleError "HandlePlayerHP", "modHandleData", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Sub
    End Sub

    Deixe assim:

    Código:
    Private Sub HandlePlayerHp(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
    Dim Buffer As clsBuffer

        ' If debug mode, handle error then exit out
        If Options.Debug = 1 Then On Error GoTo errorhandler
       
        Set Buffer = New clsBuffer
        Buffer.WriteBytes Data()
        Player(Index).MaxVital(Vitals.HP) = Buffer.ReadLong
        Call SetPlayerVital(Index, Vitals.HP, Buffer.ReadLong)

        If Index = MyIndex Then 'Sou eu?
            If GetPlayerMaxVital(MyIndex, Vitals.HP) > 0 Then
                'frmMain.lblHP.Caption = Int(GetPlayerVital(MyIndex, Vitals.HP) / GetPlayerMaxVital(MyIndex, Vitals.HP) * 100) & "%"
                frmMain.lblHP.Caption = GetPlayerVital(MyIndex, Vitals.HP) & "/" & GetPlayerMaxVital(MyIndex, Vitals.HP)
                ' hp bar
                frmMain.imgHPBar.width = ((GetPlayerVital(MyIndex, Vitals.HP) / HPBar_Width) / (GetPlayerMaxVital(MyIndex, Vitals.HP) / HPBar_Width)) * HPBar_Width
            End If
        End If

        ' Error handler
        Exit Sub
    errorhandler:
        HandleError "HandlePlayerHP", "modHandleData", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Sub
    End Sub

    Se notar a parte de cima que era "MyIndex" (EU) foi trocado por Index, onde poderá recepcionar outros jogadores.. assim o cliente passaria a receber o HP atual de outros jogadores.

    E ali embaixo uma verificação se Index = MyIndex, para poder fazer a movimentação das Barras.
    Creio que possa mudar um pouco em outras engines.

    Vamos que ainda não acabou /o/

    Ainda no Cliente, procura por:

    Código:
    Private Sub BltBars()

    Dentro dela.. vamos procurar a área de minha "barra", que é essa aqui:

    Código:
    ' draw own health bar
        If GetPlayerVital(MyIndex, Vitals.HP) > 0 And GetPlayerVital(MyIndex, Vitals.HP) < GetPlayerMaxVital(MyIndex, Vitals.HP) Then
            ' lock to Player
            tmpX = GetPlayerX(MyIndex) * PIC_X + Player(MyIndex).XOffset + 16 - (sWidth / 2)
            tmpY = GetPlayerY(MyIndex) * PIC_X + Player(MyIndex).YOffset + 35
         
            ' calculate the width to fill
            barWidth = ((GetPlayerVital(MyIndex, Vitals.HP) / sWidth) / (GetPlayerMaxVital(MyIndex, Vitals.HP) / sWidth)) * sWidth
         
            ' draw bar background
            With sRECT
                .top = sHeight * 1 ' HP bar background
                .Left = 0
                .Right = .Left + sWidth
                .Bottom = .top + sHeight
            End With
            Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
         
            ' draw the bar proper
            With sRECT
                .top = 0 ' HP bar
                .Left = 0
                .Right = .Left + barWidth
                .Bottom = .top + sHeight
            End With
            Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
        End If

    Essa área é responsável por mostrar meu HP.

    Vamos Mudar isso... para isso aqui..

    Código:
    ' draw own health bar
        For i = 1 To MAX_PLAYERS
            If GetPlayerMap(i) = GetPlayerMap(MyIndex) Then
                If GetPlayerVital(i, Vitals.HP) > 0 And GetPlayerVital(i, Vitals.HP) < GetPlayerMaxVital(i, Vitals.HP) Then
                    ' lock to Player
                    tmpX = GetPlayerX(i) * PIC_X + Player(i).XOffset + 16 - (sWidth / 2)
                    tmpY = GetPlayerY(i) * PIC_X + Player(i).YOffset + 35
                 
                    ' calculate the width to fill
                    barWidth = ((GetPlayerVital(i, Vitals.HP) / sWidth) / (GetPlayerMaxVital(i, Vitals.HP) / sWidth)) * sWidth
                 
                    ' draw bar background
                    With sRECT
                        .top = sHeight * 1 ' HP bar background
                        .Left = 0
                        .Right = .Left + sWidth
                        .Bottom = .top + sHeight
                    End With
                    Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
                 
                    ' draw the bar proper
                    With sRECT
                        .top = 0 ' HP bar
                        .Left = 0
                        .Right = .Left + barWidth
                        .Bottom = .top + sHeight
                    End With
                    Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
                End If
            End If
        End If

    O For passará por todos os players que estarão no seu mapa atualizando o HP Barra (HP que fica embaixo ou em cima /o/ do Player) atualizando os valores.

    Se sua engine foi dx8 vai mudar pouca coisa.. a lógica é a mesma.

    Att e Bjus;


    _________________
    "If you don't belong here, just build a place where you do."
    avatar
    ~Felipe
    Semi-Experiente
    Semi-Experiente

    Mensagens : 85
    Créditos : 10

    Re: [Pedido] - Mostrar HP de outro player

    Mensagem por ~Felipe em Ter Maio 01, 2018 12:31 am



    Infelizmente não foi. Ele acaba setando o hp do outro jogador na minha barra. tanto a que está em cima do personagem e a que está na picture la em cima junto com a mana.
    observe que até a quantidade de hp fica igual
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 728
    Créditos : 125

    Re: [Pedido] - Mostrar HP de outro player

    Mensagem por Profane ~ em Ter Maio 01, 2018 2:27 am

    Bem o sistema eu não tinha aberto para testar.

    Mas ao abrir ~

    #Edit - > https://imgur.com/a/Ptn49w2
    Link da Img



    Faltando apenas colocar o SendVitals, creio que precise apenas de ajustes ;c Mas que está chegando está ;c

    Acho que precisa ajustar ai na sua dx8 /o/ ou caso sua Skywire (creio que seja skywire ai a sua) tenha algo a mais.

    Não abri uma para olhar.

    Pode usar a tese para dumpar o Pacote com outro nome e enviar uma atualização rotineira também.. ou mesmo apenas local em relação ao cara que você feriu. 

    Basta usar a mesma visão do NPC Atacando Player que é enviado o PlayerVital, fazer isso no PlayerAtacandoPlayer o/.

    #Edit² - Amanha vejo de fazer a edição numa 3.0 e posto aqui na aldeia.


    _________________
    "If you don't belong here, just build a place where you do."
    avatar
    ~Felipe
    Semi-Experiente
    Semi-Experiente

    Mensagens : 85
    Créditos : 10

    Re: [Pedido] - Mostrar HP de outro player

    Mensagem por ~Felipe em Ter Maio 01, 2018 3:15 am

    Eu uso a EO2.0, refiz os códigos e nada
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 728
    Créditos : 125

    Re: [Pedido] - Mostrar HP de outro player

    Mensagem por Profane ~ em Ter Maio 01, 2018 8:03 am



    _________________
    "If you don't belong here, just build a place where you do."

    Conteúdo patrocinado

    Re: [Pedido] - Mostrar HP de outro player

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Sab Nov 17, 2018 1:23 am