MySQL: Online
Load: Low
Sandbox: Ready

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.

1

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.

2

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;
    }
}
3

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;
    });
}
4

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;
}
5

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.

6

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.

7

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?

Página gerada em 0.012 segundos
CounterStrikeSharp Web Compiler V1.0 - Feito com por RomaniaBarlap para a comunidade.