Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
277
Scripts/Items/Tools/StaffOrb.cs
Normal file
277
Scripts/Items/Tools/StaffOrb.cs
Normal file
@@ -0,0 +1,277 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using CustomsFramework;
|
||||
using Server.ContextMenus;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
/// <summary>
|
||||
/// David O'Hara
|
||||
/// 08-13-2004
|
||||
/// Version 3.0
|
||||
/// This orb allows staff to switch between a Player access level and their current staff level.
|
||||
/// It also sets the mortality as appropriate for staff.
|
||||
/// A home location can be set/used thru the context menu.
|
||||
/// Will auto resurrect it's owner on death.
|
||||
/// </summary>
|
||||
public class StaffOrb : Item
|
||||
{
|
||||
public Point3D m_HomeLocation;
|
||||
public Map m_HomeMap;
|
||||
private Mobile m_Owner;
|
||||
private AccessLevel m_StaffLevel;
|
||||
private bool m_AutoRes = true;
|
||||
[Constructable]
|
||||
public StaffOrb()
|
||||
: base(0x0E2F)
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
Weight = 0;
|
||||
Name = "Unassigned Staff Orb";
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public StaffOrb(Mobile player)
|
||||
: base(0x0E2F)
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
Weight = 0;
|
||||
m_Owner = player;
|
||||
Name = player.Name + "'s Staff Orb";
|
||||
}
|
||||
|
||||
public StaffOrb(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
|
||||
public Point3D HomeLocation
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_HomeLocation;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_HomeLocation = value;
|
||||
}
|
||||
}
|
||||
[CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
|
||||
public Map HomeMap
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_HomeMap;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_HomeMap = value;
|
||||
}
|
||||
}
|
||||
[CommandProperty(AccessLevel.Counselor)]
|
||||
public bool AutoRes
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_AutoRes;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_AutoRes = value;
|
||||
}
|
||||
}
|
||||
public static void GetContextMenuEntries(Mobile from, Item item, List<ContextMenuEntry> list)
|
||||
{
|
||||
list.Add(new GoHomeEntry(from, item));
|
||||
list.Add(new SetHomeEntry(from, item));
|
||||
}
|
||||
|
||||
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
|
||||
{
|
||||
if (m_Owner == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Owner != from)
|
||||
{
|
||||
from.SendMessage("This is not yours to use.");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
base.GetContextMenuEntries(from, list);
|
||||
StaffOrb.GetContextMenuEntries(from, this, list);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override DeathMoveResult OnInventoryDeath(Mobile parent)
|
||||
{
|
||||
if (m_AutoRes && parent == m_Owner)
|
||||
{
|
||||
SwitchAccessLevels(parent);
|
||||
new AutoResTimer(parent).Start();
|
||||
}
|
||||
return base.OnInventoryDeath(parent);
|
||||
}
|
||||
|
||||
|
||||
public override void OnDoubleClickDead(Mobile from)
|
||||
{
|
||||
if (m_Owner == from)
|
||||
{
|
||||
OnDoubleClick(from);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnDoubleClickDead(from);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
// set owner if not already set -- this is only done the first time.
|
||||
if (m_Owner == null)
|
||||
{
|
||||
m_Owner = from;
|
||||
Name = m_Owner.Name.ToString() + "'s Staff Orb";
|
||||
HomeLocation = from.Location;
|
||||
HomeMap = from.Map;
|
||||
from.SendMessage("This orb has been assigned to you.");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Owner != from)
|
||||
{
|
||||
from.SendMessage("This is not your's to use.");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
SwitchAccessLevels(from);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)3); // version
|
||||
|
||||
// version 3
|
||||
writer.Write(m_AutoRes);
|
||||
|
||||
// version 2
|
||||
writer.Write(m_HomeLocation);
|
||||
writer.Write(m_HomeMap);
|
||||
|
||||
writer.Write(m_Owner);
|
||||
writer.WriteEncodedInt((int)m_StaffLevel);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
switch ( version )
|
||||
{
|
||||
case 3:
|
||||
{
|
||||
m_AutoRes = reader.ReadBool();
|
||||
goto case 2;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
m_HomeLocation = reader.ReadPoint3D();
|
||||
m_HomeMap = reader.ReadMap();
|
||||
goto case 1;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
m_Owner = reader.ReadMobile();
|
||||
m_StaffLevel = (AccessLevel)reader.ReadEncodedInt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SwitchAccessLevels(Mobile from)
|
||||
{
|
||||
// check current access level
|
||||
if (Utilities.IsPlayer(from))
|
||||
{
|
||||
// return to staff status
|
||||
from.AccessLevel = m_StaffLevel;
|
||||
from.Blessed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_StaffLevel = from.AccessLevel;
|
||||
from.AccessLevel = AccessLevel.Player;
|
||||
from.Blessed = false;
|
||||
}
|
||||
}
|
||||
|
||||
private class GoHomeEntry : ContextMenuEntry
|
||||
{
|
||||
private readonly StaffOrb m_Item;
|
||||
private readonly Mobile m_Mobile;
|
||||
public GoHomeEntry(Mobile from, Item item)
|
||||
: base(5134)// uses "Goto Loc" entry
|
||||
{
|
||||
m_Item = (StaffOrb)item;
|
||||
m_Mobile = from;
|
||||
}
|
||||
|
||||
public override void OnClick()
|
||||
{
|
||||
// go to home location
|
||||
m_Mobile.Location = m_Item.HomeLocation;
|
||||
if (m_Item.HomeMap != null)
|
||||
m_Mobile.Map = m_Item.HomeMap;
|
||||
}
|
||||
}
|
||||
|
||||
private class SetHomeEntry : ContextMenuEntry
|
||||
{
|
||||
private readonly StaffOrb m_Item;
|
||||
private readonly Mobile m_Mobile;
|
||||
public SetHomeEntry(Mobile from, Item item)
|
||||
: base(2055)// uses "Mark" entry
|
||||
{
|
||||
m_Item = (StaffOrb)item;
|
||||
m_Mobile = from;
|
||||
}
|
||||
|
||||
public override void OnClick()
|
||||
{
|
||||
// set home location
|
||||
m_Item.HomeLocation = m_Mobile.Location;
|
||||
m_Item.HomeMap = m_Mobile.Map;
|
||||
m_Mobile.SendMessage("The home location on your orb has been set to your current position.");
|
||||
}
|
||||
}
|
||||
|
||||
private class AutoResTimer : Timer
|
||||
{
|
||||
private readonly Mobile m_Mobile;
|
||||
public AutoResTimer(Mobile mob)
|
||||
: base(TimeSpan.FromSeconds(5.0))
|
||||
{
|
||||
m_Mobile = mob;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
m_Mobile.Resurrect();
|
||||
m_Mobile.SendMessage("...How in the hell did you manage to die? You're a staff member!");
|
||||
Stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user