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); VirtueLevel newLevel = GetLevel(from, virtue); gainedPath = (newLevel != oldLevel); if (gainedPath) { EventSink.InvokeOnVirtueLevelChange(from, (int)oldLevel, (int)newLevel, (int)virtue); } return(true); }