Maker Realm
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ranking automático configurável

Ir para baixo

Ranking automático configurável Empty Ranking automático configurável

Mensagem  boasfesta Ter Fev 21, 2012 4:37 pm

Olá,
eu sou boasfesta, estou postando aqui meu tutorial de ranking configurável, que antes era da MMORPG BR, mas com o fechamento resolvi passar os direitos dele para a Makerealm

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:

Server

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 = 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 = 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
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, 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

Cliente

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

Por fim, é isso! (:

Espero que ninguém aqui tenha problemas com o sistema, sugiro que usem uma engine zerada pra testar antes de colocar no seu jogo, ou salve ele antes de adicionar o sistema, por que caso aconteça algum problema tente seguir o tutorial novamente lendo atentamente. Algum problema, duvida, bug, crítica, sugestão, pedido, só postar logo abaixo (:

ESTE TUTORIAL FOI CRIADO POR BOASFESTA, CASO QUEIRA USÁ-LO COMO BASE PARA POSTAR AQUI, NÃO ESQUEÇA DOS CRÉDITOS.

ESTE CONTEÚDO AGORA É DA MAKEREALM, E É PROIBIDO POSTÁ-LO COMO TUTORIAL EM ALGUM OUTRO FÓRUM, MESMO QUE SEJA APENAS BASEADO NO MESMO![/b]
boasfesta
boasfesta
Administrador
Administrador

Mensagens : 5
Colaboração : 0
Data de inscrição : 21/02/2012

Ir para o topo Ir para baixo

Ir para o topo


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