1: <?php
2: /**
3: * This file is part of GameQ.
4: *
5: * GameQ is free software; you can redistribute it and/or modify
6: * it under the terms of the GNU Lesser General Public License as published by
7: * the Free Software Foundation; either version 3 of the License, or
8: * (at your option) any later version.
9: *
10: * GameQ is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: * GNU Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General Public License
16: * along with this program. If not, see <http://www.gnu.org/licenses/>.
17: */
18:
19: namespace GameQ\Protocols;
20:
21: /**
22: * Class Battlefield 2
23: *
24: * @package GameQ\Protocols
25: * @author Austin Bischoff <austin@codebeard.com>
26: */
27: class Bf2 extends Gamespy3
28: {
29: /**
30: * String name of this protocol class
31: *
32: * @var string
33: */
34: protected $name = 'bf2';
35:
36: /**
37: * Longer string name of this protocol class
38: *
39: * @var string
40: */
41: protected $name_long = "Battlefield 2";
42:
43: /**
44: * query_port = client_port + 8433
45: * 29900 = 16567 + 13333
46: *
47: * @var int
48: */
49: protected $port_diff = 13333;
50:
51: /**
52: * The client join link
53: *
54: * @var string
55: */
56: protected $join_link = "bf2://%s:%d";
57:
58: /**
59: * BF2 has a different query packet to send than "normal" Gamespy 3
60: *
61: * @var array
62: */
63: protected $packets = [
64: self::PACKET_ALL => "\xFE\xFD\x00\x10\x20\x30\x40\xFF\xFF\xFF\x01",
65: ];
66:
67: /**
68: * Normalize settings for this protocol
69: *
70: * @var array
71: */
72: protected $normalize = [
73: // General
74: 'general' => [
75: // target => source
76: 'dedicated' => 'dedicated',
77: 'gametype' => 'gametype',
78: 'hostname' => 'hostname',
79: 'mapname' => 'mapname',
80: 'maxplayers' => 'maxplayers',
81: 'numplayers' => 'numplayers',
82: 'password' => 'password',
83: ],
84: // Individual
85: 'player' => [
86: 'name' => 'player',
87: 'kills' => 'score',
88: 'deaths' => 'deaths',
89: 'ping' => 'ping',
90: 'score' => 'score',
91: ],
92: 'team' => [
93: 'name' => 'team',
94: 'score' => 'score',
95: ],
96: ];
97: }
98: