Játékesemények kezelése CounterStrikeSharp-pal
A játékesemények olyan üzenetek, amelyeket a játék küld, ha valami történik: meghal egy játékos, elkezdődik egy kör, lerakják a bombát. Az érdekes bővítmények többsége ezekből épül fel. A CounterStrikeSharpban egy eseményre feliratkozni csak néhány sor.
Mi az az esemény
Minden eseménynek saját osztálya van, amelynek neve Event-tel kezdődik, például EventPlayerDeath vagy EventRoundStart, és adatokat hordoz arról, mi történt, például ki halt meg és ki ölte meg. A bővítményed kap egy metódust, amelyet az esemény minden bekövetkezésekor meghívnak.
Feliratkozás attribútummal
A legegyszerűbb mód a GameEventHandler attribútum egy metóduson. A metódus megkapja az eseményt, és HookResult értéket ad vissza. Az esemény adatait közvetlenül az eseményobjektumból olvasod.
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;
}
}
Feliratkozás kódból
Az eseménykezelőt a Load metódusban is regisztrálhatod a RegisterEventHandler-rel. Ugyanazt csinálja, és jobb, ha csak bizonyos feltételek mellett akarsz feliratkozni, például a konfiguráció függvényében.
public override void Load(bool hotReload)
{
RegisterEventHandler<EventRoundStart>((@event, info) =>
{
Logger.LogInformation("Round started");
return HookResult.Continue;
});
}
Pre és Post
Alapértelmezés szerint a kezelőd azután fut, hogy a játék feldolgozta az eseményt (Post). A HookMode.Pre-rel előtte fut, így módosíthatod, mi történjen, például elrejtheted az alapértelmezett üzenetet a DontBroadcast-tal. Használj Post-ot, hacsak tényleg nem kell beavatkoznod.
[GameEventHandler(HookMode.Pre)]
public HookResult OnPlayerDeathPre(EventPlayerDeath @event, GameEventInfo info)
{
if ([email protected])
{
info.DontBroadcast = true;
}
return HookResult.Continue;
}
A játékosok lehetnek null értékűek
Az olyan tulajdonságok, mint a Userid, üresek lehetnek, például ha a játékos éppen az esemény pillanatában lépett ki, vagy ha a gyilkos maga a világ. Használat előtt mindig ellenőrizd a null értéket, különben egy peches pillanat kivételt dob a kör közepén.
Mit jelent a HookResult
A Continue hagyja, hogy a játék normálisan folytatódjon, és az esetek többségében ez a helyes válasz. A Handled azt jelzi a játéknak, hogy te elintézted, a Stop pedig megakadályozza a többi kezelő futását. Continue-t adj vissza, hacsak nincs okod másra.
Jó szokások
A kezelők a játék fő szálán futnak, ezért tartsd őket gyorsnak, és soha ne várj bennük adatbázisra vagy webes kérésre. A bővítmény eltávolításakor nem kell leiratkoznod, a CounterStrikeSharp eltávolítja a kezelőket helyetted. Az események és mezőik listájához nézd meg a játékesemények dokumentációját.
Hasznos volt ez az útmutató?
Barlap a közösségért.