terça-feira, 21 de outubro de 2008

[Tutorial] Adicionando a porta de um main.exe!

Tutorial de como mudar a porta do main.exe de conexão ao connectserver (padrão: 44405).

Link para download:
ttp://www.4shared.com/file/67724228/85fc7f2d/Alterando_porta_de_um_main.html

Créditos: turconi~

segunda-feira, 6 de outubro de 2008

Loren Team

A Loren Mu Team se desfaz. Todos os releases feitos por ela estão agora terminados.

domingo, 14 de setembro de 2008

Loren Project GOLD - SEASON IV

Eu e MariN estamos desenvolvendo juntos uma versão que terá seu destino o comércio. Devido ao trabalho que já publicamos gratuitamente, decidimos fazer coisas mais avançadas no mundo de MuOnline.

Então, por meio desse blog divulgo o Loren Project GOLD, com intuito de ter a SEASON IV o mais completo possível.

Link do projeto: http://www.ragezone.com.br/showthread.php?t=13794

sábado, 13 de setembro de 2008

Protocolo da lista de Itens em um Shop (S4)

Esse pacote é o mesmo que o Protocolo de lista de Itens em um Shop, porém nesse existe o sistema de "sockets" (sistema de adicionais em itens da Korea) incluso.
C2 = head
00 = HiByte(Lenght)
20 = LoByte(Lenght)
31 = type
00 = HiByte(ItemCount)
02 = LoByte(ItemCount)
00 = Position
01 = ItemId?
00 = Adicional (Level*0x8 + (se tiver luck)0x4 + (se tiver option)0x1 + (se tiver skill)0x80)
16 = Durability
00 = ??
00 = ??
00 = ItemType x 0x10 (16)?
00 = ??
FF = socket 1 (null)
FF = socket 2 (null)
FF = socket 3 (null)
FF = socket 4 (null)
FF = socket 5 (null)
01 = Position
00 = ItemId?
00 = Adicional (Level*0x8 + (se tiver luck)0x4 + (se tiver option)0x1 + (se tiver skill)0x80)
12 = Durability
00 = ??
00 = ??
10 = ItemType x 0x10 (16)?
00 = ??
FF = socket 1 (null)
FF = socket 2 (null)
FF = socket 3 (null)
FF = socket 4 (null)
FF = socket 5 (null)

Protocolo da lista de Itens no Baú

Esse pacote é o mesmo que o Protocolo de lista de Itens em um Shop.

domingo, 7 de setembro de 2008

Protocolo de lista de Itens em um Shop

Apesar desse pacote existir no dikiy, ele não está completo lá. Por isso, decidi fazer minha própria interpretação do pacote.

Observações:
1. O pacote é enviado do GS ao Cliente, GC.

C2 = head
00 = HiByte(Lenght)
16 = LoByte(Lenght)
31 = type
00 = HiByte(ItemCount)
02 = LoByte(ItemCount)
00 = Position
01 = ItemId?
00 = Adicional (Level*0x8 + (se tiver luck)0x4 + (se tiver option)0x1 + (se tiver skill)0x80)
16 = Durability
00 = ??
00 = ??
00 = ItemType x 0x10 (16)?
00 = end?
01 = Position
00 = ItemId?
00 = Adicional (Level*0x8 + (se tiver luck)0x4 + (se tiver option)0x1 + (se tiver skill)0x80)
12 = Durability
00 = ??
00 = ??
10 = ItemType x 0x10 (16)?
00 = end?

Protocolo inicial do PC Point Shop

Esse pacote serve para mostrar os pontos (min/max) e se não me engano, serve também para habilitar o botão PC Point Shop no menu "D".

Observações:
1. Pelo que eu saiba, só clientes com linguagem KOR (Korean) suportam o PC Point.
2. Esse pacote é enviado pelo GS e recebido pelo Cliente (GC).

