MySQL: Online
Load: High
Sandbox: Running

CounterStrikeSharpでゲームイベントに反応する

ゲームイベントとは、プレイヤーが死亡した、ラウンドが始まった、爆弾が設置されたなど、何かが起きたときにゲームが送ってくるメッセージです。面白いプラグインの多くは、イベントを軸に作られています。CounterStrikeSharpでは、数行書くだけでイベントを受け取れます。

1

イベントとは

イベントにはそれぞれ専用のクラスがあり、名前はEventで始まります。EventPlayerDeathやEventRoundStartなどです。誰が死んで誰が倒したかなど、起きたことのデータを持っています。プラグインは、イベントが起きるたびに呼ばれるメソッドを用意します。

2

属性で登録する

いちばん簡単なのは、メソッドに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;
    }
}
3

コードで登録する

Loadメソッドの中でRegisterEventHandlerを使ってハンドラーを登録することもできます。動作は同じで、設定に応じてなど、特定の条件のときだけ登録したい場合に向いています。

public override void Load(bool hotReload)
{
    RegisterEventHandler<EventRoundStart>((@event, info) =>
    {
        Logger.LogInformation("Round started");
        return HookResult.Continue;
    });
}
4

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;
}
5

プレイヤーはnullの場合がある

Useridなどのプロパティは、イベント発生の瞬間にプレイヤーが退出した場合や、倒したのがワールド自身だった場合などに空になります。使う前に必ずnullを確認してください。そうしないと、タイミングが悪いときにラウンドの途中で例外が発生します。

6

HookResultの意味

Continueはゲームの通常処理を続けさせるもので、たいていの場合はこれが正解です。Handledは自分で処理したことをゲームに伝え、Stopはほかのハンドラーの実行を止めます。特別な理由がなければContinueを返してください。

7

心がけたい習慣

ハンドラーはゲームのメインスレッドで動くので、処理を速く保ち、データベースやWebリクエストを待たないでください。プラグインのアンロード時に登録解除する必要はありません。CounterStrikeSharpが代わりにハンドラーを削除します。イベントの一覧と各フィールドは、ゲームイベントのドキュメントで確認できます。

このチュートリアルは役に立ちましたか?

ページは 0.011 秒で生成されました
CounterStrikeSharp Web Compiler V1.0 - Made with 作成: RomaniaBarlap コミュニティのために。