Resultados 1 a 9 de 9
  1. #1
    Membro Velton D.'s Avatar
    Data de Ingresso
    Feb 2015
    Posts
    35
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    3
    Thanked in
    1 Post
    Mencionado
    17 Post(s)
    MEU HUMOR
    Sleepy

    Trocar Protocolo do GameServer

    Venho trazer uma forma fácil de fazer a troca de protocolo do servidor, Funciona com qualquer versão de gs, só adaptar

    1º Passo: Verificar corretamente as cases do Procolo que vai usar. Lembrando que no exemplo abaixo está trocando de JPN para Vietnã.

    BYTE ProtocolServer(BYTE Head)
    {
    switch(Head)
    {
    case 0xD9:
    return 0x1D; // -> Walk [JPN]
    case 0xDC:
    return 0xD6; // -> Damage [JPN]
    case 0x15:
    return 0xDC; // -> Attack [JPN]
    case 0x1D:
    return 0xD7; // -> Skill [JPN]
    default:
    return Head;
    }
    return Head;
    }


    BYTE ProtocolClient(BYTE Head)
    {
    switch(Head)
    {
    case 0x1D: // -> Walk [JPN]
    return 0xD9;
    case 0xD6: // -> Damage [JPN]
    return 0xDC;
    case 0xDC: // -> Attack [JPN]
    return 0x15;
    case 0xD7: // -> Skill [JPN]
    return 0x1D;
    default:
    return Head;
    }
    return Head;
    }
    2º Passo: Chamando a troca de cases no ProtocolCore e DataSend
    void DataRecvEx(BYTE protoNum,LPBYTE aRecv,DWORD aLen,DWORD aIndex,DWORD Encrypt,int Serial)
    {
    if(aRecv[0] == 0xC1 || aRecv[0] == 0xC3)
    {
    aRecv[2] = ProtocolServer(aRecv[2]);
    protoNum = aRecv[2];
    }
    else
    {
    aRecv[3] = ProtocolServer(aRecv[3]);
    protoNum = aRecv[3];
    }
    // ----
    DataRecv(protoNum,aRecv,aLen,aIndex,Encrypt,Serial );
    }


    void DataSendEx(int aIndex, LPBYTE aSend, int aLen)
    {
    if(aSend[0] == 0xC1 || aSend[0] == 0xC3)
    {
    aSend[2] = ProtocolClient(aSend[2]);
    }
    else
    {
    aSend[3] = ProtocolClient(aSend[3]);
    }
    // ----
    DataSend(aIndex,aSend,aLen);
    }
    3º Passo: Apenas faça os Hooks nos Offsets corretos do seu GameServer cada função e pronto! Não tem como não funcionar. Abaixo uma Lista de Protocolos de MuOnline

    Japan Protocol
    Walk = 1D
    Damage = D6
    Attack = DC
    Skill = D7

    ===================
    English Protocol
    Walk = D4
    Damage = 15
    Attack = 11
    Skill = DB

    ===================
    Vietnam Protocol
    Walk = D9
    Damage = DC
    Attack = 15
    Skill = 1D

    ===================
    Philippine Protocol
    Walk = DD
    Damage = DF
    Attack = D6
    Skill = 11

    ===================
    China Protocol
    Walk = D9
    Damage = D0
    Attack = D7
    Skill = 1D

    ===================
    Korean Protocol
    Walk = D3
    Damage = DF
    Attack = D7
    Skill = 10

  2. #2
    Developer C++ Mr.Haziel's Avatar


    Data de Ingresso
    Apr 2015
    Posts
    67
    Thanks Thanks Given 
    77
    Thanks Thanks Received 
    23
    Thanked in
    10 Posts
    Mencionado
    57 Post(s)
    MEU HUMOR
    Cold
    Ótima função!! Uso em meus plugin ha alguns anos.
    Função criada por uns dos melhores programadores de todos os tempos Welcomevocê X-Team

    Obs: Só ressaltando que em gameserves abaixo da season 3.2 nen sempre funciona, tendo que fazer algumas mudanças , por que os protocolos dos mains antigos que é um pouco diferente ex: 99.90T VTN para CHS usando o metodo postado acima = Bug !!
    Last edited by Mr.Haziel; 14/04/2015 at 02:49 PM.

  3. 14/04/2015, 03:20 PM
    Razão
    a pedido do autor

  4. #3
    Membro Velton D.'s Avatar
    Data de Ingresso
    Feb 2015
    Posts
    35
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    3
    Thanked in
    1 Post
    Mencionado
    17 Post(s)
    MEU HUMOR
    Sleepy
    Depois posto certin para CHS, já usei isso no 99.60T e nao tive esses problemas

  5. #4
    Developer C++ s00x's Avatar

    Data de Ingresso
    Jan 2015
    Posts
    373
    Thanks Thanks Given 
    75
    Thanks Thanks Received 
    146
    Thanked in
    24 Posts
    Mencionado
    63 Post(s)
    MEU HUMOR
    Cheerful
    País
    United States
    Tenho certeza @[Somente membros podem ver os links. ] que isso é algum erro no seu protocolo, como te disse é muito lógico, envio comando pra atacar ele anda, é algum valor errado, tenho certeza .

  6. 15/04/2015, 05:11 PM
    Razão
    a pedido do autor

  7. #5
    Developer C++ s00x's Avatar

    Data de Ingresso
    Jan 2015
    Posts
    373
    Thanks Thanks Given 
    75
    Thanks Thanks Received 
    146
    Thanked in
    24 Posts
    Mencionado
    63 Post(s)
    MEU HUMOR
    Cheerful
    País
    United States
    Talvez seja até esse MAIN, sei la ...
    Testa depois alguns do que te enviei.

  8. #6
    Membro Velton D.'s Avatar
    Data de Ingresso
    Feb 2015
    Posts
    35
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    3
    Thanked in
    1 Post
    Mencionado
    17 Post(s)
    MEU HUMOR
    Sleepy
    Eu estava usando dessa forma e não tive problema algum. Não acredito que tenha conflito, afinal é apenas recebendo/enviando de uma case e retornando para outra. Trocando de Vietnã para CHS em meu test estava tudo Ok, Move, Attack, Skills ...

    BYTE ProtocolServer(BYTE Head)
    {
    switch (Head)
    {
    case 0xD7:
    return 0xD9;
    case 0xDD:
    return 0xDC;
    case 0xD9:
    return 0x15;
    case 0x1D:
    return 0x1D;
    default:
    return Head;
    }
    return Head;
    }


    BYTE ProtocolClient(BYTE Head)
    {
    switch (Head)
    {
    case 0xD9:
    return 0xD7;
    case 0xDC:
    return 0xDD;
    case 0x15:
    return 0xD9;
    case 0x1D:
    return 0x1D;
    default:
    return Head;
    }
    return Head;
    }
    PS: Não precisa pega do main... Você sendo o protocol do GameServer e do Client vc já tem a lista acima das cases e de cada linguagem. Só organiza, exemplo: GS JPN / Main KOR = ProtocolServer = Recebe Kor e retorna nas Cases do JPN / ProtocolClient Envia JPN porem retorna para enviar KOR... Não tem erro ^^ ou melhor fazer emulador da versão usando a dec do 1.00.18
    Last edited by Velton D.; 16/04/2015 at 11:12 PM.

  9. #7
    Developer C++ s00x's Avatar

    Data de Ingresso
    Jan 2015
    Posts
    373
    Thanks Thanks Given 
    75
    Thanks Thanks Received 
    146
    Thanked in
    24 Posts
    Mencionado
    63 Post(s)
    MEU HUMOR
    Cheerful
    País
    United States
    @[Somente membros podem ver os links. ] acho que regredir a versão não compensaria muito, visto que o problema central é apenas os protocolos, e já consegui o Cliente Vietnam para @[Somente membros podem ver os links. ] .

  10. #8
    Developer C++ Mr.Haziel's Avatar


    Data de Ingresso
    Apr 2015
    Posts
    67
    Thanks Thanks Given 
    77
    Thanks Thanks Received 
    23
    Thanked in
    10 Posts
    Mencionado
    57 Post(s)
    MEU HUMOR
    Cold
    Quando se programa usando o protocolo acima ao ver de inicio não se nota o bug,mais é o que sempre falo,a parada é ver na integra (Online), (POR QUE O BUG SÓ ACONTECE QUANDO SEGURA O CONTROL NO X1 ) pelo seguinte a webzen féis mudanças no protocolo do main! Não são mesmos BYTES das versões acima da season 2.nos mains antigos os BYTES do protocolo são diferente ocasionando o conflito, o que fazer ?

    Pegar o BYTE que é enviado no Send,que faz o char correr na hora do x1, por um if igualando ao pacote correto. simples !!

    Creio que não adianta ficar falando que emulador seja correto e sim postar a solução do problema.

    A logica é essa:Só pegar o pacote de corre e mudar na hora do X1,e enviar no send,foi assim que fixei na minha versão Premium 1.00.13 CHS.

    Abraço a todos
    Last edited by Mr.Haziel; 17/04/2015 at 02:59 PM.

  11. #9
    Membro Velton D.'s Avatar
    Data de Ingresso
    Feb 2015
    Posts
    35
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    3
    Thanked in
    1 Post
    Mencionado
    17 Post(s)
    MEU HUMOR
    Sleepy
    @[Somente membros podem ver os links. ] vai do que você quer fazer. eu mesmo fiz isso com o Season 4.5 (1.00.90) para Season 3.2 (1.00.77) e isso da mais liberdade alem de você ter todo o codigo do GameServer você pode criar muita coisa que as vezes no plugin limita. como algumas classes que precisa usar asm e tals, então eu prefira fazer assim. mas vai de cada um... eu tenho pouco conhecimento em versões antigas por não gostar muito delas
    @[Somente membros podem ver os links. ] ninguém disse nada sobre emulador ser correto. Quis dizer que com ele você faz direto no código fonte do protocolo apenas isso. Até por que eu já larguei mão desse negocio de plugin então fica apenas como dica para quem quer desenvolver algum mais completo

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • You may not post Resposta(s)
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •  
Sobre nós
Somos uma comunidade em atividade a 8 anos que aborda assuntos relacionados a games em geral, principalmente games MMORPG. e que busca sempre ajudar os membros através de conteúdos, tutoriais e suporte...
Nossos anunciantes
Hinetworks
VelozHost
InovHost
Rede Sociais