C1 = head
08 = lenght
D0 = type
04 = subtype
00 = LoByte(Points)
00 = HiByte(Points)
F0 = LoByte(MaxPoints)
03 = HiByte(MaxPoints)

Sendo que, MaxPoints deverá ser menor ou igual a 32767.

sábado, 6 de setembro de 2008

Protocolo de Pontos e Level do Mastering

Esse protocolo é responsável pelo nº de pontos e o nível da janela de Mastering Skill.

Obervações:
1. O pacote é GC, enviado pelo Gameserver e recebido pelo Cliente.
2. Mastering só funciona em clientes com Episódio 2.

C1 = head
14 = lenght
F3 = type
51 = subtype
32 = LoByte(Level)
00 = HiByte(Level)
00 = ??
00 = ??
64 = LoByte(Points)
00 = HiByte(Points)
00 = ??
00 = ??
BD = ??
28 = ??
2E = ??
2A = ??
72 = ??
75 = ??
7C = ??
15 = ??

quarta-feira, 3 de setembro de 2008

Protocolo de conexão ao GS

Este pacote é responsável pelo envio do endereço de ip e a porta do GameServer para o Cliente por meio do connectserver.

Observações:
1. Esse pacote é enviado pelo ConnectServer e recebido pelo Cliente.

C1 = head
16 = lenght
F4 = type
03 = subtype?
31 =1º byte do IP(1)
39 =2º byte do IP(9)
32 =3º byte do IP(2)
2E =4º byte do IP(.)
31 =5º byte do IP(1)
36 =6º byte do IP(6)
38 =7º byte do IP(8)
2E =8º byte do IP(.)
30 =9º byte do IP(0)
2E =10º byte do IP(.)
31 =11º byte do IP(1)
30 =12º byte do IP(0)
32 =13º byte do IP(2)
00 =14º byte do IP( ) - como o ip não preencherá este espaço, fica em branco (0x00)
00 =15º byte do IP( ) - como o ip não preencherá este espaço, fica em branco (0x00)
00 =16º byte do IP( ) - como o ip não preencherá este espaço, fica em branco (0x00)
5D = LoByte(GS Port)
DA = HiByte(GS Port)

Como pode ver, primeiro vem o "título" do pacote e depois vem o IP (no caso, "192.168.0.102") com limite de 16 caracteres (o ip é "colado" no pacote, sem alteração nenhuma) e a porta vem no final invertida (no caso, 55901).

Protocolo Inicial do GS ao Cliente

Aqui vai o protocolo da primeira comunicação do GameServer com o Cliente. Nele contém a versão e a "Index" que o usuário vai ter.

C1 = head
0C = lenght
F1 = type
00 = subtype?
01 = ??
1C = LoByte(aIndex)
36 = HiByte(aIndex)
31 = 1ª string da versão (1)
30 = 2ª string da versão (0)
34 = 3ª string da versão (4)
30 = 4ª string da versão (0)
38 = 5ª string da versão (8)

Neste caso, o cliente conecta recebendo "7222" como aIndex (número pelo qual os jogadores, monstros e ainda os outros jogadores são identificados) e recebe a versão "1.04.08" (quando é enviada a versão pro cliente, não contém os "pontos").

Cabeçalhos dos pacotes de MUOnline

Como sabem, todas coisas devem ter título para identificação. Por exemplo, quando vou escolher um livro na biblioteca, procurarei pelo nome.
Em MUOnline, na comunicação Servidor<->Cliente, não é diferente. Os pacotes iniciam com um "título" (tabela abaixo) e depois segue-se o "tamanho das páginas" e depois um "subtítulo".

Com isso, podemos ver que os pacotes 0xC1 e 0xC3 têm o mesmo tamanho, e 0xC2 e 0xC4 o mesmo também. Também dá para notar que os pacotes 0xC3 e 0xC4 têm encriptação, para segurança.

