إنشاء أوامر الدردشة ووحدة التحكم في CounterStrikeSharp
الأوامر هي عادةً أول ما يتفاعل معه اللاعبون. في CounterStrikeSharp الأمر مجرد دالة تعلوها سمة، ويمكن كتابة الأمر نفسه في وحدة التحكم أو في الدردشة. يبدأ هذا الدليل بأمر hello بسيط ويصل إلى أوامر محمية ذات معاملات.
كيف تعمل الأوامر
الأمر دالة موسومة بـ [ConsoleCommand]. يسجّلها الإطار عند تحميل الإضافة ويزيلها عند إلغاء تحميلها. كل أمر يبدأ اسمه بـ css_ متاح بثلاث طرق: في وحدة التحكم باسم css_hello، وفي الدردشة باسم !hello أو /hello. أما نسخة الشرطة المائلة فتخفي الرسالة عن بقية اللاعبين.
أمرك الأول
تستقبل الدالة اللاعب الذي نفّذ الأمر وكائن CommandInfo الذي يُستخدم لقراءة المعاملات والرد. يكون اللاعب فارغًا عندما يُكتب الأمر في وحدة تحكم الخادم، لذا افحص ذلك أولًا.
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Modules.Commands;
public class CommandsPlugin : BasePlugin
{
public override string ModuleName => "Commands Example";
public override string ModuleVersion => "1.0.0";
[ConsoleCommand("css_hello", "Says hello to the player")] public void OnHelloCommand(CCSPlayerController? player, CommandInfo commandInfo)
{
if (player == null) return;
commandInfo.ReplyToCommand($"Hello, {player.PlayerName}!"); }
}
لماذا قد يكون اللاعب null
عندما تكتب الأمر في وحدة تحكم الخادم لا يوجد لاعب وراءه. وإذا استخدمت شيفرتك اللاعب دون فحص فإنها تنهار. إما أن تخرج من الدالة عند وحدة التحكم كما في الأعلى، أو تكتب الشيفرة بحيث تعمل مع الخادم أيضًا.
المعاملات وطريقة الاستخدام
تصف السمة CommandHelper كيفية استخدام الأمر: الحد الأدنى لعدد المعاملات ونص قصير للاستخدام ومن يستطيع تنفيذه. إذا أخطأ اللاعب في المعاملات يعرض له CounterStrikeSharp طريقة الاستخدام تلقائيًا. GetArg(1) هو المعامل الأول لأن اسم الأمر نفسه هو المعامل 0.
[ConsoleCommand("css_greet", "Greets another player by name")]
[CommandHelper(minArgs: 1, usage: "<name>", whoCanExecute: CommandUsage.CLIENT_ONLY)]
public void OnGreetCommand(CCSPlayerController? player, CommandInfo commandInfo)
{
var name = commandInfo.GetArg(1);
commandInfo.ReplyToCommand($"Hello, {name}!");
}
أوامر باستخدام lambda
يمكنك أيضًا تسجيل أمر في الدالة Load بدلًا من استخدام سمة. هذا مفيد للأوامر الصغيرة أو عندما يأتي اسم الأمر من ملف إعداد.
public override void Load(bool hotReload)
{
AddCommand("css_ping", "Replies with pong", (player, commandInfo) =>
{
commandInfo.ReplyToCommand("pong");
});
}
قيّد الأمر بالصلاحيات
أضف RequiresPermissions للسماح بالأمر فقط للاعبين الذين يملكون علمًا معيّنًا، مثل @css/kick. ويُرفض غيرهم تلقائيًا. تُمنح الأعلام في admins.json كما يشرح دليلنا عن كيفية أن تصبح مشرفًا.
[ConsoleCommand("css_kickme", "Example of a protected command")]
[RequiresPermissions("@css/kick")]
public void OnKickMeCommand(CCSPlayerController? player, CommandInfo commandInfo)
{
commandInfo.ReplyToCommand("You have the @css/kick flag.");
}
رسائل دردشة ملوّنة
تتيح لك ChatColors تلوين أجزاء من رسالة مُرسلة عبر PrintToChat. ابدأ السلسلة بمسافة كما في المثال وإلا فقد لا يظهر اللون الأول بشكل صحيح. توجد ChatColors في CounterStrikeSharp.API.Modules.Utils.
player.PrintToChat($" {ChatColors.Green}Hello, {player.PlayerName}!");
أخطاء شائعة
الأمر الذي لا يرد أبدًا غالبًا إما ينقصه البادئة css_ فلا يعمل في الدردشة، أو يطلق استثناءً لأن اللاعب كان null. وتذكّر أيضًا أن الأسماء يجب أن تكون فريدة: إذا سجّلت إضافتان الأمر نفسه يصبح السلوك غير متوقع، فاختر لأمرك اسمًا مميزًا.
هل كان هذا الدليل مفيدًا؟
Barlap من أجل المجتمع.