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)); }
public static void AddWeather(Temperature temperature, DensityOfCloud cloud, QuantityOfWind wind, bool isStatic, params Rectangle2D[] area) { new Weather(area, temperature, cloud, wind, isStatic); }
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(); } }