Os pacotes 0xC1 e 0xC3 são usados para dados não tão grandes e que possuem uma variação nula. Já os pacotes 0xC2 e 0xC4 são usados para dados "maiores" com variações, por exemplo, o pacote de mostrar os mobs, dos servidores, de mostrar os jogadores, etc. variam conforme a quantidade dos objetos.

Mas, como os pacotes 0xC2 e 0xC4 armazenam 65535 como valor na lenght, se cada byte é 255?
Isso acontece por causa que os pacotes 0xC2 e 0xC4 usam DOIS bytes para armazenar a lenght, por exemplo: C2 00 04 11. Aí temos um pacote (que provavelmente não exista ^^) com o tamanho 4 (0x04). A fórmula, seria basicamente:
0xC2 = head
0x00 = HiByte(Lenght)
0x04 = LoByte(Lenght)

Protocolo da Lista de Servidores

Bem, esse é um dos pacotes "simples", que é montado e enviado pelo CS - ConnectServer.

Observação:
1. Esse pacote é 0xC2, que não é encriptado, mas possui o tamanho máximo maior do que o 0xC1.
2. Esse pacote é CSC, ou seja, ConnectServer -> Client.

C2 = head
00 = lenght
0B = lenght
F4 = type
06 = subtype
00 = ??
01 = ServersCount

Agora, o resto do pacote, que é a parte que é adicionada a cada servidor da lista.

00 = ??
00 = ServerID
00 = Load (barra de usuários. 0x32 = 100% 0x00 = 0, é definida por DECIMAL de 0~100 apesar de cada byte ser 0~255)
00 = ??

Por exemplo, caso for ter dois servidores na lista, o pacote seria:
C2
00
0B
F4
06
00
02/
00 -> Servidor com ID 0
00
00
00/
01 -> Servidor com ID 1
00
32
00

Protocolo da quantidade de CASH

Quando o jogador entra no mapa, é enviado um pacote com a informação da quantidade de Cash (GEM) que o usuário tem.

Observações:
1. Como dito no protocolo anterior, só funciona em clientes Japoneses.
2. Esse protocolo é GC, ou seja, Gameserver -> Cliente.

C1 = head
08 = lenght
F5 = type
04 = subtype?
D0 = Cash* (4º byte)
07 = Cash* (3º byte)
00 = Cash* (2º byte)
00 = Cash* (1º byte)

Cash* = quantidade de cash em bytes, porém invertida.

terça-feira, 2 de setembro de 2008

Protocolo de Abrir Janela do CashShop Jpn

Para abrir a janela do CashShop, é um protocolo simples e curto, como o de abrir vault.
Segue ele abaixo:

C1 -> Head
05 -> Lenght
F5 -> Type
02 -> message id
00 -> ??

Observações:
1. Esse pacote é enviado do servidor ao cliente, ainda verei qual é que o cliente manda.
2. Somente os Mains/Clientes das linguagens: JPN, PHI, TAI, CHS e ENG suportam o Cash Shop, portanto, os outros clientes de outras linguagens não suportarão.

Protocolo MapJoin

Aqui vai a explicação do protocolo encriptado de MapJoin. Por ele é enviado informações do Personagem, como classe, control code, pontos de força, agilidade, etc.

Observações:
1. Aqui vai ele desencriptado. Quando ele passa pela função DataSend do GameServer ele é encriptado, e antes de chegar na função DataRecv do cliente, ele já é desencriptado, porém, ele passa a ser 0xC1 no head, diferente de 0xC3, que é no GameServer.
2. Esse protocolo não é episódio 2, é apenas episódio 1 (clientes 1.04j ou anteriores). Com o episódio 2, o que muda é a experiência que é adicionada (Mastering XP).

