التفاعل مع أحداث اللعبة في 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 من أجل المجتمع.