public static void GetDamageReduction(Mobile victim, ref int damage) { if (ActiveTable == null) { return; } SpiritualityContext context = GetContext(victim); if (context != null) { double reduction = (double)context.Reduction / 100.0; damage = (int)((double)damage - ((double)damage * reduction)); context.Pool -= damage; victim.FixedEffect(0x373A, 10, 16); BuffInfo.RemoveBuff(victim, BuffIcon.Spirituality); if (context.Pool <= 0) { victim.SendLocalizedMessage(1155840); // Your spirit is no longer embraced. You feel less powerful. if (ActiveTable.ContainsKey(victim) && ActiveTable[victim] == context) { ActiveTable.Remove(victim); } } else { BuffInfo.AddBuff(victim, new BuffInfo(BuffIcon.Spirituality, 1155824, 1155825, String.Format("{0}\t{1}", context.Reduction.ToString(), context.Pool.ToString()))); // ~1_VAL~% Reduction to Incoming Damage<br>~2_VAL~ Shield HP Remaining } } }
public static void OnVirtueUsed(Mobile from) { if (!from.Alive) { return; } if (VirtueHelper.GetLevel(from, VirtueName.Spirituality) < VirtueLevel.Seeker) { from.SendLocalizedMessage(1155829); // You must be a Seeker of Spirituality to invoke this Virtue. } else { from.SendLocalizedMessage(1155827); // Target whom you wish to embrace with your Spirituality from.BeginTarget( 10, false, TargetFlags.None, (mobile, targeted) => { if (targeted is Mobile) { var m = (Mobile)targeted; if (VirtueHelper.GetLevel(from, VirtueName.Spirituality) < VirtueLevel.Seeker) { from.SendLocalizedMessage(1155812); // You must be at least a Seeker of Humility to Invoke this ability. } else if (!m.Alive) { from.SendLocalizedMessage(1155828); // Thy target must be among the living. } else if (m is BaseCreature && !((BaseCreature)m).Controlled && !((BaseCreature)m).Summoned) { from.SendLocalizedMessage(1155837); // You can only embrace players and pets with Spirituality. } else if (IsEmbracee(m)) { from.SendLocalizedMessage(1155836); // They are already embraced by Spirituality. } else if (m.MeleeDamageAbsorb > 0) { from.SendLocalizedMessage( 1156039); // You may not use the Spirituality Virtue while the Attunement spell is active. } else if (m is BaseCreature || m is PlayerMobile) { var context = new SpiritualityContext(from, m); ActiveTable[from] = context; m.SendLocalizedMessage(1155839); // Your spirit has been embraced! You feel more powerful! from.SendLocalizedMessage(1155835); // You have lost some Spirituality. BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Spirituality, 1155824, 1155825, string.Format( "{0}\t{1}", context.Reduction.ToString(), context.Pool.ToString()))); // ~1_VAL~% Reduction to Incoming Damage<br>~2_VAL~ Shield HP Remaining VirtueHelper.Atrophy(from, VirtueName.Spirituality, 3200); Timer.DelayCall( TimeSpan.FromMinutes(20), () => { if (ActiveTable != null && ActiveTable.ContainsKey(from)) { ActiveTable.Remove(from); m.SendLocalizedMessage(1155840); // Your spirit is no longer embraced. You feel less powerful. BuffInfo.RemoveBuff(m, BuffIcon.Spirituality); } }); } } else { from.SendLocalizedMessage(1155837); // You can only embrace players and pets with Spirituality. } }); } }