MySQL: Online
Load: Low
Sandbox: Ready

Реагиране на игрови събития в CounterStrikeSharp

Игровите събития са съобщения, които играта изпраща, когато нещо се случи: играч умира, започва рунд, поставя се бомбата. Повечето интересни плъгини са изградени от тях. В CounterStrikeSharp абонирането за събитие отнема само няколко реда.

1

Какво е събитие

Всяко събитие има свой клас с име, което започва с Event, например EventPlayerDeath или EventRoundStart, и носи данни за случилото се, например кой е умрял и кой го е убил. Плъгинът ви получава метод, който се извиква при всяко настъпване на събитието.

2

Абонирайте се с атрибут

Най-простият начин е атрибутът GameEventHandler върху метод. Методът получава събитието и връща HookResult. Данните на събитието се четат директно от обекта на събитието.

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

Абонирайте се от кода

Можете да регистрирате обработчик и в метода Load с RegisterEventHandler. Прави същото и е по-подходящо, когато искате да се абонирате само при определени условия, например според конфигурацията.

public override void Load(bool hotReload)
{
    RegisterEventHandler<EventRoundStart>((@event, info) =>
    {
        Logger.LogInformation("Round started");
        return HookResult.Continue;
    });
}
4

Pre и Post

По подразбиране обработчикът ви се изпълнява, след като играта е обработила събитието (Post). С HookMode.Pre се изпълнява преди това, което ви позволява да промените случващото се, например да скриете съобщението по подразбиране с DontBroadcast. Ползвайте Post, освен ако наистина не се налага да се намесите.

[GameEventHandler(HookMode.Pre)]
public HookResult OnPlayerDeathPre(EventPlayerDeath @event, GameEventInfo info)
{
    if ([email protected])
    {
        info.DontBroadcast = true;
    }

    return HookResult.Continue;
}
5

Играчите могат да са null

Свойства като Userid могат да са празни, например когато играчът е излязъл точно при задействането на събитието или когато убиецът е самият свят. Винаги проверявайте за null, преди да ги ползвате, иначе един неприятен момент хвърля изключение посред рунда.

6

Какво означава HookResult

Continue оставя играта да продължи нормално и в повечето случаи е правилният отговор. Handled казва на играта, че вие сте се погрижили, а Stop пречи на другите обработчици да се изпълнят. Връщайте Continue, освен ако нямате причина за друго.

7

Добри навици

Обработчиците се изпълняват в основната нишка на играта, затова ги дръжте бързи и никога не чакайте в тях база данни или уеб заявка. Не е нужно да се отписвате при разтоварване на плъгина, CounterStrikeSharp премахва обработчиците вместо вас. За списъка със събития и техните полета вижте документацията за игровите събития.

Беше ли полезно това ръководство?

Страницата е генерирана за 0.011 секунди
CounterStrikeSharp Web Compiler V1.0 - Направено с от RomaniaBarlap за общността.