Sistema de Rate

    Compartilhe
    avatar
    Thales12
    Administrador
    Administrador

    Mensagens : 140
    Level : 8
    Data de inscrição : 01/11/2011
    Idade : 23
    Localização : Rio de Janeiro

    default Sistema de Rate

    Mensagem por Thales12 em Qua Fev 15, 2012 2:41 am

    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:

    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]

      Data/hora atual: Sab Ago 18, 2018 3:20 am