Reagindo a eventos do jogo no CounterStrikeSharp
Eventos do jogo são mensagens que o jogo envia quando algo acontece: um jogador morre, uma rodada começa, a bomba é plantada. A maioria dos plugins interessantes é construída com eles. No CounterStrikeSharp, assinar um evento leva só algumas linhas.
O que é um evento
Cada evento tem sua própria classe, com um nome que começa com Event, como EventPlayerDeath ou EventRoundStart, e carrega dados sobre o que aconteceu, por exemplo quem morreu e quem matou. Seu plugin recebe um método chamado toda vez que o evento ocorre.
Inscreva-se com um atributo
O jeito mais simples é o atributo GameEventHandler num método. O método recebe o evento e devolve um HookResult. Os dados do evento são lidos direto do objeto do evento.
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using Microsoft.Extensions.Logging;
public class EventsPlugin : BasePlugin
{
public override string ModuleName => "Events Example";
public override string ModuleVersion => "1.0.0";
[GameEventHandler] public HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info) {
Logger.LogInformation("{Name} died", @event.Userid?.PlayerName);
return HookResult.Continue;
}
}
Inscreva-se pelo código
Você também pode registrar um manipulador no método Load com RegisterEventHandler. Faz a mesma coisa e é melhor quando você quer se inscrever só em certas condições, por exemplo conforme a configuração.
public override void Load(bool hotReload)
{
RegisterEventHandler<EventRoundStart>((@event, info) =>
{
Logger.LogInformation("Round started");
return HookResult.Continue;
});
}
Pre e Post
Por padrão, seu manipulador roda depois que o jogo processou o evento (Post). Com HookMode.Pre ele roda antes, o que permite mudar o que acontece, por exemplo esconder a mensagem padrão com DontBroadcast. Use Post, a menos que você realmente precise interferir.
[GameEventHandler(HookMode.Pre)]
public HookResult OnPlayerDeathPre(EventPlayerDeath @event, GameEventInfo info)
{
if ([email protected])
{
info.DontBroadcast = true;
}
return HookResult.Continue;
}
Jogadores podem ser null
Propriedades como Userid podem vir vazias, por exemplo quando o jogador saiu justo na hora do evento ou quando o assassino é o próprio mundo. Sempre verifique null antes de usá-las, senão um momento azarado lança uma exceção no meio da rodada.
O que significa HookResult
Continue deixa o jogo seguir normalmente e é a resposta certa na maioria das vezes. Handled avisa ao jogo que você cuidou do assunto, e Stop impede a execução de outros manipuladores. Devolva Continue, a menos que tenha um motivo para fazer diferente.
Bons hábitos
Os manipuladores rodam na thread principal do jogo, então mantenha-os rápidos e nunca espere dentro deles por um banco de dados ou requisição web. Não precisa cancelar a inscrição ao descarregar o plugin, o CounterStrikeSharp remove os manipuladores por você. Para a lista de eventos e seus campos, consulte a documentação de eventos do jogo.
Este tutorial foi útil?
Barlap para a comunidade.