alchemistarkの日記

やったことのメモ

Entityについて解説したい 4

Outputについて話しましょうか

話すとは言ったけどぶっちゃけOutputについて話すことあまりない

Entityがゲームの進行や与えられたイベントをトリガーにして別のEntityのInputを叩くのがOutputなわけですが
Outputを設定できるのはHammerからMAPを作成する時だけです。*1
そのあたりの詳細はHammer講座を見てください。

では、SourcePawnからOutput関連でできる事はなにか
端的に言うと、
・EntityがOutputを発信したのを検知する
・Outputを発信させる
の2つです。

OutputのHookは、HookEntityOutputとHookSingleEntityOutputの2つ
使い方は大体EventのHookと同じ…でもないけどそんな感じ
指定したクラスのEntityが、指定した名称のOutputを発信したら検知する的な。

各関数については例によってAPIページ見てね
HookEntityOutput · sdktools_entoutput · SourceMod Scripting API Reference
HookSingleEntityOutput · sdktools_entoutput · SourceMod Scripting API Reference

HookEntityOutputだと指定の名称のEntity全てHookしてしまうので、EntityIndexや名称など対象を識別できる情報を控えておくこと
HookSingleEntityOutputだと指定したEntityだけをHookできるけど、うまくいかない事例があったのでケースによっては諦めることになるかも。

あとOutputというよりEntityに対するEventをHookしたいならSDKHooks
SDKHook · sdkhooks · SourceMod Scripting API Reference
これはちょっと違う話になるけど、プラグイン作る時に求めるのはこっちな気はする
ただしこっちは個別のEntityにしかHookできないので、そのあたりは面倒っちゃ面倒

OutputのFireについては前書いた記事を参照のこと
alchemistark.hatenablog.jp

開発版でしか使えないことだけに注意。

後、基本的にOutputはマップに仕込まれたものである以上
マップの中身を把握していないと使えないし
分かるのならば直接Inputを叩いた方がいい

1つのOutputで複数のInputを叩いているとか、絶対に起こり得るイベント(セットアップタイムの終了時とかラウンド終了時とか)
によって引き起こされるイベントを起こすとか、そういう時にしか使えなさそう

Outputを発生させる要因自体は発生しないので勘違いしないように
例えばOnSetupFinishedをFireしてもセットアップタイムはそのまま継続する

*1:SourcePawnから設定できるなら教えてほしい