You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
*(Escrito por [KadeDev](https://github.com/KadeDev) para a comunidade) (Traduzido por [Firething](https://github.com/Firething))*
1
+
# Tutorial do EXILED
2
+
*(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))*
3
3
4
4
## Manual de Instruções
5
5
### Introdução
6
-
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.
6
+
Como dito anteriormente, o EXILED é um framework de alto nívelque nos permite chamar funções do jogo sem ter nenhum tipo de complicação ou quase nenhuma perda de performance.
7
7
8
-
Isso permite com que o Exiled atualize-se facilmente, e ele pode ser atualizado antes mesmo da atualização chegar ao jogo.
8
+
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)
9
9
10
-
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!
10
+
O guia a seguir irá te ensinar o básico de como criar seu primeiro plugin!
11
11
12
-
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!
12
+
### Guia
13
+
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.
13
14
14
-
###Exemplo de Plug-in
15
-
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.
15
+
#### ``OnEnable`` e ``OnDisable``+ Atualizações Dinâmicas
16
+
O EXILED possuí um comando chamado **Reload**, que recarrega todos os plug-ins instalados.
16
17
17
-
#### Atualizações Dinâmicas em On Enable + On Disable
18
-
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:
18
+
Ele funciona desativando o plugin e ativando-o novamente, além de chamar a função ``OnReload`` que entraremos em detalhes abaixo.
19
+
20
+
Lembrando que toda variável, evento, corrotina, etc. *deve* ser atribuído ou criado quando o plugin é ativado e anulada quando o mesmo é desativado.
21
+
22
+
> [!IMPORTANT]
23
+
> Você **DEVE** usar o método ``OnEnable`` para ativar o Plug-in, e ``OnDisable`` desativa-lo.
24
+
25
+
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:
19
26
```csharp
20
27
publicstaticintStaticCount=0;
21
28
publicintcounter=0;
@@ -24,13 +31,13 @@ public override void OnEnable()
24
31
{
25
32
counter=StaticCount;
26
33
counter++;
27
-
Info(counter);
34
+
Log.Info(counter);
28
35
}
29
36
30
37
publicoverridevoidOnDisable()
31
38
{
32
39
counter++;
33
-
Info(counter);
40
+
Log.Info(counter);
34
41
}
35
42
36
43
publicoverridevoidOnReload()
@@ -41,101 +48,100 @@ public override void OnReload()
41
48
42
49
E o resultado seria:
43
50
```bash
44
-
# On enable fires
51
+
# O servidor é iniciado...
52
+
# OnEnable é chamado.
45
53
1
46
-
# Reload command
47
-
#On Disable fires
54
+
#Comando Reload é executado por alguém...
55
+
#OnDisable é chamado.
48
56
2
49
-
# On Reload fires
50
-
# On Enable fires again
57
+
# OnReload é chamado.
58
+
"counter" é guardado dentro de "StaticCount"
59
+
# E então OnEnabled é chamado novamente.
51
60
3
52
61
53
62
```
54
-
(Claro, excluindo qualquer coisa além das respostas reais)
55
-
Sem fazer isso, teria ido apenas para o 1 e então para o 2 novamente.
63
+
Sem fazer isso, teria apenas mostrado no console ``1`` e então para o ``2`` novamente.
56
64
57
65
### Jogadores + Eventos
58
-
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!
66
+
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!
67
+
68
+
Um evento é uma forma do jogo notificar seu plug-in quando algo acontece, por exemplo quando um jogador entrar, tomar dano, morrer, etc.
59
69
60
-
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!
70
+
> [!IMPORTANT]
71
+
> 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)!)
72
+
73
+
Para começar a ouvir um evento, iremos utilizar uma nova classe chamada "EventHandlers", que irá gerenciar nossos eventos.
74
+
75
+
Na classe EventHandlers:
61
76
62
-
Você pode ouvir os eventos do seu plug-in adicionando isso à parte superior do arquivo de origem do plug-in principal:
63
77
```csharp
64
-
usingEXILED;
78
+
publicclassEventHandlers
79
+
{
80
+
publicvoidPlayerVerified(VerifiedEventArgsev)
81
+
{
82
+
// Códigos 1
83
+
// Códigos 2
84
+
// Códigos 3
85
+
}
86
+
}
65
87
```
66
-
E então você precisa referenciar o arquivo `Exiled.Events.dll` para que você realmente obtenha eventos.
67
88
68
-
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.
69
89
70
-
71
-
Nós podemos referenciá-lo no void OnEnable e OnDisable assim:
90
+
E depois nós podemos referenciá-lo no ``OnEnable`` e ``OnDisable`` desse jeito:
72
91
73
92
`MainClass.cs`
74
93
```csharp
75
94
usingPlayer=Exiled.Events.Handlers.Player;
76
95
77
96
publicEventHandlersEventHandler;
78
97
79
-
publicoverrideOnEnable()
98
+
publicoverridevoidOnEnable()
80
99
{
81
-
// Registre a classe de gerenciador de evento. E adicione o evento
82
-
// ao ouvinte de eventos 'EXILED_Events' para que obtenhamos o evento.
83
100
EventHandler=newEventHandlers();
101
+
// += significa que você vai estar se atribuindo ao evento, que nesse caso você vai ouvir toda vez que ele for chamado.
84
102
Player.Verified+=EventHandler.PlayerVerified;
85
103
}
86
104
87
-
publicoverrideOnDisable()
105
+
publicoverridevoidOnDisable()
88
106
{
89
-
// Torne-o dinamicamente atualizável.
90
-
// Fazemos isso ao remover o ouvinte para o evento e então anulando o gerenciador de eventos.
91
-
// Esse processo deve ser repetido para cada evento.
107
+
// Precisamos desatribuir o evento e depois, anular o gerenciador de eventos.
108
+
// A linha abaixo deve ser repetida para cada evento.
92
109
Player.Verified-=EventHandler.PlayerVerified;
93
110
EventHandler=null;
94
111
}
95
112
```
96
113
97
-
E na classe EventHandlers, faríamos:
114
+
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.
98
115
99
-
```csharp
100
-
publicclassEventHandlers
101
-
{
102
-
publicvoidPlayerVerified(VerifiedEventArgsev)
103
-
{
104
-
105
-
}
106
-
}
107
-
```
108
-
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.
109
-
110
-
O EXILED já fornece uma função de aviso (broadcast), então a usaremos em nosso evento:
116
+
O EXILED já fornece uma função para enviar um broadcast, então a usaremos em nosso exemplo:
111
117
112
118
```csharp
113
119
publicclassEventHandlers
114
120
{
115
121
publicvoidPlayerVerified(VerifiedEventArgsev)
116
122
{
117
-
ev.Player.Broadcast(5, "<color=lime>Bem-vindo ao meu servidor maneiro!</color>");
123
+
ev.Player.Broadcast(5, "<color=lime>Bem-vindo(a) ao meu servidor!</color>");
118
124
}
119
125
}
120
126
```
121
127
122
-
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.
128
+
Outro exemplo seria um evento que desliga as Teslas para todos os MTFs. (Incluindo guardas)
// Desativa o evento para jogadores da equipe da Fundação.
153
-
// Isso pode ser feito ao verificar o lado (side) do jogador.
159
+
// Isso pode ser feito ao verificar o lado da classe (Player::Role.Side) do jogador.
154
160
if (ev.Player.Role.Side==Side.Mtf) {
155
-
// Desative o acionamento da Tesla ao definir o ev.IsTriggerable para 'false'.
156
-
//Jogadores que tiverem uma patente na FTM não irão mais ativar portões de Tesla.
161
+
// Desative o acionamento da Tesla mudando o valor de 'ev.IsTriggerable' para 'false'.
162
+
//Lembrando que isso desabilita para todos os MTFs, incluindo Guardas!
157
163
ev.IsTriggerable=false;
158
164
}
159
165
}
@@ -162,45 +168,49 @@ public class EventHandlers
162
168
163
169
164
170
### Configurações
165
-
A maioria dos plug-ins do Exiled contém configurações. As configurações permitem que os gerentes de servidor modifiquemos plug-ins livremente, embora sejam limitadas à configuração que o desenvolvedor do plug-in fornece.
171
+
Grande partes dos plug-ins precisam de configurações, isso permite que os donos de servidores modifiquem-os livremente.
166
172
167
-
Primeiro crie uma classe `config.cs` e mude a herança do seu plug-in de `Plugin<>` para `Plugin<Config>`
173
+
Primeiro crie uma classe chmada `Config` e mude a herança do seu plug-in de `Plugin<>` para `Plugin<Config>`
168
174
169
-
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:
175
+
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:
170
176
171
177
```csharp
172
178
publicclassConfig : IConfig
173
179
{
174
-
publicboolIsEnabled { get; set; }
180
+
publicboolIsEnabled { get; set; }=true; // Se você não colocar "= true", o seu plugin não sera habilitado quando o servidor iniciar!
175
181
publicboolDebug { get; set; }
176
182
}
177
183
```
178
184
179
-
Você pode adicionar qualquer opção de configuração ali e referenciá-la assim:
185
+
Você pode adicionar qualquer opção de configuração e referenciá-la assim:
180
186
181
187
`Config.cs`
182
188
```csharp
183
189
publicclassConfig : IConfig
184
190
{
185
-
publicboolIsEnabled { get; set; }
191
+
publicboolIsEnabled { get; set; }=true;
186
192
publicboolDebug { get; set; }
187
-
publicstringTextThatINeed { get; set; } ="esse é o padrão";
193
+
publicstringTextThatINeed { get; set; } ="Texto para testes";
188
194
}
189
195
```
190
196
197
+
> [!NOTE]
198
+
> Você não precisa verificar se `IsEnabled == true` ou não, o Loader do Exiled já faz isso automaticamente.
199
+
191
200
`MainClass.cs`
201
+
192
202
```csharp
193
203
publicoverrideOnEnabled()
194
204
{
195
205
Log.Info(Config.TextThatINeed);
196
206
}
197
207
```
198
208
199
-
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).
209
+
Pronto, você está preparado para fazer Plug-ins usando o Exiled!
200
210
201
211
### E agora?
202
-
Se você quiser mais informações, você deve entrar no nosso [discord!](https://discord.gg/PyUkWTg)
212
+
Se você quiser mais informações, entre no nosso [Servidor do Discord!](https://discord.gg/PyUkWTg)
203
213
204
-
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.
214
+
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!
205
215
206
-
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)
216
+
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)!
0 commit comments