Ir para conteúdo
Faça parte da equipe! (2024) ×
  • 0

Esclarecimento de Dúvidas


MatheuzF
 Compartilhar

Pergunta

Olá pessoal! Tudo joia? Estou com algumas dúvidas em relação ao funcionamento do servidor WYD...

Estou testando, modificando e analisando uma release 7.56 desde o inicio do game e suas funções mais básicas, e a dúvida são as seguintes
1 - Vamos dizer que programei um servidor do zero e somente fiz as funções para logar in-game e ter acesso consequentemente tudo ficará sem funções sem falas etc? Ou o cliente guarda algumas infos? Como por exemplo no meu caso não achei na source nem na release local de configuração dos treinadores da primeira quest e mesmo assim eles funcionam com as trocas de chave... (Espero que consigam entender)
2 - Seguindo o que disse acima também não encontrei onde configura-se o lv máximo dessa primeira área de treinamento, como eu poderia esta fazendo isso?

3 - Tudo o que rola no jogo por ser online depende de estar configurado em meu servidor? Ou o cliente guarda algumas informações?

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0
31 minutos atrás, MatheuzF disse:

Olá pessoal! Tudo joia? Estou com algumas dúvidas em relação ao funcionamento do servidor WYD...

Estou testando, modificando e analisando uma release 7.56 desde o inicio do game e suas funções mais básicas, e a dúvida são as seguintes
1 - Vamos dizer que programei um servidor do zero e somente fiz as funções para logar in-game e ter acesso consequentemente tudo ficará sem funções sem falas etc? Ou o cliente guarda algumas infos? Como por exemplo no meu caso não achei na source nem na release local de configuração dos treinadores da primeira quest e mesmo assim eles funcionam com as trocas de chave... (Espero que consigam entender)
2 - Seguindo o que disse acima também não encontrei onde configura-se o lv máximo dessa primeira área de treinamento, como eu poderia esta fazendo isso?

3 - Tudo o que rola no jogo por ser online depende de estar configurado em meu servidor? Ou o cliente guarda algumas informações?

Encontrei nela onde está configurado o lv da área de treinamento, se puderem me esclarecer o restante

Link para o comentário
Compartilhar em outros sites

  • 0
Em 11/12/2021 em 10:58, MatheuzF disse:

Olá pessoal! Tudo joia? Estou com algumas dúvidas em relação ao funcionamento do servidor WYD...

Estou testando, modificando e analisando uma release 7.56 desde o inicio do game e suas funções mais básicas, e a dúvida são as seguintes
1 - Vamos dizer que programei um servidor do zero e somente fiz as funções para logar in-game e ter acesso consequentemente tudo ficará sem funções sem falas etc? Ou o cliente guarda algumas infos? Como por exemplo no meu caso não achei na source nem na release local de configuração dos treinadores da primeira quest e mesmo assim eles funcionam com as trocas de chave... (Espero que consigam entender)
2 - Seguindo o que disse acima também não encontrei onde configura-se o lv máximo dessa primeira área de treinamento, como eu poderia esta fazendo isso?

3 - Tudo o que rola no jogo por ser online depende de estar configurado em meu servidor? Ou o cliente guarda algumas informações?

1. Depende das funções, e sim, tem msgs, confirmações que é no cliente ..
3. As informações são guardadas no servidor, e algumas no cliente.

A vida lhe dar desafios, entre esses uns longos mas nada que tome todo o seu tempo. - Klaus

giphy.gif

 

tgtceqV.png v3hpfp6.png yKSRniq.png f3uQKY9.png behVjSE.png zekazca.png f3uQKY9.png AHFoSmc.png BRzGtem.png behVjSE.png  tkeNAmv.png behVjSE.png

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, Dcan disse:

1. Depende das funções, e sim, tem msgs, confirmações que é no cliente ..
3. As informações são guardadas no servidor, e algumas no cliente.

