Réagir aux événements de jeu avec CounterStrikeSharp
Les événements de jeu sont des messages que le jeu envoie quand quelque chose se produit : un joueur meurt, un round commence, la bombe est posée. La plupart des plugins intéressants se construisent à partir d’eux. Dans CounterStrikeSharp, s’abonner à un événement ne demande que quelques lignes.
Ce qu’est un événement
Chaque événement a sa propre classe, dont le nom commence par Event, comme EventPlayerDeath ou EventRoundStart, et transporte des données sur ce qui s’est passé, par exemple qui est mort et qui l’a tué. Votre plugin reçoit une méthode appelée à chaque fois que l’événement se produit.
S’abonner avec un attribut
Le plus simple est l’attribut GameEventHandler placé sur une méthode. La méthode reçoit l’événement et renvoie un HookResult. Les données de l’événement se lisent directement dans l’objet événement.
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;
}
}
S’abonner dans le code
Vous pouvez aussi enregistrer un gestionnaire dans la méthode Load avec RegisterEventHandler. Le résultat est le même, et c’est préférable quand vous ne voulez vous abonner que sous certaines conditions, par exemple selon la configuration.
public override void Load(bool hotReload)
{
RegisterEventHandler<EventRoundStart>((@event, info) =>
{
Logger.LogInformation("Round started");
return HookResult.Continue;
});
}
Pre et Post
Par défaut, votre gestionnaire s’exécute une fois que le jeu a traité l’événement (Post). Avec HookMode.Pre, il s’exécute avant, ce qui permet de modifier le déroulement, par exemple masquer le message par défaut avec DontBroadcast. Utilisez Post sauf si vous devez vraiment intervenir.
[GameEventHandler(HookMode.Pre)]
public HookResult OnPlayerDeathPre(EventPlayerDeath @event, GameEventInfo info)
{
if ([email protected])
{
info.DontBroadcast = true;
}
return HookResult.Continue;
}
Les joueurs peuvent être null
Des propriétés comme Userid peuvent être vides, par exemple quand le joueur est parti au moment même de l’événement ou quand le tueur est le monde lui-même. Vérifiez toujours null avant de les utiliser, sinon un mauvais timing lève une exception en plein round.
Ce que signifie HookResult
Continue laisse le jeu suivre son cours normal et c’est la bonne réponse la plupart du temps. Handled indique au jeu que vous avez géré la chose, et Stop empêche les autres gestionnaires de s’exécuter. Renvoyez Continue sauf raison contraire.
Bonnes habitudes
Les gestionnaires s’exécutent sur le thread principal du jeu : gardez-les rapides et n’attendez jamais une base de données ou une requête web à l’intérieur. Inutile de vous désabonner au déchargement, CounterStrikeSharp retire les gestionnaires pour vous. Pour la liste des événements et de leurs champs, consultez la documentation des événements de jeu.
Ce tutoriel vous a-t-il été utile ?
Barlap pour la communauté.