Olá mais uma vez!
Estou aqui para disponibilizar um sistema muito eficiente de Rate!
Um simples multiplicador de Experiência [XP]
Então vamos lá!
~Cliente~
1º Passo: Vá no modTypes e procure por:
E substitua por:
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
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:
E adicione também os dois Subs abaixo depois do Sub HandleSetMotd:
Pronto nossas modificações no servidor estão concluidas. Agora vamos para o cliente:
~Cliente~
1º Passo: Vá para o modEnumerations, e em Public Enum ClientPackets adicione no final do sub:
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:
3º Passo: Para terminar abra o modInput e localize o Select Case Command(0). Ao final do Select Case adicione os dois comandos abaixo:
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ão ira receber experiência 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 ficando por aqui Fui...
[/quote]
Estou aqui para disponibilizar um sistema muito eficiente de Rate!
Um simples multiplicador de Experiência [XP]
Então vamos lá!
~Cliente~
1º Passo: Vá no modTypes e procure por:
- Código:
Private Type OptionsRec
Game_Name As String
MOTD As String
Port As Long
Website As String
End Type
E substitua por:
- Código:
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:
- Código:
HandleDataSub(CSetExpRate) = GetAddress(AddressOf HandleSetExpRate)
HandleDataSub(CGetExpRate) = GetAddress(AddressOf HandleGetExpRate)
E adicione também os dois Subs abaixo depois do Sub HandleSetMotd:
- Código:
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 nossas modificações no servidor estão concluidas. Agora vamos 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:
- Código:
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 comandos abaixo:
- Código:
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
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ão ira receber experiência 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 ficando por aqui Fui...
[/quote]