-
Notifications
You must be signed in to change notification settings - Fork 2
Guia ‐ OTClient Redemption Web
Sumário
OTClient Redemption adaptado para rodar em navegadores web (WebGL2), utilizado para se conectar a OT Servers com suporte a websockets (via proxy ou nativo). Adaptado por OTArchive / OTServList Brasil.
Primeiro servidor a implementar: arm.skalski.pro - ThaisWar with bots 8.6 OTS (by Gesior.pl!)
Criar conta: https://arm.skalski.pro/?subtopic=createaccount
Para verificar se o client base abre em seu navegador, acesse a demo. Essa versão não contém assets, então não serve para conectar em servidores.
Source da demo.
Idealmente você irá compilar sua própria versão com os arquivos necessários pré-carregados como na demo, incluindo seus assets. Dito isso, você consegue testar rapidamente o OTClient Web completo, utilizando a versão modular do OTArchive. Com essa versão você pode utilizar seus próprios assets e se conectar a um servidor.
Você vai precisar de um arquivo .zip contendo o init.lua, as pastas data, modules e demais que irá utilizar. Utilize arquivos compatíveis com o OTClient Redemption.
Altere g_game.loginWorld
em modules/client_entergame/characterlist.lua
para apontar para o ip e porta do game world do server que deseja se conectar, exemplo:
g_game.loginWorld(G.account, G.password, charInfo.worldName, 'testserver.otarchive.com', 443,
charInfo.characterName, G.authenticatorToken, G.sessionKey)
A porta padrão do game world é a 7172, se não alterar, ela será automaticamente redirecionada para a 443.
Existem duas opções:
- .zip local
- .zip remoto
Para um teste rápido, utilize o zip armazenado em seu computador para instalar os arquivos e iniciar o client.
Se desejar realizar testes compartilhados com mais pessoas, poderá optar por disponibilizar o arquivo .zip para download em seu servidor, por meio de link direto. Para utilizar essa opção, será necessário que o servidor utilize HTTPS e entregue o arquivo com a Header Access-Control-Allow-Origin: https://webclient.otarchive.com, para que o OTArchive possa baixar e instalar automaticamente. Caso seu servidor web tenha suporte para arquivos .htaccess, você poderá criar um com o seguinte conteúdo:
Header set Access-Control-Allow-Origin "https://webclient.otarchive.com"
AddType application/zip .zip
Coloque o arquivo .htaccess na mesma pasta do arquivo .zip.
- Acesse o OTClient Web Modular
- Instale os arquivos utilizando o método desejado
- .zip local: clique em "open" e selecione o arquivo .zip em seu computador.
- .zip remoto: adicione o parâmetro gameData apontando para o link de download do arquivo .zip na URL e acesse. Exemplo:
https://webclient.otarchive.com/?gameData=https://dominio/pasta/otclient.zip
Com os arquivos instalados, a opção "Play" irá aparecer. Se seus arquivos estiverem ok, o client irá abrir e estará pronto para uso.
A versão modular utiliza a porta 443 para conexão (no lugar da 7172).
Para que o client possa se conectar, é necessário que o servidor de login e de jogo utilize SSL/TLS.
Um vídeo mostrando a demo e depois a versão modular conectando: https://www.youtube.com/watch?v=sGuYmr728eY
Compile sua própria versão com seus arquivos pré-carregados para download e início mais rápidos!
Aviso: Desenvolvimento e testes realizados em ambiente Windows. Adaptações em comandos podem ser necessárias.
-
Instale o Emscripten (emsdk)
- Certifique-se de que o comando
emmake
é reconhecido após a instalação.
- Certifique-se de que o comando
-
Instale o vcpkg
- Clonar o repositório e rodar bootstrap-vcpkg é suficiente.
-
Baixe LUA 5.1 compilado para WASM ou compile utilizando make e o emscripten.
- Mova o código fonte e a lib compilada ou extraia a pasta baixada lua51 para
browser/include/lua51
- Luajit não funciona em navegadores, então precisaremos usar o LUA 5.1. Além disso, a versão 5.1 não está disponível no vcpkg.
- Para compilar com o emscripten, edite o arquivo
Makefile
e altere o campoCC= gcc
paraCC= emcc
. Compile utilizando:
- Mova o código fonte e a lib compilada ou extraia a pasta baixada lua51 para
emmake make posix
-
Instale o CMake
-
Instale o Ninja
-
Crie a variável de ambiente NINJA apontando para a pasta contendo o ninja.exe
-
Inclua a variável em Path
-
-
Limpe as compilações do vcpkg que estão em cache, caso já tenha usado o vcpkg outras vezes. Isso pode ser necessário para garantir que os patches de pthread apliquem corretamente. Então, caso já tenha usado o vcpkg antes, delete a pasta
C:\Users\Usuario\AppData\Local\vcpkg
-
Compile o client versão debug
- Com a versão debug, você conseguirá testar localmente acessando via
localhost
sem SSL/TLS. Localhost é a única maneira de testar sem precisar de certificado, pois os navegadores exigem. - Navegue até a pasta do OTClient
- Para compilar, precisamos combinar configurações do vcpkg e emscripten, então modifique o comando para os caminhos corretos em seu PC:
cmake -G Ninja -S . -B build "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=C:\emsdk\upstream\emscripten\cmake\Modules\Platform\Emscripten.cmake" "-DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=wasm32-emscripten" "-DVCPKG_OVERLAY_PORTS=C:\otclient\browser\overlay-ports" "-DCMAKE_MAKE_PROGRAM=NINJA" "-DOPTIONS_ENABLE_IPO=OFF" "-DTOGGLE_BIN_FOLDER=ON" "-DCMAKE_BUILD_TYPE=Debug"
- Em seguida, inicie a compilação:
cmake --build build
- Os arquivos estarão disponíveis em
build/bin
, para testar execute
emrun build/bin/otclient.html
- Com a versão debug, você conseguirá testar localmente acessando via
-
Compile o client versão release
- Altere
"-DCMAKE_BUILD_TYPE=Debug"
para"-DCMAKE_BUILD_TYPE=Release"
no comando acima. - Essa versão só poderá se comunicar com servidores via HTTPS e WSS.
- Altere
Com a versão debug, você consegue testar localmente conectando-se via localhost. Em meus testes utilizei MariaDB, Canary e login-server com modificação para enviar headers CORS (necessário).
Para enviar uma requisição e obter uma resposta de um domínio diferente do de origem, é necessário o uso de headers CORS. Por exemplo, o login-server-cors acrescenta, entre outras, a header
access-control-allow-origin: *
para permitir solicitações de qualquer origem.
A segunda coisa necessária é suporte a websockets. Por sorte, existem programas que fazem proxy automático de websockets
para posix sockets
, como o Websockify.
Por padrão a porta que o client vai utilizar para se conectar ao jogo será a 443
, caso não altere em characterlist.lua
conforme mencionado anteriormente.
Altere para, por exemplo, 7979 para testar localmente:
g_game.loginWorld(G.account, G.password, charInfo.worldName, localhost, 7979,
charInfo.characterName, G.authenticatorToken, G.sessionKey)
Podemos então, configurar o Websockify para fazer proxy de requisições websocket da porta 7979
para a 7172
:
websockify -v localhost:443 localhost:7172
Utilize o comando emrun
para testar, conforme mencionado no guia de compilação.
Caso deseje testar seu próprio servidor web para entregar o otclient.html
e demais arquivos, será necessário definir algumas headers que o emrun
já faz automaticamente:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Essas headers são necessárias para que o navegador permita acesso a SharedArrayBuffers
, algo que o client precisa para funcionar com pthreads.
Caso o servidor tenha suporte a .htaccess, você pode utilizar a seguinte configuração:
Header set Cross-Origin-Embedder-Policy "require-corp"
Header set Cross-Origin-Opener-Policy "same-origin"
Header set Cross-Origin-Resource-Policy "cross-origin"
AddType application/wasm .wasm
AddType application/octet-stream .data
AddType application/javascript .js
Quando for disponibilizar seu client na web, ele precisará abrir via HTTPS e utilizar as headers mencionadas anteriormente. Dependendo da sua configuração, também será necessário entregar os arquivos .wasm
e .data
com o a header Content-Type
correta.
application/wasm para .wasm
application/octet-stream para .data
Lembrando que as conexões agora só funcionarão por meio de HTTPS e WSS, então seu server precisa ter suporte.
MariaDB + Canary + AAC + nginx + websockify + cloudflare Essa opção não é recomendada para servidores médios/grandes e deve servir apenas para testes.
A cloudflare permite conexões wss, mas pode limita-la dependendo do uso. (Free)
Utilizando o nginx para fazer proxy e a Cloudflare com SSL Flexível, podemos facilmente configurar conexões seguras para nossos endpoints.
Exemplo de configuração nginx para receber conexões wss na porta 443 e enviar para a 7979 (a qual o websockify estará ouvindo):
server {
listen 80;
listen [::]:80;
server_name server.exemplo.com;
location / {
# redirect all HTTP traffic to localhost:7979
proxy_pass http://localhost:7979;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Se for utilizar essa configuração, configure seu client para utilizar a porta 443 (exemplo acima, na seção do client modular, arquivo characterlist.lua).
Exemplo de configuração nginx para seu AAC funcionando na porta 3000:
server {
listen 80;
listen [::]:80;
server_name testaac.otarchive.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ($request_method = OPTIONS ) {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, HEAD';
add_header 'Access-Control-Allow-Headers' 'Authorization, Origin, X-Requested-With, Content-Type, Accept';
return 200;
}
#if ($request_method ~* '(GET|POST)') {
#add_header 'Access-Control-Allow-Origin' '*';
#}
}
}
Você também pode optar por configurar as headers utilizando as Regras de Transformação da Cloudflare.
Você pode utilizar certificados Let's Encrypt e configura-los em seu servidor web e no Websockify para que eles recebam as conexões diretamente.
Altere o arquivo browser/shell.html
para customizar a página html que será gerada.
Utilize mods e módulos lua conforme de costume.
Disponibilizou um client web para seus jogadores? Envie um email para contato@otservlist.com.br e adicionaremos o seu servidor na categoria, com um botão "Jogar Agora".