InitSeason = function()
	if (MonthCount == 10 or MonthCount == 11 or MonthCount == 12 or MonthCount == 1 or MonthCount == 2 or MonthCount == 3) and not WinterState then
		InitWinter()
		WinterState = true
		Trigger.AfterDelay(1, function()
			Trigger.AfterDelay(66, function()
				OceanIceCreator()
			end)
			Trigger.AfterDelay(Utils.RandomInteger(124, 186), function()
				Media.DisplayMessage(YearCount .. "'s Winter, " .. tostring(MonthCountName) .. " | " .. tostring(DateDayCount) .. " / " .. tostring(DayCountName), "[Date-Time] ", RandomMainColor)
				Media.PlaySound("mapwipe" .. Utils.Random({ 2, 5 }) .. ".aud")
				Trigger.AfterDelay(DateTime.Seconds(Utils.RandomInteger(1.85, 2.25)), function()
					Media.PlaySound("mapwipe" .. Utils.Random({ 2, 5 }) .. ".aud")
				end)
			end)
		end)
	elseif (MonthCount == 4 or MonthCount == 5 or MonthCount == 6 or MonthCount == 7 or MonthCount == 8 or MonthCount == 9) and not SummerState then
		InitSummer()
		SummerState = true
		Trigger.AfterDelay(1, function()
			Trigger.AfterDelay(66, function()
				JetskyCreator()
			end)
			Trigger.AfterDelay(666, function()
				VacationerCreator()
			end)
			Trigger.AfterDelay(Utils.RandomInteger(124, 186), function()
				Media.DisplayMessage(YearCount .. "'s Summer, " .. tostring(MonthCountName) .. " | " .. tostring(DateDayCount) .. " / " .. tostring(DayCountName), "[Date-Time] ", RandomMainColor)
				Media.PlaySound("mapwipe" .. Utils.Random({ 2, 5 }) .. ".aud")
				Trigger.AfterDelay(DateTime.Seconds(Utils.RandomInteger(1.85, 2.25)), function()
					Media.PlaySound("mapwipe" .. Utils.Random({ 2, 5 }) .. ".aud")
				end)
			end)
		end)
	end
end
InitWinter = function()
	if MonthCount == 4 and WinterState and not SummerState then
		Media.DisplayMessage("Winter is " .. Utils.Random({ "comming", "arrived", "begining" }) .. "!", "[Season-Report]", RandomMainColor)
		WinterState = false
		SummerState = true
		Trigger.AfterDelay(1, function()
			Trigger.AfterDelay(66, function()
				JetskyCreator()
			end)
			Trigger.AfterDelay(666, function()
				VacationerCreator()
			end)
			InitSummer()
			local OceanIces = Map.ActorsInBox(Map.TopLeft, Map.BottomRight, function(self) return self.Owner == ice end)
			Utils.Do(OceanIces, function(o)
				Trigger.AfterDelay(1, function()
					o.Destroy() 
				end)
			end)
		end)
	end
	Trigger.AfterDelay(33, function()
		if WinterState and not SummerState then 
			InitWinter() 
		end
	end)
end
InitSummer = function()
	if MonthCount == 10 and SummerState and not WinterState then
		Media.DisplayMessage("Summer is " .. Utils.Random({ "comming", "arrived", "begining" }) .. "!", "[Season-Report]", RandomMainColor)
		SummerState = false
		WinterState = true
		Trigger.AfterDelay(1, function() 
			Trigger.AfterDelay(66, function()
				OceanIceCreator()
			end)
			InitWinter() 
			local Jetskies = Map.ActorsInBox(Map.TopLeft, Map.BottomRight, function(self) return self.Type == "jetsky" or self.Type == "rubberboat" end)
			Utils.Do(Jetskies, function(j)
				Trigger.AfterDelay(Utils.RandomInteger(22, 44), function() 
					j.Destroy()
				end)
			end)
			local Vacationers = Map.ActorsInBox(Map.TopLeft, Map.BottomRight, function(self) return self.Type == "vacationer1" or self.Type == "vacationer2" or self.Type == "vacationer3" end)
			Utils.Do(Vacationers, function(vac)
				Trigger.AfterDelay(Utils.RandomInteger(22, 44), function()
					vac.Destroy()
				end) 
			end)
			local BeachEnviroments = Map.ActorsInBox(Map.TopLeft, Map.BottomRight, function(self) return self.Type == "camsc02" or self.Type == "camsc03" or self.Type == "camsc04" or self.Type == "camsc05" end)
			Utils.Do(BeachEnviroments, function(be)
				Trigger.AfterDelay(Utils.RandomInteger(22, 44), function()
					be.Destroy()
				end) 
			end)
		end)
	end
	Trigger.AfterDelay(33, function()
		if SummerState and not WinterState then
			InitSummer() 
		end 
	end)
end
-------------------------------------------------------------------
VacationerCreator = function()
	if Vacationercount == VacationerMaxcount and VacationerCreatorState then
		Trigger.AfterDelay(1, function() 
			VacationerCreatorState = false
		end)
	elseif Vacationercount < VacationerMaxcount and SummerState and VacationerCreatorState then
		CreateVacationer()
	end
end
-------------------------------------------------------------------
CreateVacationer = function()
	local VacationResort = Actor.Create("waypoint", true, { Owner = clearpoint, Location = Utils.Random({ RandomBeachWaypoint0.Location, RandomBeachWaypoint1.Location, RandomBeachWaypoint2.Location, RandomBeachWaypoint3.Location, RandomBeachWaypoint4.Location, RandomBeachWaypoint5.Location, RandomBeachWaypoint6.Location, RandomBeachWaypoint7.Location }) })
