Files
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

157 lines
4.5 KiB
C#

using System;
using System.Text;
using Server;
using Server.Targeting;
using Server.Commands;
using Server.Commands.Generic;
namespace Server.Items
{
public class ItemFlags
{
public const int StealableFlag = 0x00200000;
public const int TakenFlag = 0x00100000;
public static void Initialize()
{
CommandSystem.Register( "Stealable", AccessLevel.GameMaster, new CommandEventHandler( SetStealable_OnCommand ) );
CommandSystem.Register( "Flag", AccessLevel.GameMaster, new CommandEventHandler( GetFlag_OnCommand ) );
}
public static void SetStealable(Item target, bool value)
{
if(target != null)
target.SetSavedFlag( StealableFlag, value);
}
public static bool GetStealable(Item target)
{
if(target != null)
return target.GetSavedFlag(StealableFlag);
else
return false;
}
public static void SetTaken(Item target, bool value)
{
if(target != null)
{
target.SetSavedFlag( TakenFlag, value);
}
}
public static bool GetTaken(Item target)
{
if(target != null)
return target.GetSavedFlag(TakenFlag);
else
return false;
}
[Usage( "Flag flagfield" )]
[Description( "Gets the state of the specified SavedFlag on any item" )]
public static void GetFlag_OnCommand( CommandEventArgs e )
{
int flag=0;
bool error = false;
if( e.Arguments.Length > 0 )
{
if(e.Arguments[0].StartsWith( "0x" ))
{
try{flag = Convert.ToInt32( e.Arguments[0].Substring( 2 ), 16 ); } catch { error = true;}
} else
{
try{flag = int.Parse(e.Arguments[0]); } catch { error = true;}
}
}
if(!error)
{
e.Mobile.Target = new GetFlagTarget(e,flag);
} else
{
try{
e.Mobile.SendMessage(33,"Flag: Bad flagfield argument");
} catch {}
}
}
private class GetFlagTarget : Target
{
private CommandEventArgs m_e;
private int m_flag;
public GetFlagTarget( CommandEventArgs e, int flag) : base ( 30, false, TargetFlags.None )
{
m_e = e;
m_flag = flag;
}
protected override void OnTarget( Mobile from, object targeted )
{
if(targeted is Item)
{
bool state = ((Item)targeted).GetSavedFlag(m_flag);
from.SendMessage("Flag (0x{0:X}) = {1}",m_flag,state);
} else
{
from.SendMessage("Must target an Item");
}
}
}
[Usage( "Stealable [true/false]" )]
[Description( "Sets/gets the stealable flag on any item" )]
public static void SetStealable_OnCommand( CommandEventArgs e )
{
bool state = false;
bool error = false;
if( e.Arguments.Length > 0 ){
try{state = bool.Parse(e.Arguments[0]); } catch { error = true;}
}
if(!error)
{
e.Mobile.Target = new SetStealableTarget(e, state);
}
}
private class SetStealableTarget : Target
{
private CommandEventArgs m_e;
private bool m_state;
private bool set = false;
public SetStealableTarget( CommandEventArgs e, bool state) : base ( 30, false, TargetFlags.None )
{
m_e = e;
m_state = state;
if( e.Arguments.Length > 0 )
{
set = true;
}
}
protected override void OnTarget( Mobile from, object targeted )
{
if(targeted is Item)
{
if(set)
{
SetStealable(((Item)targeted), m_state);
}
bool state = GetStealable((Item)targeted);
from.SendMessage("Stealable = {0}",state);
} else
{
from.SendMessage("Must target an Item");
}
}
}
}
}