Compreendi e agradeço a ajuda, no meu caso o treinador faz a troca normalmente me entregando os itens e o set refinado, porém não achei nada na release nem a na source essa informação pode estar então no cliente certo?

Link para o comentário
Compartilhar em outros sites

  • 0
13 horas atrás, MatheuzF disse:

Compreendi e agradeço a ajuda, no meu caso o treinador faz a troca normalmente me entregando os itens e o set refinado, porém não achei nada na release nem a na source essa informação pode estar então no cliente certo?

Faz sim, na source dependendo da versão .

A vida lhe dar desafios, entre esses uns longos mas nada que tome todo o seu tempo. - Klaus

giphy.gif

 

tgtceqV.png v3hpfp6.png yKSRniq.png f3uQKY9.png behVjSE.png zekazca.png f3uQKY9.png AHFoSmc.png BRzGtem.png behVjSE.png  tkeNAmv.png behVjSE.png

Link para o comentário
Compartilhar em outros sites

  • 0
3 horas atrás, Dcan disse:

Faz sim, na source dependendo da versão .

Onde eu posso encontrar os arquivos que me deem um norte sobre alguns buffs, por exemplo no código vi um comando que da um buff de bau e frango sem me mandar os itens, como eu poderia fazer o mesmo porém com a divina? 
                SetAffect(client, 39, 14400, 4);
                SendAffect(client);

 

Onde encontro esse id 39?

Link para o comentário
Compartilhar em outros sites

  • 0

amigo uma coisa que vc precisa saber sobre a 7.56 e que algumas funções do jogo ficam dentro da tmsrv.exe e na src ficam as informações da dll entao por isso a 7.56 e muito limitado a não ser que vc saiba hookar o executavel

por isso eu desisti da versão antiga 

 

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, daviwyd1 disse:

amigo uma coisa que vc precisa saber sobre a 7.56 e que algumas funções do jogo ficam dentro da tmsrv.exe e na src ficam as informações da dll entao por isso a 7.56 e muito limitado a não ser que vc saiba hookar o executavel

por isso eu desisti da versão antiga 

 

Poxa, por isso nesse caso eu acabei limpando o código dos treinadores e eles continuam a executar a mesma função

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, daviwyd1 disse:

amigo uma coisa que vc precisa saber sobre a 7.56 e que algumas funções do jogo ficam dentro da tmsrv.exe e na src ficam as informações da dll entao por isso a 7.56 e muito limitado a não ser que vc saiba hookar o executavel

por isso eu desisti da versão antiga 

 

Não entendo muito mas estou procurando aprender e entender, pesquiso muito mas me parece que hoje falta bastante conteúdo... Você teria algo que possa me ajudar a entender melhor como funciona e posso fazer os hooks e ou como desabilitar funções nativas da tm( Caso seja possivel)

Link para o comentário
Compartilhar em outros sites

  • 0
Grego
Este post foi reconhecido pelo Grego.

daviwyd1 recebeu o emblema Usuário Contribuinte

Em 11/12/2021 em 10:58, MatheuzF disse:

Olá pessoal! Tudo joia? Estou com algumas dúvidas em relação ao funcionamento do servidor WYD...

Estou testando, modificando e analisando uma release 7.56 desde o inicio do game e suas funções mais básicas, e a dúvida são as seguintes
1 - Vamos dizer que programei um servidor do zero e somente fiz as funções para logar in-game e ter acesso consequentemente tudo ficará sem funções sem falas etc? Ou o cliente guarda algumas infos? Como por exemplo no meu caso não achei na source nem na release local de configuração dos treinadores da primeira quest e mesmo assim eles funcionam com as trocas de chave... (Espero que consigam entender)
2 - Seguindo o que disse acima também não encontrei onde configura-se o lv máximo dessa primeira área de treinamento, como eu poderia esta fazendo isso?

3 - Tudo o que rola no jogo por ser online depende de estar configurado em meu servidor? Ou o cliente guarda algumas informações?

