"OTPatcher" : Estudo de caso
Problema
Servidores OpenTibia com sprites customizados possuem dificuldades em dar certo devido a falta de atenção dada a essa área. Além disso, existem muitos limites encontrados em criar-se itens personalizados devido a um pseudo-limite existente.
Introdução
Em muitos jogos quando há atualizações, existe um cliente patcher que é responsável por fazer um controle de versão, com isso é possível fazer com que o jogador baixe apenas quantidade pequenas de dados, não cabendo a este ter que baixar novamente dados que já existem e que na grande maioria dos casos, é a maior parte.
Em OpenTibia algo como isso traz um grande avanço pois a área de desenvolvimento de novos gráficos (spriting) e modificações no arquivo DAT as vezes é visada por muitos, porém nem sempre é levada adiante por causa de limitações como baixar arquivos realmente muito grandes. O que torna ainda mais difícil uma atualização constante destes.
Como funciona um controle de versão básico
O processo é bem simples: é feita uma comparação entre o arquivo-alvo e o arquivo-base e disso são descartados os bytes semelhantes, gerando assim as diferenças.
Em controles de versão avançados como CVS ou SVN é possível usar esse recurso para ver linhas de código diferentes. É muito útil em projetos conjuntos e servem como um log de ações.
Solução
Armazenar informações de mudanças por versão e um identificador por versão ajuda muito. O processo passa a ser um pouco menos dinâmico, porém mais eficiênte.
Primeiro, é feita a busca em um registro pela versão do usuário e a análise da versão do servidor, e por comparações lógicas é feita uma atualização de cada revisão graduada da versão do usuário até versão do servidor de forma que estas no final do processo sejam idênticas.
Segundo, para um melhor desempenho o programa deve identificar antes do processo cada parte modificada da versão original para que somente estes sejam alterados e os demais permaneçam intactos (não faz sentido modificar algo para a mesma coisa).
Infelizmente esse processo pode ser demorado, já que depende de vários aspectos tais como a velocidade de processamento dessas informações e o tamanho de cada arquivo a ser analizado.
Por último, é feito o download desses dados que nada mais são que as diferenças entre os dados do servidor e os dados do usuário. Esses dados são temporários e após tudo terminado devem ser inseridos no arquivo base do usuário. A inserção deve levar em conta a posição do arquivo em que cada dado deve ser inserido. Esse passo é bastante delicado e qualquer problema poderá corromper os dados, por isso, é recomendado checagens de hash MD5 para ver se a integridade após fim de processo é igual com a do servidor.
O arquivo então é salvo e a atualização termina.