[L4D2]ゲーム参加時にアドオンデータが認識されなくなる?

あけおめことよろ ってことで新年1発目のネタを。

L4D2のクライアントに「ゲーム参加時にアドオンデータが認識されない」バグ(仕様?)があるかも。

自分のところで公開してるForce Mission ChangerのVote改造版とも関係してくるので、ちょっと書いてみた次第。

◆症状

ゲームに参加中にカスタムキャンペーンに変更した場合、ロード画面が紫と黒の市松模様になり、サーバーから切断される。

カスタムマップロード失敗時

このような画面になり、タイトルに戻されてしまう

コンソールには、”Host_Error: CMapLoadHelper::Init, unable to open (マップファイルのパス)”が表示される。

ここからマップをロードしようとすると、”Map_LoadModelGuts: Map with no texinfo, (マップファイルのパス)”というエンジンエラーが出てクライアントが落ちてしまう。

色々調べてみた結果、show_addon_load_orderというコマンドでアドオンのロード順序が表示できるということが判明。

◆検証してみる

  • 公式キャンペーンにマップ変更(=changelevel)したサーバー
  • カスタムキャンペーンにマップ変更したサーバー

を用意し、クライアントを参加させる。
参加後、クライアントのコンソールから、show_addon_load_orderを実行。

まず、タイトル画面。

タイトル画面でのアドオンリスト

タイトル画面でのアドオンロード順序

ここではアドオン設定で有効にしているアドオンデータが表示されるはず。これが通常。pak01.dirとかpak02.dirは基本データだと思うけど、細かくは知らないので書かないw

・公式キャンペーン参加時

公式キャンペーン参加時のアドオンリスト

公式キャンペーン参加時のロード順序。

タイトル画面のときにはリストされていたアドオンがない。

この状態でカスタムキャンペーンへchangelevelしてみると、症状が発生。

・カスタムキャンペーン参加時

カスタムキャンペーン参加時のアドオンリスト

カスタムキャンペーン参加時のロード順序

プレイ中のカスタムキャンペーンのデータはリストされているが、他のカスタムキャンペーンがリストされていない。

この状態では、公式キャンペーンか、プレイ中のカスタムキャンペーンの別チャプターへのchangelevelはできて、他のカスタムキャンペーンにchangelevelしようとすると、症状が発生する。

まとめると、

  • ゲームに参加中は、現在プレイ中のもの以外のアドオンデータが認識されていないらしい
  • タイトル画面ではアドオンが正しく認識できているため、カスタムマップが進行中のサーバーに参加できる

◆対処法

●(他の)カスタムキャンペーンに移りたい場合、移る直前にクライアント側でコンソールコマンド update_addon_paths を実行する

これを使うと、アドオンが再検索され、正しく認識されるようになるみたい。実行前後のロード順序リストと比較すると、数が増えていて、どのキャンペーンにマップ変更しても切断されることなくロード出来るはず。

ただし、各マップのロードが完了すると元の状態に戻るので、移る直前にその都度update_addon_pathsを実行しなくてはならない。

update_addon_paths実行時

update_addon_paths実行前後でのロード順序リストの比較

でも、コマンドを実行しても投票メニューからアドオンキャンペーンを選択することは出来ない。何故?

以前は、sourcemodプラグインでupdate_addon_pathsをクライアントに実行させることで、各クライアントに設定を強制することが出来ていたんだけど…2010年12月18日のアップデートでサーバー側から実行出来るコンソールコマンドがかなり制限されてしまったので、できなくなった模様orz

>http://store.steampowered.com/news/4805/

>Added protection against servers executing restricted commands on clients

うーん、いじる側からすると色々出来なくなっちゃうからこの制限は非常に残念。

現在はMOTD等で各プレイヤーに、マップ切り替え前にupdate_addon_pathsを実行するよう促すしか方法はない気がする…マップロードの度に自動で読み込むcfgがあればいいんだけどそういうのあったっけか?

コメントを残す

メールアドレスは公開されません


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。