1- não sei se a src e própria mais algumas aqui da WC tipo XWYD muito boa depois que eu corrigi ela em tudo notei que havia muitas limitações pra continuar nela 
mais se vc quiser editar algum npc vc vai procurar em npc.cpp no meu está assim esses npcs da quest inicial 
 

bool NPC::loki(const uint16_t client, p28Bh* const packet)
{
    auto mob = GetMobFromIndex(client);
    auto Item = Func::GetFirstSlot(client, SlotType::Inventory, 451);
    auto slotEmpty = 2;
    auto numberOfItems = Func::GetAmountOfItems(client, 0, slotEmpty);
    auto userData = &Global::userData[client];
    auto user = Func::GetUserFromIndex(client);

    if (Item == -1 || userData->CharacterInfo[user->Slot].QuestData.camp_1 == TRUE)
    {
        SendSay(packet->npcID, Language::instance().getString(BoaSorte));
        return true;
    }

    else if (numberOfItems < slotEmpty)
    {
        SendSay(packet->npcID, Language::instance().getStringFormat(SlotsPrecisa, numberOfItems));
        return true;
    }

    static STRUCT_ITEM pots[] = { { 400, 61, 50, 0, 0, 0, 0 }, { 405, 61, 50, 0, 0, 0, 0 } };

    for (int i = 0; i < 2; i++)
        PutItem(client, &pots);

    SendSay(packet->npcID, Language::instance().getStringFormat(EsperoTerAjudado, mob->Mob.Name));
    userData->CharacterInfo[user->Slot].QuestData.camp_1 = TRUE;
    return true;
}
bool NPC::gullveig(const uint16_t client, p28Bh* const packet)
{
    auto mob = GetMobFromIndex(client);
    auto Item = Func::GetFirstSlot(client, SlotType::Inventory, 452);
    auto slotempty = Func::GetFirstSlot(client, SlotType::Inventory, 0);
    auto userData = &Global::userData[client];
    auto user = Func::GetUserFromIndex(client);
    auto weapon = Func::checkWeaponClass(client);
    auto weaponEquiped = mob->Mob.Equip[6];

    if (Item == -1 || userData->CharacterInfo[user->Slot].QuestData.camp_2 == TRUE)
    {
    msg:
        SendSay(packet->npcID, Language::instance().getString(BoaSorte));
        return true;
    }

    if (weapon != -1)
    {
        SetItemBonus(&mob->Mob.Equip[6], 220, 0, 70, 0);
        SendItem(client, Equipment, 6, &mob->Mob.Equip[6]);
        SendSay(packet->npcID, Language::instance().getStringFormat(EsperoTerAjudado, mob->Mob.Name));
        userData->CharacterInfo[user->Slot].QuestData.camp_2 = TRUE;
        return true;
    }

    goto msg;

    return true;
}
bool NPC::heimdall(const uint16_t client, p28Bh* const packet)
{
    auto player = GetMobFromIndex(client);
    auto Item = Func::GetFirstSlot(client, SlotType::Inventory, 453);
    auto slotempty = Func::GetFirstSlot(client, SlotType::Inventory, 0);
    auto userData = &Global::userData[client];
    auto user = Func::GetUserFromIndex(client);

    if (Item == -1 || userData->CharacterInfo[user->Slot].QuestData.camp_3 == TRUE)
    {
        SendSay(packet->npcID, Language::instance().getString(BoaSorte));
        return true;
    }

    auto necessaryNumberOfItems = 5;
    auto numberOfItems = Func::GetAmountOfItems(client, 0, necessaryNumberOfItems);

    if (numberOfItems < necessaryNumberOfItems)
    {
        SendSay(packet->npcID, Language::instance().getStringFormat(SlotsPrecisa, numberOfItems));
        return true;
    }

    static STRUCT_ITEM classeA = { 4016, 0, 0, 0, 0, 0, 0 };

    for (int i = 0; i < 5; i++)
        PutItem(client, &classeA);

    SendSay(packet->npcID, Language::instance().getStringFormat(EsperoTerAjudado, player->Mob.Name));
    userData->CharacterInfo[user->Slot].QuestData.camp_3 = TRUE;
    return true;
}
bool NPC::chefe_trein(const uint16_t client, p28Bh* packet)
{
    auto mob = GetMobFromIndex(client);
    auto emblema = Func::GetFirstSlot(client, SlotType::Inventory, 524);
    auto itemName = Func::GetItemListItem(524);
    auto userData = &Global::userData[client];
    auto user = Func::GetUserFromIndex(client);

    if (emblema == -1 || userData->CharacterInfo[user->Slot].QuestData.camp_4 == TRUE)
    {
        SendSay(packet->npcID, Language::instance().getStringFormat(TragaOItem, itemName->Name));
        return true;
    }

    BASE_ClearItem(&mob->Mob.Inventory[emblema]);
    SendItem(client, Inventory, emblema, &mob->Mob.Inventory[emblema]);
    static uint16_t item[] = { 651, 652 };
    STRUCT_ITEM premio;
    BASE_ClearItem(&premio);
    premio.Index = item[rand() % 2];
    PutItem(client, &premio);
    SendSay(packet->npcID, Language::instance().getStringFormat(EsperoTerAjudado, mob->Mob.Name));
    userData->CharacterInfo[user->Slot].QuestData.camp_4 = TRUE;
    return true;
}



 

