Tag

From FreeAllegiance Wiki
Jump to navigationJump to search

Tigereye's Allegiance Gizmo (TAG) is a replacement for AGMNet, providing logging services for Allegiance games. GameServer Administrators can run TAG on their systems next to their Allegiance Gameservers to collect ingame events and upload them to ACSS (provided their server has been "cleared" to post statistics).

TAG allows admins and authorised personal to send messages as HQ to current or all games on the server. It allows also to tag games, for further investigations of @Alleg.

How does TAG work

TAG hooks into the Allegiance server and records events like chat, kills, ejects, basekills, basecaptures and game settings. TAG stores this data into a XML file. After the game ends, TAG sends the recorded game data to the ASGS server, which handles the rank system.


TAG XML file

Below you find the XML schema of TAG XML files. [code]<?xml version="1.0" standalone="yes"?> <GameDataset>

 <xs:schema id="GameDataset" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   <xs:element name="GameDataset" msdata:IsDataSet="true">
     <xs:complexType>
       <xs:choice maxOccurs="unbounded">
         <xs:element name="Game">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="GameID" type="xs:int" />
               <xs:element name="GameName" type="xs:string" />
               <xs:element name="CoreFile" type="xs:string" />
               <xs:element name="MapName" type="xs:string" />
               <xs:element name="SquadGame" type="xs:boolean" />
               <xs:element name="Conquest" type="xs:boolean" />
               <xs:element name="DeathMatch" type="xs:boolean" />
               <xs:element name="DeathmatchGoal" type="xs:int" minOccurs="0" />
               <xs:element name="FriendlyFire" type="xs:boolean" />
               <xs:element name="RevealMap" type="xs:boolean" minOccurs="0" />
               <xs:element name="AllowDevelopments" type="xs:boolean" />
               <xs:element name="AllowShipyards" type="xs:boolean" />
               <xs:element name="AllowDefections" type="xs:boolean" />
               <xs:element name="InvulnerableStations" type="xs:boolean" />
               <xs:element name="StatsCount" type="xs:boolean" />
               <xs:element name="MaxImbalance" type="xs:int" />
               <xs:element name="StartingMoney" type="xs:float" />
               <xs:element name="TotalMoney" type="xs:float" />
               <xs:element name="Resources" type="xs:int" />
               <xs:element name="StartTime" type="xs:dateTime" />
               <xs:element name="EndTime" type="xs:dateTime" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
         <xs:element name="GameEvent">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="GameID" type="xs:int" />
               <xs:element name="EventID" type="xs:int" />
               <xs:element name="EventTime" type="xs:dateTime" />
               <xs:element name="PerformerID" type="xs:int" />
               <xs:element name="PerformerName" type="xs:string" />
               <xs:element name="TargetID" type="xs:int" />
               <xs:element name="TargetName" type="xs:string" />
               <xs:element name="IndirectID" type="xs:int" />
               <xs:element name="IndirectName" type="xs:string" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
         <xs:element name="ChatLog">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="GameID" type="xs:int" />
               <xs:element name="ChatTime" type="xs:dateTime" />
               <xs:element name="SpeakerName" type="xs:string" />
               <xs:element name="TargetName" type="xs:string" />
               <xs:element name="Text" type="xs:string" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
         <xs:element name="Team">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="TeamID" type="xs:int" />
               <xs:element name="GameID" type="xs:int" />
               <xs:element name="TeamNumber" type="xs:int" />
               <xs:element name="TeamName" type="xs:string" />
               <xs:element name="Commander" type="xs:string" />
               <xs:element name="Faction" type="xs:string" />
               <xs:element name="ResearchedStarbase" type="xs:boolean" />
               <xs:element name="ResearchedSupremacy" type="xs:boolean" />
               <xs:element name="ResearchedTactical" type="xs:boolean" />
               <xs:element name="ResearchedExpansion" type="xs:boolean" />
               <xs:element name="ResearchedShipyard" type="xs:boolean" />
               <xs:element name="Won" type="xs:boolean" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
         <xs:element name="TeamMember">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="TeamID" type="xs:int" minOccurs="0" />
               <xs:element name="Callsign" type="xs:string" minOccurs="0" />
               <xs:element name="Duration" type="xs:int" minOccurs="0" />
               <xs:element name="JoinTime" type="xs:dateTime" minOccurs="0" />
               <xs:element name="LeaveTime" type="xs:dateTime" minOccurs="0" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
       </xs:choice>
     </xs:complexType>
     <xs:unique name="GameIDKey" msdata:PrimaryKey="true">
       <xs:selector xpath=".//Game" />
       <xs:field xpath="GameID" />
     </xs:unique>
     <xs:unique name="PK_TeamID" msdata:PrimaryKey="true">
       <xs:selector xpath=".//Team" />
       <xs:field xpath="TeamID" />
     </xs:unique>
     <xs:keyref name="TeamTeamMember" refer="PK_TeamID" msdata:UpdateRule="None" msdata:DeleteRule="None">
       <xs:selector xpath=".//TeamMember" />
       <xs:field xpath="TeamID" />
     </xs:keyref>
     <xs:keyref name="GameTeams" refer="GameIDKey" msdata:UpdateRule="None" msdata:DeleteRule="None">
       <xs:selector xpath=".//Team" />
       <xs:field xpath="GameID" />
     </xs:keyref>
     <xs:keyref name="GameChatLog" refer="GameIDKey" msdata:UpdateRule="None" msdata:DeleteRule="None">
       <xs:selector xpath=".//ChatLog" />
       <xs:field xpath="GameID" />
     </xs:keyref>
     <xs:keyref name="GameGameEvent" refer="GameIDKey" msdata:UpdateRule="None" msdata:DeleteRule="None">
       <xs:selector xpath=".//GameEvent" />
       <xs:field xpath="GameID" />
     </xs:keyref>
   </xs:element>
 </xs:schema>