--	Trigger.OnExitedProximityTrigger(Map.CenterOfCell(VacationResort.Location), WDist.FromCells(4.444), function(a, id)
--		if a.Owner == neutral and (a.Type == "hotdogstand" or a.Type == "vacationer1" or a.Type == "vacationer2" or a.Type == "vacationer3") then
--			if not a.IsDead and a.IsInWorld then
--				a.Move(VacationResort.Location) 
--			end
--		end
--	end)
	local CreateBeachEnviroments = Actor.Create("camsc0" .. Utils.RandomInteger(2, 5), true, { Owner = neutral, Location = VacationResort.Location + CVec.New(Utils.RandomInteger(-1, 1), Utils.RandomInteger(-1, 1)) })
	local CreateBeachEnviromentsB = Actor.Create("camsc0" .. Utils.RandomInteger(2, 5), true, { Owner = neutral, Location = VacationResort.Location + CVec.New(Utils.RandomInteger(-1, 1), Utils.RandomInteger(-1, 1)) })
	local Vacationers = Reinforcements.Reinforce(neutral, { "vacationer" .. Utils.RandomInteger(1, 3), "vacationer" .. Utils.RandomInteger(1, 3), "vacationer" .. Utils.RandomInteger(1, 3) }, { VacationResort.Location }, Utils.RandomInteger(66, 99))
	Utils.Do(Vacationers, function(Vacationer)
		Vacationer.GrantUpgrade("nocontrol")
		Vacationer.GrantUpgrade("autocontrol")
		Vacationer.GrantUpgrade("wandering")
		Vacationer.Stance = "HoldFire"
		Trigger.OnIdle(Vacationer, function()
			if Vacationer.Location == VacationResort.Location then
				if not Vacationer.IsDead and Vacationer.IsInWorld then Vacationer.Scatter() end
				if not Vacationer.IsDead and Vacationer.IsInWorld then Vacationer.Scatter() end
				if not Vacationer.IsDead and Vacationer.IsInWorld then Vacationer.Scatter() end
			else
				if not Vacationer.IsDead and Vacationer.IsInWorld then Vacationer.Move(VacationResort.Location) end
			end
		end)
	end)
	Vacationercount = Vacationercount + 1
	if Vacationercount < VacationerMaxcount and SummerState and VacationerCreatorState then VacationerCreator() end
end
-------------------------------------------------------------------
JetskyCreator = function()
	if Jetskycount == JetskyMaxcount and JetskyCreatorState then
		Trigger.AfterDelay(1, function() 
			JetskyCreatorState = false
		end)
	elseif Jetskycount < JetskyMaxcount and SummerState and JetskyCreatorState then
		CreateJetsky()
	end
end
-------------------------------------------------------------------
CreateJetsky = function()
	local Jetsky = Actor.Create(Utils.Random({ "jetsky", "rubberboat" }), true, { Owner = neutral, Location = CPos.New(Utils.RandomInteger(MapSlippedEdgeStartHorizontical, MapSlippedEdgeOverHorizontical), Utils.RandomInteger(MapSlippedEdgeStartVertical, MapSlippedEdgeOverVertical)) })
	local JetskyPassengerType = Utils.Random({ "c" .. Utils.RandomInteger(1, 10), "vacationer" .. Utils.RandomInteger(1, 3), "delphi", "vacationer" .. Utils.RandomInteger(1, 3), "policeman", "vacationer" .. Utils.RandomInteger(1, 3), "vacationer" .. Utils.RandomInteger(1, 3), "pilot" })
	local JetskyPassenger = JetskyPassengerType
	LoadTransport(Jetsky, JetskyPassenger)
	Jetsky.GrantUpgrade("nocontrol")
	Jetsky.GrantUpgrade("autocontrol")
	Jetsky.GrantUpgrade("wandering")
	Jetsky.Stance = "HoldFire"
	Jetskycount = Jetskycount + 1
	if Jetskycount < JetskyMaxcount and SummerState and JetskyCreatorState then JetskyCreator() end
end
-------------------------------------------------------------------
OceanIceCreator = function()
	if OceanIcecount == OceanIceMaxcount and OceanIceCreatorState then
		Trigger.AfterDelay(1, function() 
			OceanIceCreatorState = false
		end)
	elseif OceanIcecount < OceanIceMaxcount and WinterState and OceanIceCreatorState then
		CreateOceanIce()
	end
end
-------------------------------------------------------------------
CreateOceanIce = function()
	local OceanIce = Actor.Create("floatingice0" .. Utils.RandomInteger(1, 5) .. "." .. Utils.Random({ 12, 25, 50, 75, 90 }) .. "alpha", true, { Owner = ice, Location = CPos.New(Utils.RandomInteger(MapSlippedEdgeStartHorizontical, MapSlippedEdgeOverHorizontical), Utils.RandomInteger(MapSlippedEdgeStartVertical, MapSlippedEdgeOverVertical)) })
	OceanIce.Stance = "HoldFire"
	OceanIce.GrantUpgrade("nocontrol")
	OceanIce.GrantUpgrade("autocontrol")
	OceanIce.GrantUpgrade("wandering")
	OceanIcecount = OceanIcecount + 1
	if OceanIcecount < OceanIceMaxcount and WinterState and OceanIceCreatorState then OceanIceCreator() end
end
-------------------------------------------------------------------
