diff --git a/.github/documentation/localization/GettingStarted-BR.md b/.github/documentation/localization/GettingStarted-BR.md
index 37b5f5b4f8..9159cecd10 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, revisado e traduzido por [Unbistrackted](https://github.com/Unbistrackted) e [Firething](https://github.com/Firething))*
## 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 perda 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. Dentro desse existem elementos 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;
@@ -24,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()
@@ -41,34 +48,46 @@ 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.
+"counter" é 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 é uma forma do jogo notificar seu plug-in quando algo acontece, por exemplo quando um jogador entrar, tomar dano, morrer, etc.
-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!
+> [!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.
+
+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
@@ -76,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
@@ -127,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;
}
@@ -150,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.
@@ -162,33 +169,37 @@ 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. (Limitados as configurações que o desenvolvedor ofereceu)
-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()
{
@@ -196,11 +207,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)!
diff --git a/.github/documentation/localization/README-BR.md b/.github/documentation/localization/README-BR.md
index e6f6102b89..410a92e58d 100644
--- a/.github/documentation/localization/README-BR.md
+++ b/.github/documentation/localization/README-BR.md
@@ -11,98 +11,114 @@
-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.
+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:
- - 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 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 é 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 é bem simples e você pode escolher entre dois tipos: ``Automática`` e ``Manual``.
-Se você optar por usar o instalador, se executado corretamente, ele cuidará de instalar todos os recursos do EXILED.
+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``. Com isso em mente, tudo o que você precisa fazer é mover essas duas para o caminho adequado e pronto!
+
+Abaixo entraremos em mais detalhes...
# 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 no 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 **`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 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)**
- - 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\!*
+ - Baixe o **`Exiled.tar.gz` [aqui](https://github.com/ExMod-Team/EXILED/releases)**
+ - 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 / no ícone de pesquisa ou na barra do Windows Explorer
- - Qualquer outra versão do Windows:
+ - **Windows 10 e 11**:
+ 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
-É 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ê 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) (**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)
-
- - 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.
+### 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)
+ - 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
- - **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` [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``**
- - 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ó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. 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 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, é 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/).
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``.
- - 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 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.***
-### 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 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 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;
@@ -116,24 +132,24 @@ 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.
}
}
```
-É **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.
-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.
+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:
***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***
@@ -141,14 +157,14 @@ 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.
-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 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*
+**Tradução para o português feita por**: *Unbistrackted* e *Firething*