jinrousiki (4.0.1) | 2019-09-29 19:51 |
jinrousiki旧版 (3.1.0) | 2017-12-29 13:05 |
jinrousiki開発版(Unstable) (4.1.0alpha8) | 2021-07-22 18:22 |
概要 : 発言の見え方を調整します。このメソッドは標準ではTalkオブジェクトを抽出した後、出力に追加する前に呼び出さされます。
表示を許可しない場合はfalse、それ以外の場合true。
このメソッドは$talkオブジェクトの改ざんを意図しています。例としてGamePlayFormatクラスにおける実装を説明します。
GamePlayFormat::FilterWordsの全体構造は以下の通りです。
- function FilterWords($category, &$talk, $date, $situation) {
- shot("$category / $situation", 'GamePlayFormat::FilterWords');
- if($this->room->IsAfterGame() || $this->room->IsBeforeGame()) {
- return true;
- }
- switch($category){
- case 'say':
- if($this->room->IsDay()) {
- return true;
- }
- elseif($this->room->IsNight()) {
- global $MESSAGE;
- switch ($talk->type){
- case 'self_talk':
- if($talk->uname == $this->self->uname){
- $talk->uname = 'self';
- return true;
- }
- return false;
- case 'wolf':
- if (!$this->self->IsRole('wolf', 'whisper_mad')){
- $talk->uname = 'wolf';
- $talk->sentence = $MESSAGE->wolf_howl;
- }
- return true;
- case 'common':
- if ($this->self->IsRole('common')){
- $talk->font_type = 'common';
- }
- else{
- $talk->uname = 'common';
- $talk->font_type = 'weak';
- $talk->sentence = $MESSAGE->common_talk;
- }
- return true;
- default:
- return $this->self->main_role == $talk->type;
- }
- }
- case 'objection':
- return true;
- case 'system_talk':
- return true;
- default:
- return false;
- }
- }
ゲーム開始前とゲーム終了後、異議ありとGMの発言は例外なく表示されます。前者二つはコードの先頭で、後者二つは$categoryによるswitchの末尾で扱われています。 死亡者の発言はGamePlayFormat::LoadTalkメソッドにてあらかじめ除去されているので、このメソッドでは考慮されていません。
通常の発言($category=='say'時)についてはいくつかのルールが必要です。まず昼の発言については全て表示となります。一方夜については通常は自分の独り言しか表示されません。この制約は次のように実装されています。
$talkパラメータのuname変数を'self'に差し替えています。この特別なunameはGamePlayFunctionにおいては"◆○○の独り言"(○○はプレイヤーのハンドルネーム)を表示させることを意味します。
続く各役職のブロックではさらに必要に応じてfont_type値やsentence値の改ざんが実施されています。