Link para o comentário
Compartilhar em outros sites

  • 0
19 horas atrás, daviwyd1 disse:

1- não sei se a src e própria mais algumas aqui da WC tipo XWYD muito boa depois que eu corrigi ela em tudo notei que havia muitas limitações pra continuar nela 
mais se vc quiser editar algum npc vc vai procurar em npc.cpp no meu está assim esses npcs da quest inicial 
 

bool NPC::loki(const uint16_t client, p28Bh* const packet)
{
    auto mob = GetMobFromIndex(client);
    auto Item = Func::GetFirstSlot(client, SlotType::Inventory, 451);
    auto slotEmpty = 2;
    auto numberOfItems = Func::GetAmountOfItems(client, 0, slotEmpty);
    auto userData = &Global::userData[client];
    auto user = Func::GetUserFromIndex(client);

    if (Item == -1 || userData->CharacterInfo[user->Slot].QuestData.camp_1 == TRUE)
    {
        SendSay(packet->npcID, Language::instance().getString(BoaSorte));
        return true;
    }

    else if (numberOfItems < slotEmpty)
    {
        SendSay(packet->npcID, Language::instance().getStringFormat(SlotsPrecisa, numberOfItems));
        return true;
    }

    static STRUCT_ITEM pots[] = { { 400, 61, 50, 0, 0, 0, 0 }, { 405, 61, 50, 0, 0, 0, 0 } };

    for (int i = 0; i < 2; i++)
        PutItem(client, &pots);

    SendSay(packet->npcID, Language::instance().getStringFormat(EsperoTerAjudado, mob->Mob.Name));
    userData->CharacterInfo[user->Slot].QuestData.camp_1 = TRUE;
    return true;
}
bool NPC::gullveig(const uint16_t client, p28Bh* const packet)
{
    auto mob = GetMobFromIndex(client);
    auto Item = Func::GetFirstSlot(client, SlotType::Inventory, 452);
    auto slotempty = Func::GetFirstSlot(client, SlotType::Inventory, 0);
    auto userData = &Global::userData[client];
    auto user = Func::GetUserFromIndex(client);
    auto weapon = Func::checkWeaponClass(client);
    auto weaponEquiped = mob->Mob.Equip[6];

    if (Item == -1 || userData->CharacterInfo[user->Slot].QuestData.camp_2 == TRUE)
    {
    msg:
        SendSay(packet->npcID, Language::instance().getString(BoaSorte));
        return true;
    }

    if (weapon != -1)
    {
        SetItemBonus(&mob->Mob.Equip[6], 220, 0, 70, 0);
        SendItem(client, Equipment, 6, &mob->Mob.Equip[6]);
        SendSay(packet->npcID, Language::instance().getStringFormat(EsperoTerAjudado, mob->Mob.Name));
        userData->CharacterInfo[user->Slot].QuestData.camp_2 = TRUE;
        return true;
    }

    goto msg;

    return true;
}
bool NPC::heimdall(const uint16_t client, p28Bh* const packet)
{
    auto player = GetMobFromIndex(client);
    auto Item = Func::GetFirstSlot(client, SlotType::Inventory, 453);
    auto slotempty = Func::GetFirstSlot(client, SlotType::Inventory, 0);
    auto userData = &Global::userData[client];
    auto user = Func::GetUserFromIndex(client);

    if (Item == -1 || userData->CharacterInfo[user->Slot].QuestData.camp_3 == TRUE)
    {
        SendSay(packet->npcID, Language::instance().getString(BoaSorte));
        return true;
    }

    auto necessaryNumberOfItems = 5;
    auto numberOfItems = Func::GetAmountOfItems(client, 0, necessaryNumberOfItems);

    if (numberOfItems < necessaryNumberOfItems)
    {
        SendSay(packet->npcID, Language::instance().getStringFormat(SlotsPrecisa, numberOfItems));
        return true;
    }

    static STRUCT_ITEM classeA = { 4016, 0, 0, 0, 0, 0, 0 };

    for (int i = 0; i < 5; i++)
        PutItem(client, &classeA);

    SendSay(packet->npcID, Language::instance().getStringFormat(EsperoTerAjudado, player->Mob.Name));
    userData->CharacterInfo[user->Slot].QuestData.camp_3 = TRUE;
    return true;
}
bool NPC::chefe_trein(const uint16_t client, p28Bh* packet)
{
    auto mob = GetMobFromIndex(client);
    auto emblema = Func::GetFirstSlot(client, SlotType::Inventory, 524);
    auto itemName = Func::GetItemListItem(524);
    auto userData = &Global::userData[client];
    auto user = Func::GetUserFromIndex(client);

    if (emblema == -1 || userData->CharacterInfo[user->Slot].QuestData.camp_4 == TRUE)
    {
        SendSay(packet->npcID, Language::instance().getStringFormat(TragaOItem, itemName->Name));
        return true;
    }

    BASE_ClearItem(&mob->Mob.Inventory[emblema]);
    SendItem(client, Inventory, emblema, &mob->Mob.Inventory[emblema]);
    static uint16_t item[] = { 651, 652 };
    STRUCT_ITEM premio;
    BASE_ClearItem(&premio);
    premio.Index = item[rand() % 2];
    PutItem(client, &premio);
    SendSay(packet->npcID, Language::instance().getStringFormat(EsperoTerAjudado, mob->Mob.Name));
    userData->CharacterInfo[user->Slot].QuestData.camp_4 = TRUE;
    return true;
}



 

