Exemplo n.º 1
0
        public Weather(Rectangle2D[] area, Temperature temperature, DensityOfCloud cloud, QuantityOfWind wind, bool isStatic)
        {
            m_Area        = area;
            m_Temperature = temperature;
            m_Cloud       = cloud;
            m_Wind        = wind;
            m_IsStatic    = isStatic;

            m_Weathers.Add(this);

            m_NextWeatherChange = DateTime.Now + Interval;

            Timer.DelayCall(TimeSpan.FromSeconds(5.0), TimeSpan.FromSeconds(60.0), new TimerCallback(Weather_OnTick));
        }
Exemplo n.º 2
0
 public static void AddWeather(Temperature temperature, DensityOfCloud cloud, QuantityOfWind wind, bool isStatic, params Rectangle2D[] area)
 {
     new Weather(area, temperature, cloud, wind, isStatic);
 }
Exemplo n.º 3
0
        public virtual void Weather_OnTick()
        {
            int  type             = 0xFE;
            int  density          = 0;
            int  temperature      = IsUnderZero ? -30 : 30;
            bool wasRaining       = IsRaining;
            bool seasonHasChanged = false;

            if (m_NextWeatherChange < DateTime.Now)
            {
                m_Temperature = GenerateTemperature();
                m_Cloud       = GenerateCloud();
                m_Wind        = GenerateWind();

                m_NextWeatherChange = DateTime.Now + Interval;
            }

            if (IsRaining)
            {
                if (!IsUnderZero)
                {
                    type = 0;
                }
                else
                {
                    type = 2;
                }

                if (m_Cloud == DensityOfCloud.FaiblePluie)
                {
                    density = 10;
                }
                else if (m_Cloud == DensityOfCloud.Pluie)
                {
                    density = 40;
                }
                else if (m_Cloud == DensityOfCloud.FortePluie)
                {
                    density = 70;
                }
            }

            int year, month, day;

            Time.GetDate(out year, out month, out day);

            Season season = Time.Months[month - 1].Season;

            if (Map.Felucca.Season != (int)season)
            {
                Map.Felucca.Season = (int)season;
                Time.OnSeasonChange(season);
                seasonHasChanged = true;
            }

            List <NetState> states = NetState.Instances;

            Packet weatherPacket = null;
            Packet seasonPacket  = null;

            for (int i = 0; i < states.Count; ++i)
            {
                NetState ns  = (NetState)states[i];
                Mobile   mob = ns.Mobile;

                if (mob == null || mob.Map != Map.Felucca)
                {
                    continue;
                }

                if (seasonHasChanged)
                {
                    if (seasonPacket == null)
                    {
                        seasonPacket = Packet.Acquire(new SeasonChange(Map.Felucca.Season, false));
                    }

                    ns.Send(seasonPacket);

                    mob.CheckLightLevels(false);
                }

                bool contains = (m_Area.Length == 0);

                for (int j = 0; !contains && j < m_Area.Length; ++j)
                {
                    contains = m_Area[j].Contains(mob.Location);
                }

                if (!contains)
                {
                    continue;
                }

                if (weatherPacket == null)
                {
                    weatherPacket = Packet.Acquire(new Server.Network.Weather(type, density, temperature));
                }

                ns.Send(weatherPacket);

                if (wasRaining && !IsRaining)
                {
                    ns.Send(new MobileUpdate(mob));
                    ns.Send(new MobileIncoming(mob, mob));
                }

                //ns.Mobile.ProcessDelta();
            }
        }