예제 #1
0
        /// <summary>
        /// Deserializes a compatibility settings block.
        /// </summary>
        /// <param name="serializedData">The serialized data.</param>
        /// <param name="settings">The settings.</param>
        /// <returns>The deserialization result.</returns>
        private static DeserializationResult DeserializeCompatibilitySettings(BinaryData serializedData, Settings settings)
        {
            if (serializedData == null || serializedData.Left == 0)
            {
                return(DeserializationResult.EndOfData);
            }

            Log.DevDebug(typeof(BinarySettings), "DeserializeCompatibilitySettings", applySettings);

            serializedData.ResetLocalCheckSum();

            SettingsType settingsType = serializedData.GetSettingsType();

            if (settingsType != SettingsType.Compatibility)
            {
                throw new InvalidOperationException("Not a compatibility settings block");
            }

            ulong version = serializedData.GetVersion();

            if (version > 0)
            {
                Log.Warning(typeof(BinarySettings), "DeserializeCompatibilitySettings", "Serialized data version too high", version, 0);
                return(DeserializationResult.Error);
            }

            // Settings.
            ServiceDispatcherSettings.Allowance reflectionAllowance = serializedData.GetAllowance();
            bool blockTransferManagerOffers = serializedData.GetBool();

            ServiceDispatcherSettings.ModCompatibilityMode assignmentCompatibilityMode = serializedData.GetModCompatibilityMode();
            ServiceDispatcherSettings.ModCompatibilityMode creationCompatibilityMode   = serializedData.GetModCompatibilityMode();

            serializedData.CheckLocalCheckSum();

            // Only use these settings if no settings file was loaded.
            if (!settings.Loaded)
            {
                Log.Debug(typeof(BinarySettings), "DeserializeCompatibilitySettings", applySettings, reflectionAllowance, blockTransferManagerOffers, assignmentCompatibilityMode, creationCompatibilityMode);

                if (applySettings)
                {
                    settings.ReflectionAllowance         = reflectionAllowance;
                    settings.BlockTransferManagerOffers  = blockTransferManagerOffers;
                    settings.AssignmentCompatibilityMode = assignmentCompatibilityMode;
                    settings.CreationCompatibilityMode   = creationCompatibilityMode;
                }
            }

            return(DeserializationResult.Success);
        }
예제 #2
0
        /// <summary>
        /// Deserializes a service range settings block.
        /// </summary>
        /// <param name="serializedData">The serialized data.</param>
        /// <param name="settings">The settings.</param>
        /// <returns>The deserialization result.</returns>
        private static DeserializationResult DeserializeRangeSettings(BinaryData serializedData, Settings settings)
        {
            if (serializedData == null || serializedData.Left == 0)
            {
                return(DeserializationResult.EndOfData);
            }

            Log.DevDebug(typeof(BinarySettings), "DeserializeRangeSettings", applySettings);

            serializedData.ResetLocalCheckSum();

            SettingsType settingsType = serializedData.GetSettingsType();

            if (settingsType != SettingsType.ServiceRanges)
            {
                throw new InvalidOperationException("Not a service range settings block");
            }

            ulong version = serializedData.GetVersion();

            if (version > 0)
            {
                Log.Warning(typeof(BinarySettings), "DeserializeRangeSettings", "Serialized data version too high", version, 0);
                return(DeserializationResult.Error);
            }

            // Settings.
            bool  rangeLimit    = serializedData.GetBool();
            float rangeMaximum  = serializedData.GetFloat();
            float rangeMinimum  = serializedData.GetFloat();
            float rangeModifier = serializedData.GetFloat();

            serializedData.CheckLocalCheckSum();

            Log.Debug(typeof(BinarySettings), "DeserializeRangeSettings", applySettings, rangeLimit, rangeMaximum, rangeMinimum, rangeModifier);

            if (applySettings)
            {
                settings.RangeLimit    = rangeLimit;
                settings.RangeMaximum  = rangeMaximum;
                settings.RangeMinimum  = rangeMinimum;
                settings.RangeModifier = rangeModifier;
            }

            return(DeserializationResult.Success);
        }
