Currently, I have to unvanish/revanish when I reconnect -- would be handy to have it restore your noclip state along with vanish state perhaps?

Tracking the state:

private List<ulong> _noclipOffline = new List<ulong>();​


On disconnect: 
private void OnPlayerDisconnected(BasePlayer player, string reason)
{
if (!IsInvisible(player)) return;

if (player.IsFlying)
{
if (!_noclipOffline.Contains(player.userID))
_noclipOffline.Add(player.userID);
}
else
{
_noclipOffline.Remove(player.userID);
}

// ... rest of the method
}​


On Reconnect:
private void OnPlayerConnected(BasePlayer player)
{
if (_hiddenOffline.Contains(player.userID))
{
_hiddenOffline.Remove(player.userID);
if (HasPerm(player.UserIDString, PermAllow))
Disappear(player);
return;
}
if (_noclipOffline.Contains(player.userID))
{
_noclipOffline.Remove(player.userID);
if (HasPerm(player.UserIDString, PermAllow))
player.SendConsoleCommand("noclip");
return;
}
if (HasPerm(player.UserIDString, PermVanish))
{
Disappear(player);
}
}
​

Save/Load:
private void LoadData()
{
// ... rest of the method

try
{
_noclipOffline = _noclipOfflineData.ReadObject<List<ulong>>();
}
catch
{
_noclipOffline = new List<ulong>();
}
}

private void SaveData()
{
// ... rest of the method

_noclipOfflineData.WriteObject(_noclipOffline);
}

​