MySQL: Online
Load: Low
Sandbox: Running

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.

1

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.

2

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;
    }
}
3

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;
    });
}
4

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;
}
5

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.

6

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.

7

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ó?

Az oldal 0.010 másodperc alatt generálódott
CounterStrikeSharp Web Compiler V1.0 - Készült által RomaniaBarlap a közösségért.