diff --git a/Projects/UOContent/Engines/Virtues/Valor.cs b/Projects/UOContent/Engines/Virtues/Valor.cs index 70699b242..2db766cf1 100644 --- a/Projects/UOContent/Engines/Virtues/Valor.cs +++ b/Projects/UOContent/Engines/Virtues/Valor.cs @@ -3,146 +3,139 @@ using Server.Engines.CannedEvil; using Server.Mobiles; using Server.Targeting; -namespace Server -{ - public static class ValorVirtue - { - private const int LossAmount = 250; - private static readonly TimeSpan LossDelay = TimeSpan.FromDays(7.0); +namespace Server; - public static void Initialize() +public static class ValorVirtue +{ + private const int LossAmount = 250; + private static readonly TimeSpan LossDelay = TimeSpan.FromDays(7.0); + + public static void Initialize() + { + VirtueGump.Register(112, OnVirtueUsed); + } + + public static void OnVirtueUsed(Mobile from) + { + if (from.Alive) { - VirtueGump.Register(112, OnVirtueUsed); + from.SendLocalizedMessage(1054034); // Target the Champion Idol of the Champion you wish to challenge!. + from.Target = new InternalTarget(); + } + } + + public static void CheckAtrophy(Mobile from) + { + if (from is not PlayerMobile pm) + { + return; } - public static void OnVirtueUsed(Mobile from) + try { - if (from.Alive) + if (pm.LastValorLoss + LossDelay < Core.Now) { - from.SendLocalizedMessage(1054034); // Target the Champion Idol of the Champion you wish to challenge!. - from.Target = new InternalTarget(); + if (VirtueHelper.Atrophy(from, VirtueName.Valor, LossAmount)) + { + from.SendLocalizedMessage(1054040); // You have lost some Valor. + } + + pm.LastValorLoss = Core.Now; } } - - public static void CheckAtrophy(Mobile from) + catch { - if (from is not PlayerMobile pm) + // ignored + } + } + + public static void Valor(Mobile from, object targ) + { + if (targ is not IdolOfTheChampion idol || idol.Deleted || idol.Spawn?.Deleted != false) + { + from.SendLocalizedMessage(1054035); // You must target a Champion Idol to challenge the Champion's spawn! + } + else if (from.Hidden) + { + from.SendLocalizedMessage(1052015); // You cannot do that while hidden. + } + else if (idol.Spawn.HasBeenAdvanced) + { + from.SendLocalizedMessage(1054038); // The Champion of this region has already been challenged! + } + else if (idol.Spawn.Active) + { + if (idol.Spawn.Champion != null) // TODO: Message? { return; } - try + int needed, consumed; + switch (idol.Spawn.GetSubLevel()) { - if (pm.LastValorLoss + LossDelay < Core.Now) - { - if (VirtueHelper.Atrophy(from, VirtueName.Valor, LossAmount)) + case 0: { - from.SendLocalizedMessage(1054040); // You have lost some Valor. + needed = consumed = 2500; + break; } + case 1: + { + needed = consumed = 5000; + break; + } + case 2: + { + needed = 10000; + consumed = 7500; + break; + } + default: + { + needed = 20000; + consumed = 10000; + break; + } + } - pm.LastValorLoss = Core.Now; - } - } - catch + if (from.Virtues.GetValue((int)VirtueName.Valor) >= needed) { - // ignored - } - } - - public static void Valor(Mobile from, object targ) - { - if (targ is not IdolOfTheChampion idol || idol.Deleted || idol.Spawn?.Deleted != false) - { - from.SendLocalizedMessage(1054035); // You must target a Champion Idol to challenge the Champion's spawn! - } - else if (from.Hidden) - { - from.SendLocalizedMessage(1052015); // You cannot do that while hidden. - } - else if (idol.Spawn.HasBeenAdvanced) - { - from.SendLocalizedMessage(1054038); // The Champion of this region has already been challenged! + VirtueHelper.Atrophy(from, VirtueName.Valor, consumed); + // Your challenge is heard by the Champion of this region! Beware its wrath! + from.SendLocalizedMessage(1054037); + idol.Spawn.HasBeenAdvanced = true; + idol.Spawn.AdvanceLevel(); } else { - var vl = VirtueHelper.GetLevel(from, VirtueName.Valor); - if (idol.Spawn.Active) - { - if (idol.Spawn.Champion != null) // TODO: Message? - { - return; - } - - int needed, consumed; - switch (idol.Spawn.GetSubLevel()) - { - case 0: - { - needed = consumed = 2500; - break; - } - case 1: - { - needed = consumed = 5000; - break; - } - case 2: - { - needed = 10000; - consumed = 7500; - break; - } - default: - { - needed = 20000; - consumed = 10000; - break; - } - } - - if (from.Virtues.GetValue((int)VirtueName.Valor) >= needed) - { - VirtueHelper.Atrophy(from, VirtueName.Valor, consumed); - // Your challenge is heard by the Champion of this region! Beware its wrath! - from.SendLocalizedMessage(1054037); - idol.Spawn.HasBeenAdvanced = true; - idol.Spawn.AdvanceLevel(); - } - else - { - // The Champion of this region ignores your challenge. You must further prove your valor. - from.SendLocalizedMessage(1054039); - } - } - else - { - if (vl == VirtueLevel.Knight) - { - VirtueHelper.Atrophy(from, VirtueName.Valor, 11000); - // Your challenge is heard by the Champion of this region! Beware its wrath! - from.SendLocalizedMessage(1054037); - idol.Spawn.EndRestart(); - idol.Spawn.HasBeenAdvanced = true; - } - else - { - // You must be a Knight of Valor to summon the champion's spawn in this manner! - from.SendLocalizedMessage(1054036); - } - } + // The Champion of this region ignores your challenge. You must further prove your valor. + from.SendLocalizedMessage(1054039); } } - - private class InternalTarget : Target + else if (VirtueHelper.GetLevel(from, VirtueName.Valor) == VirtueLevel.Knight) { - public InternalTarget() : base(14, false, TargetFlags.None) - { - } + VirtueHelper.Atrophy(from, VirtueName.Valor, 11000); + // Your challenge is heard by the Champion of this region! Beware its wrath! + from.SendLocalizedMessage(1054037); + idol.Spawn.Start(); + // Uncomment to not allow advancing level after starting with valor. + // idol.Spawn.HasBeenAdvanced = true; + } + else + { + // You must be a Knight of Valor to summon the champion's spawn in this manner! + from.SendLocalizedMessage(1054036); + } + } - protected override void OnTarget(Mobile from, object targeted) - { - Valor(from, targeted); - } + private class InternalTarget : Target + { + public InternalTarget() : base(14, false, TargetFlags.None) + { + } + + protected override void OnTarget(Mobile from, object targeted) + { + Valor(from, targeted); } } }