MySQL: Online
Load: Low
Sandbox: Ready

CounterStrikeSharp’ta sohbet ve konsol komutları oluşturma

Komutlar genellikle oyuncuların ilk etkileşime girdiği şeydir. CounterStrikeSharp’ta komut, üstünde bir öznitelik bulunan sıradan bir metottur ve aynı komut konsola ya da sohbete yazılabilir. Bu rehber basit bir hello komutundan başlayıp argümanlı, korumalı komutlara kadar ilerler.

1

Komutlar nasıl çalışır

Komut, [ConsoleCommand] ile işaretlenmiş bir metottur. Framework onu eklenti yüklenirken kaydeder, eklenti kaldırılırken siler. Adı css_ ile başlayan her komut üç şekilde kullanılabilir: konsolda css_hello olarak, sohbette !hello ya da /hello olarak. Eğik çizgili sürüm mesajı diğer oyunculardan gizler.

2

İlk komutunuz

Metot, komutu çalıştıran oyuncuyu ve argümanları okumak ile yanıt vermek için kullanılan bir CommandInfo nesnesini alır. Komut sunucu konsoluna yazıldığında oyuncu boştur, bu yüzden önce bunu kontrol edin.

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}!");    }
}
3

Oyuncu neden null olabilir

Komutu sunucu konsoluna yazdığınızda arkasında hiçbir oyuncu yoktur. Kodunuz oyuncuyu kontrol etmeden kullanırsa çöker. Ya yukarıdaki gibi konsol için metottan erken çıkarsınız ya da kodu sunucuyla da çalışacak şekilde yazarsınız.

4

Argümanlar ve kullanım

CommandHelper özniteliği komutun nasıl kullanılacağını tanımlar: en az argüman sayısı, kısa bir kullanım metni ve komutu kimin çalıştırabileceği. Oyuncu argümanları yanlış girerse CounterStrikeSharp kullanımı kendisi gösterir. GetArg(1) ilk argümandır; çünkü komutun adı 0. argümandır.

[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}!");
}
5

Lambda ile komutlar

Öznitelik kullanmak yerine komutu Load metodunda da kaydedebilirsiniz. Küçük komutlar için ya da komut adı bir yapılandırma dosyasından geldiğinde işe yarar.

public override void Load(bool hotReload)
{
    AddCommand("css_ping", "Replies with pong", (player, commandInfo) =>
    {
        commandInfo.ReplyToCommand("pong");
    });
}
6

Bir komutu yetkilerle kısıtlayın

Komutu yalnızca bir bayrağı olan oyunculara, örneğin @css/kick sahiplerine açmak için RequiresPermissions ekleyin. Bayrağı olmayanlar otomatik reddedilir. Bayraklar, admin olma rehberimizde anlatıldığı gibi admins.json içinde atanır.

[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.");
}
7

Renkli sohbet mesajları

ChatColors, PrintToChat ile gönderilen mesajın bölümlerini renklendirmenizi sağlar. Dizeye örnekteki gibi bir boşlukla başlayın, aksi halde ilk renk doğru görünmeyebilir. ChatColors, CounterStrikeSharp.API.Modules.Utils içinde bulunur.

player.PrintToChat($" {ChatColors.Green}Hello, {player.PlayerName}!");
8

Sık yapılan hatalar

Hiç yanıt vermeyen bir komutta çoğunlukla css_ öneki eksiktir ve bu yüzden sohbette yoktur, ya da oyuncu null olduğu için bir istisna fırlatıyordur. Adların benzersiz olması gerektiğini de unutmayın: iki eklenti aynı komutu kaydederse davranış öngörülemez olur, bu yüzden komutunuza ayırt edici bir ad verin.

Bu rehber işinize yaradı mı?

Sayfa 0.010 saniyede oluşturuldu
CounterStrikeSharp Web Compiler V1.0 - Şununla yapıldı tarafından RomaniaBarlap topluluk için.