Jump to content

Online Status for FFOW


Jaggl

Recommended Posts

Hi TCadmin Guys, would it be possible for you to add FFOW to the Supportet Games?

 

 

Here is the Readme from the Query Test.

------------------------------------
Frontlines: Fuel of War
Query Protocol Guide
Guide Version: 3
April 17th, 2008
------------------------------------


--------------------
Port Configuration
--------------------
Default query port is 5478
Optional, Customize query port on the server via command line argument: QueryPort=5478
Optional, Customize query port on the server via .ini file settings:
 DefaultEngine.ini
 [Engine.QueryProtocol]
 QueryPort=5478
 ListenBindIP=0.0.0.0


--------------------
Example Tool Usage
--------------------

Binaries\Tools\FFOW_QueryProtocolTest\

Modify FFOW_QueryProtocolTest.bat with a text editor

Usage: FFOW_QueryProtocolTest.exe [iP:Port] [retries] [timeout in seconds] [optional argument -vertical]
Example: FFOW_QueryProtocolTest.exe 127.0.0.1:5478 2 3

Append -vertical for vertical text output instead of the default horizontal.

FFOW_QueryProtocolTest.bat is configured by default to ping the local host (127.0.0.1) at the default UDP query port 5478

It will then open the output file FFOW_QueryProtocolTest.Log with notepad

--------------------
Source Code
--------------------

1) Send these 8 characters via UDP to the server's query port: "ÿÿÿÿFLSQ"
2) Server will send back a UDP packet as a response, details interpreting the response and other methods of query below:

Data types:
byte	8bit char
short	16bit integer
long 	32bit int
float	32bit float
string	series of chars null terminated with 0x00

Converting from network to host byte order:
short Value16bit = ntohs( *(short *)&PacketBuffer );
long Value32bit = ntohl( *(long *)&PacketBuffer );
float ValueFloat = *(float *)&Value32Bit; // use ntohl() first to swap the byte order, then cast result to a float


Constants:
enum ServerQueryTypeEnum
{
SQT_ChallengeReply=0x41, 	// Example packet: FF FF FF FF 41 32 42 59 45
SQT_PlayerListReply=0x44,	// Example packet: FF FF FF FE ...
SQT_RuleListReply=0x45,		// Example packet: FF FF FF FE ...
SQT_InfoReply=0x49,		// Example packet: FF FF FF FF ...
SQT_InfoRequest=0x54, 		// Example packet: FF FF FF FF 46 4C 53 51
SQT_PlayerListRequest=0x55, 	// Example packet: FF FF FF FF 55 32 42 59 45
SQT_RuleListRequest=0x56, 	// Example packet: FF FF FF FF 56 32 42 59 45
SQT_ChallengeRequest=0x57, 	// Example packet: FF FF FF FF 57
SQT_PingRequest=0x69, 		// Example packet: FF FF FF FF 69 00 00 00 00
SQT_PingReply=0x6A 		// Example packet: FF FF FF FF 6A 00 00 00 00
};



-----------------------------------------------
IMPORTANT! Packets with header -2 are part of a larger packet that had to be split over multiple packets!

Split packets start with this 12 byte header:
Header			Long	-2 (0xFFFFFFFE)
RequestID		Long	For grouping packets together belonging to same response
PacketNumber		Byte	0-255 (zero is the first packet number)
NumPackets		Byte	1-255
SizeOfPacketSplits	Short	1248 is default

Combine a split packet as if it was one large packet, packets are split at the byte level

First packet:
#12 bytes for packet split header
#packet data A

Second packet:
#12 bytes for packet split header
#packet data B

Combine to:
#packet data A (will start with -1, ReplyType, ...)
#packet data B (does not start with -1, continues exactly on the byte data A left off at)

Then parse the full packet using standard information below.
-----------------------------------------------


-----------------------------------------------
ServerInfo Request:
Send these 8 hex bytes:	FF FF FF FF 46 4C 53 51		"ÿÿÿÿFLSQ"
-----------------------------------------------
ServerInfo Reply:
Header			Long	-1 (0xFFFFFFFF)
ReplyType		Byte	0x49
NetVersion		Byte	0x02
ServerName		String	"Name of Server Here"
MapName			String	"FL-Street"
ModName			String	"FOW"
GameMode		String	"FL"
GameDescription		String	"Frontlines: Fuel of War"
GameVersion		String	"1.0.3"
GamePort		Short	5476
NumPlayers		Byte	53
PlayersMax		Byte	64
Dedicated		Byte	'd' (dedicated), 'l' (listen), 'p' (broadcast)
OperatingSystem		Byte	'w' (windows), 'l' (linux)
Password		Byte	0
AntiCheat		Byte	0
AverageFrameMs		Byte	CPU load, 16 = 50% load (30 FPS capped), 33 = 100% load (30 FPS), 66 = 200% load (15 FPS)
Round			Byte	2
RoundsMax		Byte	3
RoundSecondsLeft	Short	4646, Current round time in seconds counting down or up depending on game settings
-----------------------------------------------
Ping Request: (9 bytes)
Header			Long	-1 (0xFFFFFFFF)
ReplyType		Byte	0x69
PacketID		Long	Client Assigned Unique Number for this request
-----------------------------------------------
Ping Reply: (9 bytes)
Header			Long	-1 (0xFFFFFFFF)
ReplyType		Byte	0x6A
PacketID		Long	Client Assigned Unique Number for this request
-----------------------------------------------
Challenge Request: (5 bytes)
Header			Long	-1 (0xFFFFFFFF)
RequestType		Byte	0x57
-----------------------------------------------
Challenge Reply: (9 bytes)
Header			Long	-1 (0xFFFFFFFF)
ReplyType		Byte	0x57
Challenge		Long	Use this challenge number in PlayerList/RuleList requests
-----------------------------------------------
PlayerList Request: (9 bytes)
Header			Long	-1 (0xFFFFFFFF)
RequestType		Byte	0x55
Challenge		Long	Supplied from challenge response query
-----------------------------------------------
PlayerList Reply (can be split accross multiple packets):
Header			Long	-1 (0xFFFFFFFF)
ReplyType		Byte	0x44
NumPlayersTotal		Byte	0-255
... For each player:
{
Index			Byte	Abitrary index for this entry during this reply
PlayerName		String
Score			Long
TimeConnected		Float	in seconds
Ping			Short	in miliseconds
ProfileID		Long	234092 (online profile ID)
Team			Byte	0,1
}
-----------------------------------------------
RuleList Request:
Header			Long	-1 (0xFFFFFFFF)
RequestType		Byte	0x56
Challenge		Long	Supplied from challenge response query
-----------------------------------------------
RuleList Reply (can be split accross multiple packets):
Header			Long	-1 (0xFFFFFFFF)
ReplyType		Byte	0x45
NumRulesTotal		Short	0-65535
... For each rule:
{
RuleName		String	"FriendlyFire"
RuleValue		String	"0"
}

Link to comment
Share on other sites

That I understand it, it has to have all features working in TCAdmin to be considered a supported game. Since Luis is busy finishing v2, he has not had time to add any new queries to the panel. v2 will utilize Qstat which does support FFOW.

Link to comment
Share on other sites

  • 2 months later...
  • 1 month later...

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Terms of Use