Há mais de um ano que eu não visito a aldeia, o que me trouxe aqui foi um velho problema que eu sempre quis solucionar: o servidor do Netplay Plus. Eu estava estudando o código de máquina e como os compiladores trabalham (tarefas da faculdade) quando encontrei um projeto do Netplay Plus e lembrei de todos os problemas, daí eu percebi que poderia matar dois coelhos com uma cajadada só: editar o binário do servidor (binary patching; programação assembly) e assim aprimorar meus conhecimentos, além de contribuir para a comunidade maker.
Netplay Plus
O Netplay Plus (Netplay) é um framework para RPG Maker que permite a criação de jogos RPG Online. Foi um projeto inciado em meados de 2006 pela equipe Netplay Plus General Team. O servidor desse projeto foi escrito originalmente em Ruby; quando na versão ~1.6, o Netplay ganhou um servidor escrito em C++ (chamado "Netplay C++ Server") por SuicideManic. O Netplay tem sido continuado até recentemente, com as versões Netplay Master, por exemplo.
Netplay C++ Server
O Netplay tem sido atualizado, mas o servidor não. A versão 0.8 (de 2006) é a usada, e apresenta os seguintes problemas:
* A programação server-side é muito limitada, pois aquele script lua (startup.lua) é carregado para cada usuário que se conecta ao servidor, ou seja, é criado um interpretador Lua para cada jogador (apesar disso, não há concorrência na execução dos scripts).
* O interpretador Lua é passivo, pois aguarda os comandos do usuário (função OnCMD).
* Pelos motivos acima, cada cliente possui um estado de jogo próprio (um Mob, por exemplo, pode estar em posições diferentes para cada jogador).
* Processamento das mensagens é lento, pois as mensagens são envidas como texto.
* Algumas gambiarras.
* A programação server-side é muito limitada, pois aquele script lua (startup.lua) é carregado para cada usuário que se conecta ao servidor, ou seja, é criado um interpretador Lua para cada jogador (apesar disso, não há concorrência na execução dos scripts).
* O interpretador Lua é passivo, pois aguarda os comandos do usuário (função OnCMD).
* Pelos motivos acima, cada cliente possui um estado de jogo próprio (um Mob, por exemplo, pode estar em posições diferentes para cada jogador).
* Processamento das mensagens é lento, pois as mensagens são envidas como texto.
* Algumas gambiarras.
Netplay Server 1.2
Essa é a versão completa. As modificações que eu pretendia fazer foram feitas. O server está bem melhor, principalmente com a implementação do novo protocolo. Como as edições foram feitas em assembly, o código ficou mais otimizado.
- Changelog:
- [Update 1.2] - 19/12/2016Versão completa. Todas as falhas da versão 0.8 foram corrigidas.
## Adicionado
- O novo protocolo.
- Novos eventos para o ambiente Lua.
## Modificado
- No ambiente Lua, as funções do NP() foram corrigidas.
- Todas as modificações nas funções reduziram o tamanho das mesmas (quantidade de instruções; otimização).
- O recurso de banir IP e estabelecer a quantidade máxima de jogadores agora funciona.
- O chat do servidor pode ser usado como terminal de comando.
- Outras coisas não visuais.
## Removido
- O velho protocolo, "<tags>" e cia.
[Update 1.0] - 07/12/2016
Correção das principais falhas da versão 0.8, mas não está completa.
## Adicionado/Modificado
* O servidor usa um único interpretador Lua para todos os jogadores.
* O interpretador lua não é mais passivo.
- Foi adicionada a função sUpdate(): sinal de update enviado a cada update frame do servidor.
* Foi alterada uma pequena parte do protocolo.
- As mensagens agora podem ser enviadas como byte streams.
- O processamento das mensagens ficou mais eficiente.
* Foi adicionada a função Close()
- É um sinal enviado pelo servidor para informar que o interpretador está sendo finalizado.
## Removido - coisas desnecessárias.
- O servidor não responde mais aos comandos: <ver>, <mod>, <check>, <upd>.
- O chat do servidor não recebe mais as mensagens de chat do jogo.
Netplay Server 1.2
Download
Download
Senha para descompactar
dd0d260e08c865a56304bc92d90b9a98
Créditos
SuicideManic, GoldenAura3, Destined.
blackcrow
Créditos
SuicideManic, GoldenAura3, Destined.
blackcrow
Última edição por blackcrow em Dom Jan 08, 2017 9:45 pm, editado 9 vez(es)