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.
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.
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;
}
}
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;
});
}
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;
}
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.
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.
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?
Barlap per la comunità.