ModernUO/Scripts/Engines/Virtues/VirtueHelper.cs
2006-06-15 04:14:30 +00:00

115 lines
No EOL
2.4 KiB
C#

using System;
namespace Server
{
public enum VirtueLevel
{
None,
Seeker,
Follower,
Knight
}
public enum VirtueName
{
Humility,
Sacrifice,
Compassion,
Spirituality,
Valor,
Honor,
Justice,
Honesty
}
public class VirtueHelper
{
public static bool HasAny( Mobile from, VirtueName virtue )
{
return ( from.Virtues.GetValue( (int)virtue ) > 0 );
}
public static bool IsHighestPath( Mobile from, VirtueName virtue )
{
return ( from.Virtues.GetValue( (int)virtue ) >= GetMaxAmount( virtue ) );
}
public static VirtueLevel GetLevel( Mobile from, VirtueName virtue )
{
int v = from.Virtues.GetValue( (int)virtue );
int vl;
if ( v < 4000 )
vl = 0;
else if ( v >= 20000 )
vl = 3;
else
vl = ( v + 9999 ) / 10000;
return (VirtueLevel)vl;
}
public static int GetMaxAmount( VirtueName virtue )
{
if( virtue == VirtueName.Honor )
return 20000;
if( virtue == VirtueName.Sacrifice )
return 22000;
return 21000;
}
public static bool Award( Mobile from, VirtueName virtue, int amount, ref bool gainedPath )
{
int current = from.Virtues.GetValue( (int)virtue );
int maxAmount = GetMaxAmount( virtue );
if ( current >= maxAmount )
return false;
if( (current + amount) >= maxAmount )
amount = maxAmount - current;
VirtueLevel oldLevel = GetLevel( from, virtue );
from.Virtues.SetValue( (int)virtue, current + amount );
gainedPath = ( GetLevel( from, virtue ) != oldLevel );
return true;
}
public static bool Atrophy( Mobile from, VirtueName virtue )
{
return Atrophy( from, virtue, 1 );
}
public static bool Atrophy( Mobile from, VirtueName virtue, int amount )
{
int current = from.Virtues.GetValue( (int)virtue );
if( (current - amount) >= 0 )
from.Virtues.SetValue( (int)virtue, current - amount );
else
from.Virtues.SetValue( (int)virtue, 0 );
return ( current > 0 );
}
public static bool IsSeeker( Mobile from, VirtueName virtue )
{
return ( GetLevel( from, virtue ) >= VirtueLevel.Seeker );
}
public static bool IsFollower( Mobile from, VirtueName virtue )
{
return ( GetLevel( from, virtue ) >= VirtueLevel.Follower );
}
public static bool IsKnight( Mobile from, VirtueName virtue )
{
return ( GetLevel( from, virtue ) >= VirtueLevel.Knight );
}
}
}