キモブロ

Please spy check please, Fucking retard

SpawnポイントがなくてWaveが進行しない問題を解決する新たなアイデアを思いついた

ないならそのSpawnポイント自体を生成してしまおうというもの。Spawnポイントの場所は既存のSpawnポイントからランダムに採択し、クローンをし、名前だけ変更をする。こうすることによってMissionファイルに変なspawnポイント名の書いてあるお行儀の悪いマップがあったとしても正しく進行することが出来るようになる。これがあればBOTがスタックすらせずにそもそも沸かないため進行しない、みたいなシーンにも対応できるようになる。完全形。

とりあえずSpawnポイントを生成するところまでは出来た。しかし、なんていう名前のSpawnポイントが存在していないためにエラーになっているのかがわからない。ConsoleにはInvalid Attributes 'Where' spawnbot_sniper みたいな感じで表示されてくれてるので、この値をなんとか取得すればいいなと思って調べていたのだが、consoleへの出力はSourceMODではHookできないらしい。

AddGameLogHookってのを使えば、ログのメッセージが出力されるさいのhookを作成することも出来るんだけど、コンソールの出力は取得できない。ナンテコッタイ! というわけで詰んでる。

あらたに思いついた手法としてはMvMのpopfileをSMC Parserでパースしてtraverseし、中にかいてあるWhereという名前のkeyのvalue値を収集、ユニークなものだけをまとめたリストを作る。そして、現在読み込まれているマップに存在するinfo_player_teamspawnエンティティの一覧を取得後、存在しないspawnポイントを既存の存在するspawnポイントの複製を複製して名前だけ変更する、みたいな処理の流れを考えた。

ただこれも問題があって、popファイルが存在しているマップは良いのだが、存在していないマップというものがある。たとえばbspzipでマップ内部にpopファイルを埋め込んでいる場合。こういうのに対応ができない。まぁマップの明らかなバグなんで対応するだけアホっぽいんだけど、まぁ技術的にどうやればいいのかなというのを思考してみたという話。

ちなみにSpawn Pointを作るにはこうすれば良い

CreateSpawnPoint(String:name[], Float:team_flag)
{
  new entity = CreateEntityByName("info_player_teamspawn");
  DispatchKeyValue(entity, "targetname", name);
  DispatchKeyValueFloat(entity, "Team", team_flag);
  return DispatchSpawn(entity);
}