void ShowSidebar(Client player, string[] cmd, int iarg) { if (cmd.Length <= iarg) { throw new ShowHelpException(); } string setting = cmd [iarg].ToLowerInvariant(); if (setting == "off") { player.Settings.ShowRegionScoreboard = false; player.Score = null; player.TellSystem(Chat.Purple, "Region reporting off"); return; } if (setting == "on") { player.Settings.ShowRegionScoreboard = true; ScoreboardRegionManager.UpdateRegion(player); player.TellSystem(Chat.Purple, "Region reporting on"); return; } }
/// <summary> /// Find region and send message /// </summary> internal static void SetRegion(WorldSession session) { RegionList regions = session.World.Regions; if (regions == null) { return; } try { //This is called every single player movement, 20 times a second, some optimization might be needed. WorldRegion w = null; //First test if we are in the same as before WorldRegion current = session.CurrentRegion; if (current != null) { if (current.Deleted == false && current.Contains(session.Position)) { w = GetRegion(current.SubRegions, session.Position, session.Dimension); if (w == null) { w = current; } } } if (w == null) { w = GetRegion(regions.List, session.Position, session.Dimension); } //Debug.Write("Setregion: " + w); //If different if (session.CurrentRegion != w) { //Leaving if (session.CurrentRegion != null && (session.CurrentRegion.HasChild(w) == false)) { session.CurrentRegion.Leaving(session.Player, w); } //Entering if (w != null && w.HasChild(session.CurrentRegion) == false) { w.Entering(session.Player); } //Stats SetStats(session.CurrentRegion, session.Player); SetStats(w, session.Player); } //Adjust Survival/Adventure mode if (session.Mode != GameMode.Creative && session.Mode != GameMode.Spectator) { bool protect = Protected.IsBlockProtected(session, w); if (protect && w.IsResident(session.Player)) { protect = false; } if (protect) { session.SetMode(GameMode.Adventure); } else { session.SetMode(GameMode.Survival); } } if (w != null && w.Type == WarpZone.Type) { if (session.Mode != GameMode.Creative) { WarpZone wz = new WarpZone(w.Name); session.Player.Warp(wz.Destination, (Dimensions)wz.DestinationDimension, wz.DesinationWorld); } } bool update = (w != session.CurrentRegion); session.CurrentRegion = w; if (update) { ScoreboardRegionManager.UpdateRegion(session.Player); } #if !DEBUG } catch (Exception e) { Log.WriteServer(e); return; #endif } finally { } }