</GameDataset>[/code]

GameDataset

This part of the XML file tells you everything about the game settings.

GameID

The GameID will be requested by TAG from ASGS database server, before TAG sends the game data to the database server. If TAG is unable to reach the database server, it will save the game as Game unknown.

GameName

Basicly the name of the game session (server name).

CoreFile

Name (filename) of the used core].

SquadGame

Allegiance doesn't support this option (yet).

StatsCount

This is an relict, maybe used later. All games will count played on current game servers.

StartTime

Local server time, when the game started.

EndTime

Local server time, when the game ended.

automated TAG messages

Outdated.png
Outdated content This page does not reflect the current state of things.

Some information within this article is either obsolete, hasn't been updated in a long time, incomplete, or otherwise invalid.

If you don't notice such a message at the start/end of a game, TAG isn't running on the gameserver.

HQ (all): The game has started.

Message that the game has been started and TAG starts recording the game.

HQ (all): servername 's game has completed. Game#: 123456'

Game has been successfull posted to ASGS database server and will be counted on ranks page.

HQ (all): servername 's game has completed. Insert lots of HTML stuff here

TAG on gameserver is unable to send data to ASGS database server. Game will be stored as Unknown game. It will not affect ranks.

HQ (all): Game post failed. This server is not authorized to post game statistics.

Server is not authoriesed to post games to ASGS database server.

Known issues

Running TAG on x64 systems

TAG may crashs on x64 systems and you get the following error within trace.txt:

[code]1/3/2011 12:17:10 AM: TAG Build 15 is starting... 1/1/2011 12:00:00 AM: Initializing logging... 1/1/2011 12:00:00 AM: Configuration Loaded. 1/1/2011 12:00:00 AM: Checking for updates... 1/1/2011 12:00:01 AM: No updates are available. 1/1/2011 12:00:01 AM: Connecting to GameServer... 1/1/2011 12:00:01 AM: TAG could not connect to Allsrv: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)[/code]

To fix this you need .net framework 2.0 SDK (x64) installed.

Use the tool CorFlags to set 32BIT flag for TAG.exe.

[code]C:\Program Files\Microsoft.NET\SDK\v2.0 64bit\Bin>corflags.exe "C:\Program Files (x86)\Micrsoft Games\Allegiance\Server\Tag\Tag.exe" /32BIT+[/code]

Now TAG runs fine without producing a error on event log or trace.txt.

Further reading: