- Ore bought from faction ore vendors is no longer randomly sized.

- Ore is no longer a deedable commodity.
- Added StaffOnly condition to ConditionTeleporter.
- Account/IAccount now compares greater than null.
- General BaseOre cleanup.
- Fixed BaseOre smelting bug where any ore over 30k would be discarded.
- Added a 2 tile range check to FishingPole OnDoubleClick.
- Removed redundant checks from BaseAxe OnDoubleClick.
- General SkillCheck cleanup.
- Fixed a typo in SkillMod.
- Added CommandProperty to Mobile NetState.
- Implemented IComparable for NetState.
This commit is contained in:
eos 2012-07-29 02:41:00 +00:00
parent 24eca5c9c8
commit 3f4a2c4dc8
10 changed files with 148 additions and 123 deletions

View file

@ -1186,7 +1186,7 @@ namespace Server.Accounting
public int CompareTo( Account other ) public int CompareTo( Account other )
{ {
if ( other == null ) if ( other == null )
return -1; return 1;
return m_Username.CompareTo( other.m_Username ); return m_Username.CompareTo( other.m_Username );
} }
@ -1194,7 +1194,7 @@ namespace Server.Accounting
public int CompareTo( IAccount other ) public int CompareTo( IAccount other )
{ {
if ( other == null ) if ( other == null )
return -1; return 1;
return m_Username.CompareTo( other.Username ); return m_Username.CompareTo( other.Username );
} }

View file

@ -48,6 +48,8 @@ namespace Server.Factions
public class SBFactionOre : SBInfo public class SBFactionOre : SBInfo
{ {
private static readonly object[] m_FixedSizeArgs = { true };
private List<GenericBuyInfo> m_BuyInfo = new InternalBuyInfo(); private List<GenericBuyInfo> m_BuyInfo = new InternalBuyInfo();
private IShopSellInfo m_SellInfo = new InternalSellInfo(); private IShopSellInfo m_SellInfo = new InternalSellInfo();
@ -63,7 +65,7 @@ namespace Server.Factions
public InternalBuyInfo() public InternalBuyInfo()
{ {
for ( int i = 0; i < 5; ++i ) for ( int i = 0; i < 5; ++i )
Add( new GenericBuyInfo( typeof( IronOre ), 16, 20, 0x19B8, 0 ) ); Add( new GenericBuyInfo( typeof( IronOre ), 16, 20, 0x19B8, 0, m_FixedSizeArgs ) );
} }
} }

View file

@ -69,11 +69,6 @@ namespace Server.Items
break; break;
} }
} }
if ( m_Commodity != null && !( m_Commodity is ICommodity ) ) //Apparently, there may be items out there with this. Funky.
{
Timer.DelayCall( TimeSpan.Zero, this.Delete );
}
} }
public CommodityDeed( Item commodity ) : base( 0x14F0 ) public CommodityDeed( Item commodity ) : base( 0x14F0 )
@ -109,32 +104,56 @@ namespace Server.Items
{ {
base.GetProperties( list ); base.GetProperties( list );
if (m_Commodity != null && m_Commodity is ICommodity) if ( m_Commodity != null )
{ {
list.Add(1060658, "#{0}\t{1}", ((ICommodity)m_Commodity).DescriptionNumber, m_Commodity.Amount); // ~1_val~: ~2_val~ string args;
if ( m_Commodity.Name == null )
args = String.Format( "#{0}\t{1}", ( m_Commodity is ICommodity ) ? ((ICommodity)m_Commodity).DescriptionNumber : m_Commodity.LabelNumber, m_Commodity.Amount );
else
args = String.Format( "{0}\t{1}", m_Commodity.Name, m_Commodity.Amount );
list.Add( 1060658, args ); // ~1_val~: ~2_val~
} }
else else
list.Add(1060748); // unfilled {
list.Add( 1060748 ); // unfilled
}
} }
public override void OnSingleClick( Mobile from ) public override void OnSingleClick( Mobile from )
{ {
base.OnSingleClick( from ); base.OnSingleClick( from );
if ( m_Commodity != null && m_Commodity is ICommodity ) if ( m_Commodity != null )
{
int label;
string labelString;
from.Send(new MessageLocalizedAffix( if ( m_Commodity.Name == null )
{
label = ( m_Commodity is ICommodity ) ? ((ICommodity)m_Commodity).DescriptionNumber : m_Commodity.LabelNumber;
labelString = null;
}
else
{
label = 0;
labelString = m_Commodity.Name;
}
from.Send( new MessageLocalizedAffix(
Serial, Serial,
ItemID, ItemID,
MessageType.Label, MessageType.Label,
0x3B2, 0x3B2,
3, 3,
(m_Commodity.Name == null) ? ((ICommodity)m_Commodity).DescriptionNumber : 0, label,
(m_Commodity.Name != null) ? m_Commodity.Name : null, labelString,
AffixType.Append, AffixType.Append,
String.Format(": {0}", m_Commodity.Amount), String.Format( ": {0}", m_Commodity.Amount ),
null) null )
); );
}
} }
public override void OnDoubleClick( Mobile from ) public override void OnDoubleClick( Mobile from )

