Postado Outubro 24, 2019 5 anos Este é um post popular. Push Cruzado Como prometido, hoje eu vou ensinar como implementar o push cruzado. Este tutorial é feito especificamente para a versão 2 do OTX, porem, devido a simplicidade do código (sério, é muito simples, você vai se surpreender), acredito que possa ser implementado em qualquer source code disponível atualmente. Antes do tutorial vou falar sobre como surgiu o "sistema" e de como o mesmo ficou popular entre os jogadores de Baiak, então senta que lá vem história. Se você não tem interesse na história de como surgiu e se popularizou e só está aqui pelo tutorial de como implementar, pule para o final do tópico. História Familiar para alguns e desconhecido para muitos outros, o que afinal é esse tal de push cruzado que alguns tanto falam? Para entender como surgiu, teremos que voltar alguns anos no tempo, em uma época que OTX não existia e o TFS 1.x ainda era um sonho distante, época essa em que a maioria dos servidores com protocolo 8.60 utilizavam como engine a velha TFS 0.3.6. Foi neste período que alguns jogadores de enforced descobriram este bug, isso mesmo que você leu, o push cruzado é na verdade um bug! Mas calma! é apenas um bug inofensivo, mesmo assim, não deixa de ser um bug, que hoje em dia é divulgado como feature nos servidores. Antes de entrar mais a fundo nessa questão, vou terminar de explicar como ele foi descoberto, como ele pode ser utilizado e as vantagens que ele concede aos jogadores que sabem como utiliza-lo. Nos saudosos dias em que o protocolo 8.60 estava no seu auge na comunidade OpenTibia (70% da Otserv List era composta por servidores 8.60), poucos tinham acesso para a até então recente TFS 0.4 (nesta época TFS 0.4 não era pública, e só podia ser obtida doando uma quantia aos desenvolvedores). Até então, era raro encontrar servidores rodando com TFS 0.4, mais raro ainda um servidor enforced/war, mas assim como uma agulha no palheiro, ele estava lá, Mega-War, o que eu acredito que tenha sido o primeiro servidor de war 8.60 a usar a recente distro. OTServList em 2011 Spoiler Época de ouro no OpenTibia, com a contagem da lista atingindo até 55 mil jogadores online simultaneamente. Nesta época o Mega-War atingia cerca de até 300 jogadores online, esse numero é um valor absurdo para um servidor de war, até mesmo hoje em dia. E foi neste servidor que o push cruzado foi descoberto, por jogadores dedicados a se aperfeiçoarem no PvP, estes foram os primeiros e os que deram origem ao que hoje se conhece como enforcedeiros (jogadores assíduos de servidores de war, com uma habilidade surreal no PvP). Mas algumas questões ficam no ar, TFS 0.4 era realmente recente, porem o protocolo 8.60 já existia há um bom tempo no TFS 0.3, então porque este bug não foi descoberto antes? porque neste servidor em especifico se outros servidores de war 8.60 já existiam? A resposta é: este bug surgiu justamente no TFS 0.4, para ser mais especifico na rev 3777, tanto é que a versão anterior do TFS (0.3) não continha este bug e nas revisões seguintes do TFS 0.4 ele foi corrigido, com isto o push cruzado se "perdeu", existindo somente no TFS 0.4 (Rev 3777). Devido a isto, os servidores privados de enforced (onde se encontra a maioria dos enforcedeiros hoje em dia) e alguns servidores baiaks utilizam TFS 0.4 até hoje, mesmo existindo opções excelentes em comparação, como TFS 1.x e OTX, tudo devido a este bugzinho que se popularizou muito entre alguns jogadores ao longo do anos. Mas como o push cruzado se popularizou tanto a ponto de chegar ao que é hoje? Os enforcedeiros tinham um estilo único de PvP, fazendo jogadas que para muitos até hoje não é possível sem o uso de bot. Com o tempo, estes jogadores foram gravando e postando vídeos no Youtube de suas jogadas, para muitos dos que assistiam, tal nível de habilidade só podia ser atingido com auxílio do bot, os mais humildes, aqueles que aceitavam que aquilo era possível sem o uso de bot, entravam nestes servidores de war com a intenção de aprender, não só o push cruzado, mas o push a distancia, a velocidade para realizar jogadas e a visão de jogo num geral. Alguns dos vídeos antigos da época do Mega-War. Spoiler Jogadores o acusando de utilizar Bot após uma jogada: 4:47 Push a distancia com mouse recorder: 9:11 Neste ultimo vídeo em especial, é possivel ver o push cruzado sendo realizado por volta de 1:22 e 3:20 de vídeo. No inicio de 2013, sem motivo aparente o Mega-War simplesmente fechou. Mas onde há demanda, sempre haverá oferta, com isso surge o ainda mais famoso Total-War. O Mega-War foi o inicio para essas estrelas do PvP, mas foi no Total-War que a coisa realmente cresceu. Com cada vez mais vídeos de jogadores exibindo jogadas espetaculares, mais aparecia os chamados novatos (jogadores que admiravam os enforcedeiros e tinham interesse em aprender e praticar as técnicas usadas), na época do Mega-War, dava pra contar nos dedos a quantidade de pessoas que sabiam fazer o push cruzado, afinal, era uma coisa totalmente nova, com poucos meses do Total-War online esse numero cresceu exponencialmente, o servidor ficou no seu auge por cerca de 1 ano e alguns meses. Alguns vídeos de enforcedeiros no Total-War (incluindo o meu ?). Spoiler Cruzado sendo executado no vídeo acima: 0:20 - 4:06 - 6:14 Cruzado sendo executado no vídeo acima: 1:18 - 6:42 - 7:46 Cruzado sendo executado: 1:47 - 3:45 - 3:52 - 5:42 - 6:44 - 8:00 - 8:50 - 11:38 - 11:42 - 12:07 - 14:20 - 14:57 Poucos sabem disso, mas eu era GM no Total-War, ajudei no servidor por alguns meses até ter um desentendimento com o dono, nesse momento eu decidi abrir o meu próprio servidor enforced. Eu acompanho a comunidade brasileira de OpenTibia desde 2010, mas nunca tinha levado a sério a ideia de ter meu próprio servidor até então, foi nessa época que eu criei a minha conta aqui no TibiaKing, pois o antigo XTibia (lugar onde eu conheci o que era OpenTibia) havia fechado. No ano de 2014 encontrar as sources do TFS 0.4 já não era mais problema, estavam por todo lugar. Eu peguei um datapack com mapa de venore (assim como o Mega e Total-War) e coloquei online, nesse período eu comecei a estudar a fundo como funcionava OTServers. Devido a testes de diversas versões diferentes de source, já na época eu percebi que push cruzado era algo exclusivo do TFS 0.4 (isso explica porque o dono do Total-War se recusava a fazer um upgrade), era também tempo do inicio do repositório do OTX que se mostrava promissor em relação ao TFS 0.4. Cerca de 1 ano depois da abertura do meu servidor eu decidi tentar adicionar o cruzado nas sources do OTX2, uma pessoa dedicada com um objetivo, mas sem saber de nada, por semanas eu comparei o código de ambas as sources, arquivo por arquivo (haja dedicação), e por fim consegui adicionar ao OTX (quando eu descobri o que era, eu confesso que de imediato me arrependi de ter gasto tanto tempo com isso). Com essa alteração eu resetei e reinaugurei meu servidor, o servidor era chamado de Ultra-War, mas ficou mais conhecido por todos como Sv2 porque o servidor era hosteado em 3 locais diferentes, e 1 dos locais era aqui no Brasil, este era conhecido como Sv2. O Ultra-War foi o primeiro servidor a ter o push cruzado sem utilizar do TFS 0.4, na época OTX já estava se tornando muito popular pois dava uma sensação de ping menor ao jogar, rodando o servidor com OTX e em 3 hosts diferentes, os poucos players que sobraram no Total-War migraram para o Ultra-War, e assim como o Total-War ocupou o lugar do Mega-War no seu fim, o Sv2 passou a segurar esta tocha. Alem dos já antigos enforcedeiros, jogadores novos não paravam de vir de todos os lugares, muitos deles quando aprendiam e aperfeiçoavam as técnicas iam logo aplicar em servidores UP Level (principalmente Baiaks), foi ai que o push cruzado se popularizou fora do enforced, com os jogadores pedindo aos administradores para adicionarem algo que eles sequer tinham noção do que era. Vídeos do jogador que eu acredito ser o maior responsável pela popularidade do PvP no estilo enforced nos Baiaks. Spoiler Enfim... a história acaba por aqui (até porque ficou longa pra kct), no final das contas a história não foi sobre o push cruzado em si, mas sobre o enforced e os enforcedeiros num geral. Agora vamos para a parte que todos querem ver. O que é e como utilizar O push cruzado nada mais é do que permitir que o jogador empurre (push) outros jogadores e criaturas enquanto se movimenta ao mesmo tempo, basicamente é apenas isso. O que isso proporciona ao jogador, ai já é outra historia (brincadeira, depois dessa ultima, chega de história), isso permite ao jogador executar jogadas que sem o push cruzado seriam executadas de maneira bem mais lenta, e até mesmo jogadas que seriam impossíveis de serem realizadas sem o uso do famoso cruzado. Veja abaixo alguns exemplos. Spoiler 1° - Esta é a maneira mais simples e fácil de executar o cruzado, inclusive, é esta maneira de usar que da nome ao mesmo, o famoso push cruzado. Como executar: Estando a 2 SQMs de distancia do alvo, o empurre para o SQM a sua frente e ande um SQM na mesma direção (ambas as ações devem ser realizadas ao mesmo tempo). 2° - Está é outra maneira comum que realizar o push cruzado, semelhante a anterior o processo é mesmo, mudando apenas a direção em que você deve andar ao realizar o push. Como executar: Mesmo processo da anterior, basta andar para algum dos lados ao invés de andar para a frente. 3° - Utilizar o push cruzado em conjunto com o push a distancia possibilita realizar jogadas de maneira extremamente rápida. Como executar: Utilizar o cruzado em conjunto com o push a distancia não é uma tarefa difícil, o difícil é realizar com precisão e na mais alta velocidade, confesso que exige algum tempo de prática. Jogadas impossíveis Todas as jogadas mostradas acima podem ser realizadas sem o uso do cruzado, de maneira bem mais lenta, mas ainda assim seria possivel. Porem agora, irei mostrar duas jogadas que seriam impossíveis de serem realizadas sem o uso do push cruzado. 1° - O famoso push invisível conhecido entre os enforcedeiros, possibilita empurrar um jogador sem de fato tocar nele (note no Gif abaixo que em nenhum momento eu cheguei a ficar do lado do alvo). Como executar: Fique a uma certa distancia do alvo (entre 4 a 6 SQMs de distancia), o empurre para qualquer local com até 2 SQMs de distancia do ponto original em que está. Após executado o push, seu personagem irá se movimentar para executar a ação, neste momento ande em direção contrária ao alvo e controle o personagem até o momento em que o alvo ficar a apenas 1 SQM de distancia do ponto em que foi empurrado, é neste exato instante que você deve deixar a ação ser executada. 2° - Esta não tem um nome especifico entre os enforcedeiros, mas possibilita empurrar e retirar o alvo de locais que tradicionalmente seriam impossível. Como executar: Empurre o alvo para algum outro SQM próximo a escada, desça a escada antes a ação do push seja realizada (ambas as ações devem ser executadas ao mesmo tempo, com timing perfeito), ao descer, suba imediatamente a escada, neste momento o alvo vai ser empurrado. Estas jogadas só serão possíveis de serem executadas em um servidor que tenha o push cruzado. Assim como dito anteriormente, o cruzado é basicamente permitir que o jogador se movimente e empurre simultaneamente, isso possibilita realizar jogadas deste tipo. Se seu personagem estiver a distancia do alvo, se movimentar, descer e subir escada não irão cancelar a ação do push. Estas são algumas das jogadas que aprendi no meu tempo como enforcedeiro, eu não estou atualizado em como está a cena no enforced atualmente, provavelmente algum jogador já deve ter inventado jogadas que são ainda mais blow mind que essas. Tutorial Como eu mencionei antes, o push cruzado é na verdade um bug, caso implementado, isso possibilita aos jogadores realizarem jogadas que sem ele seriam impossíveis. Se mesmo ciente disto você deseja seguir em frente, basta seguir os passos abaixo. Spoiler Abra o arquivo game.cpp da sua source e procure pela seguinte função. bool Game::playerMove(uint32_t playerId, Direction dir) Se sua source for OTX2 a função completa deve estar desta maneira. bool Game::playerMove(uint32_t playerId, Direction dir) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; player->setIdleTime(0); if(player->getNoMove()) { player->sendCancelWalk(); return false; } std::list<Direction> dirs; dirs.push_back(dir); player->setNextWalkActionTask(NULL); return player->startAutoWalk(dirs); } Procure pela seguinte linha no código. player->setNextWalkActionTask(NULL); E adicione essa linha logo acima. if(!g_config.getBool(ConfigManager::PUSH_CRUZADO)) A função completa deve ficar parecida com esta: bool Game::playerMove(uint32_t playerId, Direction dir) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; player->setIdleTime(0); if(player->getNoMove()) { player->sendCancelWalk(); return false; } std::list<Direction> dirs; dirs.push_back(dir); if(!g_config.getBool(ConfigManager::PUSH_CRUZADO)) player->setNextWalkActionTask(NULL); return player->startAutoWalk(dirs); } Depois disso, adicione a seguinte linha no arquivo configmanager.cpp dentro da função bool ConfigManager::load() m_confBool[PUSH_CRUZADO] = getGlobalBool("PushCruzado", false); No arquivo configmanager.h procure por enum bool_config_t e verá uma lista, adicione a linha abaixo nesta lista PUSH_CRUZADO, Agora no seu config.lua adicione: PushCruzado = true Pronto, com isso você pode habilitar ou desabilitar o push cruzado diretamente pelo config.lua, sem a necessidade de recompilar a source. Créditos Me, myself and I. Editado Novembro 2, 2019 5 anos por WooX (veja o histórico de edições)
Postado Outubro 24, 2019 5 anos Parabéns, seu tópico de conteúdo foi aprovado! Muito obrigado pela sua contribuição, nós do Tibia King agradecemos. Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP. Spoiler Congratulations, your content has been approved! Thank you for your contribution, we of Tibia King we are grateful. Your content will help many other users, you received +1 REP.
Postado Outubro 24, 2019 5 anos Tópico muito bonito, história muito legal também, eu queria ter a paciência que você tem com organizações de tópicos kkk Mas então, tá de parabéns irmão pelo esforço em trazer essa informação de forma detalhada ao público, tem meu respeito. Continue nessa pegada que tenho certeza que seu nome vai lá em cima. É nois!
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.