Reagovanje na događaje u igri u CounterStrikeSharp-u
Događaji u igri su poruke koje igra šalje kada se nešto desi: igrač umre, počne runda, postavi se bomba. Većina zanimljivih plagina gradi se od njih. U CounterStrikeSharp-u pretplata na događaj zahteva samo nekoliko redova.
Šta je događaj
Svaki događaj ima svoju klasu čije ime počinje sa Event, na primer EventPlayerDeath ili EventRoundStart, i nosi podatke o tome šta se desilo, recimo ko je umro i ko ga je ubio. Vaš plagin dobija metodu koja se poziva svaki put kada se događaj dogodi.
Pretplatite se atributom
Najjednostavniji način je atribut GameEventHandler na metodi. Metoda prima događaj i vraća HookResult. Podaci događaja čitaju se direktno iz objekta događaja.
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;
}
}
Pretplatite se iz koda
Rukovaoca možete registrovati i u metodi Load pomoću RegisterEventHandler. Radi isto i bolji je kada želite da se pretplatite samo pod određenim uslovima, na primer u zavisnosti od konfiguracije.
public override void Load(bool hotReload)
{
RegisterEventHandler<EventRoundStart>((@event, info) =>
{
Logger.LogInformation("Round started");
return HookResult.Continue;
});
}
Pre i Post
Podrazumevano se vaš rukovalac izvršava nakon što je igra obradila događaj (Post). Sa HookMode.Pre izvršava se pre toga, što vam omogućava da promenite šta se dešava, na primer da sakrijete podrazumevanu poruku pomoću DontBroadcast. Koristite Post osim ako zaista ne morate da intervenišete.
[GameEventHandler(HookMode.Pre)]
public HookResult OnPlayerDeathPre(EventPlayerDeath @event, GameEventInfo info)
{
if ([email protected])
{
info.DontBroadcast = true;
}
return HookResult.Continue;
}
Igrači mogu biti null
Svojstva poput Userid mogu biti prazna, na primer kada je igrač izašao upravo u trenutku događaja ili kada je ubica sam svet. Uvek proverite null pre upotrebe, inače nesrećan trenutak baca izuzetak usred runde.
Šta znači HookResult
Continue dopušta igri da nastavi normalno i u većini slučajeva je pravi odgovor. Handled govori igri da ste se vi pobrinuli, a Stop sprečava izvršavanje ostalih rukovalaca. Vraćajte Continue osim ako nemate razlog za drugačije.
Dobre navike
Rukovaoci se izvršavaju u glavnoj niti igre, zato ih održavajte brzima i nikad u njima ne čekajte bazu podataka ili veb zahtev. Ne morate da se odjavljujete kada se plagin ukloni, CounterStrikeSharp uklanja rukovaoce umesto vas. Za listu događaja i njihovih polja pogledajte dokumentaciju o događajima u igri.
Da li vam je ovaj vodič bio koristan?
Barlap za zajednicu.