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.

[EO] Adicionar pontos(Status) por comando

+7
pabloluiz123
GuiinhoLP
TheKirin
Storm™
afonsobr
maninho21
lucas100vzs
11 participantes

Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty [EO] Adicionar pontos(Status) por comando

Mensagem por lucas100vzs Qui 07 Mar 2013, 16:18

Bem, já que todo mundo pede né....resolvi fazer hoje aqui....espero que gostem.... Embarassed
Ok's, primeiro vamos começar pelo cliente !

Abra seu "Client.vbp", e em "ModInput" , procure por esta "SUB":

Código:
Public Sub HandleKeyPresses(ByVal KeyAscii As Integer)

E nesta "SUB" procure por isto:

Código:
    ' Packet debug mode
                Case "/debug"
                    If GetPlayerAccess(MyIndex) < ADMIN_CREATOR Then GoTo Continue

                    DEBUG_MODE = (Not DEBUG_MODE)

E abaixo desta parte, adicione esta parte:

Código:
'::::::::::::::::::::::::::
                  ':::Add Stats by Command:::
                  '::::::::::::::::::::::::::
                Case "/str"
               
                ' Checks to make sure we have more than one string in the array
                    If UBound(Command) < 1 Then
                        AddText "Usage: /str (Points)", AlertColor
                        GoTo Continue
                    End If
                   
                    If Not IsNumeric(Command(1)) Then
                        AddText "Usage: /str (points)", AlertColor
                        GoTo Continue
                    End If
                   
                    If Command(1) >= MAX_INTEGER Then
                    AddText "Too Much(Máx 32766).", AlertColor
                        GoTo Continue
                    End If
               
                  Call SendCommandTrainStat(1, Command(1))
                 
                Case "/end"
               
                ' Checks to make sure we have more than one string in the array
                    If UBound(Command) < 1 Then
                        AddText "Usage: /end (Points)", AlertColor
                        GoTo Continue
                    End If
                   
                    If Not IsNumeric(Command(1)) Then
                        AddText "Usage: /end (points)", AlertColor
                        GoTo Continue
                    End If
                   
                    If Command(1) >= MAX_INTEGER Then
                    AddText "Too Much(Máx 32766).", AlertColor
                        GoTo Continue
                    End If
               
                  Call SendCommandTrainStat(2, Command(1))
                 
                Case "/int"
                ' Checks to make sure we have more than one string in the array
                    If UBound(Command) < 1 Then
                        AddText "Usage: /int (Points)", AlertColor
                        GoTo Continue
                    End If
                   
                    If Not IsNumeric(Command(1)) Then
                        AddText "Usage: /int (points)", AlertColor
                        GoTo Continue
                    End If
                   
                    If Command(1) >= MAX_INTEGER Then
                    AddText "Too Much(Máx 32766).", AlertColor
                        GoTo Continue
                    End If
               
                  Call SendCommandTrainStat(3, Command(1))
                 
                Case "/agi"
                ' Checks to make sure we have more than one string in the array
                    If UBound(Command) < 1 Then
                        AddText "Usage: /agi (Points)", AlertColor
                        GoTo Continue
                    End If
                   
                    If Not IsNumeric(Command(1)) Then
                        AddText "Usage: /agi (points)", AlertColor
                        GoTo Continue
                    End If
                   
                    If Command(1) >= MAX_INTEGER Then
                    AddText "Too Much(Máx 32766).", AlertColor
                        GoTo Continue
                    End If
               
                  Call SendCommandTrainStat(4, Command(1))
                 
                Case "/will"
                ' Checks to make sure we have more than one string in the array
                    If UBound(Command) < 1 Then
                        AddText "Usage: /agi (Points)", AlertColor
                        GoTo Continue
                    End If
                   
                    If Not IsNumeric(Command(1)) Then
                        AddText "Usage: /agi (points)", AlertColor
                        GoTo Continue
                    End If
                   
                    If Command(1) >= MAX_INTEGER Then
                    AddText "Too Much(Máx 32766).", AlertColor
                        GoTo Continue
                    End If
               
                  Call SendCommandTrainStat(5, Command(1))

Muito bem, agora procure por esta "SUB" :