View file

@ -909,7 +909,8 @@ namespace Server.Items
DenyPackContents = 0x04, DenyPackContents = 0x04,
DenyHolding = 0x08, DenyHolding = 0x08,
DenyEquipment = 0x10, DenyEquipment = 0x10,
DenyTransformed = 0x20 DenyTransformed = 0x20,
StaffOnly = 0x40
} }
private ConditionFlag m_Flags; private ConditionFlag m_Flags;
@ -956,11 +957,21 @@ namespace Server.Items
set{ SetFlag( ConditionFlag.DenyTransformed, value ); InvalidateProperties(); } set{ SetFlag( ConditionFlag.DenyTransformed, value ); InvalidateProperties(); }
} }
[CommandProperty( AccessLevel.GameMaster )]
public bool StaffOnly
{
get{ return GetFlag( ConditionFlag.StaffOnly ); }
set{ SetFlag( ConditionFlag.StaffOnly, value ); InvalidateProperties(); }
}
public override bool CanTeleport( Mobile m ) public override bool CanTeleport( Mobile m )
{ {
if ( !base.CanTeleport( m ) ) if ( !base.CanTeleport( m ) )
return false; return false;
if ( GetFlag( ConditionFlag.StaffOnly ) && m.AccessLevel < AccessLevel.Counselor )
return false;
if ( GetFlag( ConditionFlag.DenyMounted ) && m.Mounted ) if ( GetFlag( ConditionFlag.DenyMounted ) && m.Mounted )
{ {
m.SendLocalizedMessage( 1077252 ); // You must dismount before proceeding. m.SendLocalizedMessage( 1077252 ); // You must dismount before proceeding.
@ -1048,6 +1059,9 @@ namespace Server.Items
if ( GetFlag( ConditionFlag.DenyTransformed ) ) if ( GetFlag( ConditionFlag.DenyTransformed ) )
props.Append( "<BR>Deny Transformed" ); props.Append( "<BR>Deny Transformed" );
if ( GetFlag( ConditionFlag.StaffOnly ) )
props.Append( "<BR>Staff Only" );
if ( props.Length != 0 ) if ( props.Length != 0 )
{ {
props.Remove( 0, 4 ); props.Remove( 0, 4 );

View file

@ -7,7 +7,7 @@ using Server.Mobiles;
namespace Server.Items namespace Server.Items
{ {
public abstract class BaseOre : Item, ICommodity public abstract class BaseOre : Item
{ {
private CraftResource m_Resource; private CraftResource m_Resource;
@ -18,9 +18,6 @@ namespace Server.Items
set{ m_Resource = value; InvalidateProperties(); } set{ m_Resource = value; InvalidateProperties(); }
} }
int ICommodity.DescriptionNumber { get { return LabelNumber; } }
bool ICommodity.IsDeedable { get { return true; } }
public abstract BaseIngot GetIngot(); public abstract BaseIngot GetIngot();
public override void Serialize( GenericWriter writer ) public override void Serialize( GenericWriter writer )
@ -69,24 +66,26 @@ namespace Server.Items
} }
} }
private static int RandomSize()
{
double rand = Utility.RandomDouble();
if ( rand < 0.12 )
return 0x19B7;
else if ( rand < 0.18 )
return 0x19B8;
else if ( rand < 0.25 )
return 0x19BA;
else
return 0x19B9;
}
public BaseOre( CraftResource resource ) : this( resource, 1 ) public BaseOre( CraftResource resource ) : this( resource, 1 )
{ {
} }
public BaseOre( CraftResource resource, int amount ) : base( Utility.Random( 4 ) ) public BaseOre( CraftResource resource, int amount ) : base( RandomSize() )
{ {
{
double random = Utility.RandomDouble();
if ( 0.12 >= random )
ItemID = 0x19B7;
else if ( 0.18 >= random )
ItemID = 0x19B8;
else if ( 0.25 >= random )
ItemID = 0x19BA;
else
ItemID = 0x19B9;
}
Stackable = true; Stackable = true;
Amount = amount; Amount = amount;
Hue = CraftResources.GetHue( resource ); Hue = CraftResources.GetHue( resource );
@ -136,11 +135,10 @@ namespace Server.Items
{ {
if ( !Movable ) if ( !Movable )
return; return;
if ( RootParent is BaseCreature ) if ( RootParent is BaseCreature )
{ {
from.SendLocalizedMessage( 500447 ); // That is not accessible from.SendLocalizedMessage( 500447 ); // That is not accessible
return;
} }
else if ( from.InRange( this.GetWorldLocation(), 2 ) ) else if ( from.InRange( this.GetWorldLocation(), 2 ) )
{ {
@ -190,13 +188,16 @@ namespace Server.Items
from.SendLocalizedMessage( 501976 ); // The ore is too far away. from.SendLocalizedMessage( 501976 ); // The ore is too far away.
return; return;
} }
#region Combine Ore #region Combine Ore
if ( targeted is BaseOre ) if ( targeted is BaseOre )
{ {
BaseOre ore = (BaseOre)targeted; BaseOre ore = (BaseOre)targeted;
if ( !ore.Movable ) if ( !ore.Movable )
{
return; return;
}
else if ( m_Ore == ore ) else if ( m_Ore == ore )
{ {
from.SendLocalizedMessage( 501972 ); // Select another pile or ore with which to combine this. from.SendLocalizedMessage( 501972 ); // Select another pile or ore with which to combine this.
@ -210,23 +211,28 @@ namespace Server.Items
} }
int worth = ore.Amount; int worth = ore.Amount;
if ( ore.ItemID == 0x19B9 ) if ( ore.ItemID == 0x19B9 )
worth *= 8; worth *= 8;
else if ( ore.ItemID == 0x19B7 ) else if ( ore.ItemID == 0x19B7 )
worth *= 2; worth *= 2;
else else
worth *= 4; worth *= 4;
int sourceWorth = m_Ore.Amount; int sourceWorth = m_Ore.Amount;
if ( m_Ore.ItemID == 0x19B9 ) if ( m_Ore.ItemID == 0x19B9 )
sourceWorth *= 8; sourceWorth *= 8;
else if ( m_Ore.ItemID == 0x19B7 ) else if ( m_Ore.ItemID == 0x19B7 )
sourceWorth *= 2; sourceWorth *= 2;
else else
sourceWorth *= 4; sourceWorth *= 4;
worth += sourceWorth; worth += sourceWorth;
int plusWeight = 0; int plusWeight = 0;
int newID = ore.ItemID; int newID = ore.ItemID;
if ( ore.DefaultWeight != m_Ore.DefaultWeight ) if ( ore.DefaultWeight != m_Ore.DefaultWeight )
{ {
if ( ore.ItemID == 0x19B7 || m_Ore.ItemID == 0x19B7 ) if ( ore.ItemID == 0x19B7 || m_Ore.ItemID == 0x19B7 )
@ -244,33 +250,27 @@ namespace Server.Items
} }
} }
if ( (ore.ItemID == 0x19B9 && worth > 120000) || (( ore.ItemID == 0x19B8 || ore.ItemID == 0x19BA ) && worth > 60000) || (ore.ItemID == 0x19B7 && worth > 30000)) if ( ( ore.ItemID == 0x19B9 && worth > 120000 ) || ( ( ore.ItemID == 0x19B8 || ore.ItemID == 0x19BA ) && worth > 60000 ) || ( ore.ItemID == 0x19B7 && worth > 30000 ) )
{ {
from.SendLocalizedMessage( 1062844 ); // There is too much ore to combine. from.SendLocalizedMessage( 1062844 ); // There is too much ore to combine.
return; return;
} }
else if ( ore.RootParent is Mobile && (plusWeight + ((Mobile)ore.RootParent).Backpack.TotalWeight) > ((Mobile)ore.RootParent).Backpack.MaxWeight ) else if ( ore.RootParent is Mobile && ( plusWeight + ((Mobile)ore.RootParent).Backpack.TotalWeight ) > ((Mobile)ore.RootParent).Backpack.MaxWeight )
{ {
from.SendLocalizedMessage( 501978 ); // The weight is too great to combine in a container. from.SendLocalizedMessage( 501978 ); // The weight is too great to combine in a container.
return; return;
} }
ore.ItemID = newID; ore.ItemID = newID;
if ( ore.ItemID == 0x19B9 ) if ( ore.ItemID == 0x19B9 )
{
ore.Amount = worth / 8; ore.Amount = worth / 8;
m_Ore.Delete();
}
else if ( ore.ItemID == 0x19B7 ) else if ( ore.ItemID == 0x19B7 )
{
ore.Amount = worth / 2; ore.Amount = worth / 2;
m_Ore.Delete();
}
else else
{
ore.Amount = worth / 4; ore.Amount = worth / 4;
m_Ore.Delete();
} m_Ore.Delete();
return; return;
} }
#endregion #endregion
@ -294,14 +294,14 @@ namespace Server.Items
double minSkill = difficulty - 25.0; double minSkill = difficulty - 25.0;
double maxSkill = difficulty + 25.0; double maxSkill = difficulty + 25.0;
if ( difficulty > 50.0 && difficulty > from.Skills[SkillName.Mining].Value ) if ( difficulty > 50.0 && difficulty > from.Skills[SkillName.Mining].Value )
{ {
from.SendLocalizedMessage( 501986 ); // You have no idea how to smelt this strange ore! from.SendLocalizedMessage( 501986 ); // You have no idea how to smelt this strange ore!
return; return;
} }
if ( m_Ore.Amount <= 1 && m_Ore.ItemID == 0x19B7 ) if ( m_Ore.ItemID == 0x19B7 && m_Ore.Amount < 2 )
{ {
from.SendLocalizedMessage( 501987 ); // There is not enough metal-bearing ore in this pile to make an ingot. from.SendLocalizedMessage( 501987 ); // There is not enough metal-bearing ore in this pile to make an ingot.
return; return;
@ -309,66 +309,60 @@ namespace Server.Items
if ( from.CheckTargetSkill( SkillName.Mining, targeted, minSkill, maxSkill ) ) if ( from.CheckTargetSkill( SkillName.Mining, targeted, minSkill, maxSkill ) )
{ {
if ( m_Ore.Amount <= 0 ) int toConsume = m_Ore.Amount;
if ( toConsume <= 0 )
{ {
from.SendLocalizedMessage( 501987 ); // There is not enough metal-bearing ore in this pile to make an ingot. from.SendLocalizedMessage( 501987 ); // There is not enough metal-bearing ore in this pile to make an ingot.
} }
else else
{ {
int amount = m_Ore.Amount; if ( toConsume > 30000 )
if ( m_Ore.Amount > 30000 ) toConsume = 30000;
amount = 30000;
int ingotAmount;
BaseIngot ingot = m_Ore.GetIngot();
if ( m_Ore.ItemID == 0x19B7 ) if ( m_Ore.ItemID == 0x19B7 )
{ {
if ( m_Ore.Amount % 2 == 0 ) ingotAmount = toConsume / 2;
{
amount /= 2; if ( toConsume % 2 != 0 )
m_Ore.Delete(); --toConsume;
}
else
{
amount /= 2;
m_Ore.Amount = 1;
}
} }
else if ( m_Ore.ItemID == 0x19B9 ) else if ( m_Ore.ItemID == 0x19B9 )
{ {
amount *= 2; ingotAmount = toConsume * 2;
m_Ore.Delete();
} }
else else
{ {
amount /= 1; ingotAmount = toConsume;
m_Ore.Delete();
} }
ingot.Amount = amount; BaseIngot ingot = m_Ore.GetIngot();
ingot.Amount = ingotAmount;
m_Ore.Consume( toConsume );
from.AddToBackpack( ingot ); from.AddToBackpack( ingot );
//from.PlaySound( 0x57 ); //from.PlaySound( 0x57 );
from.SendLocalizedMessage( 501988 ); // You smelt the ore removing the impurities and put the metal in your backpack. from.SendLocalizedMessage( 501988 ); // You smelt the ore removing the impurities and put the metal in your backpack.
} }
} }
else if ( m_Ore.Amount < 2 && m_Ore.ItemID == 0x19B9 )
{
from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal.
m_Ore.ItemID = 0x19B8;
}
else if ( m_Ore.Amount < 2 && m_Ore.ItemID == 0x19B8 || m_Ore.ItemID == 0x19BA )
{
from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal.
m_Ore.ItemID = 0x19B7;
}
else else
{ {
if ( m_Ore.Amount < 2 )
{
if ( m_Ore.ItemID == 0x19B9 )
m_Ore.ItemID = 0x19B8;
else
m_Ore.ItemID = 0x19B7;
}
else
{
m_Ore.Amount /= 2;
}
from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal. from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal.
m_Ore.Amount /= 2;
} }
} }
} }
@ -387,6 +381,12 @@ namespace Server.Items
{ {
} }
public IronOre( bool fixedSize ) : this( 1 )
{
if ( fixedSize )
ItemID = 0x19B8;
}
public IronOre( Serial serial ) : base( serial ) public IronOre( Serial serial ) : base( serial )
{ {
} }
@ -405,8 +405,6 @@ namespace Server.Items
int version = reader.ReadInt(); int version = reader.ReadInt();
} }
public override BaseIngot GetIngot() public override BaseIngot GetIngot()
{ {
return new IronIngot(); return new IronIngot();
@ -443,8 +441,6 @@ namespace Server.Items
int version = reader.ReadInt(); int version = reader.ReadInt();
} }
public override BaseIngot GetIngot() public override BaseIngot GetIngot()
{ {
return new DullCopperIngot(); return new DullCopperIngot();
@ -481,8 +477,6 @@ namespace Server.Items
int version = reader.ReadInt(); int version = reader.ReadInt();
} }
public override BaseIngot GetIngot() public override BaseIngot GetIngot()
{ {
return new ShadowIronIngot(); return new ShadowIronIngot();
@ -519,8 +513,6 @@ namespace Server.Items
int version = reader.ReadInt(); int version = reader.ReadInt();
} }
public override BaseIngot GetIngot() public override BaseIngot GetIngot()
{ {
return new CopperIngot(); return new CopperIngot();
@ -557,8 +549,6 @@ namespace Server.Items
int version = reader.ReadInt(); int version = reader.ReadInt();
} }
public override BaseIngot GetIngot() public override BaseIngot GetIngot()
{ {
return new BronzeIngot(); return new BronzeIngot();
@ -595,8 +585,6 @@ namespace Server.Items
int version = reader.ReadInt(); int version = reader.ReadInt();
} }
public override BaseIngot GetIngot() public override BaseIngot GetIngot()
{ {
return new GoldIngot(); return new GoldIngot();
@ -633,8 +621,6 @@ namespace Server.Items
int version = reader.ReadInt(); int version = reader.ReadInt();
} }
public override BaseIngot GetIngot() public override BaseIngot GetIngot()
{ {
return new AgapiteIngot(); return new AgapiteIngot();
@ -671,8 +657,6 @@ namespace Server.Items
int version = reader.ReadInt(); int version = reader.ReadInt();
} }
public override BaseIngot GetIngot() public override BaseIngot GetIngot()
{ {
return new VeriteIngot(); return new VeriteIngot();
@ -709,8 +693,6 @@ namespace Server.Items
int version = reader.ReadInt(); int version = reader.ReadInt();
} }
public override BaseIngot GetIngot() public override BaseIngot GetIngot()
{ {
return new ValoriteIngot(); return new ValoriteIngot();

View file

@ -5,6 +5,7 @@ using Server.Items;
using Server.Engines.Harvest; using Server.Engines.Harvest;
using System.Collections.Generic; using System.Collections.Generic;
using Server.ContextMenus; using Server.ContextMenus;
using Server.Network;
namespace Server.Items namespace Server.Items
{ {
@ -19,7 +20,12 @@ namespace Server.Items
public override void OnDoubleClick( Mobile from ) public override void OnDoubleClick( Mobile from )
{ {
Fishing.System.BeginHarvesting( from, this ); Point3D loc = GetWorldLocation();
if ( !from.InLOS( loc ) || !from.InRange( loc, 2 ) )
from.LocalOverheadMessage( MessageType.Regular, 0x3E9, 1019045 ); // I can't reach that
else
Fishing.System.BeginHarvesting( from, this );
} }
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list ) public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )

View file

@ -80,25 +80,20 @@ namespace Server.Items
public override void OnDoubleClick( Mobile from ) public override void OnDoubleClick( Mobile from )
{ {
if ( HarvestSystem == null || Deleted ) if ( HarvestSystem == null )
return; return;
Point3D loc = this.GetWorldLocation(); Point3D loc = GetWorldLocation();
if ( !from.InLOS( loc ) || !from.InRange( loc, 2 ) ) if ( !from.InLOS( loc ) || !from.InRange( loc, 2 ) )
{ {
from.LocalOverheadMessage( Server.Network.MessageType.Regular, 0x3E9, 1019045 ); // I can't reach that from.LocalOverheadMessage( Server.Network.MessageType.Regular, 0x3E9, 1019045 ); // I can't reach that
return; return;
} }
else if ( !this.IsAccessibleTo( from ) )
{ if ( !( HarvestSystem is Mining ) )
this.PublicOverheadMessage( Server.Network.MessageType.Regular, 0x3E9, 1061637 ); // You are not allowed to access this.
return;
}
if ( !(this.HarvestSystem is Mining) )
from.SendLocalizedMessage( 1010018 ); // What do you want to use this item on? from.SendLocalizedMessage( 1010018 ); // What do you want to use this item on?
HarvestSystem.BeginHarvesting( from, this ); HarvestSystem.BeginHarvesting( from, this );
} }

View file

@ -228,10 +228,9 @@ namespace Server.Misc
#region Scroll of Alacrity #region Scroll of Alacrity
PlayerMobile pm = from as PlayerMobile; PlayerMobile pm = from as PlayerMobile;
if ( from is PlayerMobile ) if ( pm != null && skill.SkillName == pm.AcceleratedSkill && pm.AcceleratedStart > DateTime.Now )
if (pm != null && skill.SkillName == pm.AcceleratedSkill && pm.AcceleratedStart > DateTime.Now)
toGain *= Utility.RandomMinMax(2, 5); toGain *= Utility.RandomMinMax(2, 5);
#endregion #endregion
if ( !from.Player || (skills.Total + toGain) <= skills.Cap ) if ( !from.Player || (skills.Total + toGain) <= skills.Cap )
{ {

View file

@ -170,7 +170,7 @@ namespace Server
{ {
if( m_Skill != value ) if( m_Skill != value )
{ {
Skill oldUpdate = (m_Owner == null ? m_Owner.Skills[m_Skill] : null); Skill oldUpdate = (m_Owner != null ? m_Owner.Skills[m_Skill] : null);
m_Skill = value; m_Skill = value;
@ -8009,6 +8009,7 @@ namespace Server
{ {
} }
[CommandProperty( AccessLevel.GameMaster, AccessLevel.Owner )]
public NetState NetState public NetState NetState
{ {
get get

View file

@ -42,7 +42,7 @@ namespace Server.Network {
public delegate void NetStateCreatedCallback( NetState ns ); public delegate void NetStateCreatedCallback( NetState ns );
public class NetState { public class NetState : IComparable<NetState> {
private Socket m_Socket; private Socket m_Socket;
private IPAddress m_Address; private IPAddress m_Address;
private ByteQueue m_Buffer; private ByteQueue m_Buffer;
@ -1223,5 +1223,12 @@ namespace Server.Network {
public bool SupportsExpansion( ExpansionInfo info ) { public bool SupportsExpansion( ExpansionInfo info ) {
return SupportsExpansion( info, true ); return SupportsExpansion( info, true );
} }
public int CompareTo( NetState other ) {
if ( other == null )
return 1;
return m_ToString.CompareTo( other.m_ToString );
}
} }
} }