From 0565535db331403d76074a8beff60336ee6d52e8 Mon Sep 17 00:00:00 2001 From: Unbistrackted <112902220+Unbistrackted@users.noreply.github.com> Date: Tue, 31 Mar 2026 09:47:33 -0300 Subject: [PATCH 01/14] doc: remake PT-BR documentation --- .../documentation/localization/README-BR.md | 89 +++++++++++-------- 1 file changed, 52 insertions(+), 37 deletions(-) diff --git a/.github/documentation/localization/README-BR.md b/.github/documentation/localization/README-BR.md index e6f6102b89..1a5626d747 100644 --- a/.github/documentation/localization/README-BR.md +++ b/.github/documentation/localization/README-BR.md @@ -11,84 +11,99 @@ -O EXILED é uma estrutura para plug-ins de alto nível aos servidores de SCP: Secret Laboratory. Ele oferece um sistema de eventos para os desenvolvedores usarem com o intuito de manipular, alterar o código do jogo ou implementar suas próprias funções. -Todos os eventos do EXILED são codificados com Harmony, o que significa que não requerem edição direta dos Assemblies do servidor para funcionar, o que permite dois benefícios exclusivos. +O EXILED é uma Framework de alto nível para a criação de plug-ins direcionado a servidores de SCP: Secret Laboratory. Ele oferece um sistema de eventos para os desenvolvedores, com o objetivo de manipular, alterar o código do jogo ou implementar suas próprias funções. +Todos os eventos do EXILED são feitos com [Harmony](https://harmony.pardeike.net/articles/intro.html), significando que não requerem edição direta dos Assemblies/Código Base do servidor para funcionar, o que permite dois benefícios exclusivos: - - Em primeiro lugar, todo o código da estrutura pode ser publicado e compartilhado livremente, permitindo que os desenvolvedores entendam melhor *como* ele funciona, além de oferecer sugestões para adicionar ou alterar suas funções. - - Em segundo lugar, como todo o código relacionado à estrutura é feito fora da Assembly do servidor, coisas como pequenas atualizações do jogo terão pouco ou nenhum efeito na framework, tornando-a mais compatível com futuras atualizações do jogo, além de facilitar a atualização quando *for* necessário fazê-la. + - Todo o código da Framework pode ser publicado e compartilhado livremente, permitindo que os desenvolvedores possam entender melhor *como* funciona. Também podendo oferecer sugestões para adicionar ou alterar suas funções. + - Todo o código relacionado à Framework é feito fora da Assembly do servidor, significando que pequenas atualizações do jogo terão pouco ou nenhum efeito. Isso torna o projeto mais compatível com futuras atualizações do jogo, além de facilitar quando *for* necessário fazê-la. # Instalação -A instalação do EXILED é bastante simples. Ele se carrega por meio da API de plug-in da NW. É por isso que existem duas pastas dentro de ``Exiled.tar.gz`` nos arquivos de lançamento. ``SCP Secret Laboratory`` contém os arquivos necessários para carregar os recursos do EXILED na pasta ``EXILED``. Com isso dito, tudo o que você precisa fazer é mover essas duas pastas para o caminho adequado que é explicado abaixo, e pronto! +A instalação do EXILED é bastante simples e você pode escolher entre dois tipos de instação, a automática e manual. -Se você optar por usar o instalador, se executado corretamente, ele cuidará de instalar todos os recursos do EXILED. +Na manual, você baixa ``Exiled.tar.gz`` nos arquivos do release, e existem duas pastas dentro. ``SCP Secret Laboratory`` contém os arquivos necessários para carregar os recursos do EXILED na pasta ``EXILED``. Com isso dito, tudo o que você precisa fazer é mover essas duas pastas para o caminho adequado e pronto! + +Na automática, o instalador cuidará de baixar todos os recursos e arquivos para que o EXILED funcione. # Windows -### Instalação automática ([mais informações](https://github.com/ExMod-Team/EXILED/blob/master/EXILED/Exiled.Installer/README.md)) -**Nota**: Verifique se você está conectado ao usuário que executa o servidor ou se possui privilégios de administrador antes de executar o Instalador. +> [!IMPORTANT] +> Verifique-se você está conectado ao mesmo usuário do Windows que está executando o servidor ou se possui privilégios de administrador antes de executar o Instalador. - - Baixe o **`Exiled.Installer-Win.exe` [daqui](https://github.com/ExMod-Team/EXILED/releases)** (clique em Assets -> clique no Instalador) - - Coloque-o na pasta do seu servidor (baixe o servidor dedicado, caso não o tenha feito) +### Instalação automática ([mais informações](https://github.com/ExMod-Team/EXILED/blob/master/EXILED/Exiled.Installer/README.md)) + - Baixe o **`Exiled.Installer-Win.exe` [aqui](https://github.com/ExMod-Team/EXILED/releases)** (clique em Assets -> clique no Instalador) + - Coloque-o na pasta do seu servidor (Precisa ser um servidor "dedicado", caso não tenha siga [esse guia](https://techwiki.scpslgame.com/books/server-guides/page/1-how-to-create-a-dedicated-server)) - Clique duas vezes em **`Exiled.Installer.exe`** ou **[baixe este .bat](https://www.dropbox.com/scl/fi/7yh0r3q0vdn6ic4rhuu3l/install-prerelease.bat?rlkey=99fwjbwy1xg61qgtak0qzb9rd&st=8xs4xks8&dl=1)** e coloque-o na pasta do servidor para instalar o pré-lançamento mais recente - - Para instalar e obter plug-ins, confira a seção [Instalando plug-ins](#installing-plugins) abaixo. -**Nota:** Se você estiver instalando o EXILED em um servidor remoto, certifique-se de executar o .exe como o mesmo usuário que executa seus servidores de SCP:SL (ou um com privilégios de administrador) + - Para instalar e obter plug-ins, confira a secção [Instalando plug-ins](https://github.com/ExMod-Team/EXILED/edit/master/.github/documentation/localization/README-BR.md#instala%C3%A7%C3%A3o-manual). ### Instalação manual - - Baixe o **`Exiled.tar.gz` [daqui](https://github.com/ExMod-Team/EXILED/releases)** + - Baixe o **`Exiled.tar.gz` [aqui](https://github.com/ExMod-Team/EXILED/releases)** - Extraia seus conteúdos com [7Zip](https://www.7-zip.org/) ou [WinRar](https://www.win-rar.com/download.html?&L=6) - - Mova a pasta **``EXILED``** para **`%appdata%`** *Note: Esta pasta precisa ir ao diretório ``C:\Users\%NomeDoUsuário%\AppData\Roaming``, e ***NÃO*** ao ``C:\Users\%NomeDoUsuário%\AppData\Roaming\SCP Secret Laboratory``, e **DEVE** estar em (...)\AppData\Roaming, não (...)\AppData\!* + > [!CAUTION] + > As pastas a seguir precisam estar em ``C:\Users\%NomeDoUsuário%\AppData\Roaming``, e ***NÃO*** ``C:\Users\%NomeDoUsuário%\AppData\Roaming\SCP Secret Laboratory``. + - Mova a pasta **``EXILED``** para **`%appdata%`** - Mova **``SCP Secret Laboratory``** para **`%appdata%`**. - - Windows 10 e 11: - Escreva `%appdata%` na Cortana / no ícone de pesquisa ou na barra do Windows Explorer - - Qualquer outra versão do Windows: + - **Windows 10 e 11**: + Escreva `%appdata%` na Cortana ou, no ícone de pesquisa ou, na barra do Windows Explorer + - **Outras versões do Windows**: Pressione Win + R e digite `%appdata%` ### Instalando plug-ins -É isso, o EXILED agora deve estar instalado e ativo na próxima vez que você inicializar seu servidor. Observe que o EXILED sozinho não fará quase nada, portanto, certifique-se de obter novos plug-ins no **[nosso servidor do Discord](https://discord.gg/PyUkWTg)** +O EXILED agora deve estar instalado e ativo na próxima vez que você inicializar seu servidor. Observe que o EXILED sozinho não fará quase nada, portanto, certifique-se de obter novos plug-ins em **[nosso servidor do Discord](https://discord.gg/PyUkWTg)!** - Para instalar um plug-in, basta: - - Baixar um plug-in da [página de lançamentos *deles*](https://i.imgur.com/u34wgPD.jpg) (**DEVE ser um `.dll`!**) - - Mova-o para: ``C:\Users\%NomeDoUsuário%\AppData\Roaming\EXILED\Plugins`` (mova-se para cá pressionando Win + R e, em seguida, escrevendo `%appdata%`) + - Baixar um plug-in da [página de lançamentos *deles*](https://i.imgur.com/u34wgPD.jpg) (**PRECISA ser um `.dll`!**) + - Mova-o para: ``C:\Users\%NomeDoUsuário%\AppData\Roaming\EXILED\Plugins`` # Linux -### Instalação automática ([mais informações](https://github.com/ExMod-Team/EXILED/blob/master/EXILED/Exiled.Installer/README.md)) +> [!IMPORTANT] +> Certifique-se de executar o instalador como o mesmo usuário (ou root) que executa seus servidores de SCP:SL. -**Nota:** Se você estiver instalando o EXILED em um servidor remoto, certifique-se de executar o instalador como o mesmo usuário que executa seus servidores de SCP:SL (ou root) +### Instalação automática ([mais informações](https://github.com/ExMod-Team/EXILED/blob/master/EXILED/Exiled.Installer/README.md)) + - Baixe o **`Exiled.Installer-Linux` [aqui](https://github.com/ExMod-Team/EXILED/releases)** (clique em Assets -> baixe o Instalador) + - Instale-o digitando **`./Exiled.Installer-Linux --path /path/to/server`** ou mova-o diretamente para dentro da pasta do servidor, e digite: **`./Exiled.Installer-Linux`**. + +> [!NOTE] +> Se você quiser o último pré-lançamento, adicione a flag **`--pre-releases`**. Exemplo: **`./Exiled.Installer-Linux --pre-releases`** - - Baixe o **`Exiled.Installer-Linux` [daqui](https://github.com/ExMod-Team/EXILED/releases)** (clique em Assets -> baixe o Instalador) - - Instale-o digitando **`./Exiled.Installer-Linux --path /path/to/server`** ou mova-o diretamente para dentro da pasta do servidor, mova para ele com o terminal(`cd`) e digite: **`./Exiled.Installer-Linux`**. - - Se você quiser o último pré-lançamento, simplesmente adicione **`--pre-releases`**. Exemplo: **`./Exiled.Installer-Linux /home/scp/server --pre-releases`** - - Outro exemplo, se você colocou `Exiled.Installer-Linux` na pasta do seu servidor: **`/home/scp/server/Exiled.Installer-Linux --pre-releases`** - - Para instalar e obter plug-ins, confira a seção [Instalando plug-ins](#installing-plugins-1) abaixo. + - Para instalar e obter plug-ins, confira a secção [Instalando plug-ins](https://github.com/ExMod-Team/EXILED/edit/master/.github/documentation/localization/README-BR.md#instalando-plug-ins-1). ### Instalação manual - - **Tenha certeza** de que você está conectado ao usuário que executa os servidores de SCP. - - Baixe o **`Exiled.tar.gz` [daqui](https://github.com/ExMod-Team/EXILED/releases)** (SSH: clique com o botão direito do mouse para receber o link do `Exiled.tar.gz` e então digite: **`wget (link_para_baixar)`**) + - Baixe o **`Exiled.tar.gz` [aaqui](https://github.com/ExMod-Team/EXILED/releases)** (SSH: clique com o botão direito do mouse para copiar o link do `Exiled.tar.gz` e então digite: **`wget (link_para_baixar)`**) - Para extraí-lo à sua pasta atual, digite **``tar -xzvf EXILED.tar.gz``** - - Mova a pasta **`EXILED`** para **``~/.config``**. *Nota: Esta pasta precisa ir ao diretório ``~/.config``, e ***NÃO*** ``~/.config/SCP Secret Laboratory``* (SSH: **`mv EXILED ~/.config/`**) - - Mova a pasta **`SCP Secret Laboratory`** para **``~/.config``**. *Nota: Esta pasta precisa ir ao diretório ``~/.config``, e ***NÃO*** ``~/.config/SCP Secret Laboratory``* (SSH: **`mv SCP Secret Laboratory ~/.config/`**) + +> [!CAUTION] +> As pastas precisam ir para o diretório ``~/.config``, e ***NÃO*** ``~/.config/SCP Secret Laboratory``* + + - Mova a pasta **`EXILED`** para **``~/.config``**. (SSH: **`mv EXILED ~/.config/`**) + - Mova a pasta **`SCP Secret Laboratory`** para **``~/.config``**. (SSH: **`mv "SCP Secret Laboratory" ~/.config/`**) ### Instalando plug-ins -É isso, o EXILED agora deve estar instalado e ativo na próxima vez que você inicializar seu servidor. Observe que o EXILED sozinho não fará quase nada, portanto, certifique-se de obter novos plug-ins no **[nosso servidor do Discord](https://discord.gg/PyUkWTg)** +O EXILED agora deve estar instalado e ativo na próxima vez que você inicializar seu servidor. Observe que o EXILED sozinho não fará quase nada, portanto, certifique-se de obter novos plug-ins em **[nosso servidor do Discord](https://discord.gg/PyUkWTg)!** - Para instalar um plug-in, basta: - Baixar um plug-in da [página de lançamento *deles*](https://i.imgur.com/u34wgPD.jpg) (**DEVE ser um `.dll`!**) - - Mova-o para: ``~/.config/EXILED/Plugins`` (se você utiliza SSH como root, então procure pela `.config` correta, que estará dentro de `/home/(Usuário do Servidor de SCP)`) + - Mova-o para: ``~/.config/EXILED/Plugins`` (se você utiliza SSH como root, procure pela `.config` correta, que estará dentro de `/home/(Usuário do Servidor de SCP)`) # Configuração O EXILED por si só oferece algumas opções de configuração. Todas elas são geradas automaticamente na inicialização do servidor e estão localizadas no arquivo ``~/.config/EXILED/Configs/(PortaDoServidorAqui)-config.yml`` (``%AppData%\EXILED\Configs\(PortaDoServidorAqui)-config.yml`` no Windows). -As configurações do plug-in ***NÃO*** estarão no arquivo ``config_gameplay.txt`` supracitado, em vez disso, as configurações do plug-in são definidas no arquivo ``~/.config/EXILED/Configs/(PortaDoServidor)-config.yml`` (``%AppData%\EXILED\(PortaDoServidor)-config.yml`` no Windows). -No entanto, alguns plug-ins podem obter suas configurações de outros locais por conta própria. Esta é simplesmente a localização padrão do EXILED para eles, portanto, consulte o criador do plug-in se houver problemas. +As configurações dos plug-ins ***NÃO*** estarão no arquivo ``config_gameplay.txt``! +Em vez disso, você encontrará no arquivo ``~/.config/EXILED/Configs/(porta_do_servidor)-config.yml`` (``%AppData%\EXILED\Configs\porta_do_servidor)-config.yml`` no Windows). + +> [!NOTE] +> Em versões mais recentes do EXILED, as configs dos plug-ins foram movidas para pastas prórpias: ``EXILED\Configs\(nome_do_plugin)``. Você pode mudar esse comportamento +> editando a configuração do Loader em: ``SCP Secret Laboratory\LabAPI\configs\global\Exiled.Loader`` (ou ``SCP Secret Laboratory\LabAPI\configs\(porta_do_servidor)\Exiled.Loader``) + +No entanto, alguns plug-ins podem gerar suas configurações em outros locais por conta própria. Esta é simplesmente a localização padrão do EXILED para eles, portanto, consulte o criador do plug-in se houver problemas. # Para Desenvolvedores -Se você deseja fazer um plug-in ao EXILED, é bem simples de fazê-lo. Se você quiser ver algum tipo de tutorial, visite nosso [Manual de Instruções.](GettingStarted-BR.md) +Se você deseja fazer um plug-in com o EXILED, é algo bem simples. Se você quiser ver algum tipo de tutorial, visite nosso [Manual de Instruções.](GettingStarted-BR.md) Para tutoriais mais abrangentes e ativamente atualizados, consulte [o site da EXILED](https://exmod-team.github.io/EXILED/). Mas certifique-se de seguir estas regras ao publicar seus plug-ins: - Seu plug-in deve conter uma classe herdada de ``Exiled.API.Features.Plugin<>``, caso contrário, o EXILED não carregará seu plug-in quando o servidor iniciar. - - Quando um plug-in é carregado, o código dentro do método ``OnEnabled()`` da classe supracitada é acionado imediatamente, ele não espera que outros plug-ins sejam carregados. Ele não espera a conclusão do processo de inicialização do servidor. ***Ele não espera por nada.*** Ao configurar seu método ``OnEnable()``, certifique-se de não estar acessando coisas que ainda não foram inicializadas pelo servidor, como ``ServerConsole.Port``, ou ``PlayerManager.localPlayer``. + - Quando um plug-in é carregado, o código dentro do método ``OnEnabled()`` da classe que herdou é chamado imediatamente (Dependendo do ``Exiled.API.Features.Plugin<>::PluginPriority``) - Se você precisar acessar coisas que não foram inicializadas antes do carregamento do plug-in, é recomendável simplesmente aguardar o evento ``WaitingForPlayers`` para fazê-lo, se por algum motivo precisar fazer as coisas antes, envolva o código em um loop ``` while(!x)``` que verifica se a variável/objeto que você precisa não é mais *null* antes de continuar. - O EXILED suporta o recarregamento dinâmico de Assemblies de plug-ins no meio da execução. Isso significa que, se você precisar atualizar um plug-in, isso pode ser feito sem reiniciar o servidor, no entanto, se você estiver atualizando um plug-in no meio da execução, o plug-in precisa ser configurado corretamente para suportá-lo, ou você terá um sério problema. Consulte a seção ``Atualizações Dinâmicas`` para mais informações e orientações a seguir. - **NÃO** há evento OnUpdate, OnFixedUpdate ou OnLateUpdate no EXILED. Se você precisar, por algum motivo, executar o código com frequência, poderá usar uma corrotina MEC que espera por um quadro, 0.01f, ou usar uma camada de Timing como Timing.FixedUpdate. From b1ee56e3071d5ca66ec0c16e77412959b7d5da14 Mon Sep 17 00:00:00 2001 From: Unbistrackted <112902220+Unbistrackted@users.noreply.github.com> Date: Tue, 31 Mar 2026 10:13:36 -0300 Subject: [PATCH 02/14] docs: fix typos --- .github/documentation/localization/README-BR.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/documentation/localization/README-BR.md b/.github/documentation/localization/README-BR.md index 1a5626d747..094562ca0e 100644 --- a/.github/documentation/localization/README-BR.md +++ b/.github/documentation/localization/README-BR.md @@ -11,7 +11,7 @@ -O EXILED é uma Framework de alto nível para a criação de plug-ins direcionado a servidores de SCP: Secret Laboratory. Ele oferece um sistema de eventos para os desenvolvedores, com o objetivo de manipular, alterar o código do jogo ou implementar suas próprias funções. +O EXILED é uma Framework de alto nível para a criação de plug-ins direcionado a servidores de SCP: Secret Laboratory. Ele oferece um sistema de eventos para os desenvolvedores, com o objetivo de manipular, alterar ou implementar o código do jogo suas próprias funções. Todos os eventos do EXILED são feitos com [Harmony](https://harmony.pardeike.net/articles/intro.html), significando que não requerem edição direta dos Assemblies/Código Base do servidor para funcionar, o que permite dois benefícios exclusivos: - Todo o código da Framework pode ser publicado e compartilhado livremente, permitindo que os desenvolvedores possam entender melhor *como* funciona. Também podendo oferecer sugestões para adicionar ou alterar suas funções. @@ -111,13 +111,13 @@ Mas certifique-se de seguir estas regras ao publicar seus plug-ins: ### Desativando patches de evento do EXILED ***Atualmente, esta função não está mais implementada.*** -### Corrotinas MEC +### Corrotinas do MEC Se você não estiver familiarizado com o MEC, este será um guia muito breve e simples para você começar. -Corrotinas MEC são basicamente métodos cronometrados que suportam períodos de espera antes de continuar a execução, sem interromper/suspender o alinhamento (thread) principal do jogo. -As corrotinas MEC são seguras para usar com o Unity, ao contrário do alinhamento tradicional. ***NÃO tente criar novos alinhamentos para interagir com o Unity, eles VÃO travar o servidor.*** +As corrotinas do MEC são basicamente métodos cronometrados que suportam períodos de espera antes de continuar a execução, sem interromper/suspender o thread principal do jogo. +Elas são seguras para usar com o Unity, ao contrário do threading tradicional. ***NÃO tente criar NOVAS THREADS para interagir com o Unity, eles VÃO travar o servidor!!!*** Para usar o MEC, você precisará referenciar ``Assembly-CSharp-firstpass.dll`` dos arquivos do servidor e incluir ``using MEC;``. -Exemplo de chamada de uma corrotina simples, que se repete com um atraso entre cada ciclo: +Exemplo de criação de uma corrotina simples, que se repete com um atraso a cada ciclo: ```cs using MEC; using Exiled.API.Features; @@ -137,7 +137,7 @@ public IEnumerator MyCoroutine() } ``` -É **altamente** recomendável que você pesquise no Google ou pergunte no Discord se não estiver familiarizado com o MEC e quiser aprender mais, obter conselhos ou precisar de ajuda. As perguntas, não importa o quão 'estúpidas' sejam, sempre serão respondidas da maneira mais útil e clara possível para que os desenvolvedores de plug-ins se destaquem. Um bom código é melhor para todos. +É **altamente** recomendável que você pesquise no Google ou pergunte no Discord se não estiver familiarizado com o MEC e quiser aprender mais, obter conselhos ou precisar de ajuda. As perguntas, não importa o quão 'estúpidas' sejam, sempre serão respondidas da maneira mais útil e clara possível. Um bom código é melhor para todos. ### Atualizações Dinâmicas O EXILED como uma estrutura suporta o recarregamento dinâmico de Assemblies de plug-ins sem exigir uma reinicialização do servidor. @@ -166,4 +166,4 @@ Como tal, os plug-ins que oferecem suporte a Atualizações Dinâmicas ***DEVEM* Mas nem todo plug-in tem de oferecer suporte a Atualizações Dinâmicas. Se você não pretende oferecer suporte a Atualizações Dinâmicas, tudo bem, simplesmente não altere o nome do Assembly do seu plug-in ao criar uma nova versão e não precisará se preocupar com nada disso, apenas certifique-se de que os anfitriões de servidor saibam que eles precisarão reinicializar completamente seus servidores para atualizar seu plug-in. -**Tradução brasileira feita por**: *Firething* +**Tradução brasileira feita por**: *Firething* e *Unbistrackted* From c5a60ce8f633d4b11daab17190b82607fa093a92 Mon Sep 17 00:00:00 2001 From: Unbistrackted <112902220+Unbistrackted@users.noreply.github.com> Date: Wed, 1 Apr 2026 01:31:16 -0300 Subject: [PATCH 03/14] docs: fix more typos --- .../documentation/localization/README-BR.md | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/.github/documentation/localization/README-BR.md b/.github/documentation/localization/README-BR.md index 094562ca0e..473e8ad5c2 100644 --- a/.github/documentation/localization/README-BR.md +++ b/.github/documentation/localization/README-BR.md @@ -11,43 +11,45 @@ -O EXILED é uma Framework de alto nível para a criação de plug-ins direcionado a servidores de SCP: Secret Laboratory. Ele oferece um sistema de eventos para os desenvolvedores, com o objetivo de manipular, alterar ou implementar o código do jogo suas próprias funções. +EXILED é um Framework de alto nível para a criação de plug-ins direcionado a servidores de SCP: Secret Laboratory. Ele oferece um sistema de eventos para os desenvolvedores, com o objetivo de manipular, alterar ou implementar no código do jogo suas próprias funções. Todos os eventos do EXILED são feitos com [Harmony](https://harmony.pardeike.net/articles/intro.html), significando que não requerem edição direta dos Assemblies/Código Base do servidor para funcionar, o que permite dois benefícios exclusivos: - - Todo o código da Framework pode ser publicado e compartilhado livremente, permitindo que os desenvolvedores possam entender melhor *como* funciona. Também podendo oferecer sugestões para adicionar ou alterar suas funções. - - Todo o código relacionado à Framework é feito fora da Assembly do servidor, significando que pequenas atualizações do jogo terão pouco ou nenhum efeito. Isso torna o projeto mais compatível com futuras atualizações do jogo, além de facilitar quando *for* necessário fazê-la. + - Todo o código do Framework pode ser publicado e compartilhado livremente, permitindo que os desenvolvedores entendam melhor *como* funciona, além de poder sugerir para adicionar ou alterar algo. + - Todo o código relacionado ao framework é feito fora do assembly do servidor, significando que pequenas atualizações do jogo terão pouco ou nenhum efeito. Isso torna o projeto mais compatível com futuras atualizações do jogo, além de facilitar quando for necessário atualizá-lo. # Instalação -A instalação do EXILED é bastante simples e você pode escolher entre dois tipos de instação, a automática e manual. +A instalação do EXILED é bem simples e você pode escolher entre dois tipos: ``Automática`` e ``Manual``. -Na manual, você baixa ``Exiled.tar.gz`` nos arquivos do release, e existem duas pastas dentro. ``SCP Secret Laboratory`` contém os arquivos necessários para carregar os recursos do EXILED na pasta ``EXILED``. Com isso dito, tudo o que você precisa fazer é mover essas duas pastas para o caminho adequado e pronto! +Na instalação manual, você faz o download do ``Exiled.tar.gz`` nos arquivos do release, e há duas pastas dentro. ``SCP Secret Laboratory`` contém os arquivos necessários para carregar os recursos do EXILED na pasta ``EXILED``. Dito isso, tudo o que você precisa fazer é mover essas duas pastas para o caminho adequado e pronto! -Na automática, o instalador cuidará de baixar todos os recursos e arquivos para que o EXILED funcione. +Já na automática, o instalador cuidará de baixar todos os recursos e arquivos para que o EXILED funcione. + +Siga os guias abaixo. # Windows > [!IMPORTANT] -> Verifique-se você está conectado ao mesmo usuário do Windows que está executando o servidor ou se possui privilégios de administrador antes de executar o Instalador. +> Verifique se você está conectado no mesmo usuário do Windows que está executando o servidor ou se possui privilégios de administrador antes de executar o Instalador. ### Instalação automática ([mais informações](https://github.com/ExMod-Team/EXILED/blob/master/EXILED/Exiled.Installer/README.md)) - - Baixe o **`Exiled.Installer-Win.exe` [aqui](https://github.com/ExMod-Team/EXILED/releases)** (clique em Assets -> clique no Instalador) - - Coloque-o na pasta do seu servidor (Precisa ser um servidor "dedicado", caso não tenha siga [esse guia](https://techwiki.scpslgame.com/books/server-guides/page/1-how-to-create-a-dedicated-server)) + - Baixe **`Exiled.Installer-Win.exe` [aqui](https://github.com/ExMod-Team/EXILED/releases)** (clique em Assets -> clique no instalador) + - Coloque-o na pasta do seu servidor (Ele precisa estar dentro da pasta de um servidor "dedicado", caso não tenha siga [esse guia](https://techwiki.scpslgame.com/books/server-guides/page/1-how-to-create-a-dedicated-server)) - Clique duas vezes em **`Exiled.Installer.exe`** ou **[baixe este .bat](https://www.dropbox.com/scl/fi/7yh0r3q0vdn6ic4rhuu3l/install-prerelease.bat?rlkey=99fwjbwy1xg61qgtak0qzb9rd&st=8xs4xks8&dl=1)** e coloque-o na pasta do servidor para instalar o pré-lançamento mais recente - Para instalar e obter plug-ins, confira a secção [Instalando plug-ins](https://github.com/ExMod-Team/EXILED/edit/master/.github/documentation/localization/README-BR.md#instala%C3%A7%C3%A3o-manual). ### Instalação manual - Baixe o **`Exiled.tar.gz` [aqui](https://github.com/ExMod-Team/EXILED/releases)** - - Extraia seus conteúdos com [7Zip](https://www.7-zip.org/) ou [WinRar](https://www.win-rar.com/download.html?&L=6) + - Extraia o conteúdo com [7Zip](https://www.7-zip.org/) ou [WinRar](https://www.win-rar.com/download.html?&L=6) > [!CAUTION] > As pastas a seguir precisam estar em ``C:\Users\%NomeDoUsuário%\AppData\Roaming``, e ***NÃO*** ``C:\Users\%NomeDoUsuário%\AppData\Roaming\SCP Secret Laboratory``. - Mova a pasta **``EXILED``** para **`%appdata%`** - Mova **``SCP Secret Laboratory``** para **`%appdata%`**. - **Windows 10 e 11**: - Escreva `%appdata%` na Cortana ou, no ícone de pesquisa ou, na barra do Windows Explorer + Escreva `%appdata%` na Cortana, no ícone de pesquisa ou na barra do Windows Explorer - **Outras versões do Windows**: Pressione Win + R e digite `%appdata%` ### Instalando plug-ins -O EXILED agora deve estar instalado e ativo na próxima vez que você inicializar seu servidor. Observe que o EXILED sozinho não fará quase nada, portanto, certifique-se de obter novos plug-ins em **[nosso servidor do Discord](https://discord.gg/PyUkWTg)!** +O EXILED agora deve estar instalado e ativo na próxima vez que você iniciar o seu servidor. Observe que o EXILED sozinho não fará quase nada, portanto, certifique-se de obter novos plug-ins em **[nosso servidor do Discord](https://discord.gg/PyUkWTg)!** - Para instalar um plug-in, basta: - Baixar um plug-in da [página de lançamentos *deles*](https://i.imgur.com/u34wgPD.jpg) (**PRECISA ser um `.dll`!**) - Mova-o para: ``C:\Users\%NomeDoUsuário%\AppData\Roaming\EXILED\Plugins`` @@ -66,7 +68,7 @@ O EXILED agora deve estar instalado e ativo na próxima vez que você inicializa - Para instalar e obter plug-ins, confira a secção [Instalando plug-ins](https://github.com/ExMod-Team/EXILED/edit/master/.github/documentation/localization/README-BR.md#instalando-plug-ins-1). ### Instalação manual - - Baixe o **`Exiled.tar.gz` [aaqui](https://github.com/ExMod-Team/EXILED/releases)** (SSH: clique com o botão direito do mouse para copiar o link do `Exiled.tar.gz` e então digite: **`wget (link_para_baixar)`**) + - Baixe o **`Exiled.tar.gz` [aqui](https://github.com/ExMod-Team/EXILED/releases)** (SSH: clique com o botão direito do mouse para copiar o link do `Exiled.tar.gz` e então digite: **`wget (link_para_baixar)`**) - Para extraí-lo à sua pasta atual, digite **``tar -xzvf EXILED.tar.gz``** > [!CAUTION] @@ -86,25 +88,25 @@ O EXILED por si só oferece algumas opções de configuração. Todas elas são geradas automaticamente na inicialização do servidor e estão localizadas no arquivo ``~/.config/EXILED/Configs/(PortaDoServidorAqui)-config.yml`` (``%AppData%\EXILED\Configs\(PortaDoServidorAqui)-config.yml`` no Windows). As configurações dos plug-ins ***NÃO*** estarão no arquivo ``config_gameplay.txt``! -Em vez disso, você encontrará no arquivo ``~/.config/EXILED/Configs/(porta_do_servidor)-config.yml`` (``%AppData%\EXILED\Configs\porta_do_servidor)-config.yml`` no Windows). +Em vez disso, você encontrará no arquivo ``~/.config/EXILED/Configs/(porta_do_servidor)-config.yml`` (``%AppData%\EXILED\Configs\(porta_do_servidor)-config.yml`` no Windows). > [!NOTE] -> Em versões mais recentes do EXILED, as configs dos plug-ins foram movidas para pastas prórpias: ``EXILED\Configs\(nome_do_plugin)``. Você pode mudar esse comportamento +> Em versões mais recentes do EXILED, as configs dos plug-ins foram movidas para pastas próprias: ``EXILED\Configs\(nome_do_plugin)``. Você pode mudar esse comportamento > editando a configuração do Loader em: ``SCP Secret Laboratory\LabAPI\configs\global\Exiled.Loader`` (ou ``SCP Secret Laboratory\LabAPI\configs\(porta_do_servidor)\Exiled.Loader``) -No entanto, alguns plug-ins podem gerar suas configurações em outros locais por conta própria. Esta é simplesmente a localização padrão do EXILED para eles, portanto, consulte o criador do plug-in se houver problemas. +No entanto, alguns plug-ins podem gerar suas configurações em outros locais por conta própria. Este é simplesmente o local padrão do EXILED para esses arquivos, portanto, consulte o criador do plug-in se houver problemas. # Para Desenvolvedores -Se você deseja fazer um plug-in com o EXILED, é algo bem simples. Se você quiser ver algum tipo de tutorial, visite nosso [Manual de Instruções.](GettingStarted-BR.md) +Se você deseja fazer um plug-in com o EXILED, é bem simples. Caso queria ver um tutorial, visite nosso [Manual de Instruções.](GettingStarted-BR.md) Para tutoriais mais abrangentes e ativamente atualizados, consulte [o site da EXILED](https://exmod-team.github.io/EXILED/). Mas certifique-se de seguir estas regras ao publicar seus plug-ins: - Seu plug-in deve conter uma classe herdada de ``Exiled.API.Features.Plugin<>``, caso contrário, o EXILED não carregará seu plug-in quando o servidor iniciar. - - Quando um plug-in é carregado, o código dentro do método ``OnEnabled()`` da classe que herdou é chamado imediatamente (Dependendo do ``Exiled.API.Features.Plugin<>::PluginPriority``) - - Se você precisar acessar coisas que não foram inicializadas antes do carregamento do plug-in, é recomendável simplesmente aguardar o evento ``WaitingForPlayers`` para fazê-lo, se por algum motivo precisar fazer as coisas antes, envolva o código em um loop ``` while(!x)``` que verifica se a variável/objeto que você precisa não é mais *null* antes de continuar. + - Quando um plug-in é carregado, o código dentro do método ``OnEnabled()`` da classe é chamado imediatamente (Dependendo do ``Exiled.API.Features.Plugin<>::PluginPriority``) + - Se você precisar acessar coisas que não foram inicializadas antes do carregamento do plug-in, é recomendável simplesmente aguardar o evento ``WaitingForPlayers`` para fazê-lo, se por algum motivo precisar fazer as coisas antes, envolva o código em um loop ```while (!x)``` que verifica se a variável/objeto que você precisa não é mais *null* antes de continuar. - O EXILED suporta o recarregamento dinâmico de Assemblies de plug-ins no meio da execução. Isso significa que, se você precisar atualizar um plug-in, isso pode ser feito sem reiniciar o servidor, no entanto, se você estiver atualizando um plug-in no meio da execução, o plug-in precisa ser configurado corretamente para suportá-lo, ou você terá um sério problema. Consulte a seção ``Atualizações Dinâmicas`` para mais informações e orientações a seguir. - **NÃO** há evento OnUpdate, OnFixedUpdate ou OnLateUpdate no EXILED. Se você precisar, por algum motivo, executar o código com frequência, poderá usar uma corrotina MEC que espera por um quadro, 0.01f, ou usar uma camada de Timing como Timing.FixedUpdate. @@ -113,8 +115,8 @@ Mas certifique-se de seguir estas regras ao publicar seus plug-ins: ### Corrotinas do MEC Se você não estiver familiarizado com o MEC, este será um guia muito breve e simples para você começar. -As corrotinas do MEC são basicamente métodos cronometrados que suportam períodos de espera antes de continuar a execução, sem interromper/suspender o thread principal do jogo. -Elas são seguras para usar com o Unity, ao contrário do threading tradicional. ***NÃO tente criar NOVAS THREADS para interagir com o Unity, eles VÃO travar o servidor!!!*** +As corrotinas do MEC são basicamente métodos temporizados que suportam períodos de espera antes de continuar a execução, sem interromper/suspender a thread principal do jogo. +Elas são seguras para usar com o Unity, ao contrário do threading tradicional. ***NÃO tente criar NOVAS THREADS para interagir com o Unity, isso irá travar o servidor!!!*** Para usar o MEC, você precisará referenciar ``Assembly-CSharp-firstpass.dll`` dos arquivos do servidor e incluir ``using MEC;``. Exemplo de criação de uma corrotina simples, que se repete com um atraso a cada ciclo: @@ -141,7 +143,7 @@ public IEnumerator MyCoroutine() ### Atualizações Dinâmicas O EXILED como uma estrutura suporta o recarregamento dinâmico de Assemblies de plug-ins sem exigir uma reinicialização do servidor. -Por exemplo, se você iniciar o servidor apenas com `Exiled.Events` como o único plug-in e desejar adicionar um novo, não será necessário reiniciar o servidor para concluir esta tarefa. Você pode simplesmente usar o comando do RemoteAdmin/ServerConsole `reload plugins` para recarregar todos os plug-ins do EXILED, incluindo os novos que não foram carregados antes. +Por exemplo, apenas com `Exiled.Events` como o único plug-in e depois você deseja adicionar um novo, não será necessário reiniciar o servidor. Você pode simplesmente usar o comando do RemoteAdmin/ServerConsole `reload plugins` para recarregar todos os plug-ins do EXILED, incluindo os novos que não foram carregados antes. Isso também significa que você pode *atualizar* os plug-ins sem precisar reinicializar totalmente o servidor. No entanto, existem algumas diretrizes que devem ser seguidas pelo desenvolvedor do plug-in para que isso seja realizado corretamente: @@ -162,8 +164,8 @@ Observe que eu disse *novos* Assemblies. Se você substituir um Assembly por out Por esse motivo, se o seu plug-in oferecer suporte a Atualizações Dinâmicas, você deverá criar cada versão com um nome de Assembly diferente nas opções de compilação (renomear o arquivo não funcionará). Além disso, como o Assembly antigo não é "destruído" quando não é mais necessário, se você não cancelar a assinatura de eventos, desfazer o patch de sua instância de Harmony, eliminar corrotinas, etc., esse código continuará a ser executado, bem como o código da nova versão. Esta é uma péssima, bem péssima situação para se deixar ocorrer. -Como tal, os plug-ins que oferecem suporte a Atualizações Dinâmicas ***DEVEM*** seguir estas diretrizes ou serão removidos do servidor do Discord devido ao risco potencial para os anfitriões de servidor. +Como tal, os plug-ins que oferecem suporte a Atualizações Dinâmicas ***DEVEM*** seguir estas diretrizes ou serão removidos do servidor do Discord devido ao risco potencial para os donos de servidor. -Mas nem todo plug-in tem de oferecer suporte a Atualizações Dinâmicas. Se você não pretende oferecer suporte a Atualizações Dinâmicas, tudo bem, simplesmente não altere o nome do Assembly do seu plug-in ao criar uma nova versão e não precisará se preocupar com nada disso, apenas certifique-se de que os anfitriões de servidor saibam que eles precisarão reinicializar completamente seus servidores para atualizar seu plug-in. +Mas nem todo plug-in tem de oferecer suporte a Atualizações Dinâmicas. Se você não pretende oferecer suporte a Atualizações Dinâmicas, tudo bem, simplesmente não altere o nome do Assembly do seu plug-in ao criar uma nova versão e não precisará se preocupar com nada disso, apenas certifique-se de que os donos de servidor saibam que eles precisarão reinicializar completamente seus servidores para atualizar seu plug-in. **Tradução brasileira feita por**: *Firething* e *Unbistrackted* From 44d940d96b233a775209b1dcd49b52e2e033df66 Mon Sep 17 00:00:00 2001 From: Unbistrackted <112902220+Unbistrackted@users.noreply.github.com> Date: Wed, 1 Apr 2026 01:36:12 -0300 Subject: [PATCH 04/14] docs: make it sound more natural again --- .github/documentation/localization/README-BR.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/documentation/localization/README-BR.md b/.github/documentation/localization/README-BR.md index 473e8ad5c2..2e8ec2e037 100644 --- a/.github/documentation/localization/README-BR.md +++ b/.github/documentation/localization/README-BR.md @@ -15,16 +15,17 @@ EXILED é um Framework de alto nível para a criação de plug-ins direcionado a Todos os eventos do EXILED são feitos com [Harmony](https://harmony.pardeike.net/articles/intro.html), significando que não requerem edição direta dos Assemblies/Código Base do servidor para funcionar, o que permite dois benefícios exclusivos: - Todo o código do Framework pode ser publicado e compartilhado livremente, permitindo que os desenvolvedores entendam melhor *como* funciona, além de poder sugerir para adicionar ou alterar algo. - - Todo o código relacionado ao framework é feito fora do assembly do servidor, significando que pequenas atualizações do jogo terão pouco ou nenhum efeito. Isso torna o projeto mais compatível com futuras atualizações do jogo, além de facilitar quando for necessário atualizá-lo. + - Todo o código relacionado ao framework é feito fora do assembly do servidor, significando que pequenas atualizações do jogo muito provavelmente não terão efeitos colaterais. Isso torna o projeto mais compatível, além de facilitar quando for necessário atualizá-lo. # Instalação A instalação do EXILED é bem simples e você pode escolher entre dois tipos: ``Automática`` e ``Manual``. -Na instalação manual, você faz o download do ``Exiled.tar.gz`` nos arquivos do release, e há duas pastas dentro. ``SCP Secret Laboratory`` contém os arquivos necessários para carregar os recursos do EXILED na pasta ``EXILED``. Dito isso, tudo o que você precisa fazer é mover essas duas pastas para o caminho adequado e pronto! +Na instalação automática, o instalador cuidará de baixar todos os recursos e arquivos para que o EXILED funcione. -Já na automática, o instalador cuidará de baixar todos os recursos e arquivos para que o EXILED funcione. +Já na manual, você faz o download do ``Exiled.tar.gz`` nos arquivos do release, e há duas pastas dentro. +``SCP Secret Laboratory`` contém os arquivos necessários para carregar os recursos do EXILED de dentro da pasta ``EXILED``. Dito isso, tudo o que você precisa fazer é mover essas duas para o caminho adequado e pronto! -Siga os guias abaixo. +Abaixo entraremos em mais detalhes... # Windows > [!IMPORTANT] From 10e4a54f2dc08df0cadc0d4ded340c2a54d4e7ad Mon Sep 17 00:00:00 2001 From: Unbistrackted Date: Tue, 7 Apr 2026 16:37:09 -0300 Subject: [PATCH 05/14] fix: few typos and better language usage --- .../documentation/localization/README-BR.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/documentation/localization/README-BR.md b/.github/documentation/localization/README-BR.md index 2e8ec2e037..b2ae86403a 100644 --- a/.github/documentation/localization/README-BR.md +++ b/.github/documentation/localization/README-BR.md @@ -11,11 +11,11 @@ -EXILED é um Framework de alto nível para a criação de plug-ins direcionado a servidores de SCP: Secret Laboratory. Ele oferece um sistema de eventos para os desenvolvedores, com o objetivo de manipular, alterar ou implementar no código do jogo suas próprias funções. -Todos os eventos do EXILED são feitos com [Harmony](https://harmony.pardeike.net/articles/intro.html), significando que não requerem edição direta dos Assemblies/Código Base do servidor para funcionar, o que permite dois benefícios exclusivos: +EXILED é um Framework de alto nível para a criação de plug-ins direcionado a servidores de SCP: Secret Laboratory. Ele oferece um sistema de eventos para os desenvolvedores, com o objetivo de manipular, alterar ou implementar suas próprias funcionalidades no jogo. +Todos os eventos do EXILED são feitos com [Harmony](https://harmony.pardeike.net/articles/intro.html), o que significa que não requerem edição direta dos Assemblies/Código Base do servidor para funcionar, permitindo dois benefícios: - Todo o código do Framework pode ser publicado e compartilhado livremente, permitindo que os desenvolvedores entendam melhor *como* funciona, além de poder sugerir para adicionar ou alterar algo. - - Todo o código relacionado ao framework é feito fora do assembly do servidor, significando que pequenas atualizações do jogo muito provavelmente não terão efeitos colaterais. Isso torna o projeto mais compatível, além de facilitar quando for necessário atualizá-lo. + - Todo o código relacionado ao framework é feito fora do assembly do servidor, significando que pequenas atualizações do jogo provavelmente não causarão efeitos colaterais. Isso torna o projeto mais compatível, além de facilitar quando for necessário atualizá-lo. # Instalação A instalação do EXILED é bem simples e você pode escolher entre dois tipos: ``Automática`` e ``Manual``. @@ -23,7 +23,7 @@ A instalação do EXILED é bem simples e você pode escolher entre dois tipos: Na instalação automática, o instalador cuidará de baixar todos os recursos e arquivos para que o EXILED funcione. Já na manual, você faz o download do ``Exiled.tar.gz`` nos arquivos do release, e há duas pastas dentro. -``SCP Secret Laboratory`` contém os arquivos necessários para carregar os recursos do EXILED de dentro da pasta ``EXILED``. Dito isso, tudo o que você precisa fazer é mover essas duas para o caminho adequado e pronto! +``SCP Secret Laboratory`` contém os arquivos necessários para carregar os recursos do EXILED de dentro da pasta ``EXILED``. Com isso em mente, tudo o que você precisa fazer é mover essas duas para o caminho adequado e pronto! Abaixo entraremos em mais detalhes... @@ -99,7 +99,7 @@ No entanto, alguns plug-ins podem gerar suas configurações em outros locais po # Para Desenvolvedores -Se você deseja fazer um plug-in com o EXILED, é bem simples. Caso queria ver um tutorial, visite nosso [Manual de Instruções.](GettingStarted-BR.md) +Se você deseja fazer um plug-in com o EXILED, é bem simples. Caso queira ver um tutorial, visite nosso [Manual de Instruções.](GettingStarted-BR.md) Para tutoriais mais abrangentes e ativamente atualizados, consulte [o site da EXILED](https://exmod-team.github.io/EXILED/). @@ -107,7 +107,7 @@ Mas certifique-se de seguir estas regras ao publicar seus plug-ins: - Seu plug-in deve conter uma classe herdada de ``Exiled.API.Features.Plugin<>``, caso contrário, o EXILED não carregará seu plug-in quando o servidor iniciar. - Quando um plug-in é carregado, o código dentro do método ``OnEnabled()`` da classe é chamado imediatamente (Dependendo do ``Exiled.API.Features.Plugin<>::PluginPriority``) - - Se você precisar acessar coisas que não foram inicializadas antes do carregamento do plug-in, é recomendável simplesmente aguardar o evento ``WaitingForPlayers`` para fazê-lo, se por algum motivo precisar fazer as coisas antes, envolva o código em um loop ```while (!x)``` que verifica se a variável/objeto que você precisa não é mais *null* antes de continuar. + - Se você precisar acessar algo que ainda não foram inicializadas antes do carregamento do plug-in, recomendamos simplesmente ouvir o evento ``WaitingForPlayers``. Se por algum motivo necessite disso, coloque o código dentro de um loop ```while (!x)``` onde verifica se a variável/objeto que você precisa não é mais *null* antes de continuar. - O EXILED suporta o recarregamento dinâmico de Assemblies de plug-ins no meio da execução. Isso significa que, se você precisar atualizar um plug-in, isso pode ser feito sem reiniciar o servidor, no entanto, se você estiver atualizando um plug-in no meio da execução, o plug-in precisa ser configurado corretamente para suportá-lo, ou você terá um sério problema. Consulte a seção ``Atualizações Dinâmicas`` para mais informações e orientações a seguir. - **NÃO** há evento OnUpdate, OnFixedUpdate ou OnLateUpdate no EXILED. Se você precisar, por algum motivo, executar o código com frequência, poderá usar uma corrotina MEC que espera por um quadro, 0.01f, ou usar uma camada de Timing como Timing.FixedUpdate. @@ -134,7 +134,7 @@ public IEnumerator MyCoroutine() { for (;;) //Repete o evento seguinte por tempo indefinido { - Log.Info("Ei, eu sou um ciclo infinito!"); //Designar Log.Info para reproduzir uma linha nos registros do console/servidor do jogo. + Log.Info("Ei, eu sou um ciclo infinito!"); // Usado para reproduzir uma linha nos registros do console/servidor do jogo. yield return Timing.WaitForSeconds(5f); //Diz à corrotina para esperar 5 segundos antes de continuar, e quando está no final do ciclo, efetivamente interrompe a repetição do ciclo por 5 segundos. } } @@ -151,7 +151,7 @@ Isso também significa que você pode *atualizar* os plug-ins sem precisar reini ***Para Hosters*** - Se você estiver atualizando um plug-in, certifique-se de que o nome do Assembly não seja o mesmo da versão atual que você instalou (se houver uma). O plug-in deve ser construído pelo desenvolvedor com atualizações dinâmicas em mente para que isso funcione, simplesmente renomear o arquivo não basta. - Se o plug-in suporta Atualizações Dinâmicas, certifique-se de que, ao colocar a versão mais recente do plug-in na pasta "Plugins", você também remova a versão mais antiga da pasta, antes de recarregar o EXILED; a falha em garantir isso resultará em muitos problemas indesejados. - - Quaisquer problemas decorrentes da Atualização Dinâmica de um plug-in são de sua exclusiva responsabilidade e do desenvolvedor do plug-in em questão. Embora o EXILED suporte e incentive totalmente as Atualizações Dinâmicas, a única maneira de isso falhar ou dar errado é se o anfitrião do servidor ou o desenvolvedor do plug-in fizer algo errado. Verifique três vezes se tudo foi feito corretamente por ambas as partes antes de relatar um erro aos desenvolvedores da EXILED em relação às Atualizações Dinâmicas. + - Quaisquer problemas decorrentes da Atualização Dinâmica de um plug-in são de sua exclusiva responsabilidade e do desenvolvedor do plug-in em questão. Embora o EXILED suporte e incentive totalmente as Atualizações Dinâmicas, a única maneira de isso falhar ou dar errado é se o dono do servidor ou o desenvolvedor do plug-in fizer algo errado. Verifique três vezes se tudo foi feito corretamente por ambas as partes antes de relatar um erro aos desenvolvedores da EXILED em relação às Atualizações Dinâmicas. ***Para Desenvolvedores*** @@ -169,4 +169,4 @@ Como tal, os plug-ins que oferecem suporte a Atualizações Dinâmicas ***DEVEM* Mas nem todo plug-in tem de oferecer suporte a Atualizações Dinâmicas. Se você não pretende oferecer suporte a Atualizações Dinâmicas, tudo bem, simplesmente não altere o nome do Assembly do seu plug-in ao criar uma nova versão e não precisará se preocupar com nada disso, apenas certifique-se de que os donos de servidor saibam que eles precisarão reinicializar completamente seus servidores para atualizar seu plug-in. -**Tradução brasileira feita por**: *Firething* e *Unbistrackted* +**Tradução para o português feita por**: *Unbistrackted* e *Firething* From 450711bfabe688c60878279faf5ad4f083711104 Mon Sep 17 00:00:00 2001 From: Unbistrackted Date: Tue, 7 Apr 2026 16:42:00 -0300 Subject: [PATCH 06/14] fix: more typos and better language overall --- .github/documentation/localization/README-BR.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/documentation/localization/README-BR.md b/.github/documentation/localization/README-BR.md index b2ae86403a..973b99448e 100644 --- a/.github/documentation/localization/README-BR.md +++ b/.github/documentation/localization/README-BR.md @@ -14,8 +14,8 @@ EXILED é um Framework de alto nível para a criação de plug-ins direcionado a servidores de SCP: Secret Laboratory. Ele oferece um sistema de eventos para os desenvolvedores, com o objetivo de manipular, alterar ou implementar suas próprias funcionalidades no jogo. Todos os eventos do EXILED são feitos com [Harmony](https://harmony.pardeike.net/articles/intro.html), o que significa que não requerem edição direta dos Assemblies/Código Base do servidor para funcionar, permitindo dois benefícios: - - Todo o código do Framework pode ser publicado e compartilhado livremente, permitindo que os desenvolvedores entendam melhor *como* funciona, além de poder sugerir para adicionar ou alterar algo. - - Todo o código relacionado ao framework é feito fora do assembly do servidor, significando que pequenas atualizações do jogo provavelmente não causarão efeitos colaterais. Isso torna o projeto mais compatível, além de facilitar quando for necessário atualizá-lo. + - Todo o código do Framework pode ser publicado e compartilhado livremente, permitindo que os desenvolvedores entendam melhor *como* funciona, além de poderem sugerir adições ou alterações. + - Todo o código relacionado ao framework é executado fora do assembly do servidor, significando que pequenas atualizações do jogo provavelmente não causarão efeitos colaterais. Isso torna o projeto mais compatível, além de facilitar quando for necessário atualizá-lo. # Instalação A instalação do EXILED é bem simples e você pode escolher entre dois tipos: ``Automática`` e ``Manual``. @@ -107,9 +107,9 @@ Mas certifique-se de seguir estas regras ao publicar seus plug-ins: - Seu plug-in deve conter uma classe herdada de ``Exiled.API.Features.Plugin<>``, caso contrário, o EXILED não carregará seu plug-in quando o servidor iniciar. - Quando um plug-in é carregado, o código dentro do método ``OnEnabled()`` da classe é chamado imediatamente (Dependendo do ``Exiled.API.Features.Plugin<>::PluginPriority``) - - Se você precisar acessar algo que ainda não foram inicializadas antes do carregamento do plug-in, recomendamos simplesmente ouvir o evento ``WaitingForPlayers``. Se por algum motivo necessite disso, coloque o código dentro de um loop ```while (!x)``` onde verifica se a variável/objeto que você precisa não é mais *null* antes de continuar. + - Se você precisar acessar algo que ainda não foi inicializado antes do carregamento do plug-in, recomendamos simplesmente ouvir o evento ``WaitingForPlayers``. Se por algum motivo você precisar fazer isso antes, coloque o código dentro de um loop ```while (!x)``` onde verifica se a variável/objeto que você precisa não é mais *null* antes de continuar. - O EXILED suporta o recarregamento dinâmico de Assemblies de plug-ins no meio da execução. Isso significa que, se você precisar atualizar um plug-in, isso pode ser feito sem reiniciar o servidor, no entanto, se você estiver atualizando um plug-in no meio da execução, o plug-in precisa ser configurado corretamente para suportá-lo, ou você terá um sério problema. Consulte a seção ``Atualizações Dinâmicas`` para mais informações e orientações a seguir. - - **NÃO** há evento OnUpdate, OnFixedUpdate ou OnLateUpdate no EXILED. Se você precisar, por algum motivo, executar o código com frequência, poderá usar uma corrotina MEC que espera por um quadro, 0.01f, ou usar uma camada de Timing como Timing.FixedUpdate. + - **NÃO** há evento OnUpdate, OnFixedUpdate ou OnLateUpdate no EXILED. Se você precisar, por algum motivo, executar o código com frequência, poderá usar uma corrotina MEC que espera por um quadro, 0.01f, ou usar um segmento de Timing como ``Timing.FixedUpdate``. ### Desativando patches de evento do EXILED ***Atualmente, esta função não está mais implementada.*** @@ -143,7 +143,7 @@ public IEnumerator MyCoroutine() É **altamente** recomendável que você pesquise no Google ou pergunte no Discord se não estiver familiarizado com o MEC e quiser aprender mais, obter conselhos ou precisar de ajuda. As perguntas, não importa o quão 'estúpidas' sejam, sempre serão respondidas da maneira mais útil e clara possível. Um bom código é melhor para todos. ### Atualizações Dinâmicas -O EXILED como uma estrutura suporta o recarregamento dinâmico de Assemblies de plug-ins sem exigir uma reinicialização do servidor. +O EXILED como uma estrutura suporta o recarregamento dinâmico de Assemblies de plug-ins sem precisar reiniciar o servidor. Por exemplo, apenas com `Exiled.Events` como o único plug-in e depois você deseja adicionar um novo, não será necessário reiniciar o servidor. Você pode simplesmente usar o comando do RemoteAdmin/ServerConsole `reload plugins` para recarregar todos os plug-ins do EXILED, incluindo os novos que não foram carregados antes. Isso também significa que você pode *atualizar* os plug-ins sem precisar reinicializar totalmente o servidor. No entanto, existem algumas diretrizes que devem ser seguidas pelo desenvolvedor do plug-in para que isso seja realizado corretamente: @@ -163,7 +163,7 @@ Tudo isso pode ser realizado nos métodos ``OnReloaded()`` ou ``OnDisabled()`` n Observe que eu disse *novos* Assemblies. Se você substituir um Assembly por outro com o mesmo nome, ele ***NÃO*** será atualizado. Isso se deve ao GAC (Global Assembly Cache), se você tentar 'carregar' um Assembly que já está no cache, ele sempre usará o Assembly em cache. Por esse motivo, se o seu plug-in oferecer suporte a Atualizações Dinâmicas, você deverá criar cada versão com um nome de Assembly diferente nas opções de compilação (renomear o arquivo não funcionará). Além disso, como o Assembly antigo não é "destruído" quando não é mais necessário, se você não cancelar a assinatura de eventos, desfazer o patch de sua instância de Harmony, eliminar corrotinas, etc., esse código continuará a ser executado, bem como o código da nova versão. -Esta é uma péssima, bem péssima situação para se deixar ocorrer. +Esta é uma situação muito ruim para se deixar acontecer. Como tal, os plug-ins que oferecem suporte a Atualizações Dinâmicas ***DEVEM*** seguir estas diretrizes ou serão removidos do servidor do Discord devido ao risco potencial para os donos de servidor. From 4aeb8fa3a1c4aeb5f9c7aa135eb9d9121248b235 Mon Sep 17 00:00:00 2001 From: Unbistrackted Date: Tue, 7 Apr 2026 17:30:23 -0300 Subject: [PATCH 07/14] docs: initial rewrite of GettingStarted --- .../localization/GettingStarted-BR.md | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/.github/documentation/localization/GettingStarted-BR.md b/.github/documentation/localization/GettingStarted-BR.md index 37b5f5b4f8..3eeffb4ceb 100644 --- a/.github/documentation/localization/GettingStarted-BR.md +++ b/.github/documentation/localization/GettingStarted-BR.md @@ -1,21 +1,28 @@ -# Documento de Baixo Nível do Exiled -*(Escrito por [KadeDev](https://github.com/KadeDev) para a comunidade) (Traduzido por [Firething](https://github.com/Firething))* +# Tutorial do EXILED +*(Escrito por [KadeDev](https://github.com/KadeDev) para a comunidade)* ## Manual de Instruções ### Introdução -Exiled é uma API de baixo nível, o que significa que você pode chamar funções do jogo sem precisar de vários bloatwares de API. +Como dito anteriormente, o EXILED é uma framework de alto nível que permite a gente chamar funções do jogo sem ter nenhum tipo de complicação ou quase nenhuma perca de perfomance. -Isso permite com que o Exiled atualize-se facilmente, e ele pode ser atualizado antes mesmo da atualização chegar ao jogo. +Isso permite que o projeto seja atualizado de forma mais simples, sem precisar que desenvolvedores atualizem seus plugins! (Isso se não houver códigos que foram alterados/tornados obsoletos em versões majors do EXILED) -Isso também permite que desenvolvedores de plug-in não precisem atualizar seus códigos sempre que houver uma atualização do Exiled ou SCP:SL. Na realidade, eles nem precisarão atualizar seus plug-ins! +O guia a seguir irá te ensinar o básico de como criar seu primeiro plugin! -Esse documento mostrará a você os básicos de como se fazer um Plug-in para o Exiled. A partir daqui, você poderá mostrar ao mundo as coisas criativas que você pode criar com essa framework! +### Guia +O [Plug-in de Exemplo](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Example) mostra o que são eventos e como criar eles de forma correta. Usar esse exemplo ajudará você a aprender a como usar o Exiled apropriadamente. Há naquele alguns aspectos que são importantes, o quais abordaremos nessa guia. -### Exemplo de Plug-in -Um [Exemplo de Plug-in](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Example) que é um plug-in simples que mostra eventos e como fazer eles adequadamente. Usar esse exemplo ajudará você a aprender a como usar o Exiled apropriadamente. Há alguns aspectos nesse plug-in que são importantes, falaremos sobre eles. +#### Atualizações Dinâmicas e ``OnEnable`` + ``OnDisable`` +O EXILED possuí um comando chamado **Reload**, que recarrega todos os plug-ins instalados. -#### Atualizações Dinâmicas em On Enable + On Disable -Exiled é uma framework que tem um comando de **Reload** que pode ser usado para recarregar todos os plug-ins e obter novos. Isso significa que você deve fazer com que seus plug-ins sejam **Dinamicamente Atualizáveis.** Isso significa que toda variável, evento, corrotina, etc *deve* ser atribuída quando ativada e anulada quando desativada. O método **On Enable** deve ativar todos, e o método **On Disable** deve desativar todos. Mas talvez você esteja se perguntando 'E o **On Reload**'? Essa função tem como objetivo carregar variáveis estáticas para que toda constante estática que você fizer não seja apagada. Então você poderia fazer algo assim: +Ele funciona desativando o plugin e ativando-o novamente, além de chamar a função ``OnReload`` que entraremos em detalhes abaixo. + +Lembrando que toda variável, evento, corrotina, etc. *deve* ser atribuído ou criado quando o plugin é ativado e anulada quando o mesmo é desativado. + +> [!IMPORTANT] +> Você **DEVE** usar o método ``OnEnable`` para ativar o Plug-in, e ``OnDisable`` desativa-lo. + +Mas talvez você deve estar se perguntando: "Mas então para que serve o ``OnReload``?" Essa função tem como objetivo recarregar as variáveis estáticas de dentro do seu plugin. Então você poderia fazer algo assim: ```csharp public static int StaticCount = 0; public int counter = 0; @@ -41,13 +48,14 @@ public override void OnReload() E o resultado seria: ```bash -# On enable fires +# O servidor é iniciado... +# OnEnable é chamado. 1 -# Reload command -# On Disable fires +# Comando Reload é executado por alguém... +# OnDisable é chamado. 2 -# On Reload fires -# On Enable fires again +# OnReload é chamado. +# E então OnEnabled é chamado novamente. 3 ``` From 543224f528540a2dda5e9f1784a17ce36b0334f0 Mon Sep 17 00:00:00 2001 From: Unbistrackted Date: Wed, 8 Apr 2026 02:28:24 -0300 Subject: [PATCH 08/14] docs: finish rewrite of GettingStarted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrige erros de digitação e melhora a clareza do texto. --- .../localization/GettingStarted-BR.md | 101 +++++++++--------- 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/.github/documentation/localization/GettingStarted-BR.md b/.github/documentation/localization/GettingStarted-BR.md index 3eeffb4ceb..1c24651979 100644 --- a/.github/documentation/localization/GettingStarted-BR.md +++ b/.github/documentation/localization/GettingStarted-BR.md @@ -3,14 +3,14 @@ ## Manual de Instruções ### Introdução -Como dito anteriormente, o EXILED é uma framework de alto nível que permite a gente chamar funções do jogo sem ter nenhum tipo de complicação ou quase nenhuma perca de perfomance. +Como dito anteriormente, o EXILED é uma framework de alto nível que permite a gente chamar funções do jogo sem ter nenhum tipo de complicação ou quase nenhuma perda de perfomance. Isso permite que o projeto seja atualizado de forma mais simples, sem precisar que desenvolvedores atualizem seus plugins! (Isso se não houver códigos que foram alterados/tornados obsoletos em versões majors do EXILED) O guia a seguir irá te ensinar o básico de como criar seu primeiro plugin! ### Guia -O [Plug-in de Exemplo](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Example) mostra o que são eventos e como criar eles de forma correta. Usar esse exemplo ajudará você a aprender a como usar o Exiled apropriadamente. Há naquele alguns aspectos que são importantes, o quais abordaremos nessa guia. +O [Plug-in de Exemplo](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Example) mostra o que são eventos e como criar eles de forma correta. Usar esse exemplo ajudará você a aprender a como usar o Exiled apropriadamente. Dentro desse existem elementos que são importantes, o quais abordaremos nessa guia. #### Atualizações Dinâmicas e ``OnEnable`` + ``OnDisable`` O EXILED possuí um comando chamado **Reload**, que recarrega todos os plug-ins instalados. @@ -31,13 +31,13 @@ public override void OnEnable() { counter = StaticCount; counter++; - Info(counter); + Log.Info(counter); } public override void OnDisable() { counter++; - Info(counter); + Log.Info(counter); } public override void OnReload() @@ -55,28 +55,39 @@ E o resultado seria: # OnDisable é chamado. 2 # OnReload é chamado. +número é guardado dentro de StaticCount # E então OnEnabled é chamado novamente. 3 ``` -(Claro, excluindo qualquer coisa além das respostas reais) -Sem fazer isso, teria ido apenas para o 1 e então para o 2 novamente. +Sem fazer isso, teria apenas mostrado no console ``1`` e então para o ``2`` novamente. ### Jogadores + Eventos -Agora que terminamos de fazer com que nossos plug-ins sejam **Dinamicamente Atualizáveis**, podemos focar em tentar interagir com jogadores por meio de eventos! +Agora que entendemos como plug-ins **Dinamicamente Atualizáveis** funcionam, podemos focar em tentar interagir com jogadores por meio de eventos! -Um evento é bem interessante, ele permite com que o SCP:SL se comunique com o Exiled e depois com o Exiled para todos os plug-ins! +Um evento é uma forma do jogo notificar seu plug-in quando algo acontece, por exemplo: jogador entrou, tomou dano, morreu, etc. + +> [!IMPORTANT] +> Você **PRECISA** referenciar o arquivo `Exiled.Events.dll` para que você consiga usar os eventos. (Ou apenas baixe o pacote [Nuget](https://www.nuget.org/packages/ExMod.Exiled) do Exiled!) + +Para começar a ouvir um evento, iremos utilizar uma nova classe chamada "EventHandlers", que irá gerenciar os nossos eventos. + +Na classe EventHandlers: -Você pode ouvir os eventos do seu plug-in adicionando isso à parte superior do arquivo de origem do plug-in principal: ```csharp -using EXILED; +public class EventHandlers +{ + public void PlayerVerified(VerifiedEventArgs ev) + { + // Códigos 1 + // Códigos 2 + // Códigos 3 + } +} ``` -E então você precisa referenciar o arquivo `Exiled.Events.dll` para que você realmente obtenha eventos. -Para referenciar um evento, nós estaremos utilizando uma nova classe que criamos; denominada "EventHandlers". O gerenciador de eventos não é fornecido por padrão; você deve criá-lo. - -Nós podemos referenciá-lo no void OnEnable e OnDisable assim: +E depois nós podemos referenciá-lo no ``OnEnable`` e ``OnDisable`` desse jeito: `MainClass.cs` ```csharp @@ -84,50 +95,38 @@ using Player = Exiled.Events.Handlers.Player; public EventHandlers EventHandler; -public override OnEnable() +public override void OnEnable() { - // Registre a classe de gerenciador de evento. E adicione o evento - // ao ouvinte de eventos 'EXILED_Events' para que obtenhamos o evento. EventHandler = new EventHandlers(); + // += significa que você vai estar se atribuindo ao evento, que nesse caso você vai ouvir toda vez que ele for chamado. Player.Verified += EventHandler.PlayerVerified; } -public override OnDisable() +public override void OnDisable() { - // Torne-o dinamicamente atualizável. - // Fazemos isso ao remover o ouvinte para o evento e então anulando o gerenciador de eventos. + // Precisamos desatribuir o evento e depois, anular o gerenciador de eventos. + // Esse processo deve ser repetido para cada evento. Player.Verified -= EventHandler.PlayerVerified; EventHandler = null; } ``` -E na classe EventHandlers, faríamos: +Agora toda vez que um jogador é autenticado após entrar no servidor podemos executar nosso código customizado! É importante destacar que todos eventos têm diferentes argumentos, e cada tipo tem propriedades diferentes associadas. -```csharp -public class EventHandlers -{ - public void PlayerVerified(VerifiedEventArgs ev) - { - - } -} -``` -Agora conseguimos nos conectar a um evento de jogador verificado que é executado sempre que um jogador é autenticado após entrar no servidor! É importante destacar que todos eventos têm diferentes argumentos de evento, e cada tipo de argumento de evento tem propriedades diferentes associadas. - -O EXILED já fornece uma função de aviso (broadcast), então a usaremos em nosso evento: +O EXILED já fornece uma função para enviar um broadcast, então a usaremos em nosso exemplo: ```csharp public class EventHandlers { public void PlayerVerified(VerifiedEventArgs ev) { - ev.Player.Broadcast(5, "Bem-vindo ao meu servidor maneiro!"); + ev.Player.Broadcast(5, "Bem-vindo(a) ao meu servidor!"); } } ``` -Como destacado acima, todo evento tem diferentes argumentos. Abaixo há um evento diferente que desliga os portões de Tesla para jogadores da Nine-Tailed Fox. +Outro exemplo seria um evento que desliga as Teslas para todos os MTFs (incluindo guardas). `MainClass.cs` ```csharp @@ -135,15 +134,15 @@ using Player = Exiled.Events.Handlers.Player; public EventHandlers EventHandler; -public override OnEnable() +public override void OnEnable() { EventHandler = new EventHandlers(); Player.TriggeringTesla += EventHandler.TriggeringTesla; } -public override OnDisable() +public override void OnDisable() { - // Não se esqueça, eventos devem ser desconectados e anulados no metódo Disable. + // Não se esqueça, eventos devem ser desatribuídos e anulados nesse metódo! Player.TriggeringTesla -= EventHandler.TriggeringTesla; EventHandler = null; } @@ -158,7 +157,7 @@ public class EventHandlers public void TriggeringTesla(TriggeringTeslaEventArgs ev) { // Desativa o evento para jogadores da equipe da Fundação. - // Isso pode ser feito ao verificar o lado (side) do jogador. + // Isso pode ser feito ao verificar o lado (side) da classe do jogador. if (ev.Player.Role.Side == Side.Mtf) { // Desative o acionamento da Tesla ao definir o ev.IsTriggerable para 'false'. // Jogadores que tiverem uma patente na FTM não irão mais ativar portões de Tesla. @@ -170,32 +169,34 @@ public class EventHandlers ### Configurações -A maioria dos plug-ins do Exiled contém configurações. As configurações permitem que os gerentes de servidor modifiquem os plug-ins livremente, embora sejam limitadas à configuração que o desenvolvedor do plug-in fornece. +Grande partes dos plug-ins precisam de configurações, isso permite que os donos de servidores modifiquem os plug-ins livremente, no caso limitadas à configuração que o desenvolvedor do plug-in forneceu. -Primeiro crie uma classe `config.cs` e mude a herança do seu plug-in de `Plugin<>` para `Plugin` +Primeiro crie uma classe chmada `Config` e mude a herança do seu plug-in de `Plugin<>` para `Plugin` -Agora você precisa fazer essa configuração herdar `IConfig`. Após herdar de `IConfig`, adicione uma propriedade para a classe titulada como `IsEnabled` e `Debug`. Sua classe de Configuração agora deve se assemelhar a isso: +Agora você precisa fazer essa classe herdar `IConfig`, e depois implementar o contrato dela criando `IsEnabled` e `Debug`. Sua classe de Configuração agora deve se assemelhar a isso: ```csharp public class Config : IConfig { - public bool IsEnabled { get; set; } + public bool IsEnabled { get; set; } = true; // Se você não colocar "= true", o seu plugin não sera habilitado quando o servidor iniciar! public bool Debug { get; set; } } ``` -Você pode adicionar qualquer opção de configuração ali e referenciá-la assim: +Você pode adicionar qualquer opção de configuração ali e referenciá-la assim: `Config.cs` ```csharp public class Config : IConfig { - public bool IsEnabled { get; set; } + public bool IsEnabled { get; set; } = true; public bool Debug { get; set; } - public string TextThatINeed { get; set; } = "esse é o padrão"; + public string TextThatINeed { get; set; } = "Texto para testes"; } ``` +> [!NOTE] +> Você não precisa verificar se `IsEnabled == true` ou não, o Loader já faz isso automaticamente. `MainClass.cs` ```csharp public override OnEnabled() @@ -204,11 +205,11 @@ Você pode adicionar qualquer opção de configuração ali e referenciá-la ass } ``` -E parabéns! Você fez o seu primeiro Plug-in para o Exiled! É importante destacar que todos os plug-ins **devem** ter uma configuração IsEnabled. Essa configuração permite que donos de servidor ativem e desativem o plug-in quando quiserem. A configuração IsEnabled será lida pelo carregador do Exiled (seu plug-in não precisa verificar se `IsEnabled == true` ou não). +Pronto, agora você sabe fazer Plug-ins usando o Exiled! ### E agora? -Se você quiser mais informações, você deve entrar no nosso [discord!](https://discord.gg/PyUkWTg) +Se você quiser mais informações, entre no nosso [Servidor do Discord!](https://discord.gg/PyUkWTg) -Nós temos um canal de #resources que você pode considerar útil, assim como colaboradores do EXILED e desenvolvedores de plug-in que estariam dispostos a ajudá-lo na criação de seus plug-ins. +Nós temos um canal de #resources que você pode considerar útil, assim como vários outros desenvolvedores que iram te ajudar a desenvolver seus plug-ins! -Ou você poderia ler sobre todos os eventos que nós temos! Se você deseja verificá-los, veja [aqui!](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Events/EventArgs) +Ou você poderia ler sobre todos os eventos que nós temos! Bem [aqui!](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Events/EventArgs) From 0a48181bcc88504f0377b1127fec608b0b7970a9 Mon Sep 17 00:00:00 2001 From: Unbistrackted Date: Wed, 8 Apr 2026 02:38:49 -0300 Subject: [PATCH 09/14] docs: fix typo --- .../localization/GettingStarted-BR.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/documentation/localization/GettingStarted-BR.md b/.github/documentation/localization/GettingStarted-BR.md index 1c24651979..21b9be5125 100644 --- a/.github/documentation/localization/GettingStarted-BR.md +++ b/.github/documentation/localization/GettingStarted-BR.md @@ -55,7 +55,7 @@ E o resultado seria: # OnDisable é chamado. 2 # OnReload é chamado. -número é guardado dentro de StaticCount +"counter" é guardado dentro de "StaticCount" # E então OnEnabled é chamado novamente. 3 @@ -65,10 +65,10 @@ Sem fazer isso, teria apenas mostrado no console ``1`` e então para o ``2`` nov ### Jogadores + Eventos Agora que entendemos como plug-ins **Dinamicamente Atualizáveis** funcionam, podemos focar em tentar interagir com jogadores por meio de eventos! -Um evento é uma forma do jogo notificar seu plug-in quando algo acontece, por exemplo: jogador entrou, tomou dano, morreu, etc. +Um evento é uma forma do jogo notificar seu plug-in quando algo acontece, por exemplo quando um jogador entrar, tomar dano, morrer, etc. > [!IMPORTANT] -> Você **PRECISA** referenciar o arquivo `Exiled.Events.dll` para que você consiga usar os eventos. (Ou apenas baixe o pacote [Nuget](https://www.nuget.org/packages/ExMod.Exiled) do Exiled!) +> Você **PRECISA** referenciar o arquivo `Exiled.Events.dll` para que você consiga usar os eventos. (Ou apenas baixe o pacote [Nuget do Exiled](https://www.nuget.org/packages/ExMod.Exiled)!) Para começar a ouvir um evento, iremos utilizar uma nova classe chamada "EventHandlers", que irá gerenciar os nossos eventos. @@ -126,7 +126,7 @@ public class EventHandlers } ``` -Outro exemplo seria um evento que desliga as Teslas para todos os MTFs (incluindo guardas). +Outro exemplo seria um evento que desliga as Teslas para todos os MTFs. (Incluindo guardas) `MainClass.cs` ```csharp @@ -169,7 +169,7 @@ public class EventHandlers ### Configurações -Grande partes dos plug-ins precisam de configurações, isso permite que os donos de servidores modifiquem os plug-ins livremente, no caso limitadas à configuração que o desenvolvedor do plug-in forneceu. +Grande partes dos plug-ins precisam de configurações, isso permite que os donos de servidores modifiquem os plug-ins livremente. (Limitados as configurações que o desenvolvedor ofereceu) Primeiro crie uma classe chmada `Config` e mude a herança do seu plug-in de `Plugin<>` para `Plugin` @@ -197,7 +197,9 @@ Você pode adicionar qualquer opção de configuração ali e referenciá-la ass > [!NOTE] > Você não precisa verificar se `IsEnabled == true` ou não, o Loader já faz isso automaticamente. + `MainClass.cs` + ```csharp public override OnEnabled() { @@ -212,4 +214,4 @@ Se você quiser mais informações, entre no nosso [Servidor do Discord!](https: Nós temos um canal de #resources que você pode considerar útil, assim como vários outros desenvolvedores que iram te ajudar a desenvolver seus plug-ins! -Ou você poderia ler sobre todos os eventos que nós temos! Bem [aqui!](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Events/EventArgs) +Ou você poderia ler sobre todos os eventos que nós temos! Bem [aqui](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Events/EventArgs)! From 10ad55b708ce8c03c523d58b67d524a7981298ab Mon Sep 17 00:00:00 2001 From: Unbistrackted Date: Wed, 8 Apr 2026 02:40:12 -0300 Subject: [PATCH 10/14] docs: credit myself --- .github/documentation/localization/GettingStarted-BR.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/documentation/localization/GettingStarted-BR.md b/.github/documentation/localization/GettingStarted-BR.md index 21b9be5125..9159cecd10 100644 --- a/.github/documentation/localization/GettingStarted-BR.md +++ b/.github/documentation/localization/GettingStarted-BR.md @@ -1,5 +1,5 @@ # Tutorial do EXILED -*(Escrito por [KadeDev](https://github.com/KadeDev) para a comunidade)* +*(Escrito por [KadeDev](https://github.com/KadeDev) para a comunidade, revisado e traduzido por [Unbistrackted](https://github.com/Unbistrackted) e [Firething](https://github.com/Firething))* ## Manual de Instruções ### Introdução From 89f48d48a08224767d90f347ce0b185bd2ebcbf9 Mon Sep 17 00:00:00 2001 From: Unbistrackted Date: Wed, 8 Apr 2026 02:45:09 -0300 Subject: [PATCH 11/14] docs: fix typo --- .github/documentation/localization/README-BR.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/documentation/localization/README-BR.md b/.github/documentation/localization/README-BR.md index 973b99448e..42011ffbc6 100644 --- a/.github/documentation/localization/README-BR.md +++ b/.github/documentation/localization/README-BR.md @@ -159,7 +159,7 @@ Isso também significa que você pode *atualizar* os plug-ins sem precisar reini - Os plug-ins que possuem patches personalizados do Harmony devem usar algum tipo de variável mutável no nome da instância do Harmony e devem usar UnPatchAll() em sua instância do Harmony quando o plug-in for desativado ou recarregado. - Quaisquer corrotinas iniciadas pelo plug-in em ``OnEnabled()`` também devem ser eliminadas quando o plug-in for desativado ou recarregado. -Tudo isso pode ser realizado nos métodos ``OnReloaded()`` ou ``OnDisabled()`` na classe do plug-in. Quando o EXILED recarrega os plug-ins, ele designa OnDisabled(), então ``OnReloaded()``, então ele carregará nos novos Assemblies, e então executará ``OnEnabled()``. +Tudo isso pode ser realizado nos métodos ``OnReloaded()`` ou ``OnDisabled()`` na classe do plug-in. Quando o EXILED recarrega os plug-ins, ele chama ``OnDisabled()``, então ``OnReloaded()``, então ele carregará nos novos Assemblies, e então executará ``OnEnabled()``. Observe que eu disse *novos* Assemblies. Se você substituir um Assembly por outro com o mesmo nome, ele ***NÃO*** será atualizado. Isso se deve ao GAC (Global Assembly Cache), se você tentar 'carregar' um Assembly que já está no cache, ele sempre usará o Assembly em cache. Por esse motivo, se o seu plug-in oferecer suporte a Atualizações Dinâmicas, você deverá criar cada versão com um nome de Assembly diferente nas opções de compilação (renomear o arquivo não funcionará). Além disso, como o Assembly antigo não é "destruído" quando não é mais necessário, se você não cancelar a assinatura de eventos, desfazer o patch de sua instância de Harmony, eliminar corrotinas, etc., esse código continuará a ser executado, bem como o código da nova versão. From afd0f64bc5b5ee2e6a429a36aa2abf3e38d036e2 Mon Sep 17 00:00:00 2001 From: Unbistrackted Date: Wed, 8 Apr 2026 15:57:49 -0300 Subject: [PATCH 12/14] docs: better linux instruction Updated instructions for Exiled Installer usage and path specification. --- .github/documentation/localization/README-BR.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/documentation/localization/README-BR.md b/.github/documentation/localization/README-BR.md index 42011ffbc6..410a92e58d 100644 --- a/.github/documentation/localization/README-BR.md +++ b/.github/documentation/localization/README-BR.md @@ -60,12 +60,10 @@ O EXILED agora deve estar instalado e ativo na próxima vez que você iniciar o > Certifique-se de executar o instalador como o mesmo usuário (ou root) que executa seus servidores de SCP:SL. ### Instalação automática ([mais informações](https://github.com/ExMod-Team/EXILED/blob/master/EXILED/Exiled.Installer/README.md)) +> [!CAUTION] +> Não esqueça de usar o ``chmod`` para dar as permissões necessárias para o instalador e executar o servidor dedicado pelo menos uma vez! - Baixe o **`Exiled.Installer-Linux` [aqui](https://github.com/ExMod-Team/EXILED/releases)** (clique em Assets -> baixe o Instalador) - - Instale-o digitando **`./Exiled.Installer-Linux --path /path/to/server`** ou mova-o diretamente para dentro da pasta do servidor, e digite: **`./Exiled.Installer-Linux`**. - -> [!NOTE] -> Se você quiser o último pré-lançamento, adicione a flag **`--pre-releases`**. Exemplo: **`./Exiled.Installer-Linux --pre-releases`** - + - Mova-o diretamente para dentro da pasta do servidor e digite: **`./Exiled.Installer-Linux`** ou, passe diretamente o caminho usando o comando: **`./Exiled.Installer-Linux --path /path/to/server`** - Para instalar e obter plug-ins, confira a secção [Instalando plug-ins](https://github.com/ExMod-Team/EXILED/edit/master/.github/documentation/localization/README-BR.md#instalando-plug-ins-1). ### Instalação manual From 43f9e45c38758800b3f5cfeb0ce021cb90a848ab Mon Sep 17 00:00:00 2001 From: Unbistrackted Date: Fri, 17 Apr 2026 09:30:47 -0300 Subject: [PATCH 13/14] docs: fix small typos --- .../localization/GettingStarted-BR.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/documentation/localization/GettingStarted-BR.md b/.github/documentation/localization/GettingStarted-BR.md index 9159cecd10..9674ffab4c 100644 --- a/.github/documentation/localization/GettingStarted-BR.md +++ b/.github/documentation/localization/GettingStarted-BR.md @@ -3,16 +3,16 @@ ## Manual de Instruções ### Introdução -Como dito anteriormente, o EXILED é uma framework de alto nível que permite a gente chamar funções do jogo sem ter nenhum tipo de complicação ou quase nenhuma perda de perfomance. +Como dito anteriormente, o EXILED é um framework de alto nível que nos permite chamar funções do jogo sem ter nenhum tipo de complicação ou quase nenhuma perda de perfomance. -Isso permite que o projeto seja atualizado de forma mais simples, sem precisar que desenvolvedores atualizem seus plugins! (Isso se não houver códigos que foram alterados/tornados obsoletos em versões majors do EXILED) +Isso permite que o projeto seja atualizado de forma mais simples, sem precisar que desenvolvedores atualizem seus plugins toda vez que o jogo atualizar. (Isso se não houver códigos que foram alterados/tornados obsoletos em versões majors do EXILED) O guia a seguir irá te ensinar o básico de como criar seu primeiro plugin! ### Guia -O [Plug-in de Exemplo](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Example) mostra o que são eventos e como criar eles de forma correta. Usar esse exemplo ajudará você a aprender a como usar o Exiled apropriadamente. Dentro desse existem elementos que são importantes, o quais abordaremos nessa guia. +O [Plug-in de Exemplo](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Example) mostra o que são eventos e como criar eles de forma correta. Usar esse exemplo ajudará você a aprender a como usar o Exiled apropriadamente. Dentro desse existem elementos que são importantes, portanto acompanhe o código durante o tutorial. -#### Atualizações Dinâmicas e ``OnEnable`` + ``OnDisable`` +#### ``OnEnable`` e ``OnDisable``+ Atualizações Dinâmicas O EXILED possuí um comando chamado **Reload**, que recarrega todos os plug-ins instalados. Ele funciona desativando o plugin e ativando-o novamente, além de chamar a função ``OnReload`` que entraremos em detalhes abaixo. @@ -63,14 +63,14 @@ E o resultado seria: Sem fazer isso, teria apenas mostrado no console ``1`` e então para o ``2`` novamente. ### Jogadores + Eventos -Agora que entendemos como plug-ins **Dinamicamente Atualizáveis** funcionam, podemos focar em tentar interagir com jogadores por meio de eventos! +Agora que entendemos como os métodos de entrada/inicializaçãos dos plug-ins funcionam, podemos focar em como interagir com jogadores por meio de eventos! Um evento é uma forma do jogo notificar seu plug-in quando algo acontece, por exemplo quando um jogador entrar, tomar dano, morrer, etc. > [!IMPORTANT] > Você **PRECISA** referenciar o arquivo `Exiled.Events.dll` para que você consiga usar os eventos. (Ou apenas baixe o pacote [Nuget do Exiled](https://www.nuget.org/packages/ExMod.Exiled)!) -Para começar a ouvir um evento, iremos utilizar uma nova classe chamada "EventHandlers", que irá gerenciar os nossos eventos. +Para começar a ouvir um evento, iremos utilizar uma nova classe chamada "EventHandlers", que irá gerenciar nossos eventos. Na classe EventHandlers: @@ -106,7 +106,7 @@ public override void OnDisable() { // Precisamos desatribuir o evento e depois, anular o gerenciador de eventos. - // Esse processo deve ser repetido para cada evento. + // A linha abaixo deve ser repetido para cada evento. Player.Verified -= EventHandler.PlayerVerified; EventHandler = null; } @@ -157,10 +157,10 @@ public class EventHandlers public void TriggeringTesla(TriggeringTeslaEventArgs ev) { // Desativa o evento para jogadores da equipe da Fundação. - // Isso pode ser feito ao verificar o lado (side) da classe do jogador. + // Isso pode ser feito ao verificar o lado da classe (Player::Role.Side) do jogador. if (ev.Player.Role.Side == Side.Mtf) { - // Desative o acionamento da Tesla ao definir o ev.IsTriggerable para 'false'. - // Jogadores que tiverem uma patente na FTM não irão mais ativar portões de Tesla. + // Desative o acionamento da Tesla mudando o valor de 'ev.IsTriggerable' para 'false'. + // Lembrando que isso desabilita para todos os MTFs, incluindo Guardas! ev.IsTriggerable = false; } } @@ -169,7 +169,7 @@ public class EventHandlers ### Configurações -Grande partes dos plug-ins precisam de configurações, isso permite que os donos de servidores modifiquem os plug-ins livremente. (Limitados as configurações que o desenvolvedor ofereceu) +Grande partes dos plug-ins precisam de configurações, isso permite que os donos de servidores modifiquem-os livremente. Primeiro crie uma classe chmada `Config` e mude a herança do seu plug-in de `Plugin<>` para `Plugin` @@ -183,7 +183,7 @@ Agora você precisa fazer essa classe herdar `IConfig`, e depois implementar o c } ``` -Você pode adicionar qualquer opção de configuração ali e referenciá-la assim: +Você pode adicionar qualquer opção de configuração e referenciá-la assim: `Config.cs` ```csharp @@ -196,7 +196,7 @@ Você pode adicionar qualquer opção de configuração ali e referenciá-la ass ``` > [!NOTE] -> Você não precisa verificar se `IsEnabled == true` ou não, o Loader já faz isso automaticamente. +> Você não precisa verificar se `IsEnabled == true` ou não, o Loader do Exiled já faz isso automaticamente. `MainClass.cs` @@ -207,11 +207,11 @@ Você pode adicionar qualquer opção de configuração ali e referenciá-la ass } ``` -Pronto, agora você sabe fazer Plug-ins usando o Exiled! +Pronto, você está preparado para fazer Plug-ins usando o Exiled! ### E agora? Se você quiser mais informações, entre no nosso [Servidor do Discord!](https://discord.gg/PyUkWTg) -Nós temos um canal de #resources que você pode considerar útil, assim como vários outros desenvolvedores que iram te ajudar a desenvolver seus plug-ins! +Nós temos um canal de recursos chamado ``#resources`` que você pode considerar útil, assim como vários outros desenvolvedores que iram te ajudar a desenvolver seus plug-ins! Ou você poderia ler sobre todos os eventos que nós temos! Bem [aqui](https://github.com/ExMod-Team/EXILED/tree/master/EXILED/Exiled.Events/EventArgs)! From 33683d3a1b944ff021f5f95ee3024e6068f60c3a Mon Sep 17 00:00:00 2001 From: Unbistrackted Date: Fri, 17 Apr 2026 17:17:32 -0300 Subject: [PATCH 14/14] docs: fix typos by Firething's review --- .github/documentation/localization/GettingStarted-BR.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/documentation/localization/GettingStarted-BR.md b/.github/documentation/localization/GettingStarted-BR.md index 9674ffab4c..157aaad4ac 100644 --- a/.github/documentation/localization/GettingStarted-BR.md +++ b/.github/documentation/localization/GettingStarted-BR.md @@ -3,7 +3,7 @@ ## Manual de Instruções ### Introdução -Como dito anteriormente, o EXILED é um framework de alto nível que nos permite chamar funções do jogo sem ter nenhum tipo de complicação ou quase nenhuma perda de perfomance. +Como dito anteriormente, o EXILED é um framework de alto nível que nos permite chamar funções do jogo sem ter nenhum tipo de complicação ou quase nenhuma perda de performance. Isso permite que o projeto seja atualizado de forma mais simples, sem precisar que desenvolvedores atualizem seus plugins toda vez que o jogo atualizar. (Isso se não houver códigos que foram alterados/tornados obsoletos em versões majors do EXILED) @@ -105,8 +105,7 @@ public override void OnEnable() public override void OnDisable() { // Precisamos desatribuir o evento e depois, anular o gerenciador de eventos. - - // A linha abaixo deve ser repetido para cada evento. + // A linha abaixo deve ser repetida para cada evento. Player.Verified -= EventHandler.PlayerVerified; EventHandler = null; }