Пример #1
0
        public static bool OpenYS_Command_Weather_SkyColor_Method(Client ThisClient, CommandReader Command)
        {
            if (Command._CmdArguments.Count() < 1)
            {
                ThisClient.SendMessage("&eFormat incorrect: Use instead: \"/SkyColor Red Green Blue\"!");
                return(false);
            }
            if (Command._CmdArguments[0].ToUpperInvariant() == "DEFAULT" | Command._CmdArguments[0].ToUpperInvariant() == "OFF")
            {
                Settings.Weather.Advanced.EnableSkyColor = false;
                ThisClient.SendMessage("&eSkyColor turned &cOFF&e.");
                SettingsHandler.SaveAll();
                return(true);
            }
            if (Command._CmdArguments[0].ToUpperInvariant() == "ON")
            {
                Settings.Weather.Advanced.EnableSkyColor = true;
                ThisClient.SendMessage("&eSkyColor turned &aON&e.");
                SettingsHandler.SaveAll();
                return(true);
            }
            if (Command._CmdArguments.Count() < 3)
            {
                ThisClient.SendMessage("&eFormat incorrect: Use instead: \"/SkyColor Red Green Blue\"!");
                return(false);
            }

            byte Red   = 255;
            byte Green = 255;
            byte Blue  = 255;

            if (!Byte.TryParse(Command._CmdArguments[0], out Red) & !Byte.TryParse(Command._CmdArguments[1], out Green) & !Byte.TryParse(Command._CmdArguments[2], out Blue))
            {
                ThisClient.SendMessage("&eFormat incorrect: Be sure you are using values between 0 and 255!");
                return(false);
            }

            Settings.Weather.Advanced.EnableSkyColor = true;
            OpenYS.AdvancedWeatherOptions.SkyColor   = new Colors.XRGBColor(Red, Green, Blue);
            Packets.Packet_49_SkyColor SkyColor = new Packets.Packet_49_SkyColor(Red, Green, Blue);
            Clients.AllClients.SendPacket(SkyColor);
            ThisClient.SendMessage("&eSky Color is now: " + SkyColor.Red + " " + SkyColor.Green + " " + SkyColor.Blue + ".");
            SettingsHandler.SaveAll();
            return(true);
        }
