ChatEngine::FilterWordsメソッド

概要 : 発言の見え方を調整します。このメソッドは標準ではTalkオブジェクトを抽出した後、出力に追加する前に呼び出さされます。

引数

  • $category : &talkパラメータの内容を指定します。このパラメータはTalk::GetEventメソッドの'name'値と同一です。
  • &$talk : フィルタ対象のTalkオブジェクトへの参照です。
  • $date : 発言した時刻をゲーム内の日付で指定します。
  • $situation : 発言した時刻をday_night形式で指定します。

戻り値

表示を許可しない場合はfalse、それ以外の場合true。

詳細

このメソッドは$talkオブジェクトの改ざんを意図しています。例としてGamePlayFormatクラスにおける実装を説明します。

GamePlayFormat::FilterWordsの全体構造は以下の通りです。

  1. function FilterWords($category, &$talk, $date, $situation) {
  2. shot("$category / $situation", 'GamePlayFormat::FilterWords');
  3. if($this->room->IsAfterGame() || $this->room->IsBeforeGame()) {
  4. return true;
  5. }
  6. switch($category){
  7. case 'say':
  8. if($this->room->IsDay()) {
  9. return true;
  10. }
  11. elseif($this->room->IsNight()) {
  12. global $MESSAGE;
  13. switch ($talk->type){
  14. case 'self_talk':
  15. if($talk->uname == $this->self->uname){
  16. $talk->uname = 'self';
  17. return true;
  18. }
  19. return false;
  20. case 'wolf':
  21. if (!$this->self->IsRole('wolf', 'whisper_mad')){
  22. $talk->uname = 'wolf';
  23. $talk->sentence = $MESSAGE->wolf_howl;
  24. }
  25. return true;
  26. case 'common':
  27. if ($this->self->IsRole('common')){
  28. $talk->font_type = 'common';
  29. }
  30. else{
  31. $talk->uname = 'common';
  32. $talk->font_type = 'weak';
  33. $talk->sentence = $MESSAGE->common_talk;
  34. }
  35. return true;
  36. default:
  37. return $this->self->main_role == $talk->type;
  38. }
  39. }
  40. case 'objection':
  41. return true;
  42. case 'system_talk':
  43. return true;
  44. default:
  45. return false;
  46. }
  47. }

ゲーム開始前とゲーム終了後、異議ありとGMの発言は例外なく表示されます。前者二つはコードの先頭で、後者二つは$categoryによるswitchの末尾で扱われています。 死亡者の発言はGamePlayFormat::LoadTalkメソッドにてあらかじめ除去されているので、このメソッドでは考慮されていません。

通常の発言($category=='say'時)についてはいくつかのルールが必要です。まず昼の発言については全て表示となります。一方夜については通常は自分の独り言しか表示されません。この制約は次のように実装されています。

  1. elseif($this->room->IsNight()) {
  2. switch ($talk->type){
  3. case 'self_talk':
  4. if($talk->uname == $this->self->uname){
  5. $talk->uname = 'self';
  6. return true;
  7. }
  8. return false;

$talkパラメータのuname変数を'self'に差し替えています。この特別なunameはGamePlayFunctionにおいては"◆○○の独り言"(○○はプレイヤーのハンドルネーム)を表示させることを意味します。

続く各役職のブロックではさらに必要に応じてfont_type値やsentence値の改ざんが実施されています。