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から設定できるなら教えてほしい