| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <?php
- /**
- * This file is part of GameQ.
- *
- * GameQ is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * GameQ is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- namespace GameQ\Protocols;
- /**
- * Unreal Tournament 3 Protocol Class
- *
- * Note: The response from UT3 appears to not be consistent. Many times packets are incomplete or there are extra
- * "echoes" in the responses. This may cause issues like odd characters showing up in the keys for the player and team
- * array responses. Not sure much can be done about it.
- *
- * @author Austin Bischoff <[email protected]>
- */
- class Ut3 extends Gamespy3
- {
- /**
- * String name of this protocol class
- *
- * @type string
- */
- protected $name = 'ut3';
- /**
- * Longer string name of this protocol class
- *
- * @type string
- */
- protected $name_long = "Unreal Tournament 3";
- /**
- * Normalize settings for this protocol
- *
- * @type array
- */
- protected $normalize = [
- // General
- 'general' => [
- 'dedicated' => 'bIsDedicated',
- 'hostname' => 'hostname',
- 'numplayers' => 'numplayers',
- ],
- ];
- /**
- * Overload the response process so we can make some changes
- *
- * @return array
- */
- public function processResponse()
- {
- // Grab the result from the parent
- /** @type array $result */
- $result = parent::processResponse();
- // Move some stuff around
- $this->renameResult($result, 'OwningPlayerName', 'hostname');
- $this->renameResult($result, 'p1073741825', 'mapname');
- $this->renameResult($result, 'p1073741826', 'gametype');
- $this->renameResult($result, 'p1073741827', 'servername');
- $this->renameResult($result, 'p1073741828', 'custom_mutators');
- $this->renameResult($result, 'gamemode', 'open');
- $this->renameResult($result, 's32779', 'gamemode');
- $this->renameResult($result, 's0', 'bot_skill');
- $this->renameResult($result, 's6', 'pure_server');
- $this->renameResult($result, 's7', 'password');
- $this->renameResult($result, 's8', 'vs_bots');
- $this->renameResult($result, 's10', 'force_respawn');
- $this->renameResult($result, 'p268435704', 'frag_limit');
- $this->renameResult($result, 'p268435705', 'time_limit');
- $this->renameResult($result, 'p268435703', 'numbots');
- $this->renameResult($result, 'p268435717', 'stock_mutators');
- // Put custom mutators into an array
- if (isset($result['custom_mutators'])) {
- $result['custom_mutators'] = explode("\x1c", $result['custom_mutators']);
- }
- // Delete some unknown stuff
- $this->deleteResult($result, ['s1', 's9', 's11', 's12', 's13', 's14']);
- // Return the result
- return $result;
- }
- /**
- * Dirty hack to rename result entries into something more useful
- *
- * @param array $result
- * @param string $old
- * @param string $new
- */
- protected function renameResult(array &$result, $old, $new)
- {
- // Check to see if the old item is there
- if (isset($result[$old])) {
- $result[$new] = $result[$old];
- unset($result[$old]);
- }
- }
- /**
- * Dirty hack to delete result items
- *
- * @param array $result
- * @param array $array
- */
- protected function deleteResult(array &$result, array $array)
- {
- foreach ($array as $key) {
- unset($result[$key]);
- }
- }
- }
|