예제 #3
0
        /// <summary>
        /// Deserializes a standard service settings block.
        /// </summary>
        /// <param name="serializedData">The serialized data.</param>
        /// <param name="settings">The settings.</param>
        /// <returns>The deserialization result.</returns>
        private static DeserializationResult DeserializeStandardServiceSettings(BinaryData serializedData, Settings settings)
        {
            if (serializedData == null || serializedData.Left == 0)
            {
                return(DeserializationResult.EndOfData);
            }

            Log.DevDebug(typeof(BinarySettings), "DeserializeStandardServiceSettings", applySettings);

            serializedData.ResetLocalCheckSum();

            SettingsType settingsType = serializedData.GetSettingsType();

            if (settingsType != SettingsType.StandardService)
            {
                throw new InvalidOperationException("Not a standard service settings block");
            }

            ulong version = serializedData.GetVersion();

            if (version > 0)
            {
                Log.Warning(typeof(BinarySettings), "DeserializeStandardServiceSettings", "Serialized data version too high", version, 0);
                return(DeserializationResult.Error);
            }

            StandardServiceSettings serviceSettings;
            StandardServiceSettings serializedSettings;
            ServiceType             service = serializedData.GetServiceType();

            switch (service)
            {
            case ServiceType.DeathCare:
                serviceSettings = settings.DeathCare;
                break;

            case ServiceType.Garbage:
                serviceSettings = settings.Garbage;
                break;

            case ServiceType.HealthCare:
                serviceSettings = settings.HealthCare;
                break;

            default:
                Log.Warning(typeof(BinarySettings), "Not a standard service", service);
                serviceSettings = null;
                break;
            }

            serializedSettings = new StandardServiceSettings(serviceSettings);

            // Settings.
            serializedSettings.DispatchVehicles               = serializedData.GetBool();
            serializedSettings.DispatchByDistrict             = serializedData.GetBool();
            serializedSettings.DispatchByRange                = serializedData.GetBool();
            serializedSettings.AutoEmpty                      = serializedData.GetBool();
            serializedSettings.LimitOpportunisticCollection   = serializedData.GetBool();
            serializedSettings.RemoveFromGrid                 = serializedData.GetBool();
            serializedSettings.IgnoreRangeUseClosestBuildings = serializedData.GetByte();
            serializedSettings.CreateSpares                   = serializedData.GetSpareVehiclesCreation();
            serializedSettings.ChecksPreset                   = serializedData.GetBuildingCheckOrder();
            serializedSettings.MinimumAmountForDispatch       = serializedData.GetUshort();
            serializedSettings.MinimumAmountForPatrol         = serializedData.GetUshort();
            serializedSettings.AutoEmptyStartLevelPercent     = serializedData.GetByte();
            serializedSettings.AutoEmptyStopLevelPercent      = serializedData.GetByte();

            // Custom check list.
            byte checksCustomLength = serializedData.GetByte();

            serializedSettings.ChecksCustom = serializedData.GetBuildingCheckParametersArray(checksCustomLength);

            serializedData.CheckLocalCheckSum();

            if (serviceSettings != null)
            {
                Log.Debug(typeof(BinarySettings), "DeserializeStandardServiceSettings", applySettings,
                          service,
                          serializedSettings.DispatchVehicles,
                          serializedSettings.ChecksPreset,
                          ServiceDispatcherSettings.BuildingChecksPresetInfo.ToString(serializedSettings.ChecksParameters),
                          ServiceDispatcherSettings.BuildingChecksPresetInfo.ToString(serializedSettings.ChecksCustom));

                if (applySettings)
                {
                    serviceSettings.CopyFrom(serializedSettings);
                }
            }

            return(DeserializationResult.Success);
        }
예제 #4
0
        /// <summary>
        /// Deserializes a hidden service settings block.
        /// </summary>
        /// <param name="serializedData">The serialized data.</param>
        /// <param name="settings">The settings.</param>
        /// <returns>The deserialization result.</returns>
        private static DeserializationResult DeserializeHiddenServiceSettings(BinaryData serializedData, Settings settings)
        {
            if (serializedData == null || serializedData.Left == 0)
            {
                return(DeserializationResult.EndOfData);
            }

            Log.DevDebug(typeof(BinarySettings), "DeserializeHiddenServiceSettings", applySettings);

            serializedData.ResetLocalCheckSum();

            SettingsType settingsType = serializedData.GetSettingsType();

            if (settingsType != SettingsType.HiddenService)
            {
                throw new InvalidOperationException("Not a hidden service settings block");
            }

            ulong version = serializedData.GetVersion();

            if (version > 0)
            {
                Log.Warning(typeof(BinarySettings), "DeserializeHiddenServiceSettings", "Serialized data version too high", version, 0);
                return(DeserializationResult.Error);
            }

            HiddenServiceSettings serviceSettings;
            HiddenServiceSettings serializedSettings;
            ServiceType           service = serializedData.GetServiceType();

            switch (service)
            {
            case ServiceType.WreckingCrews:
                serviceSettings = settings.WreckingCrews;
                break;

            case ServiceType.RecoveryCrews:
                serviceSettings = settings.RecoveryCrews;
                break;

            default:
                Log.Warning(typeof(BinarySettings), "Not a hidden service", service);
                serviceSettings = null;
                break;
            }

            serializedSettings = new HiddenServiceSettings(serviceSettings);

            // Settings.
            serializedSettings.DispatchVehicles = serializedData.GetBool();
            serializedSettings.DelaySeconds     = serializedData.GetDouble();

            serializedData.CheckLocalCheckSum();

            if (serviceSettings != null)
            {
                Log.Debug(typeof(BinarySettings), "DeserializeHiddenServiceSettings", applySettings, service, serializedSettings.DispatchVehicles, serializedSettings.DelaySeconds);

                if (applySettings)
                {
                    serviceSettings.CopyFrom(serializedSettings);
                }
            }

            return(DeserializationResult.Success);
        }