Cum reacționezi la evenimentele de joc în CounterStrikeSharp
Evenimentele de joc sunt mesaje pe care jocul le trimite când se întâmplă ceva: moare un jucător, începe o rundă, este plantată bomba. Majoritatea pluginurilor interesante se construiesc din ele. În CounterStrikeSharp, abonarea la un eveniment durează doar câteva rânduri.
Ce este un eveniment
Fiecare eveniment are propria clasă, cu un nume care începe cu Event, precum EventPlayerDeath sau EventRoundStart, și poartă date despre ce s-a întâmplat, de exemplu cine a murit și cine l-a ucis. Pluginul tău primește o metodă apelată de fiecare dată când evenimentul se produce.
Abonează-te cu un atribut
Cea mai simplă cale este atributul GameEventHandler pus pe o metodă. Metoda primește evenimentul și returnează un HookResult. Datele evenimentului se citesc direct din obiectul eveniment.
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;
}
}
Abonează-te din cod
Poți înregistra un handler și în metoda Load, cu RegisterEventHandler. Face același lucru și e mai potrivit când vrei să te abonezi doar în anumite condiții, de exemplu în funcție de configurare.
public override void Load(bool hotReload)
{
RegisterEventHandler<EventRoundStart>((@event, info) =>
{
Logger.LogInformation("Round started");
return HookResult.Continue;
});
}
Pre și Post
Implicit, handlerul tău rulează după ce jocul a procesat evenimentul (Post). Cu HookMode.Pre rulează înainte, ceea ce îți permite să schimbi ce se întâmplă, de exemplu să ascunzi mesajul implicit cu DontBroadcast. Folosește Post, dacă nu ai nevoie cu adevărat să intervii.
[GameEventHandler(HookMode.Pre)]
public HookResult OnPlayerDeathPre(EventPlayerDeath @event, GameEventInfo info)
{
if ([email protected])
{
info.DontBroadcast = true;
}
return HookResult.Continue;
}
Jucătorii pot fi null
Proprietăți ale evenimentului precum Userid pot fi goale, de exemplu când jucătorul a ieșit exact când s-a declanșat evenimentul sau când ucigașul este lumea însăși. Verifică mereu null înainte să le folosești, altfel un moment nefericit aruncă o excepție în mijlocul rundei.
Ce înseamnă HookResult
Continue lasă jocul să meargă normal și este răspunsul potrivit de cele mai multe ori. Handled spune jocului că te-ai ocupat tu, iar Stop oprește rularea celorlalte handlere. Returnează Continue dacă nu ai un motiv să faci altfel.
Obiceiuri bune
Handlerele rulează pe firul principal al jocului, deci păstrează-le rapide și nu aștepta niciodată o bază de date sau o cerere web în interiorul lor. Nu trebuie să te dezabonezi la descărcarea pluginului, CounterStrikeSharp scoate handlerele în locul tău. Pentru lista de evenimente și câmpurile lor, consultă documentația evenimentelor de joc.
A fost util acest tutorial?
Barlap pentru comunitate.