/// <summary> /// Projected to run at a reasonable rate for gameplay (30-60fps) /// </summary> public static bool UpdateGameWorld() { if (updateGameWorldRateLimiter.GetSecondsToWaitBeforeNextEvent() > 0) { return(false); } updateGameWorldRateLimiter.RegisterEvent(); UpdateGameWorld5MinRM.RegisterEventStart(); UpdateGameWorld60MinRM.RegisterEventStart(); // update positions through physics engine var movedObjects = HandlePhysics(Timers.PortalYearTicks); // iterate through objects that have changed landblocks foreach (var movedObject in movedObjects) { // NOTE: The object's Location can now be null, if a player logs out, or an item is picked up if (movedObject.Location == null) { continue; } // assume adjacency move here? LandblockManager.RelocateObjectForPhysics(movedObject, true); } // Tick all of our Landblocks and WorldObjects var activeLandblocks = LandblockManager.GetActiveLandblocks(); foreach (var landblock in activeLandblocks) { landblock.Tick(Time.GetUnixTime()); } // clean up inactive landblocks LandblockManager.UnloadLandblocks(); UpdateGameWorld5MinRM.RegisterEventEnd(); UpdateGameWorld60MinRM.RegisterEventEnd(); if (UpdateGameWorld5MinRM.TotalSeconds > 300) { UpdateGameWorld5MinRM.ClearEventHistory(); UpdateGameWorld5MinLastReset = DateTime.UtcNow; } if (UpdateGameWorld60MinRM.TotalSeconds > 3600) { UpdateGameWorld60MinRM.ClearEventHistory(); UpdateGameWorld60MinLastReset = DateTime.UtcNow; } HouseManager.Tick(); return(true); }
/// <summary> /// Projected to run at a reasonable rate for gameplay (30-60fps) /// </summary> public static bool UpdateGameWorld() { if (updateGameWorldRateLimiter.GetSecondsToWaitBeforeNextEvent() > 0) { return(false); } updateGameWorldRateLimiter.RegisterEvent(); ServerPerformanceMonitor.RegisterEventStart(ServerPerformanceMonitor.MonitorType.UpdateGameWorld_Entire); // update positions through physics engine ServerPerformanceMonitor.RegisterEventStart(ServerPerformanceMonitor.MonitorType.UpdateGameWorld_HandlePhysics); var movedObjects = HandlePhysics(Timers.PortalYearTicks); ServerPerformanceMonitor.RegisterEventEnd(ServerPerformanceMonitor.MonitorType.UpdateGameWorld_HandlePhysics); // iterate through objects that have changed landblocks ServerPerformanceMonitor.RegisterEventStart(ServerPerformanceMonitor.MonitorType.UpdateGameWorld_RelocateObjectForPhysics); foreach (var movedObject in movedObjects) { // NOTE: The object's Location can now be null, if a player logs out, or an item is picked up if (movedObject.Location == null) { continue; } // assume adjacency move here? LandblockManager.RelocateObjectForPhysics(movedObject, true); } ServerPerformanceMonitor.RegisterEventEnd(ServerPerformanceMonitor.MonitorType.UpdateGameWorld_RelocateObjectForPhysics); // Tick all of our Landblocks and WorldObjects ServerPerformanceMonitor.RegisterEventStart(ServerPerformanceMonitor.MonitorType.UpdateGameWorld_landblock_Tick); var loadedLandblocks = LandblockManager.GetLoadedLandblocks(); foreach (var landblock in loadedLandblocks) { landblock.Tick(Time.GetUnixTime()); } ServerPerformanceMonitor.RegisterEventEnd(ServerPerformanceMonitor.MonitorType.UpdateGameWorld_landblock_Tick); // clean up inactive landblocks LandblockManager.UnloadLandblocks(); HouseManager.Tick(); ServerPerformanceMonitor.RegisterEventEnd(ServerPerformanceMonitor.MonitorType.UpdateGameWorld_Entire); return(true); }
/// <summary> /// Projected to run at a reasonable rate for gameplay (30-60fps) /// </summary> public static bool UpdateGameWorld() { if (updateGameWorldRateLimiter.GetSecondsToWaitBeforeNextEvent() > 0) { return(false); } updateGameWorldRateLimiter.RegisterEvent(); ServerPerformanceMonitor.RegisterEventStart(ServerPerformanceMonitor.MonitorType.UpdateGameWorld_Entire); LandblockManager.Tick(Timers.PortalYearTicks); HouseManager.Tick(); ServerPerformanceMonitor.RegisterEventEnd(ServerPerformanceMonitor.MonitorType.UpdateGameWorld_Entire); return(true); }
/// <summary> /// Called when a character is initially deleted on the character select screen /// </summary> public static void HandlePlayerDelete(uint characterGuid) { AllegianceManager.HandlePlayerDelete(characterGuid); HouseManager.HandlePlayerDelete(characterGuid); }