DevClub


Você não está conectado. Conecte-se ou registre-se

Photo

Rank Configuravel

Ver o tópico anterior Ver o tópico seguinte Ir para baixo  Mensagem [Página 1 de 1]

GuiinhoLP

GuiinhoLP
Membro
Primeiro, vá ao modTypes, e acima de:

Código:
Type PlayerInvRec
    Num As Long
    Value As Long
    Dur As Long
End Type

Adicione:


Código:
Public Const MAX_RANK = 21 'Este aqui é o valor de quantos players tem no rank
Public Ranking(1 To MAX_RANK + 1) As RankingRec
Public TempRank(1 To MAX_RANK + 1) As RankingRec

Type RankingRec
Name As String
Level As Long
End Type


Agora, adicione esta sub no final do modGamelogic:


Código:
Sub CheckRanking(ByVal Index As Long)
Dim i As Long
Dim n As Long
Dim o As Long
Dim Valor As Long
Dim Nome As String
Valor = GetPlayerLevel(Index) 'Valor (Aqui voce pode substituir pelo level do player, ou quantidade de resets dele (provavelmente será GetplayerResets(index)), voce quem decide
Nome = GetPlayerName(Index) 'Aqui é caso voce nao use o nome do player, caso seja um ranking de guilds por exemplo, seria GetplayerGuild(index) no lugar do nome
For i = 1 To MAX_RANK
If Ranking(i).Level < Valor Then

'Escrever informaçoes no TempRank
For n = 1 To MAX_RANK
TempRank(n).Name = Ranking(n).Name
TempRank(n).Level = Ranking(n).Level
Next n

'Reduzir uma posição dos demais
For n = i To MAX_RANK
If n = MAX_RANK Then Exit For
Ranking(n + 1).Level = TempRank(n).Level
Ranking(n + 1).Name = TempRank(n).Name
Next n

'Adicionar jogador no ranking
Ranking(i).Level = Valor
Ranking(i).Name = Nome

'Verificar existencia do jogador que não seja esta adicionada agora
For n = i + 1 To MAX_RANK
If Ranking(n).Name = Nome Then
'Se sim, subir os anteriores uma posição acima
For o = n To MAX_RANK
Ranking(o).Name = Ranking(o + 1).Name
Ranking(o).Level = Ranking(o + 1).Level
Next o
End If
Next n

Exit For
End If
Next i
End Sub

Agora, acima de:


Código:
' :::::::::::::::::::::::::
            ' :: Status Point Packet ::
            ' :::::::::::::::::::::::::


Adicione:

Código:
Case "ranking"
        Packet = "ranking" & SEP_CHAR
        For i = 1 To MAX_RANK
        Packet = Packet & Ranking(i).Name & SEP_CHAR
        Packet = Packet & Ranking(i).Level & SEP_CHAR
        Next i
        Packet = Packet & END_CHAR
        Call SendDataTo(Index, Packet)
        Exit Sub


Agora, no Sub InitServer, abaixo de:

Código:
Call SetStatus("Carregando falas...")
    Call LoadSpeeches


Adicione:

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

Agora no DestroyServer, abaixo de:

Código:
Call SetStatus("Descarregando sockets e timers...")


Adicione:

Código:
Call SetStatus("Salvando Ranking...")
Call SaveRanking


Agora crie as subs que a gente fez, em algum lugar do modDatabase (pode ser no fim), adicione:

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

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

Agora vamos adicionar a checagem, mas é o seguinte, você tem que saber aonde você vai colocar a checagem, se por exemplo for um ranking de resets, ele tem que estar na sub aonde reseta o player, se for um ranking de level, vai ser na Sub CheckPlayerLevelUp, que no caso é aonde ele passa o player de level, como não sei como funciona o sistema de resets que cada um usa, vou mostrar o modo de level que é provavelmente oque todos usam, na sub CheckPlayerLevelUp, abaixo de:

Código:
Call SendDataToMap(GetPlayerMap(Index), "levelup" & SEP_CHAR & Index & END_CHAR)


Adicione:
Código:

Call CheckRanking(Index)


PRONTO! o server já acabou

na frmMirage, adicione um botao com o seguinte código:

Código:
Call SendData("ranking" & SEP_CHAR & END_CHAR)


Em algum lugar do modTypes Adicione:

Código:
Public Const MAX_RANK = 21 'Este aqui é o valor de quantos players tem no rank
Public Ranking(1 To MAX_RANK + 1) As RankingRec
Public TempRank(1 To MAX_RANK + 1) As RankingRec

Type RankingRec
Name As String
Level As Long
End Type

Agora no modClientTCP, acima de:

Código:
' :::::::::::::::::::::::::
    ' :: Map npc data packet ::
    ' :::::::::::::::::::::::::

Adicione:

Código:
If Parse(0) = "ranking" Then
    frmMirage.lstRanking.Clear
    n = 1
 
    For i = 1 To MAX_RANK
        If I = 21 Then Exit Sub
        frmMirage.lstRanking.AddItem "Nome: " & Parse(n) & " - " & Val(Parse(n + 1))
        n = n + 2
    Next i
 
    End If


Agora na frmMirage, adicione uma lista com o nome lstRanking

Bom e isso

Os Creditos eu desconheço se Algum Moderador Sober Edita aki :

Creditos:desconhecidos "

Math320

avatar
Novato
Este rank atualiza Por Segundo minutos ou diario se for segundo ou minuto nao acha que o jogo ficaria muito pesado atualizando muito rapido?deixando o jogo com mais lag

Att. Math320

Ver o tópico anterior Ver o tópico seguinte Ir para o topo  Mensagem [Página 1 de 1]

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