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.

Sistema de Rate(TESTADO)

2 participantes

Ir para baixo

Sistema de Rate(TESTADO) Empty Sistema de Rate(TESTADO)

Mensagem por FilipeBS Qui 10 Fev 2011, 22:20

Olá pessoal! Hoje vou mostrar pra você como implementar um sistema de rate para a experiencia. É um sistema bem simples, onde vamos adicionar um multiplicador. Quando o personagem mata o monstro ele vai receber a experiencia multiplicada pela rate do servidor. Então aquela galera que gosta de fazer evento de XP vai usar muito!

Mas vamos ao que interessa!

~ Dificuldade: 2/5 ~

~ Servidor ~


1º Passo: Vá no modTypes e procure por


Private Type OptionsRec
Game_Name As String
MOTD As String
Port As Long
Website As String
End Type

E substitua por:

Private Type OptionsRec
Game_Name As String
MOTD As String
Port As Long
Website As String
ExpRate As Long
End Type

Agora localize na pasta data do servidor o arquivo options.ini, abra-o e no final coloque ExpRate=1

2º passo: Abra o modCombat, procure por Exp = Npc(npcNum).Exp e mude para Exp = Npc(npcNum).Exp * Options.ExpRate.

3º passo: Vá para o modEnumerations, e em Public Enum ClientPackets adicione no final do sub
Código:
    CSetExpRate
    CGetExpRate

Como diz no próprio código fonte as linhas acima devem ficar acima do CMSG_COUNT.

4º passo: Para finalizar as modificações no servidor abra o modHandleData, e no Public Sub InitMessages() adicione:

HandleDataSub(CSetExpRate) = GetAddress(AddressOf HandleSetExpRate)
HandleDataSub(CGetExpRate) = GetAddress(AddressOf HandleGetExpRate)

E adicione tambem os dois Subs abaixo depois do Sub HandleSetMotd:

Sub HandleSetExpRate(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()

' Prevent hacking
If GetPlayerAccess(index) < ADMIN_CREATOR Then
Exit Sub
End If


Options.ExpRate = Buffer.ReadLong
SaveOptions
Set Buffer = Nothing
Call GlobalMsg("A rate foi alterada para " & Options.ExpRate & "X", BrightCyan)
Call AddLog(GetPlayerName(index) & " mudou a rate para: " & Options.ExpRate, ADMIN_LOG)
End Sub

Sub HandleGetExpRate(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()

' Prevent hacking
If GetPlayerAccess(index) < ADMIN_MONITOR Then
Exit Sub
End If


PlayerMsg index, "A rate atual é: " & Options.ExpRate & "X", BrightCyan
End Sub

Pronto nossa modificações no servidor estão concluidas. Vamos agora para o cliente!

~ Cliente ~


1º passo: Vá para o modEnumerations, e em Public Enum ClientPackets adicione no final do sub
Código:
    CSetExpRate
    CGetExpRate

Como diz no próprio código fonte as linhas acima devem ficar acima do CMSG_COUNT.

2º passo: Abra o modClientTCP de depois do Public Sub SendMOTDChange adicione:

Public Sub SendExpRateChange(ByVal ExpRate As Long)
Dim Buffer As clsBuffer

If Options.Debug = 1 Then On Error GoTo errorhandler

Set Buffer = New clsBuffer
Buffer.WriteLong CSetExpRate
Buffer.WriteLong ExpRate
SendData Buffer.ToArray()
Set Buffer = Nothing

Exit Sub
errorhandler:
HandleError "SendExpRateChange", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub


Public Sub SendExpRateRequest()
Dim Buffer As clsBuffer

' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler

Set Buffer = New clsBuffer
Buffer.WriteLong CGetExpRate
SendData Buffer.ToArray()
Set Buffer = Nothing

' Error handler
Exit Sub
errorhandler:
HandleError "SendExpRateRequest", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub


3º passo: Para terminar abra o modInput e localize o Select Case Command(0). Ao final do select case adicione os dois comando abaixo:

Case "/getrate"
If GetPlayerAccess(MyIndex) < ADMIN_MONITOR Then GoTo Continue

SendExpRateRequest
Case "/setrate"
If GetPlayerAccess(MyIndex) < ADMIN_CREATOR Then GoTo Continue

If UBound(Command) < 1 Then
AddText "Forma de Usar: /setrate (nova rate)", AlertColor
GoTo Continue
End If

If Not IsNumeric(Command(1)) Then
AddText "Forma de Usar: /setrate (nova rate)", AlertColor
GoTo Continue
End If

SendExpRateChange Right$(ChatText, Len(ChatText) - Cool

E pronto!

Considerações finais: Sempre que desejar que a experiencia dada seja a que você colocou no NPC Editor, use a rate 1, pois todo número multiplicado por 1 é ele mesmo. E CUIDADO para não colocar a rate 0 (ZERO), pois senão o jogador nçao ira receber exp ao matar o monstro.

Bem é só isso. Eu ja testei esse sistema no Eclipse Origins e funcionou. O código é facilmente portável para qualquer outra engine pois a lógica é simples. Vou fincando por aqui, flw!

PS: Obviamente, gostaria de receber uns creds por isso! huahauahuahauahuahua Laughing
FilipeBS
FilipeBS
Novato
Novato

Mensagens : 32

http://www.filipesistemas.com.br

Ir para o topo Ir para baixo

Sistema de Rate(TESTADO) Empty Re: Sistema de Rate(TESTADO)

Mensagem por megosarco Sex 11 Fev 2011, 10:36

Bom sistema, bom tuto!

Vai ajudar quem ainda não tinha esse sistema =)


+1


Abraço!


(se quiserem uma dica, coloca ali no "Exp = Npc(npcNum).Exp * Options.ExpRate + (GetPlayerLevel(index)* 2)


Isso vai fazer com que, o lvl conte no ganho de exp tmb.


Se você quiser mais dificuldade (Conforme o player for upando) troca o + por - ali =D

Abraço!
megosarco
megosarco
Membro Junior
Membro Junior

Mensagens : 95

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