Bom galera, Weeslleeyone aqui de novo, e irei continuar meu tutorial sobre packets no Transformice. Agora irei ensinar alguns packets diferentes do http://kikoo.formice.com/doku.php?id=packet_codes
No ultimo tutorial ensinei o de subir de nível no chat, que usava uma string mais essas que eu vou ensinar não irei usar mais.
Bom, vamos supor que eu queira dois packets, um para definir que nível tá o jogador, outro para adicionar experiência, que são:
Bom, como os C e CC dos dois packets são menores do que 10, descobrir as tokens que são \x08\x08 e \x08\x09 se quiser comprovar, é só dar um print ord('\x08') e um print ord('\x09') ou um print repr(chr('\x08')) e um print repr(chr('\x09')).
Enfim, já temos as tokens, agora precisamos formar a data (Formato) do packet.
No primeiro packet, temos level (byte), exp(int), exp_for_levelup (int) ou seja, Nível que o usuário se encontra, experiência atual do usuário, experiência para o próximo nível.
Vale lembrar que os formatos mais usados no kikoo.formice.com para struct.pack são:
byte = b
int = i
bool = ?
short = h
Bom então vamos lá. Para começar precisamos definir o nível que o usuário se encontra para byte, vamos supor que seja 5 então para começar nosso código iremos usar isso no Lua:
data = ""
level = 4
Agora precisamos dar pack no level, para que funcione, então para isso adicionamos isso ao nosso código: data = data + struct.pack("!b", level)
Nosso código vai ficar:
data = ""
level = 4
data = data + struct.pack("!b", level)
Agora precisamos definir a experiência que o usuário tem no momento para int, vamos supor que eu tenho 23 pontos de experiência. Então adicionamos exp = 23 ao nosso código
data = ""
level = 4
data = data + struct.pack("!b", level)
exp = 23
Agora precisamos dar pack na experiência, para que funcione, então adicionamos isso ao nosso código:
data = data + struct.pack("!i", exp)
data = ""
level = 4
data = data + struct.pack("!b", level)
exp = 23
data = data + struct.pack("!i", exp)
Agora precisamos definir a experiência que falta pro usuário subir de nível para int, vamos supor que falte 65 pontos para mim subir de nível, então adicionamos levelup = 65 ao nosso código
data = ""
level = 4
data = data + struct.pack("!b", level)
exp = 23
data = data + struct.pack("!i", exp)
levelup = 65
Agora precisamos dar pack na experiência que falta para subir, para que funcione, então adicionamos isso ao nosso código: data = data + struct.pack("!i", levelup)
data = ""
level = 4
data = data + struct.pack("!b", level)
exp = 23
data = data + struct.pack("!i", exp)
levelup = 65
data = data + struct.pack("!i", levelup)
Nosso primeiro formato já está pronto, mais se enviarmos ele ao client, adicionando o código
self.sendData("\x08\x08" + data, [], True) deixando nosso código assim:
data = ""
level = 4
data = data + struct.pack("!b", level)
exp = 23
data = data + struct.pack("!i", exp)
levelup = 65
data = data + struct.pack("!i", levelup)
self.sendData("\x08\x08" + data, [], True)
perceba-se que nada irá acontecer, mais significa que não deu certo ? Não, esse packet não trabalha só, precisamos do outro packet de baixo para funcionar, que serve para adicionar pontos de experiência a experiência atual.
Iremos adicionar data2 = "" no fim do nosso código.
Vamos supor que eu ganhei 20 pontos de experiência, então adicionaremos addexp = 20 ao nosso código, deixando ele assim:
data = ""
level = 4
data = data + struct.pack("!b", level)
exp = 23
data = data + struct.pack("!i", exp)
levelup = 65
data = data + struct.pack("!i", levelup)
self.sendData("\x08\x08" + data, [], True)
data2 = ""
addexp = 20
Agora precisamos dar pack na experiência ganha, para que funcione, então adicionamos isso ao nosso código: data2 = data2 + struct.pack("!h", addexp) que serve para dar pack como short.
data = ""
level = 4
data = data + struct.pack("!b", level)
exp = 23
data = data + struct.pack("!i", exp)
levelup = 65
data = data + struct.pack("!i", levelup)
self.sendData("\x08\x08" + data, [], True)
data2 = ""
addexp = 20
data2 = data2 + struct.pack("!h", addexp)
Agora já temos o formato do segundo packet, agora basta envia-lo ao client usando
self.sendData("\x08\x09" + data2, [], True) que deixa nosso código final assim:
data = ""
level = 4
data = data + struct.pack("!b", level)
exp = 23
data = data + struct.pack("!i", exp)
levelup = 65
data = data + struct.pack("!i", levelup)
self.sendData("\x08\x08" + data, [], True)
data2 = ""
addexp = 20
data2 = data2 + struct.pack("!h", addexp)
self.sendData("\x08\x09" + data2, [], True)
Resultado:
Bom isso é tudo por essa parte, na parte 3 irei ensinar a usar unpack e também irei deixar uma tabela com tokens para ser usadas.
Créditos:
Weeslleeyone / Weeslleey - Descobrir e Criar o post.
kikoo.formice.com - Fornecer os packets.