Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -0,0 +1,106 @@
using System;
using Server.Items;
namespace Server.SkillHandlers
{
class Meditation
{
public static void Initialize()
{
SkillInfo.Table[46].Callback = new SkillUseCallback(OnUse);
}
public static bool CheckOkayHolding(Item item)
{
if (item == null)
return true;
if (item is Spellbook || item is Runebook)
return true;
if (Core.AOS && item is BaseWeapon && ((BaseWeapon)item).Attributes.SpellChanneling != 0)
return true;
if (Core.AOS && item is BaseArmor && ((BaseArmor)item).Attributes.SpellChanneling != 0)
return true;
return false;
}
public static TimeSpan OnUse(Mobile m)
{
m.RevealingAction();
if (m.Target != null)
{
m.SendLocalizedMessage(501845); // You are busy doing something else and cannot focus.
return TimeSpan.FromSeconds(5.0);
}
else if (!Core.AOS && m.Hits < (m.HitsMax / 10)) // Less than 10% health
{
m.SendLocalizedMessage(501849); // The mind is strong but the body is weak.
return TimeSpan.FromSeconds(5.0);
}
else if (m.Mana >= m.ManaMax)
{
m.SendLocalizedMessage(501846); // You are at peace.
return TimeSpan.FromSeconds(Core.AOS ? 10.0 : 5.0);
}
else if (Core.AOS && Server.Misc.RegenRates.GetArmorOffset(m) > 0)
{
m.SendLocalizedMessage(500135); // Regenative forces cannot penetrate your armor!
return TimeSpan.FromSeconds(10.0);
}
else
{
Item oneHanded = m.FindItemOnLayer(Layer.OneHanded);
Item twoHanded = m.FindItemOnLayer(Layer.TwoHanded);
if (Core.AOS && m.Player)
{
if (!CheckOkayHolding(oneHanded))
m.AddToBackpack(oneHanded);
if (!CheckOkayHolding(twoHanded))
m.AddToBackpack(twoHanded);
}
else if (!CheckOkayHolding(oneHanded) || !CheckOkayHolding(twoHanded))
{
m.SendLocalizedMessage(502626); // Your hands must be free to cast spells or meditate.
return TimeSpan.FromSeconds(2.5);
}
double skillVal = m.Skills[SkillName.Meditation].Value;
double chance = (50.0 + ((skillVal - (m.ManaMax - m.Mana)) * 2)) / 100;
// must bypass normal checks so passive skill checks aren't triggered
CrystalBallOfKnowledge.TellSkillDifficultyActive(m, SkillName.Meditation, chance);
if (chance > Utility.RandomDouble())
{
m.CheckSkill(SkillName.Meditation, 0.0, 100.0);
m.SendLocalizedMessage(501851); // You enter a meditative trance.
m.Meditating = true;
BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.ActiveMeditation, 1075657));
if (m.Player || m.Body.IsHuman)
m.PlaySound(0xF9);
m.ResetStatTimers();
}
else
{
m.SendLocalizedMessage(501850); // You cannot focus your concentration.
}
return TimeSpan.FromSeconds(10.0);
}
}
}
}