仮 GM モード:オプション変更権限実装
@@ -611,7 +611,7 @@ | ||
611 | 611 | protected function OutputHeaderLinkFooter() { |
612 | 612 | $url = sprintf('%s&user_no=%s', $this->SelectURL([]), DB::$SELF->id); |
613 | 613 | GamePlayHTML::OutputHeaderLink('user_manager', $url); //登録情報変更 |
614 | - if (DB::$SELF->IsDummyBoy()) { //村オプション変更 | |
614 | + if (RoomOptionManager::EnableChange()) { //村オプション変更 | |
615 | 615 | GamePlayHTML::OutputHeaderLink('room_manager', $this->SelectURL([])); |
616 | 616 | } |
617 | 617 | } |
@@ -144,9 +144,8 @@ | ||
144 | 144 | //ユーザー情報ロード |
145 | 145 | DB::LoadUser(); |
146 | 146 | DB::LoadSelf(); |
147 | + DB::$ROOM->ParseOption(true); | |
147 | 148 | self::ValidateSelfCreateInChange(); |
148 | - | |
149 | - DB::$ROOM->ParseOption(true); | |
150 | 149 | } |
151 | 150 | |
152 | 151 | //データロード (村作成 / オプション変更時) |
@@ -168,9 +167,8 @@ | ||
168 | 167 | |
169 | 168 | //本人情報ロード |
170 | 169 | DB::LoadSelf(); |
170 | + DB::$ROOM->ParseOption(true); | |
171 | 171 | self::ValidateSelfCreateInChange(); |
172 | - | |
173 | - DB::$ROOM->ParseOption(true); | |
174 | 172 | } |
175 | 173 | |
176 | 174 | //村情報チェック (オプション変更時) |
@@ -185,7 +183,7 @@ | ||
185 | 183 | |
186 | 184 | //本人情報チェック (オプション変更時) |
187 | 185 | private static function ValidateSelfCreateInChange() { |
188 | - if (false === DB::$SELF->IsDummyBoy()) { | |
186 | + if (false === RoomOptionManager::EnableChange()) { | |
189 | 187 | $body = sprintf(RoomManagerMessage::ERROR_CHANGE_NOT_GM, Message::DUMMY_BOY, Message::GM); |
190 | 188 | self::OutputCreateInChangeError($body); |
191 | 189 | } |
@@ -388,6 +386,10 @@ | ||
388 | 386 | Text::p($_POST, '◆Post'); |
389 | 387 | Text::p(RoomOption::Get(OptionGroup::GAME), '◆GameOption'); |
390 | 388 | Text::p(RoomOption::Get(OptionGroup::ROLE), '◆OptionRole'); |
389 | + if (RoomOptionManager::IsChange()) { | |
390 | + Text::p(DB::$ROOM->game_option, '◆ROOM/game_option'); | |
391 | + Text::p(DB::$ROOM->option_role, '◆ROOM/role_option'); | |
392 | + } | |
391 | 393 | RQ::p(); |
392 | 394 | HTML::OutputFooter(true); |
393 | 395 | } |
@@ -45,7 +45,7 @@ | ||
45 | 45 | |
46 | 46 | //時間設定出力 |
47 | 47 | public static function OutputTimeSetting() { |
48 | - echo TableHTML::GenerateTdHeader('real-time'); | |
48 | + TableHTML::OutputTdHeader('real-time'); | |
49 | 49 | if (DB::$ROOM->IsRealTime()) { //実時間の制限時間を取得 |
50 | 50 | printf(GamePlayMessage::REAL_TIME, DB::$ROOM->real_time->day, DB::$ROOM->real_time->night); |
51 | 51 | } |
@@ -12,7 +12,7 @@ | ||
12 | 12 | return $stack; |
13 | 13 | } |
14 | 14 | |
15 | - //村オプション変更判定 | |
15 | + //村オプション変更実施判定 | |
16 | 16 | public static function IsChange() { |
17 | 17 | if (self::Stack()->IsEmpty('change')) { |
18 | 18 | self::Stack()->Set('change', false); |
@@ -20,6 +20,25 @@ | ||
20 | 20 | return self::Stack()->Get('change'); |
21 | 21 | } |
22 | 22 | |
23 | + //村オプション変更権限判定 | |
24 | + /* | |
25 | + 身代わり君 or 仮 GM | |
26 | + */ | |
27 | + public static function EnableChange() { | |
28 | + return DB::$SELF->IsDummyBoy() || self::IsTemporaryGM(); | |
29 | + } | |
30 | + | |
31 | + //仮 GM 判定 | |
32 | + public static function IsTemporaryGM() { | |
33 | + $option = 'temporary_gm'; | |
34 | + if (DB::$ROOM->IsOption($option)) { | |
35 | + $filter = OptionLoader::Load($option); | |
36 | + return $filter->IsTemporaryGM(); | |
37 | + } else { | |
38 | + return false; | |
39 | + } | |
40 | + } | |
41 | + | |
23 | 42 | //村作成オプション入力情報ロード |
24 | 43 | public static function LoadPost() { |
25 | 44 | self::LoadPostBase(); |
@@ -72,6 +91,11 @@ | ||
72 | 91 | } |
73 | 92 | } |
74 | 93 | } |
94 | + | |
95 | + $option = 'temporary_gm'; | |
96 | + if (DB::$ROOM->IsOption($option)) { | |
97 | + RoomOption::Set(OptionGroup::GAME, $option); | |
98 | + } | |
75 | 99 | } |
76 | 100 | |
77 | 101 | //村作成オプション入力情報ロード (クイズ村) |
@@ -104,7 +128,9 @@ | ||
104 | 128 | RoomOption::Set(OptionGroup::GAME, 'dummy_boy'); |
105 | 129 | RoomOption::LoadPost('gerd', 'dummy_boy_cast_limit'); |
106 | 130 | } else { |
107 | - RoomOption::LoadPost('temporary_gm'); //「身代わり君は GM」が OFF なら仮 GM モードを設定可能 | |
131 | + if (false === RQ::Get()->change_room) { | |
132 | + RoomOption::LoadPost('temporary_gm'); //「身代わり君は GM」が OFF なら仮 GM モードを設定可能 | |
133 | + } | |
108 | 134 | if (RQ::Get()->dummy_boy) { |
109 | 135 | if (false === RQ::Get()->change_room) { |
110 | 136 | self::Stack()->Set('gm_name', Message::DUMMY_BOY); |
@@ -4,6 +4,12 @@ | ||
4 | 4 | ○仕様 |
5 | 5 | */ |
6 | 6 | class Option_temporary_gm extends OptionCastCheckbox { |
7 | + protected function FilterEnable() { | |
8 | + if (RoomOptionManager::IsChange()) { | |
9 | + $this->enable = false; | |
10 | + } | |
11 | + } | |
12 | + | |
7 | 13 | public function GetCaption() { |
8 | 14 | return '仮 GM モード'; |
9 | 15 | } |
@@ -11,4 +17,20 @@ | ||
11 | 17 | public function GetExplain() { |
12 | 18 | return '最初の入村者が一部のゲームオプションを編集できるようになります'; |
13 | 19 | } |
20 | + | |
21 | + //仮 GM 権限者判定 | |
22 | + /* | |
23 | + 最初の入村者IDを特定 (キックでずれるので固定ではない) して SELF と比較する | |
24 | + DB取得時にソート順が指定されているので身代わり君の次で確定 | |
25 | + */ | |
26 | + public function IsTemporaryGM() { | |
27 | + $id = null; | |
28 | + foreach (DB::$USER->Get() as $user) { | |
29 | + if (false === $user->IsDummyBoy()) { | |
30 | + $id = $user->id; | |
31 | + break; | |
32 | + } | |
33 | + } | |
34 | + return (null !== $id && DB::$SELF->id == $id); | |
35 | + } | |
14 | 36 | } |