Universo Games
Ola , Convidado



Você ainda não e cadastrado então cadastre-se e veja todas as atualizações no mundo rpg!!!

Sistema de Ranking Configuravel

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Tutorial Sistema de Ranking Configuravel

Mensagem por Lucas Roberto em Qui 02 Fev 2017, 14:04

Então pessoal, tutorial não é meu mais eu uso no meu jogo e está 100%, para fazer ele é preciso ter [Você precisa estar registrado e conectado para ver este link.] para ele funcionar como Ranking de resets é claro [size=8]', então vamos la.

Mas por que configurável?
-Por que eu otimizei ele pra você escolher qual valor quer usar, com simples configuração, assim se você quiser configurar ele pra ter 3 jogadores no ranking, ou 300, basta apenas adicionar 2 zeros no numero e o sistema faz o resto. Alem disso, se você quiser fazer com que ele seja um sistema de Reset, Level, Guild Points, ou o caralho a 4, tanto faz, só mudar o valor (:

Então vamos ao sistema:

Começando no Serve~Side

Primeiro, vá ao modTypes, e acima de:

[/size]
Código:
Type PlayerInvRec
    Num As Long
    Value As Long
    Dur As Long
End Type



você adiciona


Código:
Public Const MAX_RANK = 20 '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 = GetplayerResets(index)) 'Isso aqui é só trocar e então adicionar a checagem na sub dq você escolheu rsrs
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



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
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
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, lembra aquele tutorial de resets que eu mando fazer la no inicio? Então, você ja fez ele e talz, então tu vai ir no Serve~Side e vai procurar por 
If GetPlayerLevel(index) => 1000 Then
Então abaixo de


Código:
Call SavePlayer(index)



você adiciona


Código:
Call CheckRanking(Index)



Agora no Client~Side

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


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



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
        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 pessoal, esse tutorial foi criado pelo boasfestas e como eu não achei aqui na Taberna hoje quando procurei, eu fiz o favor de traze-lo para vocês [size=8]',
 então é isso ae, até a próxima

Att;
Admin Hbo[/size]

_______________________________________________________________________________________________________


[Você precisa estar registrado e conectado para ver esta imagem.]
avatar
Lucas Roberto

Mensagens : 706

http://universogamesmmo.forumeiros.com

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum