MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!

Participe do fórum, é rápido e fácil

MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!
MMORPG Brasil
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ranking configurável

4 participantes

Ir para baixo

Ranking configurável Empty Ranking configurável

Mensagem por boasfesta Sáb 02 Fev 2013, 15:05

Olá,
Eu havia postado esse tutorial no fórum .net, estou agora postando aqui.
Alguns alegam ter bugs mas comigo não houve problema, em caso de bugs me avisem que irei corrigir.
O sistema é bem leve e foi feito com a intenção de não prejudicar a velocidade do servidor de forma alguma, aqui vamos nós.

Primeiramente, por que configurável?
Eu fiz esse sistema para ser versátil, ele não tem limite de rank, já que você pode alterar quantos jogadores terão no ranking em apenas uma linha, e altera se ele é level, reset, guild, em apenas uma função (Veja abaixo).

Client~Side e Server~Side

modConstants
Procure por:

Código:
Public Const MAX_PARTY_MEMBERS

Abaixo adicione (Aqui você edita a quantidade maxima de jogadores no ranking):

Código:
Public Const MAX_RANK = 20

modTypes
Procure por:

Código:
Public Party(1 To MAX_PARTYS) As PartyRec

Abaixo adicione:

Código:
Public Ranking(1 To MAX_RANK) As RankingRec
Public TempRank(1 To MAX_RANK) As RankingRec

No final do modulo adicione:

Código:
Type RankingRec
Name As String * 20
Level As Long
End Type

modEnumerations
Procure por:

Código:
    ' Make sure SMSG_COUNT is below everything else

Acima adicione:

Código:
SRank

Procure por:

Código:
    ' Make sure CMSG_COUNT is below everything else

Acima adicione:

Código:
CRank

Server~Side

modHandleData
Procure por:

Código:
    HandleDataSub(CPartyLeave) = GetAddress(AddressOf HandlePartyLeave)

Abaixo adicione:

Código:
HandleDataSub(CRank) = GetAddress(AddressOf HandleRank)

No final do modulo adicione:

