- PreventInaccess class, moves staff characters to jail or green acres in Felucca or Trammel randomly if they disconnect during the login process.
- Added a [TileAvg command, which tiles items/mobiles on the average Z of the map instead of a fixed Z. - For all the tile commands ([Tile, [TileRXYZ, [TileXYZ, [TileZ, [TileAvg), added outline commands to only put items/mobiles on the outside of the area ([Outline, [OutlineRXYZ, [OutlineXYZ, [OutlineZ, [OutlineAvg). - Removed the [OpenBrowser confirmation messages when using the command on multiple mobiles at the same time. - Added a label showing the type of the object currently being viewed to the top of the properties gump. - Added SA skills (Mysticism, Throwing and Imbuing) to the [Skills gump. - Fixed DeathRobe decay when automatically dropped by self looting your corpse. - Removed the (summoned) property on mouseover from clones summoned through Mirror Image. - The Z of the Magincia destination of the public moongates is now calculated when the server starts, so both old and new maps will have the correct Z (34 and 31 respectively). - KeywordTeleporters no longer teleport if you're not within the trigger range when the delay ends. - Added WaitTeleporter, which is a KeywordTeleporter supporting adding messages when a character starts the process and showing the remaining time. When a character logs and times out, any running teleport timer is stopped. - Fixed BaseWaterContainer single click behavior. - Fixed MageAI reveal behavior. - House placement will now return the correct message when targeting inside a TempNoHousingRegion. - Tracking will no longer be able to track characters with higher access after they hide. - Added CorpseNameOverride to BaseCreature to override the name used for the generated corpse. - Pet ghosts will no longer be deleted when (auto)stabled.
This commit is contained in:
parent
68922c1eeb
commit
72c4dc6018
15 changed files with 685 additions and 155 deletions
93
Scripts/SpecialSystems/Engines/PreventInaccess.cs
Normal file
93
Scripts/SpecialSystems/Engines/PreventInaccess.cs
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
|
||||
namespace Server.Misc
|
||||
{
|
||||
/*
|
||||
* This system prevents the inability for server staff to
|
||||
* access their server due to data overflows during login.
|
||||
*
|
||||
* Whenever a staff character's NetState is disposed right after
|
||||
* the login process, the character is moved to and logged out
|
||||
* at a "safe" alternative.
|
||||
*
|
||||
* The location the character was moved from will be reported
|
||||
* to the player upon the next successful login.
|
||||
*
|
||||
* This system does not affect non-staff players.
|
||||
*/
|
||||
public static class PreventInaccess
|
||||
{
|
||||
public static readonly bool Enabled = true;
|
||||
|
||||
private static readonly LocationInfo[] m_Destinations = new LocationInfo[]
|
||||
{
|
||||
new LocationInfo( new Point3D( 5275, 1163, 0 ), Map.Felucca ), // Jail
|
||||
new LocationInfo( new Point3D( 5275, 1163, 0 ), Map.Trammel ),
|
||||
new LocationInfo( new Point3D( 5445, 1153, 0 ), Map.Felucca ), // Green acres
|
||||
new LocationInfo( new Point3D( 5445, 1153, 0 ), Map.Trammel )
|
||||
};
|
||||
|
||||
private static Dictionary<Mobile, LocationInfo> m_MoveHistory;
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
m_MoveHistory = new Dictionary<Mobile, LocationInfo>();
|
||||
|
||||
if ( Enabled )
|
||||
EventSink.Login += new LoginEventHandler( OnLogin );
|
||||
}
|
||||
|
||||
public static void OnLogin( LoginEventArgs e )
|
||||
{
|
||||
Mobile from = e.Mobile;
|
||||
|
||||
if ( from == null || from.AccessLevel < AccessLevel.Counselor )
|
||||
return;
|
||||
|
||||
if ( HasDisconnected( from ) )
|
||||
{
|
||||
if ( !m_MoveHistory.ContainsKey( from ) )
|
||||
m_MoveHistory[from] = new LocationInfo( from.Location, from.Map );
|
||||
|
||||
LocationInfo dest = GetRandomDestination();
|
||||
|
||||
from.Location = dest.Location;
|
||||
from.Map = dest.Map;
|
||||
}
|
||||
else if ( m_MoveHistory.ContainsKey( from ) )
|
||||
{
|
||||
LocationInfo orig = m_MoveHistory[from];
|
||||
from.SendMessage( "Your character was moved from {0} ({1}) due to a detected client crash.", orig.Location, orig.Map );
|
||||
|
||||
m_MoveHistory.Remove( from );
|
||||
}
|
||||
}
|
||||
|
||||
private static bool HasDisconnected( Mobile m )
|
||||
{
|
||||
return ( m.NetState == null || m.NetState.Socket == null );
|
||||
}
|
||||
|
||||
private static LocationInfo GetRandomDestination()
|
||||
{
|
||||
return m_Destinations[Utility.Random( m_Destinations.Length )];
|
||||
}
|
||||
|
||||
private class LocationInfo
|
||||
{
|
||||
private Point3D m_Location;
|
||||
private Map m_Map;
|
||||
|
||||
public Point3D Location { get { return m_Location; } }
|
||||
public Map Map { get { return m_Map; } }
|
||||
|
||||
public LocationInfo( Point3D loc, Map map )
|
||||
{
|
||||
m_Location = loc;
|
||||
m_Map = map;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue