예제 #1
0
        /// <inheritdoc />
        public override void SyncOption <TValue>(Option option, TValue value)
        {
            var steamUserId = MyAPIGateway.Session.LocalHumanPlayer.SteamUserId;
            var message     = new SetOptionMessage {
                SteamId = steamUserId, Option = option, Value = MyAPIGateway.Utilities.SerializeToBinary(value)
            };

            Network.SendToServer(message);
        }
예제 #2
0
        /// <summary>
        ///     Set option message handler.
        /// </summary>
        /// <param name="sender">The sender who send the option message.</param>
        /// <param name="message">The option message received.</param>
        private void OnSetOptionMessage(ulong sender, SetOptionMessage message)
        {
            if (message?.Option == null)
            {
                return;
            }

            if (!IsServerAdmin(message.SteamId))
            {
                var response = new SetOptionResponseMessage {
                    Result = Result.NoPermission, Option = message.Option, Value = message.Value
                };
                Network.Send(response, sender);
                return;
            }

            try {
                switch (message.Option)
                {
                case Option.AlwaysAutoHelmet:
                case Option.AdditionalFuelWarning:
                case Option.AlignToGravity:
                    SyncOption(message.Option, MyAPIGateway.Utilities.SerializeFromBinary <bool>(message.Value));
                    break;

                case Option.FuelThreshold:
                case Option.HaltedSpeedTolerance:
                    SyncOption(message.Option, MyAPIGateway.Utilities.SerializeFromBinary <float>(message.Value));
                    break;

                case Option.AlignToGravityDelay:
                case Option.DelayAfterManualHelmet:
                    SyncOption(Option.DelayAfterManualHelmet, MyAPIGateway.Utilities.SerializeFromBinary <int>(message.Value));
                    break;

                case Option.DisableAutoDampener:
                    SyncOption(message.Option, MyAPIGateway.Utilities.SerializeFromBinary <DisableAutoDampenerOption>(message.Value));
                    break;

                default:
                    using (Log.BeginMethod(nameof(OnSetOptionMessage))) {
                        Log.Error($"Unknown option '{nameof(message.Option)}'");
                    }

                    return;
                }

                var response = new SetOptionResponseMessage {
                    Result = Result.Success, Option = message.Option, Value = message.Value
                };
                Network.Send(response, sender);
            } catch (Exception exception) {
                using (Log.BeginMethod(nameof(OnSetOptionMessage))) {
                    Log.Error(exception);

                    var response = new SetOptionResponseMessage {
                        Result = Result.Error, Option = message.Option, Value = message.Value
                    };
                    Network.Send(response, sender);
                }
            }
        }