C3/C1 -> head
3B -> len
F3 -> type
03 -> subtype
ED -> Coord. X
D4 -> Coord. Y
02 -> Map
00 -> Dir
73 -> Exp \
79 -> Exp \_ Exp invertida
0F -> Exp /
0E -> Exp /
18 -> MaxExp \
C7 -> MaxExp \_ MaxExp invertida
3A -> MaxExp /
0E -> MaxExp /
2A -> LoByte(LevelUpPts)
00 -> HiByte(LevelUpPts)
BF -> LoByte(Strenght)
02 -> HiByte(Strenght)
FE -> LoByte(Agility)
02 -> HiByte(Agility)
19 -> LoByte(Vitality)
00 -> HiByte(Vitality)
0A -> LoByte(Energy)
00 -> HiByte(Energy)
95 -> LoByte(Life)
02 -> HiByte(Life)
98 -> LoByte(MaxLife)
02 -> HiByte(MaxLife)
9E -> LoByte(Mana)
00 -> HiByte(Mana)
9E -> LoByte(MaxMana)
00 -> HiByte(MaxMana)
16 -> LoByte(Shield)
12 -> HiByte(Shield)
16 -> LoByte(MaxShield)
12 -> HiByte(MaxShield)
8A -> LoByte(AgilityPoint)
00 -> HiByte(AgilityPoint)
14 -> LoByte(MaxAgilityPoint)
01 -> HiByte(MaxAgilityPoint)
12 -> Fix1200
00 -> Fix1200
42 -> Zen \
B6 -> Zen \_ Zen (invertido)
17 -> Zen /
19 -> Zen /
03 -> Pk State
00 -> CtlCode
00 -> LoByte(AddPoint)
00 -> HiByte(AddPoint)
41 -> LoByte(MaxAddPoint)
00 -> HiByte(MaxAddPoint)
00 -> LoByte(Command)
00 -> HiByte(Command)
00 -> LoByte(MinusPoint)
00 -> HiByte(MinusPoint)
41 -> LoByte(MaxMinusPoint)
00 -> HiByte(MaxMinusPoint)

sábado, 19 de julho de 2008

Protocolo de Mover Item

Como dito, depois de analisar protocolos eu posto aqui alguns...o primeiro é esse, o protocolo de Mover Item no inventário...

Uma observação: mover o item inclui movê-lo nos quadrados do inventário e também movê-lo até os espaços para armaduras, espadas, etc.

Protocolo:
0xC1 0x0F 0x24 0x00 0x10 0x25 0x80 0xFF 0x04 0x00 0xD0 0x00 0x00 0x08 0x00

C1 , 0F, 24 = Header
00 = subtype?
10 = de onde veio o item (tabela de valores abaixo)
25 = ID do item
80 = ??
FF = durabilidade do item
04 = ??
00 = ??
D0 = TIPO do item (nota: para obter o tipo do item, é feito (neste caso) 0xD0/0x10. Como 0xD0 tem valor de "208" e 0x10, "16", seria "208/16", que resultaria em 13, o tipo do item)
00 = ??
00 = ??
08 = destino do item (tabela de valores abaixo)

Tabela (agradecimento ao f1x/GraverS):
WEAPON_01 = 0,
WEAPON_02 = 1,
HELMET = 2,
ARMOR = 3,
PANTS = 4,
GLOVES = 5,
BOOTS = 6,
WINGS = 7,
GUARDIAN = 8,
PENDANT = 9,
RING_01 = 10,
RING_02 = 11,
INVENTORY = 12

Desculpem caso não esteja bem explicado e por faltar informações. Caso eu tenha algo melhor para complementar esse post eu o editarei.

EDIT:
Esse protocolo é o que o CLIENTE envia ao SERVIDOR.

domingo, 6 de julho de 2008

Blog

Criei esse blog para poder ajudar quem quiser entender sobre coisas avançadas com assunto MuOnline, incluindo coisas que eu aprendi e coisas que estou aprendendo.

Um conselho é pegar algumas informações iniciais no site http://d.scn.ru/article/mu-re/, caso esteja realmente interessado no assunto.