Código:
Private Sub HandleRank(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Call SendRank(Index)
End Sub

modServerTcp
No final do modulo adicione:

Código:
Sub SendRank(ByVal Index As Long)
Dim Buffer As clsBuffer
    Set Buffer = New clsBuffer
    Buffer.WriteLong SRank
    Dim i As Long
    For i = 1 To MAX_RANK
    if Ranking(i).Name <> vbNullString then
    Buffer.WriteString Ranking(i).Name
    else
    Buffer.WriteString "Nenhum jogador"
    end if
    Buffer.WriteLong Ranking(i).Level
    Next i
    SendDataTo Index, Buffer.ToArray
    Set Buffer = Nothing
End Sub

modGameLogic
No final do modulo adicione (Aqui você altera que tipo de ranking é, como padrão é level):

Código:
Sub CheckRanking(ByVal Index As Long)
Dim i As Byte
Dim n As Long
Dim o As Long
Dim Level As Long
Dim Nome As String
   
    Level = GetPlayerLevel(Index)
    Nome = GetPlayerName(Index)
   
    If GetPlayerAccess(Index) > 0 Then Exit Sub

    For i = 1 To MAX_RANK
        If Ranking(i).Level < Level Then
            If Not GetPlayerName(Index) = Ranking(i).Name Then
                TempRank(i).Name = Ranking(i).Name
                TempRank(i).Level = Ranking(i).Level
   
                For n = i To MAX_RANK
                    If n = MAX_RANK Then Exit For
                    Ranking(n).Level = TempRank(n).Level
                    Ranking(n).Name = TempRank(n).Name
                Next n

                Ranking(i).Level = Level
                Ranking(i).Name = Nome

                For n = i To MAX_RANK
                    If Ranking(n).Name = Nome Then
                        For o = n To MAX_RANK
                            Ranking(o).Name = Ranking(o).Name
                            Ranking(o).Level = Ranking(o).Level
                        Next o
                    End If
                Next n
               
                Exit For
            End If
        End If
    Next i
   
    Call SaveRanking
    Call SendRank(Index)
End Sub

modPlayer
Na Sub CheckPlayerLevelUp procure por:

Código:
    If level_count > 0 Then
        If level_count = 1 Then
            'singular
            GlobalMsg GetPlayerName(Index) & " ganhou " & level_count & " level!", Brown
        Else
            'plural
            GlobalMsg GetPlayerName(Index) & " ganhou " & level_count & " leveis!", Brown
        End If
End if

E em baixo adicione:

Código:
Call CheckRanking(Index)

modDataBase
No final do modulo adicione:

Código:
Sub SaveRanking()
Dim i As Long
For i = 1 To MAX_RANK
Call PutVar(App.Path & "\Ranking.ini", Val(i), "Nome", Ranking(i).Name)
Call PutVar(App.Path & "\Ranking.ini", Val(i), "Level", Val(Ranking(i).Level))
Next i
End Sub

Sub LoadRanking()
Dim i As Long
For i = 1 To MAX_RANK
Ranking(i).Name = GetVar(App.Path & "\Ranking.ini", Val(i), "Nome")
Ranking(i).Level = Val(GetVar(App.Path & "\Ranking.ini", Val(i), "Level"))
Next i
End Sub

modGeneral
No final da Private Sub LoadGameData, antes do End Sub, adicione:

Código:
Call SetStatus("Loading ranking...")
Call LoadRanking

Client~Side

modHandleData
Procure por:

Código:
    HandleDataSub(SPartyVitals) = GetAddress(AddressOf HandlePartyVitals)

Abaixo adicione:

Código:
HandleDataSub(SRank) = GetAddress(AddressOf HandleRank)

E no final do modulo adicione:

Código:
Sub HandleRank(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Dim buffer As clsBuffer
Set buffer = New clsBuffer
buffer.WriteBytes Data()
frmMain.lstRank.Clear
Dim i As Long
Dim Name As String
Dim Level As Long
For i = 1 To MAX_RANK
Name = Trim(buffer.ReadString)
Level = buffer.ReadLong
frmMain.lstRank.AddItem i & " Level:" & Level & " / Name:" & Name
Next i
End Sub

modClientTcp
No final do modulo adicione:

Código:
Sub SendRank()
Dim Buffer As clsBuffer
   
    Set Buffer = New clsBuffer
        Buffer.WriteLong CRank
        SendData Buffer.ToArray
    Set Buffer = Nothing
End Sub


modInput
Procure por:

Código:
Case "/help"
                    Call AddText("Social Commands:", HelpColor)
                    Call AddText("'msghere = Broadcast Message", HelpColor)
                    Call AddText("-msghere = Emote Message", HelpColor)
                    Call AddText("!namehere msghere = Player Message", HelpColor)
                    Call AddText("Available Commands: /info, /who, /fps, /fpslock", HelpColor)


E abaixo adicione:

Código:
Case "/top"
                    SendRank
                    If frmMain.picRank.Visible Then
                        frmMain.lstRank.Visible = False
                    Else
                        frmMain.lstRank.Visible = True
                    End If


Na frmMain crie uma listBox com as seguintes configurações:

Name: lstRank
Visible = False

Créditos: boasfesta

Prints
Ranking configurável Semttulolyt

Obs: Como padrão o ranking se inicia como todos os level como 0, isso é normal não é um bug e ele se corrige conforme os jogadores ingressam no ranking.

Qualquer bug relate nos comentários.

Aviso: este tutorial é exclusivo da MMORPG BR e não é permitido postar ele em qualquer outro fórum!


Última edição por boasfesta em Sáb 02 Fev 2013, 17:04, editado 1 vez(es)
boasfesta
boasfesta
Membro Sênior
Membro Sênior

Mensagens : 292

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por dazateam Sáb 02 Fev 2013, 16:19

gostei mais aqui da um erro tenta resolve ai :/

Ranking configurável Capturaraj


dazateam
dazateam
Membro Vitalicio
Membro Vitalicio

Mensagens : 690

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por boasfesta Sáb 02 Fev 2013, 16:28

Client~Side e Server~Side

modConstants
Procure por:

Código:
Public Const MAX_PARTY_MEMBERS

Abaixo adicione (Aqui você edita a quantidade maxima de jogadores no ranking):

Código:
Public Const MAX_RANK = 20

Preste atenção nesta parte, diz CLIENTE E SERVER Wink
boasfesta
boasfesta
Membro Sênior
Membro Sênior

Mensagens : 292

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por dazateam Sáb 02 Fev 2013, 16:43

tah agora eu fiz d geito q vc falo e deu esse erro

Ranking configurável Capturardd

dazateam
dazateam
Membro Vitalicio
Membro Vitalicio

Mensagens : 690

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por majenkyoo Sáb 02 Fev 2013, 16:47

tenta por mais um End If antes do End Sub
majenkyoo
majenkyoo
Membro Junior
Membro Junior

Mensagens : 69

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por dazateam Sáb 02 Fev 2013, 16:51

não deu
dazateam
dazateam
Membro Vitalicio
Membro Vitalicio

Mensagens : 690

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por boasfesta Sáb 02 Fev 2013, 17:04

Desculpe coloquei um end if a menos, o código correto é esse

Código:
If level_count > 0 Then
        If level_count = 1 Then
            'singular
            GlobalMsg GetPlayerName(Index) & " ganhou " & level_count & " level!", Brown
        Else
            'plural
            GlobalMsg GetPlayerName(Index) & " ganhou " & level_count & " leveis!", Brown
        End If
End if
boasfesta
boasfesta
Membro Sênior
Membro Sênior

Mensagens : 292

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por Snake Sáb 02 Fev 2013, 17:11

Como resolve isso aqui mano: ???

Ranking configurável Semttulowsi
Snake
Snake
Membro
Membro

Mensagens : 108

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por boasfesta Sáb 02 Fev 2013, 17:32

Client~Side e Server~Side

modEnumerations
Procure por:

Código:
    ' Make sure SMSG_COUNT is below everything else

Acima adicione:

Código:
SRank

Procure por:

Código:
    ' Make sure CMSG_COUNT is below everything else

Acima adicione:

Código:
CRank

Preste atenção nesta parte, diz CLIENTE E SERVER Wink
boasfesta
boasfesta
Membro Sênior
Membro Sênior

Mensagens : 292

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por Snake Sáb 02 Fev 2013, 17:47

Essa parte de CLIENT E SERVE eu fiz certo coloquei os códigos no Client e no server, mas ta aparecendo esse erro agora:

Ranking configurável Semttuloaxa

Como resolve???? Vlw

Edit:

Ei pow no ModTypes do client não tem esse código: Public Party(1 To MAX_PARTYS) As PartyRec
Snake
Snake
Membro
Membro

Mensagens : 108

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por dazateam Sáb 02 Fev 2013, 18:22

Snake escreveu:Essa parte de CLIENT E SERVE eu fiz certo coloquei os códigos no Client e no server, mas ta aparecendo esse erro agora:

Ranking configurável Semttuloaxa

Como resolve???? Vlw

Edit:

Ei pow no ModTypes do client não tem esse código: Public Party(1 To MAX_PARTYS) As PartyRec

Snake procura só por
Código:
Public Party


obs: aki deu tudo certo só q ñ aparece o rank nem quando eu uso o comando /top Crying or Very sad
dazateam
dazateam
Membro Vitalicio
Membro Vitalicio

Mensagens : 690

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por Snake Sáb 02 Fev 2013, 19:30

dazateam escreveu:obs: aki deu tudo certo só q ñ aparece o rank nem quando eu uso o comando /top

Pode ser que a propriedade "Visible" da ListBox está em "False"
Se estiver use algum comando que deixe "Visible = True" pode colocar o comando dentro de algum botão, label etc...

Alguém ai me ajuda com esse erro:

Ranking configurável Semttuloaxa

Edit;

JÁ RESOLVI O ERRO !!
Quando eu tava removendo esse sistema da minha engine(tava dando muito erro o sistema) ai sem querer eu apaguei o código que declarava o Type "ButtonRec" ai eu coloquei esse Type dnv e saiu o erro xD
Snake
Snake
Membro
Membro

Mensagens : 108

Ir para o topo Ir para baixo

Ranking configurável Empty Re: Ranking configurável

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos