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 होने से exception आ जाता है। यह भी याद रखें कि नाम अनोखे होने चाहिए: दो प्लगइन एक ही कमांड रजिस्टर करें तो व्यवहार अनिश्चित हो जाता है, इसलिए अपनी कमांड को अलग पहचान वाला नाम दें।
क्या यह ट्यूटोरियल उपयोगी था?
Barlap समुदाय के लिए।