public PlayerChecks(CommandContext Context) { Chat = new Chat(Context); GpsSender = new GpsSender(); SteamID = Context.Player.SteamUserId; IdentityID = Context.Player.Identity.IdentityId; PlayerPosition = Context.Player.GetPosition(); UserCharacter = (MyCharacter)Context.Player.Character; }
// PlayerChecks as initiated by another server to call LoadGrid. // We don't have a command context nor a player character object to work with, // but we receive all required data in the Nexus message. public PlayerChecks(Chat chat, GpsSender gpsSender, ulong steamID, long identityID, Vector3D playerPosition) { Chat = chat; GpsSender = gpsSender; SteamID = steamID; IdentityID = identityID; PlayerPosition = playerPosition; // UserCharacter can remain null, it is only used by SaveGrid. }
private static void ReceivePacket(ushort HandlerId, byte[] Data, ulong SteamID, bool FromServer) { // Only consider trusted server messages, i.e. from Nexus itself, not untrusted player messages. if (!FromServer) { return; } NexusHangarMessage msg; try { msg = MyAPIGateway.Utilities.SerializeFromBinary <NexusHangarMessage>(Data); } catch (Exception ex) { Log.Error(ex, "Invalid Nexus cross-server message for Quantum Hangar"); return; } switch (msg.Type) { case NexusHangarMessageType.Chat: var chat = new ScriptedChatMsg() { Author = msg.Sender, Text = msg.Response, Font = MyFontEnum.White, Color = msg.Color, Target = msg.ChatIdentityID }; MyMultiplayerBase.SendScriptedChatMessage(ref chat); return; case NexusHangarMessageType.SendGPS: gpsSender.SendGps(msg.Position, msg.Name, msg.EntityID); return; case NexusHangarMessageType.LoadGrid: var chatOverNexus = new Chat((text, color, sender) => { NexusHangarMessage m = new NexusHangarMessage { Type = NexusHangarMessageType.Chat, IdentityID = msg.IdentityID, Response = text, Color = color, Sender = sender, }; API.SendMessageToServer(msg.ServerID, MyAPIGateway.Utilities.SerializeToBinary <NexusHangarMessage>(m)); }); var gpsOverNexus = new GpsSender((position, name, entityID) => { NexusHangarMessage m = new NexusHangarMessage { Type = NexusHangarMessageType.SendGPS, Name = name, Position = position, EntityID = entityID, }; API.SendMessageToServer(msg.ServerID, MyAPIGateway.Utilities.SerializeToBinary <NexusHangarMessage>(m)); }); PlayerChecks User = new PlayerChecks(chatOverNexus, gpsOverNexus, msg.SteamID, msg.IdentityID, msg.PlayerPosition); User.LoadGrid(msg.LoadGridID.ToString(), msg.LoadNearPlayer); return; } Log.Error("Invalid Nexus cross-server message for Quantum Hangar (unrecognized type: " + msg.Type + ")"); }