コード例 #1
0
 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;
 }
コード例 #2
0
 // 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.
 }
コード例 #3
0
        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 + ")");
        }