MySQL: Online
Load: Low
Sandbox: Ready

Reagire agli eventi di gioco in CounterStrikeSharp

Gli eventi di gioco sono messaggi che il gioco invia quando succede qualcosa: muore un giocatore, inizia un round, viene piazzata la bomba. La maggior parte dei plugin interessanti si costruisce con loro. In CounterStrikeSharp iscriversi a un evento richiede poche righe.

1

Cos’è un evento

Ogni evento ha una propria classe, con un nome che inizia con Event, come EventPlayerDeath o EventRoundStart, e porta dati su ciò che è accaduto, per esempio chi è morto e chi lo ha ucciso. Il tuo plugin riceve un metodo che viene chiamato ogni volta che l’evento si verifica.

2

Iscriviti con un attributo

Il modo più semplice è l’attributo GameEventHandler su un metodo. Il metodo riceve l’evento e restituisce un HookResult. I dati dell’evento si leggono direttamente dall’oggetto 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

Iscriviti dal codice

Puoi registrare un gestore anche nel metodo Load con RegisterEventHandler. Fa la stessa cosa ed è preferibile quando vuoi iscriverti solo a certe condizioni, per esempio in base alla configurazione.

public override void Load(bool hotReload)
{
    RegisterEventHandler<EventRoundStart>((@event, info) =>
    {
        Logger.LogInformation("Round started");
        return HookResult.Continue;
    });
}
4

Pre e Post

Per impostazione predefinita il tuo gestore viene eseguito dopo che il gioco ha elaborato l’evento (Post). Con HookMode.Pre viene eseguito prima, e così puoi cambiare ciò che accade, per esempio nascondere il messaggio predefinito con DontBroadcast. Usa Post, a meno che tu non debba davvero intervenire.

[GameEventHandler(HookMode.Pre)]
public HookResult OnPlayerDeathPre(EventPlayerDeath @event, GameEventInfo info)
{
    if ([email protected])
    {
        info.DontBroadcast = true;
    }

    return HookResult.Continue;
}
5

I giocatori possono essere null

Proprietà come Userid possono essere vuote, per esempio se il giocatore è uscito proprio mentre scattava l’evento o se l’uccisore è il mondo stesso. Controlla sempre null prima di usarle, altrimenti un momento sfortunato lancia un’eccezione nel mezzo del round.

6

Cosa significa HookResult

Continue lascia che il gioco prosegua normalmente ed è la risposta giusta nella maggior parte dei casi. Handled dice al gioco che te ne sei occupato tu, e Stop impedisce l’esecuzione degli altri gestori. Restituisci Continue se non hai un motivo per fare diversamente.

7

Buone abitudini

I gestori girano sul thread principale del gioco, quindi tienili veloci e non attendere mai in essi un database o una richiesta web. Non serve annullare l’iscrizione quando il plugin si scarica, CounterStrikeSharp rimuove i gestori per te. Per l’elenco degli eventi e dei loro campi, consulta la documentazione degli eventi di gioco.

Questo tutorial ti è stato utile?

Pagina generata in 0.011 secondi
CounterStrikeSharp Web Compiler V1.0 - Realizzato con da RomaniaBarlap per la comunità.