Реагиране на игрови събития в CounterStrikeSharp
Игровите събития са съобщения, които играта изпраща, когато нещо се случи: играч умира, започва рунд, поставя се бомбата. Повечето интересни плъгини са изградени от тях. В CounterStrikeSharp абонирането за събитие отнема само няколко реда.
Какво е събитие
Всяко събитие има свой клас с име, което започва с Event, например EventPlayerDeath или EventRoundStart, и носи данни за случилото се, например кой е умрял и кой го е убил. Плъгинът ви получава метод, който се извиква при всяко настъпване на събитието.
Абонирайте се с атрибут
Най-простият начин е атрибутът 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;
}
}
Абонирайте се от кода
Можете да регистрирате обработчик и в метода Load с RegisterEventHandler. Прави същото и е по-подходящо, когато искате да се абонирате само при определени условия, например според конфигурацията.
public override void Load(bool hotReload)
{
RegisterEventHandler<EventRoundStart>((@event, info) =>
{
Logger.LogInformation("Round started");
return HookResult.Continue;
});
}
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;
}
Играчите могат да са null
Свойства като Userid могат да са празни, например когато играчът е излязъл точно при задействането на събитието или когато убиецът е самият свят. Винаги проверявайте за null, преди да ги ползвате, иначе един неприятен момент хвърля изключение посред рунда.
Какво означава HookResult
Continue оставя играта да продължи нормално и в повечето случаи е правилният отговор. Handled казва на играта, че вие сте се погрижили, а Stop пречи на другите обработчици да се изпълнят. Връщайте Continue, освен ако нямате причина за друго.
Добри навици
Обработчиците се изпълняват в основната нишка на играта, затова ги дръжте бързи и никога не чакайте в тях база данни или уеб заявка. Не е нужно да се отписвате при разтоварване на плъгина, CounterStrikeSharp премахва обработчиците вместо вас. За списъка със събития и техните полета вижте документацията за игровите събития.
Беше ли полезно това ръководство?
Barlap за общността.