Creio que esse código não esteja fazendo diferença no npc já que ele atende pela função nativa da tmserv, ai volto a pergunta caso alguém ou mesmo você possa me ajudar onde encontro conteúdo ou qualquer ajuda para entender melhor a tmserv e um norte para fazer os hooks, desativar as funçoes nativas etc

Link para o comentário
Compartilhar em outros sites

  • 0

O que te recomendo é que baixe um emulador, assim vai entender 100% do funcionamento, a 756 é basicamente programada em cima do processo  da TM / DB, ou seja você mexe nas funções ou reescreve elas 'injetando' direto na memória. Da experiência que tive com wyd te recomendo o seguinte:

 

-> Primeiramente o debugger é seu amigo, aprenda a usar o debugador do visual studio

-> Segundamente um hook é um 'gancho' na memória que te leva exatamente onde quer (valor, função, etc)

-> Terceiramente um ponteiro é um valor composto que te leva a algum lugar na memória

 

 

Se você quer entender 756: 

 

-> Leia a source

-> Estude Assembly x86 

-> Estude c++ 

-> Estude manipulação de memória, ponteiros... (pra entender como é feito os hooks)

-> Técnicas de disassemble (é bom saber pra entender o cliente de ambas as versões)

 

Se quer entender 762:

-> Leia a source

 

 

 

