Suporte ao desenvolvimento de jogos!


    [Prof ~] Sistema de Herói (Guardião)

    Compartilhe
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 664
    Créditos : 114

    [Prof ~] Sistema de Herói (Guardião)

    Mensagem por Profane ~ em Seg Mar 02, 2015 9:47 pm

    Olá Coleguinhas da Aldeia. 

    Venho trazer um sistema pedido, creio que muitos que tem uma certa noção de Vb desenvolveriam de outras formas, mas estou disponibilizando a minha maneira.

    Vamos lá =P

    #### O que este sistema faz?
    Ao um Player Normal matar um Player que está sendo considerado PK (Player Killer), ele será considerado um Player Hero.

    Estarei adicionando no final uma condição para que: Caso o Player Hero assassine um Player Normal, ele seja morto pelo sistema. Além de que, outra condição para que caso o Player seja Hero, ele não poder ser atacado por Player Normais e nem outros Heros.

    #### O que será necessário? 

     - Visual Basic
     - E acesso ao source de sua engine =P


    Server Side

    01 - ModPlayer

    Procure por :

    Código:
    Sub SetPlayerPK(ByVal index As Long, ByVal PK As Long)
        Player(index).PK = PK
    End Sub

    Abaixo deste End Sub adicione:

    Código:
    Function GetPlayerGuardian(ByVal index As Long) As Long

        If index < 1 Or index > MAX_PLAYERS Then Exit Function
        GetPlayerGuardian = Player(index).Guardian
    End Function

    Sub SetPlayerGuardian(ByVal index As Long, ByVal Guardian As Long)
        Player(index).Guardian = Guardian
    End Sub

    02 - ModPlayer

    Procure por:

    Código:
    Sub OnDeath(ByVal index As Long)

    No final desta Sub, antes do End Sub adicione:

    Código:
      'Caso o jogador que morra seja um Guardian - Retirar o Guardian do mesmo.
            If GetPlayerGuardian(index) = YES Then
                Call SetPlayerGuardian(index, NO)
                Call SendPlayerData(index)
            End If

    03 - ModCombat

    Procure pela por essa Função:

    Código:
    Function CanPlayerAttackPlayer

    No final dela, antes do End Function adicione :

       'Player Normal não atacar um Guardião
       If GetPlayerPK(attacker) = NO And GetPlayerGuardian(victim) Then
           Call PlayerMsg(attacker, "Você não pode ferir um Guardian", BrightRed)
           Exit Function
       End If


    OBS -> Apenas adicione isto se desejar que Player's Normais não consigam ferir um Guardian(Hero) ou o que for chamar esse "Status".

    03 -ModCombat

    Procure por esta Sub:

    Código:
    Sub PlayerAttackPlayer

    Nesta sub procure por isso :
    Código:
       If GetPlayerPK(victim) = NO Then
                If GetPlayerPK(attacker) = NO Then
                    Call SetPlayerPK(attacker, YES)
                    Call SendPlayerData(attacker)
                    Call GlobalMsg(GetPlayerName(attacker) & " has been deemed a Player Killer!!!", BrightRed)
                End If

            Else
                Call GlobalMsg(GetPlayerName(victim) & " has paid the price for being a Player Killer!!!", BrightRed)
            End If

    Substitua esta parte por :

    Código:

            If GetPlayerPK(victim) = NO Then
                If GetPlayerPK(attacker) = NO Then
                    Call SetPlayerPK(attacker, YES)
                    Call SendPlayerData(attacker)
                    Call GlobalMsg(GetPlayerName(attacker) & " quebrou a conduta dos Players, Agora é um Player Killer [ PK ]. Precisa ser Purificado.", BrightRed)
                End If
                Else
                Call GlobalMsg(GetPlayerName(victim) & " pagou o preço por ser um Player Killer!", BrightRed)
                If GetPlayerPK(victim) = YES Then
                    Call SetPlayerGuardian(attacker, YES)
                    Call GlobalMsg(GetPlayerName(attacker) & " se tornou um Player Guardian!", BrightBlue)
                End If
                End If
                
            If GetPlayerGuardian(attacker) = YES And GetPlayerPK(victim) = NO Then
                    Call SetPlayerPK(attacker, YES)
                    Call SetPlayerGuardian(attacker, NO)
                    Call GlobalMsg("[Guardian]" & GetPlayerName(attacker) & " corrompeu-se assassinando um Player Verde.Foi declarado um Traidor e eliminado pelo Sistema.", BrightRed)
                    Call OnDeath(attacker)
                End If
                
            If GetPlayerGuardian(attacker) = YES And GetPlayerPK(victim) = YES Then
                Call GlobalMsg("[Guardian]" & GetPlayerName(attacker) & " mandou para a Cadeia o [PK]" & GetPlayerName(victim), BrightBlue)
            End If
            
            If GetPlayerPK(attacker) = YES And GetPlayerGuardian(victim) = YES Then
                Call GlobalMsg("[PK]" & GetPlayerName(attacker) & " assassinou o [Guardian]" & GetPlayerName(victim), BrightRed)
            End If
            
            If GetPlayerPK(attacker) = YES And GetPlayerPK(victim) = NO Then
                Call GlobalMsg("[PK]" & GetPlayerName(attacker) & " assassinou " & GetPlayerName(victim), BrightRed)
            End If
            
            Call OnDeath(victim)

    Seja capaz de editar as Calls de Msg, coloque baseado em seu jogo; As minhas são decorrentes ao tema do meu Jogo.


    04 - ModServerTCP

    Procure por isso:
    Código:
        buffer.WriteLong GetPlayerPK(index)

    Abaixou adicione:

    Código:
        buffer.WriteLong GetPlayerGuardian(index)

    No mesmo ModServerTcp e.e Procure por:

    Código:
        buffer.WriteLong GetPlayerPK(index)

    (Sim é a mesma coisa, porém são para troca de msgs...) Apenas adicione:

    Código:
        buffer.WriteLong GetPlayerGuardian(index)

    Agora no Sub SayMsg_Global abaixo do:

    Código:
        buffer.WriteLong GetPlayerPK(index)

    Adicione:
    Código:
        buffer.WriteLong GetPlayerGuardian(index)


    05 - ModTypes

    Procure por:
    Código:
    Private Type PlayerRec

    Nesta Private procure por :

    Código:
        PK As Byte

    Abaixo adicione:

    Código:
        Guardian As Byte


    Uff ~ Server Pronto. Hora do Cliente.

    Client Side ~

    01 - ModHandleData

    Procure por:
    Código:
        Call SetPlayerPK(I, buffer.ReadLong)

    Abaixo adicione:

    Código:
        Call SetPlayerGuardian(I, buffer.ReadLong)

    Procure pro isso:

    Código:
    Private Sub HandleSayMsg

    Nesta Sub localize:
    Código:
    Dim PK As Long

    Abaixo dela coloque:

    Código:
    Dim Guardian As Long

    Na mesma Sub procure por:

    Código:
        PK = buffer.ReadLong

    Abaixo adicione:

    Código:
        Guardian = buffer.ReadLong

    Na mesma sub procure isso:

    Código:
       ' Check access level
        If PK = NO Then
            Select Case Access
                Case 0
                    colour = White
                Case 1
                    colour = DarkGrey
                Case 2
                    colour = Cyan
                Case 3
                    colour = BrightGreen
                Case 4
                    colour = Yellow
            End Select
        Else
            colour = BrightRed
     
    abaixo adicione:

    Código:
     If Guardian = YES Then
                    colour = Blue
            End If
        End If


    02 - ModText


    Procure por esta Sub:

    Código:
    Public Sub DrawPlayerName


    Procure por:
    Código:
    If GetPlayerPK(Index) = NO Then

    Acima disso adicione:

    Código:
      If GetPlayerGuardian(Index) = YES Then
                Color = BrightBlue
                
                Else
                Color = BrightRed

    Lembre-se que no final do Select Case;  possível que tenha que add um End If =P 

    03 - ModTypes


    Procure por:

    Código:
    Private Type PlayerRec


    Nesta Private abaixo do :

    Código:
        PK As Byte

    Abaixo adicione:

    Código:
        Guardian As Byte


    04 - ModDatabase

    Procure por esta Sub:

    Código:
    Sub SetPlayerPK

    Nesta sub procure por o End Sub =P E adicione isso: 

    Código:
    Function GetPlayerGuardian(ByVal Index As Long) As Long
        ' If debug mode, handle error then exit out
        If Options.Debug = 1 Then On Error GoTo ErrorHandler

        If Index > MAX_PLAYERS Then Exit Function
        GetPlayerGuardian = Player(Index).Guardian
        
        ' Error handler
        Exit Function
    ErrorHandler:
        HandleError "GetPlayerGuardian", "modDatabase", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Function
    End Function

    Sub SetPlayerGuardian(ByVal Index As Long, ByVal Guardian As Long)
        ' If debug mode, handle error then exit out
        If Options.Debug = 1 Then On Error GoTo ErrorHandler

        If Index > MAX_PLAYERS Then Exit Sub
        Player(Index).Guardian = Guardian
        
        ' Error handler
        Exit Sub
    ErrorHandler:
        HandleError "SetPlayerGuardian", "modDatabase", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Sub
    End Sub



    Finalmente uff... Bom se você colocou tudo certinho, nos devidos locais, irá ocorrer tudo ok. 

    Lembre-se de dar make em um Backup, e outra coisa:

    -> Necessário deletar todas as Contas de jogadores.




    Não precisa dar Crédito porque Crédito não diz que você é capaz ou um bom membro. 

    Desenvolvido por mim. Na verdade qualquer um poderia desenvolver, é uma coisa básica, apenas adicionar uma variação de PK. '-' Mas está ai com condições feitas por mim, e desenvolvidas por mim. 

    Estou a disposição para dar Support e Ajudar em modificações. Basta postar aqui ou Mandar PM. Até mesmo ajuda em outros sistemas. 

    ATT ~
    avatar
    Dooolly
    Moderador Global
    Moderador Global

    Medalhas :
    Mensagens : 1225
    Créditos : 137

    Ficha do personagem
    Nível: 1
    Vida:
    30/30  (30/30)
    Energia:
    0/0  (0/0)

    Re: [Prof ~] Sistema de Herói (Guardião)

    Mensagem por Dooolly em Seg Mar 02, 2015 10:42 pm

    Muito bom profane, está muito bom...
    mas eu tenho uma dica, pq não utiliza a variável PK que já existe na estrutura do player, em vez de criar uma com o nome guardian, é só por o valor dela assim (PK = 0 : Player Normal, PK = 1 : Assassino, PK = 3 : Herói) acho que ficaria melhor, mas a sua maneira está muito boa, eu faria assim tb, hj não pois busco uma maneira que fique mais leve, mas como dica eu aconselho você procurar reutilizar oque já existe na engine..

    +1 Credito, Muitos irão usá-lo tenho certeza, continue assim.
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 664
    Créditos : 114

    Re: [Prof ~] Sistema de Herói (Guardião)

    Mensagem por Profane ~ em Seg Mar 02, 2015 10:49 pm

    Vlw Dooodly, estou a disposição =P Programo mais em Forum's de outras linguas, mas é sempre bom ajudar nossos pequenos Br's <3

    Att - Reforçando, qualquer falha em compilação, postem que podemos ajudar. =P


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

    Mensagens : 168
    Créditos : 4

    Re: [Prof ~] Sistema de Herói (Guardião)

    Mensagem por Motodark em Ter Mar 03, 2015 4:21 pm

    Profane muito bom, mas estou com outro problema quando o serve atualiza a cor do player some, e queria também como colocar cores no decorrer de kill um Guardian mata 300 PK a cor do nick muda para Branco. peço ajuda nessas duas perguntas obrigado +1 cred
    avatar
    Pablo Kawan
    Experiente
    Experiente

    Mensagens : 485
    Créditos : 158

    Re: [Prof ~] Sistema de Herói (Guardião)

    Mensagem por Pablo Kawan em Qua Mar 04, 2015 7:35 pm

    parece o antigo sistema de pk da minha ex-engine, só que o meu era mais complexo rs


    _________________
    Assinatura removida pela Staff
    ^ Tenho nova, surprise

    Conteúdo patrocinado

    Re: [Prof ~] Sistema de Herói (Guardião)

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Sab Abr 21, 2018 12:49 am