using Server;
using Server.Commands;
using Server.Mobiles;
namespace Xanthos.Interfaces
{
///
/// This interface is implemented by clients of ShrinkTarget allowing the ShrinkTarget
/// to adjust the charges of tools without requiring they have the same base class.
///
public interface IShrinkTool : IEntity
{
bool DeleteWhenEmpty { get; set; }
int ShrinkCharges { get; set; }
}
///
/// Used by the auction system to validate the pet referred to by a shrink item.
///
public interface IShrinkItem : IEntity
{
BaseCreature ShrunkenPet { get; }
}
}
namespace Xanthos.ShrinkSystem
{
public class Shrink
{
public static bool LockDown { get; set; }
public static void Configure()
{
EventSink.WorldSave += e => Persistence.Serialize("Saves/Misc/ShrinkCommands.bin", Serialize);
EventSink.WorldLoad += () => Persistence.Deserialize("Saves/Misc/ShrinkCommands.bin", Deserialize);
}
private static void Serialize(GenericWriter writer)
{
writer.Write(0);
writer.Write(LockDown);
}
private static void Deserialize(GenericReader reader)
{
reader.ReadInt();
LockDown = reader.ReadBool();
}
public static void Initialize()
{
CommandHandlers.Register("Shrink", AccessLevel.GameMaster, Shrink_OnCommand);
CommandHandlers.Register("ShrinkLockDown", AccessLevel.Administrator, ShrinkLockDown_OnCommand);
CommandHandlers.Register("ShrinkRelease", AccessLevel.Administrator, ShrinkRelease_OnCommand);
}
[Usage("Shrink")]
[Description("Shrinks a creature.")]
private static void Shrink_OnCommand(CommandEventArgs e)
{
ShrinkTarget.Begin(e.Mobile, null);
}
[Usage("ShrinkLockDown")]
[Description("Disables all shrinkitems in the world.")]
private static void ShrinkLockDown_OnCommand(CommandEventArgs e)
{
SetLockDown(true);
}
[Usage("ShrinkRelease")]
[Description("Re-enables all disabled shrink items in the world.")]
private static void ShrinkRelease_OnCommand(CommandEventArgs e)
{
SetLockDown(false);
}
private static void SetLockDown(bool lockDown)
{
LockDown = lockDown;
if (LockDown)
{
World.Broadcast(0x22, true, "A server wide pet shrink lockout has initiated.");
World.Broadcast(0x22, true, "All shrunken pets will remain in their state until further notice.");
}
else
{
World.Broadcast(0x35, true, "The server wide pet shrink lockout has been lifted.");
World.Broadcast(0x35, true, "You may once again unshrink pets.");
}
}
}
}