Sobre cliente:

 

-> Lembrando que se a DB e a TM da 7.56 é programada orientada ao processo, a client patch ainda mais... então é indispensável:

-> Lógica de antihack 

-> Entender assembly

-> Entender sobre manipulação de arquivos read/write

-> Caso queria entender de objetos 3d

-> Ler o forum atrás de editores de interface

-> Ler os métodos de manipulação de interfaces na clientpatch

-> Entender sobre threads tambem ajuda...

 

Editado por mpdownsv2

18+ Best Shopify CSS Dividers Themes Free & Premium 2022 &#8211; AVADA  Commerce Blog

 

👉 Colaborador de foruns desde 2015 e Membro Colaborador WC desde 2018

👉 Precisa de ajuda ? Chame no privado

👉 Hospedagem com proteção antiddos, WAF e implementação de infraestrutura

👉 Dev Java / Entusiasta PHP  e PLSQL

👉 Experiência com diversos jogos como WYD, WOW, MU, Scalet Blade, Talisman Online, Tantra Online, entre outros..

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

daria pra ficar noite toda escrevendo, uma coisa leva a outra, google e youtube também são seus amigos... pra sua felicidade todo conteúdo decente ta aqui na webcheats relacionados a wyd...

18+ Best Shopify CSS Dividers Themes Free & Premium 2022 &#8211; AVADA  Commerce Blog

 

👉 Colaborador de foruns desde 2015 e Membro Colaborador WC desde 2018

👉 Precisa de ajuda ? Chame no privado

👉 Hospedagem com proteção antiddos, WAF e implementação de infraestrutura

👉 Dev Java / Entusiasta PHP  e PLSQL

👉 Experiência com diversos jogos como WYD, WOW, MU, Scalet Blade, Talisman Online, Tantra Online, entre outros..

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
Em 14/12/2021 em 20:57, mpdownsv2 disse:

O que te recomendo é que baixe um emulador, assim vai entender 100% do funcionamento, a 756 é basicamente programada em cima do processo  da TM / DB, ou seja você mexe nas funções ou reescreve elas 'injetando' direto na memória. Da experiência que tive com wyd te recomendo o seguinte:

 

-> Primeiramente o debugger é seu amigo, aprenda a usar o debugador do visual studio

-> Segundamente um hook é um 'gancho' na memória que te leva exatamente onde quer (valor, função, etc)

-> Terceiramente um ponteiro é um valor composto que te leva a algum lugar na memória

 

 

Se você quer entender 756: 

 

-> Leia a source

-> Estude Assembly x86 

-> Estude c++ 

-> Estude manipulação de memória, ponteiros... (pra entender como é feito os hooks)

-> Técnicas de disassemble (é bom saber pra entender o cliente de ambas as versões)

 

Se quer entender 762:

-> Leia a source

 

 

 

Sobre cliente:

 

-> Lembrando que se a DB e a TM da 7.56 é programada orientada ao processo, a client patch ainda mais... então é indispensável:

-> Lógica de antihack 

-> Entender assembly

-> Entender sobre manipulação de arquivos read/write

-> Caso queria entender de objetos 3d

-> Ler o forum atrás de editores de interface

-> Ler os métodos de manipulação de interfaces na clientpatch

-> Entender sobre threads tambem ajuda...

 

Fico grato pela resposta e já dei inicio ao estudo do que passou, já tenho um conhecimento em c++ fraco mas tenho e agora iniciarei nos demais! Breve estarei de volta!!

Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Cadastre-se Agora para publicar com Sua Conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

 Compartilhar

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.