Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
163
Scripts/Services/XmlSpawner/XMLSpawner Support/StaffCloak.cs
Normal file
163
Scripts/Services/XmlSpawner/XMLSpawner Support/StaffCloak.cs
Normal file
@@ -0,0 +1,163 @@
|
||||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
/*
|
||||
** Allows staff to quickly switch between player and their assigned staff levels by equipping or removing the cloak
|
||||
** Also allows instant teleportation to a specified destination when double-clicked by the staff member.
|
||||
*/
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class StaffCloak : Cloak
|
||||
{
|
||||
|
||||
private AccessLevel m_StaffLevel;
|
||||
private Point3D m_HomeLoc;
|
||||
private Map m_HomeMap;
|
||||
|
||||
[CommandProperty( AccessLevel.Administrator )]
|
||||
public AccessLevel StaffLevel {
|
||||
get
|
||||
{
|
||||
return m_StaffLevel;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_StaffLevel = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public Point3D HomeLoc { get { return m_HomeLoc;} set { m_HomeLoc = value;} }
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public Map HomeMap { get { return m_HomeMap;} set { m_HomeMap = value;} }
|
||||
|
||||
public override void GetProperties( ObjectPropertyList list )
|
||||
{
|
||||
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add( 1060658, "Level\t{0}", StaffLevel ); // ~1_val~: ~2_val~
|
||||
|
||||
}
|
||||
|
||||
#if(NEWPARENT)
|
||||
public override void OnAdded(IEntity parent)
|
||||
#else
|
||||
public override void OnAdded(object parent)
|
||||
#endif
|
||||
{
|
||||
base.OnAdded( parent );
|
||||
|
||||
// delete this if someone without the necessary access level picks it up or tries to equip it
|
||||
if(RootParent is Mobile)
|
||||
{
|
||||
if (((Mobile) RootParent).AccessLevel != StaffLevel)
|
||||
{
|
||||
Delete();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// when equipped, change access level to player
|
||||
if ( parent is Mobile )
|
||||
{
|
||||
Mobile m =(Mobile) parent;
|
||||
|
||||
if (m.AccessLevel == StaffLevel)
|
||||
{
|
||||
m.AccessLevel = AccessLevel.Player;
|
||||
// and make vuln
|
||||
m.Blessed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if(NEWPARENT)
|
||||
public override void OnRemoved( IEntity parent )
|
||||
#else
|
||||
public override void OnRemoved( object parent )
|
||||
#endif
|
||||
{
|
||||
base.OnRemoved( parent );
|
||||
|
||||
// restore access level to the specified level
|
||||
if ( parent is Mobile && !Deleted)
|
||||
{
|
||||
Mobile m = (Mobile) parent;
|
||||
|
||||
// restore their assigned staff level
|
||||
m.AccessLevel = StaffLevel;
|
||||
// and make invuln
|
||||
m.Blessed = true;
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
if(from == null) return;
|
||||
|
||||
if(HomeMap != Map.Internal && HomeMap != null && from.AccessLevel == StaffLevel)
|
||||
{
|
||||
// teleport them to the specific location
|
||||
from.MoveToWorld(HomeLoc, HomeMap);
|
||||
}
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public StaffCloak() : base()
|
||||
{
|
||||
|
||||
StaffLevel= AccessLevel.Administrator; // assign admin staff level by default
|
||||
LootType = LootType.Blessed;
|
||||
Name = "Staff Cloak";
|
||||
Weight = 0;
|
||||
|
||||
}
|
||||
|
||||
public StaffCloak( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
// version
|
||||
writer.Write( (int) 0 );
|
||||
// version 0
|
||||
writer.Write( (int) m_StaffLevel );
|
||||
writer.Write( m_HomeLoc );
|
||||
string mapname = null;
|
||||
if(m_HomeMap != null)
|
||||
{
|
||||
mapname = m_HomeMap.Name;
|
||||
}
|
||||
writer.Write( mapname );
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch(version)
|
||||
{
|
||||
case 0:
|
||||
m_StaffLevel = (AccessLevel)reader.ReadInt();
|
||||
m_HomeLoc = reader.ReadPoint3D();
|
||||
string mapname = reader.ReadString();
|
||||
|
||||
try{
|
||||
m_HomeMap = Map.Parse(mapname);
|
||||
} catch{}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user