Пример #2
0
        public static bool UpdateTimeOfDay()
        {
            while ((DateTime.Now - AdvancedWeatherOptions._LastDayNightCycleRestart).TotalMinutes > AdvancedWeatherOptions._DayNightCycleLength & AdvancedWeatherOptions._DayNightCycleLength > 0)
            {
                AdvancedWeatherOptions._LastDayNightCycleRestart += new TimeSpan(0, AdvancedWeatherOptions._DayNightCycleLength, 0);
            }
            CurrentTick = GetServerTimeTicks();
            if (AdvancedWeatherOptions._DayNightCycleLength <= 0)
            {
                CurrentTick = PreviousTick;
                //return false;
            }

            //These packets ultimately sent to the clients.
            Packets.Packet_49_SkyColor SkyColorUpdate = new Packets.Packet_49_SkyColor(Settings.Weather.Advanced.SkyColor);
            Packets.Packet_48_FogColor FogColorUpdate = new Packets.Packet_48_FogColor(Settings.Weather.Advanced.FogColor);

            Colors.XRGBColor BlendedSkyColor = Settings.Weather.Advanced.SkyColor;
            Colors.XRGBColor BlendedFogColor = Settings.Weather.Advanced.FogColor;
            #region TimeOfDayBlending
            //Night 1
            if (CurrentTick < 6000)
            {
                BlendedSkyColor      = Settings.Weather.Advanced.EnvironmentColors.NightSkyColor;
                SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);

                BlendedFogColor      = Settings.Weather.Advanced.EnvironmentColors.NightHorizonColor;
                FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);
                //FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightHorizonColorChangeFactor);
            }
            //Dawn 1
            if (CurrentTick >= 6000 && CurrentTick < 7000)
            {
                BlendedSkyColor      = Settings.Weather.Advanced.EnvironmentColors.NightSkyColor;
                BlendedSkyColor      = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DawnSkyColor, (CurrentTick - 6000) / 1000d);
                SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);

                BlendedFogColor      = Settings.Weather.Advanced.EnvironmentColors.NightHorizonColor;
                BlendedFogColor      = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DawnHorizonColor, (CurrentTick - 6000) / 1000d);
                FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);
                //FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightHorizonColorChangeFactor);
            }
            //Dawn 2
            if (CurrentTick >= 7000 && CurrentTick < 8000)
            {
                if (PreviousTick < 7000)
                {
                    Weather = new Packets.Packet_33_Weather(_Weather)
                    {
                        Lighting = 0
                    };                                                                  //Set To Day
                    Clients.AllClients.SendPacket(Weather);
                }
                BlendedSkyColor      = Settings.Weather.Advanced.EnvironmentColors.DawnSkyColor;
                BlendedSkyColor      = BlendedSkyColor.AlphaBlend(new Colors.XRGBColor(255, 255, 255), (CurrentTick - 7000) / 1000d);
                BlendedSkyColor      = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DaySkyColor, (CurrentTick - 7000) / 1000d);
                SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);

                BlendedFogColor      = Settings.Weather.Advanced.EnvironmentColors.DawnHorizonColor;
                BlendedFogColor      = BlendedFogColor.AlphaBlend(new Colors.XRGBColor(255, 255, 255), (CurrentTick - 7000) / 1000d);
                BlendedFogColor      = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DayHorizonColor, (CurrentTick - 7000) / 1000d);
                FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);
            }
            //Day
            if (CurrentTick >= 8000 && CurrentTick < 18000)
            {
                BlendedSkyColor      = Settings.Weather.Advanced.EnvironmentColors.DaySkyColor;
                SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);

                BlendedFogColor      = Settings.Weather.Advanced.EnvironmentColors.DayHorizonColor;
                FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);
            }
            //Dusk 1
            if (CurrentTick >= 18000 && CurrentTick < 19000)
            {
                BlendedSkyColor      = Settings.Weather.Advanced.EnvironmentColors.DaySkyColor;
                BlendedSkyColor      = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DuskSkyColor, (CurrentTick - 18000) / 1000d);
                SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);

                BlendedFogColor      = Settings.Weather.Advanced.EnvironmentColors.DayHorizonColor;
                BlendedFogColor      = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DuskHorizonColor, (CurrentTick - 18000) / 1000d);
                FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);
            }
            //Dusk 2
            if (CurrentTick >= 19000 && CurrentTick < 20000)
            {
                if (PreviousTick < 19000)
                {
                    Weather = new Packets.Packet_33_Weather(_Weather)
                    {
                        Lighting = 65537
                    };                                                                      //Set To Night
                    Clients.AllClients.SendPacket(Weather);
                }
                BlendedSkyColor      = Settings.Weather.Advanced.EnvironmentColors.DuskSkyColor;
                BlendedSkyColor      = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NightSkyColor, (CurrentTick - 19000) / 1000d);
                SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);

                BlendedFogColor      = Settings.Weather.Advanced.EnvironmentColors.DuskHorizonColor;
                BlendedFogColor      = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NightHorizonColor, (CurrentTick - 19000) / 1000d);
                FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);
                //FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightHorizonColorChangeFactor);
            }
            //Night 2
            if (CurrentTick >= 20000)
            {
                BlendedSkyColor      = Settings.Weather.Advanced.EnvironmentColors.NightSkyColor;
                SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);

                BlendedFogColor      = Settings.Weather.Advanced.EnvironmentColors.NightHorizonColor;
                FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor);
                //FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightHorizonColorChangeFactor);
            }
            #endregion

            #region Fog Distance Blending
            BlendedFogColor      = FogColorUpdate.Color;
            BlendedFogColor      = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.WhiteFogColor, 1 - (OpenYS.Weather.Fog / 20000));
            FogColorUpdate.Color = BlendedFogColor;
            #endregion

            foreach (Client ThisClient in Clients.LoggedIn)
            {
                #region Altitude Blending
                //Now filter the sky and fog based on altitude.
                Packets.Packet_48_FogColor ThisClientFogUpdate = FogColorUpdate;
                Packets.Packet_49_SkyColor ThisClientSkyUpdate = SkyColorUpdate;

                Vehicle ThisVehicle = ThisClient.Vehicle;
                if (ThisVehicle != Vehicles.NoVehicle)
                {
                    if (ThisVehicle.PosY >= Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters) //Above 100,000ft
                    {
                        ThisClientSkyUpdate.Color = ThisClientSkyUpdate.Color.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NoAtmosphereSkyColor, 1.0);
                        ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NoAtmosphereHorizonColor, 1.0);
                        //ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - NightFogFilter);
                    }
                    if (ThisVehicle.PosY >= Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters && ThisVehicle.PosY < Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters) //Roughly 40,000ft to 100,000ft
                    {
                        BlendedSkyColor           = ThisClientSkyUpdate.Color;
                        BlendedSkyColor           = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.MaxAltitudeSkyColor, (ThisVehicle.PosY - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters) / (Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters));  //fade to the sky color.
                        BlendedSkyColor           = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NoAtmosphereSkyColor, (ThisVehicle.PosY - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters) / (Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters)); //fade to the noatmosphere color.
                        ThisClientSkyUpdate.Color = BlendedSkyColor;

                        BlendedFogColor           = ThisClientFogUpdate.Color;
                        BlendedFogColor           = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.MaxAltitudeHorizonColor, (ThisVehicle.PosY - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters) / (Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters));  //fade to the Fog color.
                        BlendedFogColor           = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NoAtmosphereHorizonColor, (ThisVehicle.PosY - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters) / (Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters)); //fade to the noatmosphere color.
                        ThisClientFogUpdate.Color = BlendedFogColor;
                        //ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - NightFogFilter);
                    }
                    if (ThisVehicle.PosY < Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters) //Less then 40,000 ft.
                    {
                        //Do nothing.
                    }
                    #region SetNightColors
                    if (CurrentTick < 6000 | CurrentTick >= 20000)
                    {
                        ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor);                                            //7000 = 0, 6000 = 1
                    }
                    if (CurrentTick >= 6000 & CurrentTick < 7000)
                    {
                        ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (1.0d - ((CurrentTick - 6000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor));
                    }
                    if (CurrentTick >= 7000 & CurrentTick < 8000)
                    {
                        ThisClientSkyUpdate.Color = ThisClientSkyUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (1.0d - ((CurrentTick - 7000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor));
                    }
                    if (CurrentTick >= 18000 & CurrentTick < 19000)
                    {
                        ThisClientSkyUpdate.Color = ThisClientSkyUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (((CurrentTick - 18000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor));
                    }
                    if (CurrentTick >= 19000 & CurrentTick < 20000)
                    {
                        ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (((CurrentTick - 19000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor));
                    }
                    #endregion
                }
                else
                {
                    #region SetNightColors
                    if (CurrentTick < 6000 | CurrentTick >= 20000)
                    {
                        ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor);                                            //7000 = 0, 6000 = 1
                    }
                    if (CurrentTick >= 6000 & CurrentTick < 7000)
                    {
                        ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (1.0d - ((CurrentTick - 6000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor));
                    }
                    if (CurrentTick >= 7000 & CurrentTick < 8000)
                    {
                        ThisClientSkyUpdate.Color = ThisClientSkyUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (1.0d - ((CurrentTick - 7000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor));
                    }
                    if (CurrentTick >= 18000 & CurrentTick < 19000)
                    {
                        ThisClientSkyUpdate.Color = ThisClientSkyUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (((CurrentTick - 18000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor));
                    }
                    if (CurrentTick >= 19000 & CurrentTick < 20000)
                    {
                        ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (((CurrentTick - 19000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor));
                    }
                    #endregion
                }
                #endregion

                #region Set Definied Colors
                if (ThisClient.Version > 20110207)
                {
                    if (!Settings.Weather.Advanced.EnableSkyColor)
                    {
                        ThisClient.SendPacket(ThisClientSkyUpdate);
                    }
                    if (!Settings.Weather.Advanced.EnableFogColor)
                    {
                        ThisClient.SendPacket(ThisClientFogUpdate);
                    }
                }
                #endregion
            }
            PreviousTick = CurrentTick;
            return(true);
        }