Código:
Sub SendTrainStat(ByVal StatNum As Byte)
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 CUseStatPoint
    Buffer.WriteByte StatNum
    SendData Buffer.ToArray()
    Set Buffer = Nothing
   
    ' Error handler
    Exit Sub
errorhandler:
    HandleError "SendTrainStat", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub
End Sub

E abaixo desta "SUB" , adicione isto:

Código:
Sub SendCommandTrainStat(ByVal StatNum As Byte, ByVal Quantity As Long)
Dim Buffer As clsBuffer

    ' If debug mode, handle error then exit out
    If Options.Debug = 1 Then On Error GoTo errorhandler
     
      If Val(Quantity) > MAX_INTEGER Then
      Exit Sub
      End If
     
     
    Set Buffer = New clsBuffer
    Buffer.WriteLong CCommandStatPoint
    Buffer.WriteByte StatNum
    Buffer.WriteInteger Quantity
    SendData Buffer.ToArray()
    Set Buffer = Nothing
   
    ' Error handler
    Exit Sub
errorhandler:
    HandleError "SendCommandTrainStat", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub
End Sub

Agora em "ModEnumerations" , na "Public Enum ClientPackets" procure por:

Código:
CUseStatPoint

E abaixo adicione isto:

Código:
CCommandStatPoint


Pronto Cliente terminado !
Vamos ao servidor agora !!

Abra seu "Server.vbp", e em "ModHandleData" procure por:

Código:
HandleDataSub(CUseStatPoint) = GetAddress(AddressOf HandleUseStatPoint)

E abaixo adicione isto:

Código:
HandleDataSub(CCommandStatPoint) = GetAddress(AddressOf HandleCommandStatPoint)

Ainda em "ModHandleData" , procure por esta "SUB" :

Código:
Sub HandleUseStatPoint(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)

E, abaixo desta "SUB" , adicione esta "SUB" :

Código:
' ::::::::::::::::::::::::::
' :: Command stats packet ::
' ::::::::::::::::::::::::::
Sub HandleCommandStatPoint(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Dim PointType As Byte
Dim Val As Long
Dim Buffer As clsBuffer
Dim sMes As String
Dim i As Long
   
    Set Buffer = New clsBuffer
    Buffer.WriteBytes Data()
    PointType = Buffer.ReadByte 'CLng(Parse(1))
    Val = Buffer.ReadInteger
    Set Buffer = Nothing

    ' Prevent hacking
    If (PointType < 0) Or (PointType > Stats.Stat_Count) Then
        Exit Sub
    End If
   
    ' Check if player has the indicated value
    If Val > GetPlayerPOINTS(Index) Or Val <= 0 Then
    PlayerMsg Index, "Você não tem essa quantidade de pontos.", Red
    Exit Sub
    End If
   
    ' Check to not overflow the value
    If Val > MAX_INTEGER Then
    PlayerMsg Index, "Você não pode adicionar tamanha quantidade(Máx 32766).", Red
    Exit Sub
    End If
   
    ' Make sure they have points
    If GetPlayerPOINTS(Index) > 0 Then
        ' make sure they're not maxed#
        If GetPlayerRawStat(Index, PointType) >= MAX_LONG Then
            PlayerMsg Index, "Máximo Obtido.", BrightRed
            Exit Sub
        End If
       
        ' Take away a stat point
        Call SetPlayerPOINTS(Index, GetPlayerPOINTS(Index) - Val)

        ' Everything is ok
        Select Case PointType
            Case Stats.strength
                Call SetPlayerStat(Index, Stats.strength, GetPlayerRawStat(Index, Stats.strength) + Val)
                Call PlayerMsg(Index, "Você adicionou +" & Val & " pontos em força!", White)
                sMes = "Strength"
            Case Stats.Endurance
                Call SetPlayerStat(Index, Stats.Endurance, GetPlayerRawStat(Index, Stats.Endurance) + Val)
                Call PlayerMsg(Index, "Você adicionou +" & Val & " pontos em defesa!", White)
                sMes = "Endurance"
            Case Stats.Intelligence
                Call SetPlayerStat(Index, Stats.Intelligence, GetPlayerRawStat(Index, Stats.Intelligence) + Val)
                Call PlayerMsg(Index, "Você adicionou +" & Val & " pontos em inteligência!", White)
                sMes = "Intelligence"
            Case Stats.Agility
                Call SetPlayerStat(Index, Stats.Agility, GetPlayerRawStat(Index, Stats.Agility) + Val)
                Call PlayerMsg(Index, "Você adicionou +" & Val & " pontos em agilidade!", White)
                sMes = "Agility"
            Case Stats.WillPower
                Call SetPlayerStat(Index, Stats.WillPower, GetPlayerRawStat(Index, Stats.WillPower) + Val)
                Call PlayerMsg(Index, "Você adicionou +" & Val & " pontos em força de vontade!", White)
                sMes = "Willpower"
        End Select
       
        SendActionMsg GetPlayerMap(Index), "+" & Val & sMes, White, 1, (GetPlayerX(Index) * 32), (GetPlayerY(Index) * 32)

    Else
        Exit Sub
    End If

    ' Send the update
    SendPlayerData Index

    For i = 1 To Vitals.Vital_Count - 1
        SendVital Index, i
    Next
End Sub

Agora, em "ModEnumerations" , na "Public Enum ClientPackets" , procure por:

Código:
CUseStatPoint

E abaixo adicione isto:

Código:
CCommandStatPoint

Os comandos são:
"/str (pontos)"
"/end (pontos)"
"/int (pontos)"
"/agi (pontos)"
"/will (pontos)"

Contidos no Sistema :
-O máximo de pontos que se pode adicionar são: "32766"
-Bloqueado o comando com letras no lugar dos pontos.
-Se você tiver 60 pontos e colocar "/str 61" , ele não adicionará e lhe enviará uma mensagem que não tens essa quantidade.
- Comandos como : "/str 1000000000000" , são bloqueados evitando "overflows" ou "mysmatchs" .

OBS: Para aqueles que não tem, abram seu "Server.vbp" , e adicione isto no final de "ModConstants":

Código:
' values
Public Const MAX_BYTE As Byte = 255
Public Const MAX_INTEGER As Integer = 32767
Public Const MAX_LONG As Long = 2147483647

E pronto, você têm um sistema própio de adicionar pontos por comando ! Laughing
Qualquer erro postem aqui !


Créditos
-Deus
-Eu (Lucas Dantas)
-Robin


Última edição por lucas100vzs em Sex 08 Mar 2013, 21:31, editado 1 vez(es)
lucas100vzs
lucas100vzs
Membro Sênior
Membro Sênior

Mensagens : 396

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por maninho21 Qui 07 Mar 2013, 16:22

Cara sempre quis isso em meu jogo de boa cara você tam bem podia fazer um ex /teleport cidade 1 ai ia pra cidade 1 sabe mas fico perfeito +1
maninho21
maninho21
Membro
Membro

Mensagens : 234

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por afonsobr Qui 07 Mar 2013, 16:56

Caraca! Man, você é um gênio! Parabéns, estava fazendo aqui quando vi você postando. Acho que eu nem ia conseguir, tava dando muitos erros ehueuheuh
Parabéns, obrigado e +1!
avatar
afonsobr
Membro Veterano
Membro Veterano

Mensagens : 1196

http://digimongames.forumeiros.com/

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por Storm™ Qui 07 Mar 2013, 22:49

afonsobr escreveu:Caraca! Man, você é um gênio! Parabéns
Parabéns, obrigado e +1!
Storm™
Storm™
Moderador Global
Moderador Global

Mensagens : 2155

http://senningames.com

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por TheKirin Sex 08 Mar 2013, 18:34

Velho, deu um erro aki......

Print:
[img]https://2img.net/r/ihimg/photo/my-images/580/imagemder.png/[/imghttps://2img.net/r/ihimg/photo/my-images/580/imagemder.png/
TheKirin
TheKirin
Membro Vitalicio
Membro Vitalicio

Mensagens : 561

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por lucas100vzs Sex 08 Mar 2013, 21:29

Ohh , me desculpe irei adicionar ao tópico àqueles que não o tem:

Abra seu "Server.vbp" , e adicione isto no final de "ModConstants" :

Código:
' values
Public Const MAX_BYTE As Byte = 255
Public Const MAX_INTEGER As Integer = 32767
Public Const MAX_LONG As Long = 2147483647

E pronto! Agora seu erro foi finalizado Laughing
lucas100vzs
lucas100vzs
Membro Sênior
Membro Sênior

Mensagens : 396

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por GuiinhoLP Sex 08 Mar 2013, 21:43

Muito bom Lucas. Como sempre Smile
GuiinhoLP
GuiinhoLP
Membro Sênior
Membro Sênior

Mensagens : 257

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por TheKirin Sex 08 Mar 2013, 23:23

vlw consertei o erro +1^^

O que eu não tenh??
TheKirin
TheKirin
Membro Vitalicio
Membro Vitalicio

Mensagens : 561

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por pabloluiz123 Seg 09 Set 2013, 23:43

Desculpa reviver mas é que estou precisando deste sistema .. alguém pode me ajudar nesse error ??
http://imageshack.us/content_round.php?page=done&l=img707/4772/qf2r.png
pabloluiz123
pabloluiz123
Membro Junior
Membro Junior

Mensagens : 59

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por Lord Pegason Ter 10 Set 2013, 00:07

pabloluiz123 escreveu:Desculpa reviver mas é que estou precisando deste sistema .. alguém pode me ajudar nesse error ??
http://imageshack.us/content_round.php?page=done&l=img707/4772/qf2r.png
Acho que tem alguma coisinha errada aí, hein?

De qualquer forma, bota um:

End Sub

na linha abaixo da Sub HandleUseStatPoint.

Vai ficar:

HandleUseStatPoint ............ ..................blablablablablabla
End Sub
Lord Pegason
Lord Pegason
Membro Sênior
Membro Sênior

Mensagens : 300

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por Eduardo Ter 10 Set 2013, 09:35

Claro que vai dar erro , Você apagou o "End Sub" da sub de cima. Apaga a handle se você não usa mais , e se usar ponhe um End Sub.
Eduardo
Eduardo
Membro Veterano
Membro Veterano

Mensagens : 1178

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por guifs Ter 10 Set 2013, 11:04

Meu amigo,mesmo colocando um end sub,daria problema com o seu client pois a:
HandleUseStatPoints,digamos que ela é a responsavel pela a adição de status do player então troque toda sua parte :
Código:
' ::::::::::::::::::::::
' :: Use stats packet ::
' ::::::::::::::::::::::
Sub HandleUseStatPoint(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Por:

Código:
' ::::::::::::::::::::::
' :: Use stats packet ::
' ::::::::::::::::::::::
Sub HandleUseStatPoint(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Dim PointType As Byte
Dim Buffer As clsBuffer
Dim sMes As String
   
    Set Buffer = New clsBuffer
    Buffer.WriteBytes Data()
    PointType = Buffer.ReadByte 'CLng(Parse(1))
    Set Buffer = Nothing

    ' Prevent hacking
    If (PointType < 0) Or (PointType > Stats.Stat_Count) Then
        Exit Sub
    End If

    ' Make sure they have points
    If GetPlayerPOINTS(index) > 0 Then
        ' make sure they're not maxed#
        If GetPlayerRawStat(index, PointType) >= 255 Then
            PlayerMsg index, "You cannot spend any more points on that stat.", BrightRed
            Exit Sub
        End If
       
        ' Take away a stat point
        Call SetPlayerPOINTS(index, GetPlayerPOINTS(index) - 1)

        ' Everything is ok
        Select Case PointType
            Case Stats.Strength
                Call SetPlayerStat(index, Stats.Strength, GetPlayerRawStat(index, Stats.Strength) + 1)
                sMes = "Strength"
            Case Stats.Endurance
                Call SetPlayerStat(index, Stats.Endurance, GetPlayerRawStat(index, Stats.Endurance) + 1)
                sMes = "Endurance"
            Case Stats.Intelligence
                Call SetPlayerStat(index, Stats.Intelligence, GetPlayerRawStat(index, Stats.Intelligence) + 1)
                sMes = "Intelligence"
            Case Stats.Agility
                Call SetPlayerStat(index, Stats.Agility, GetPlayerRawStat(index, Stats.Agility) + 1)
                sMes = "Agility"
            Case Stats.Willpower
                Call SetPlayerStat(index, Stats.Willpower, GetPlayerRawStat(index, Stats.Willpower) + 1)
                sMes = "Willpower"
        End Select
       
        SendActionMsg GetPlayerMap(index), "+1 " & sMes, White, 1, (GetPlayerX(index) * 32), (GetPlayerY(index) * 32)

    Else
        Exit Sub
    End If

    ' Send the update
      Dim i As Long

    For i = 1 To Vitals.Vital_Count - 1
        SendVital index, i
    Next
   
    'Call SendStats(Index)
    SendPlayerData index
End Sub
guifs
guifs
Membro Vitalicio
Membro Vitalicio

Mensagens : 561

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por Lord Pegason Ter 10 Set 2013, 19:28

Por isso eu disse que estava estranho.

E como estou sem a Eclipse Origins aqui comigo, apenas corrigi o erro informado, mas continuaria com esse problema visto que essa é uma Handle fundamental para o projeto.
Lord Pegason
Lord Pegason
Membro Sênior
Membro Sênior

Mensagens : 300

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por guifs Ter 10 Set 2013, 19:42

rodrigomarquesz escreveu:Por isso eu disse que estava estranho.

E como estou sem a Eclipse Origins aqui comigo, apenas corrigi o erro informado, mas continuaria com esse problema visto que essa é uma Handle fundamental para o projeto.
isso mesmo,so resolveria o problema do end sub,mais geraria futuras dores de cabeça quanto a questão da handle importante.
guifs
guifs
Membro Vitalicio
Membro Vitalicio

Mensagens : 561

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por lucas100vzs Qua 11 Set 2013, 10:20

pabloLuiz123,

   O problema foi que você adicionou a sub:

Código:
Sub HandleCommandStatPoint(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
literalmente abaixo da sub:

Código:
Sub HandleUseStatPoint
Muito bem, vamos explicar:

-Para você iniciar um código você pode usar vários métodos, entre eles:

-Sub
-Private Function
-Function
-Public Sub

Bem, como não vamos dar um tutorial completo, vou privatizar este no erro ocorrido em seu projeto.
Cada vez que você inicia uma "Sub", você deve finalizá-la com um "End Sub".
Ex:

Código:
Sub Teste() 'Início (Nome da "Sub" e seus complementos)
 'Intermediário (O código)
End Sub 'Fim (Finalização de uma "Sub")
O mesmo para uma função, porém, ex:

Código:
Function Teste() 'Início (Nome da "Function" e seus complementos)
 'Intermediário (O código)
End Function 'Fim (Finalização de uma "Function")
Lembre-se sempre:

*Para cada "Sub" iniciada, deve-se sempre ser finalizada com uma "End Sub".
*Para cada "Function" iniciada, deve-se sempre ser finalizada com uma "End Function".


-E então, como seu código deu erro!!??
-Foi porque você colocou a "Sub HandleCommandStatPoint" dentro da "Sub HandleUseStatPoint"....
-Como resolver!?
-Bem, você irá ler a partir da "Sub HandleUseStatPoint" , e achar o primeiro "End Sub", e abaixo desse "End Sub" que você colocará a "Sub HandleCommandStatPoint".

E pronto, seu erro estará resolvido! Laughing
lucas100vzs
lucas100vzs
Membro Sênior
Membro Sênior

Mensagens : 396

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por pabloluiz123 Qua 11 Set 2013, 12:57

Mt obrigado Lucas !! Funcionou direitinho +1 aê pra tu !!
pabloluiz123
pabloluiz123
Membro Junior
Membro Junior

Mensagens : 59

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por Rony andrade pimentel Sáb 18 Jan 2014, 15:58

eu fiz tudo q vc disse ai e não deu certo Me Ajuda
Rony andrade pimentel
Rony andrade pimentel
Novato
Novato

Mensagens : 8

Ir para o topo Ir para baixo

[EO] Adicionar pontos(Status) por comando Empty Re: [EO] Adicionar pontos(Status) por comando

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


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