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.

(espero) de pacotes simples tutorial

2 participantes

Ir para baixo

(espero) de pacotes simples tutorial Empty (espero) de pacotes simples tutorial

Mensagem por Lucas Roberto Qua 13 Abr 2011, 21:00

Escrevi isso para alguém, mas eu percebi que eu poderia muito bem postá-lo, deixe-me saber se houver algum erro, eu fiz isso sorta enquanto o café-privados e semi-adormecido tongue

Isso é realmente muito simples quando você entende o básico: D

Primeiro de tudo, todos os pacotes precisam ter seu nome declarado em modEnumerations. Para os pacotes enviados do cliente precisam ser C (packetname) e para

pacotes enviados a partir do servidor que precisa ser S (packetname).

Por exemplo, aqui está o código para falar no mapa.

Isto é de modClientTCP lado do cliente ( ) tongue

Código:
Public Sub SayMsg(ByVal text As String)
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 CSayMsg
    Buffer.WriteString text
    SendData Buffer.ToArray()
    Set Buffer = Nothing
   
    ' Error handler
    Exit Sub
errorhandler:
    HandleError "SayMsg", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub
End Sub

a parte principal que você precisa se preocupar é realmente

Código:
Dim Buffer As clsBuffer
   
   
    Set Buffer = New clsBuffer
    Buffer.WriteLong CSayMsg
    Buffer.WriteString text
    SendData Buffer.ToArray()
    Set Buffer = Nothing

Basicamente esta parte é apenas um sub-normal, que você chama com parâmetros. por exemplo.

Call SayMsg (texto que precisa ser enviado)

Este é então automaticamente colocada na variável "texto" do sub.

Para as partes internas do pacote você vai ver as linhas "WriteLong" e "WriteString". Cada pacote tem sempre "(packetname) buffer.writelong" abaixo da

linha "buffer Set = clsbuffer novo" Isto é principalmente para fins de identificação para o servidor que eu penso. Cada bit de informação que deve ser enviado precisa ter

writelong sua própria ou WriteString.

Por exemplo, se eu quisesse enviar o nome do jogador, o nível do jogador e algum texto que eu teria:

Código:
Public Sub Blah (ByVal índice As Long, ByVal nível As Long, ByVal texto As String)
Dim buffer como clsBuffer
   
    "Se o modo de depuração, lidar com o erro, em seguida, sair
    Se Options.Debug = 1 Então no ErrorHandler GoTo erro
   
    Definir Buffer = clsBuffer Nova
    Buffer.WriteLong CRandomPacket
    Índice Buffer.WriteLong
    nível Buffer.WriteLong
    texto Buffer.WriteString
    SendData Buffer.ToArray ()
    Definir Buffer = Nothing
   
    "Manipulador de erro
    Exit Sub
ErrorHandler:
    HandleError "SayMsg", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub
End Sub

Que eu chamaria de

Código:
Call Blah(index, Player(index).level, "teaxt blah blah")

Em termos de envio de dados para o servidor que é tudo o que você precisa fazer do lado do cliente. Agora vamos para o código do servidor, esta é a confiança simples me

Primeiro de tudo temos de ir para modEnumerations e certifique-se que declarar o nome do pacote, neste exemplo, só é CRandomPacket.
Em seguida vá para modHandleData e encontrar o sub initMesssages. Nele você vai encontrar uma enorme quantidade de linhas como esta

Código:
HandleDataSub(CPartyLeave) =

GetAddress(AddressOf HandlePartyLeave)

Nós precisamos adicionar uma linha como esta para o nosso pacote. Então, mantendo com o nome do pacote até agora basta adicionar

Código:
HandleDataSub(CRandomPacket) = GetAddress

(AddressOf HandleRandomPacket)

A maioria deles é exatamente o mesmo para cada pacote, a única coisa que muda é o nome do pacote e também o sub que chamamos de lidar com a informação que é

recebeu, neste caso "HandleRandomPacket".

Depois de ter acrescentado que a entrada de linha (as linhas devem ser na mesma ordem em que os nomes dos pacotes estão em modEnumerations) rolar para o fundo

modHandleData para que possamos adicionar na sub para lidar com a informação.

O sub é bastante direto e muito bem até o que você colocar nele, por exemplo, aqui está o sub manipulação de mensagens:

Código:
Private Sub HandleSayMsg(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddR As Long, ByVal ExtraVar As Long)
    Dim msg As String
    Dim i As Long
    Dim Buffer As clsBuffer
    Set Buffer = New clsBuffer
    Buffer.WriteBytes Data()
    msg = Buffer.ReadString

    ' Prevent hacking
    For i = 1 To Len(msg)
        ' limit the ASCII
        If AscW(Mid$(msg, i, 1)) < 32 Or AscW(Mid$(msg, i, 1)) > 126 Then
            ' limit the extended ASCII
            If AscW(Mid$(msg, i, 1)) < 128 Or AscW(Mid$(msg, i, 1)) > 168 Then
                ' limit the extended ASCII
                If AscW(Mid$(msg, i, 1)) < 224 Or AscW(Mid$(msg, i, 1)) > 253 Then
                    Mid$(msg, i, 1) = ""
                End If
            End If
        End If
    Next

    Call AddLog("Map #" & GetPlayerMap(index) & ": " & GetPlayerName(index) & " says, '" & msg & "'", PLAYER_LOG)
    Call SayMsg_Map(GetPlayerMap(index), index, msg, QBColor(White))
   
    Set Buffer = Nothing
End Sub

Para o nosso sub precisamos ter algo como:

Código:
Private Sub HandleRandomPacket(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddR As Long, ByVal ExtraVar As Long)
 
    ' the variables we store our information in
    Dim text As String
    Dim player As Long
    Dim playerlevel AS Long


    Dim Buffer As clsBuffer
    Set Buffer = New clsBuffer
    Buffer.WriteBytes Data()

    player = buffer.ReadLong
    playerlevel = buffer.ReadLong
    text = buffer.ReadString

    'code that does something with this information
   
    Set Buffer = Nothing
End Sub

Basicamente, o sub deve começar com "Private Sub HandleRandomPacket (ByVal índice As Long, ByRef Dados () As Byte, ByVal StartAddR As Long, ByVal ExtraVar As Long)" e, em seguida, declarar algumas variáveis ​​para manter a nossa informação. A

Código:
Dim Buffer As clsBuffer
    Set Buffer = New clsBuffer
    Buffer.WriteBytes Data()

parte é declarar o nosso buffer de leitura.

Você vai notar a readlong / ReadString linhas, estes apenas ler as informações, simples e simpático. A informação tem que ser lido na mesma ordem em que foi escrito, acho que de uma primeira primeira coisa a meio.


Isso é tudo que eu penso, apenas para o envio de informações para o servidor. É praticamente o mesmo para o envio de informações para o cliente, você pode ver como tudo é manipulado no servidor ou apenas perguntar se você ficar preso, eu tentei fazer isto tão simples e legível quanto possível, mas estou um pouco cansado

Skweek

Lucas Roberto
Lucas Roberto
Membro Veterano
Membro Veterano

Mensagens : 1794

http://universogamesmmo.forumeiros.com/forum

Ir para o topo Ir para baixo

(espero) de pacotes simples tutorial Empty Re: (espero) de pacotes simples tutorial

Mensagem por Dr.Manhattan Qui 14 Abr 2011, 09:31

Legal. +1 Cred
Mestre Lingua Yoda Aprendeu você?
uhauhauah Origins Eclipse =]
Dr.Manhattan
Dr.Manhattan
Membro Veterano
Membro Veterano

Mensagens : 863

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