CounterStrikeSharp’ta oyun olaylarına tepki verme
Oyun olayları, bir şey olduğunda oyunun gönderdiği mesajlardır: bir oyuncu ölür, raund başlar, bomba kurulur. İlgi çekici eklentilerin çoğu bunlarla kurulur. CounterStrikeSharp’ta bir olaya abone olmak yalnızca birkaç satır sürer.
Olay nedir
Her olayın kendi sınıfı vardır; adı Event ile başlar, örneğin EventPlayerDeath ya da EventRoundStart, ve olan şey hakkında veri taşır, mesela kimin öldüğü ve kimin öldürdüğü. Eklentiniz, olay her gerçekleştiğinde çağrılan bir metot alır.
Öznitelikle abone olun
En basit yol, bir metodun üstüne GameEventHandler özniteliğini koymaktır. Metot olayı alır ve bir HookResult döndürür. Olay verileri doğrudan olay nesnesinden okunur.
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;
}
}
Kodla abone olun
Bir işleyiciyi Load metodunda RegisterEventHandler ile de kaydedebilirsiniz. Aynı işi yapar ve yalnızca belirli koşullarda, örneğin yapılandırmaya bağlı olarak abone olmak istediğinizde daha uygundur.
public override void Load(bool hotReload)
{
RegisterEventHandler<EventRoundStart>((@event, info) =>
{
Logger.LogInformation("Round started");
return HookResult.Continue;
});
}
Pre ve Post
Varsayılan olarak işleyiciniz oyun olayı işledikten sonra çalışır (Post). HookMode.Pre ile önce çalışır; bu da olanları değiştirmenize izin verir, örneğin varsayılan mesajı DontBroadcast ile gizlemek gibi. Gerçekten müdahale etmeniz gerekmedikçe Post kullanın.
[GameEventHandler(HookMode.Pre)]
public HookResult OnPlayerDeathPre(EventPlayerDeath @event, GameEventInfo info)
{
if ([email protected])
{
info.DontBroadcast = true;
}
return HookResult.Continue;
}
Oyuncular null olabilir
Userid gibi özellikler boş olabilir; örneğin oyuncu olay tam tetiklenirken ayrıldıysa ya da öldüren dünyanın kendisiyse. Kullanmadan önce her zaman null kontrolü yapın, yoksa şanssız bir an raundun ortasında istisna fırlatır.
HookResult ne demek
Continue oyunun normal şekilde devam etmesine izin verir ve çoğu zaman doğru yanıttır. Handled oyuna işi sizin hallettiğinizi söyler, Stop ise diğer işleyicilerin çalışmasını engeller. Başka bir nedeniniz yoksa Continue döndürün.
İyi alışkanlıklar
İşleyiciler oyunun ana iş parçacığında çalışır; bu yüzden hızlı tutun ve içlerinde asla bir veritabanını ya da web isteğini beklemeyin. Eklenti kaldırılırken aboneliği iptal etmeniz gerekmez, CounterStrikeSharp işleyicileri sizin yerinize kaldırır. Olayların ve alanlarının listesi için oyun olayları belgelerine bakın.
Bu rehber işinize yaradı mı?
Barlap topluluk için.