public static Notify ( |
||
client | ||
return | void |
public static void Notify(Client client)
{
var game = GameManager.Games[client.GameID];
var data = new List<Tdf>
{
new TdfStruct("GAME", new List<Tdf>
{
new TdfList("ADMN", TdfBaseType.Integer, new ArrayList
{
client.User.ID
}),
new TdfMap("ATTR", TdfBaseType.String, TdfBaseType.String, game.Attributes),
new TdfList("CAP", TdfBaseType.Integer, game.Capacity),
new TdfInteger("GID", game.ID),
new TdfString("GNAM", game.Name),
new TdfInteger("GPVH", 666),
//new TdfInteger("GSET", game.gset), TODO
new TdfInteger("GSID", 1),
new TdfInteger("GSTA", (ulong)game.State),
new TdfString("GTYP", "frostbite_multiplayer"),
new TdfList("HNET", TdfBaseType.Struct, new ArrayList
{
new List<Tdf>
{
new TdfStruct("EXIP", new List<Tdf>
{
new TdfInteger("IP", game.ExternalIP),
new TdfInteger("PORT", game.ExternalPort)
}),
new TdfStruct("INIP", new List<Tdf>
{
new TdfInteger("IP", game.InternalIP),
new TdfInteger("PORT", game.InternalPort)
})
}
}, true),
new TdfInteger("HSES", 13666),
new TdfInteger("MCAP", game.MaxPlayers),
new TdfInteger("NRES", game.NotResetable),
new TdfInteger("NTOP", (ulong)game.NetworkTopology),
new TdfString("PGID", "b6852db1-ba37-4b40-aea3-0bd16efba4f9"),
new TdfBlob("PGSR", new byte[] { }),
new TdfStruct("PHST", new List<Tdf>
{
new TdfInteger("HPID", client.User.ID),
new TdfInteger("HSLT", 1)
}),
new TdfInteger("PRES", (ulong)game.PresenceMode),
new TdfString("PSAS", "ams"),
new TdfInteger("QCAP", (ulong)game.QueueCapacity),
new TdfUnion("REAS", NetworkAddressMember.XboxClientAddress, new List<Tdf> { }),
new TdfStruct("VALU", new List<Tdf>
{
new TdfInteger("DCTX", 0)
}),
new TdfInteger("SEED", 2291),
new TdfInteger("TCAP", 0),
new TdfStruct("THST", new List<Tdf>
{
new TdfInteger("HPID", client.GameID),
new TdfInteger("HSLT", 0)
}),
new TdfString("UUID", "714b05dc-93bc-49ac-961c-cb38b574f30a"),
new TdfInteger("VOIP", (ulong)game.VoipTopology),
new TdfString("VSTR", "67")
})
};
client.Notify(Component.GameManager, 0x14, 0, data);
}
}
public static void HandleRequest(Request request) { var attr = (TdfMap)request.Data["ATTR"]; var gameName = (TdfString)request.Data["GNAM"]; var gameSettings = (TdfInteger)request.Data["GSET"]; var playerCapacity = (TdfList)request.Data["PCAP"]; var igno = (TdfInteger)request.Data["IGNO"]; var pmax = (TdfInteger)request.Data["PMAX"]; var nres = (TdfInteger)request.Data["NRES"]; var notResetable = (TdfInteger)request.Data["NTOP"]; var voip = (TdfInteger)request.Data["VOIP"]; var presence = (TdfInteger)request.Data["PRES"]; var qcap = (TdfInteger)request.Data["QCAP"]; var game = new Game(); game.ClientID = request.Client.ID; game.Name = gameName.Value; game.Attributes = attr.Map; game.Capacity = playerCapacity.List; game.Level = attr.Map["level"].ToString(); game.GameType = attr.Map["levellocation"].ToString(); game.MaxPlayers = (ushort)pmax.Value; game.NotResetable = (byte)nres.Value; game.QueueCapacity = (ushort)qcap.Value; game.PresenceMode = (PresenceMode)presence.Value; game.State = GameState.Initializing; game.NetworkTopology = (GameNetworkTopology)notResetable.Value; game.VoipTopology = (VoipTopology)voip.Value; game.Settings = gameSettings.Value; game.InternalIP = request.Client.InternalIP; game.InternalPort = request.Client.InternalPort; game.ExternalIP = request.Client.ExternalIP; game.ExternalPort = request.Client.ExternalPort; GameManager.Add(game); request.Client.GameID = game.ID; Log.Info($"Client {request.Client.ID} creating game {game.ID} ({game.Name})"); var data = new List <Tdf> { new TdfInteger("GID", (ulong)game.ID) }; request.Reply(0, data); GameStateChangeNotification.Notify(request.Client); GameSetupNotification.Notify(request.Client); }