feat: Adds Monster Abilities (#1179)

* Adds ability to create monster abilities
* Adds Fire/Cold/Chaos Breath
* Adds Grasping Claw
* Adds Summon Skeletons & Summon Undead w/ Polymorph
This commit is contained in:
Kamron Batman 2022-10-01 21:09:36 -07:00 committed by GitHub
parent 8a2c0ead3d
commit 43e7fe29c2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
91 changed files with 1262 additions and 977 deletions

View file

@ -935,26 +935,29 @@ namespace Server.Spells
public static void Damage(Spell spell, TimeSpan delay, Mobile target, Mobile from, double damage)
{
var iDamage = (int)damage;
var damageGiven = (int)damage;
if (delay == TimeSpan.Zero)
{
(from as BaseCreature)?.AlterSpellDamageTo(target, ref iDamage);
var bcFrom = from as BaseCreature;
var bcTarget = target as BaseCreature;
bcTarget?.AlterSpellDamageFrom(from, ref iDamage);
target.Damage(iDamage, from);
bcFrom?.AlterSpellDamageTo(target, ref damageGiven);
bcTarget?.AlterSpellDamageFrom(from, ref damageGiven);
target.Damage(damageGiven, from);
bcFrom?.OnDamageSpell(target, damageGiven);
if (from != null)
{
bcTarget?.OnHarmfulSpell(from);
bcTarget?.OnDamagedBySpell(from);
bcTarget?.OnDamagedBySpell(from, damageGiven);
}
}
else
{
new SpellDamageTimer(spell, target, from, iDamage, delay).Start();
new SpellDamageTimer(spell, target, from, damageGiven, delay).Start();
}
}
@ -1004,26 +1007,30 @@ namespace Server.Spells
if (delay == TimeSpan.Zero)
{
(from as BaseCreature)?.AlterSpellDamageTo(target, ref dmg);
var bcFrom = from as BaseCreature;
var bcTarget = target as BaseCreature;
bcFrom?.AlterSpellDamageTo(target, ref dmg);
(target as BaseCreature)?.AlterSpellDamageFrom(from, ref dmg);
bcTarget?.AlterSpellDamageFrom(from, ref dmg);
WeightOverloading.DFA = dfa;
var damageGiven = AOS.Damage(target, from, dmg, phys, fire, cold, pois, nrgy, chaos);
WeightOverloading.DFA = DFAlgorithm.Standard;
bcFrom?.OnDamageSpell(target, damageGiven);
if (bcTarget != null && from != null && delay == TimeSpan.Zero)
{
bcTarget.OnHarmfulSpell(from);
bcTarget.OnDamagedBySpell(from, damageGiven);
}
}
else
{
new SpellDamageTimerAOS(spell, delay, target, from, dmg, phys, fire, cold, pois, nrgy, chaos, dfa).Start();
}
if (target is BaseCreature c && from != null && delay == TimeSpan.Zero)
{
c.OnHarmfulSpell(from);
c.OnDamagedBySpell(from);
}
}
public static void DoLeech(int damageGiven, Mobile from, Mobile target)
@ -1127,16 +1134,17 @@ namespace Server.Spells
protected override void OnTick()
{
var bcFrom = m_From as BaseCreature;
var bcTarg = m_Target as BaseCreature;
if (m_From is BaseCreature bcFrom && m_Target != null)
if (m_Target != null)
{
bcFrom.AlterSpellDamageTo(m_Target, ref m_Damage);
bcFrom?.AlterSpellDamageTo(m_Target, ref m_Damage);
}
if (bcTarg != null && m_From != null)
if (m_From != null)
{
bcTarg.AlterSpellDamageFrom(m_From, ref m_Damage);
bcTarg?.AlterSpellDamageFrom(m_From, ref m_Damage);
}
WeightOverloading.DFA = m_DFA;
@ -1145,10 +1153,12 @@ namespace Server.Spells
WeightOverloading.DFA = DFAlgorithm.Standard;
if (bcTarg != null && m_From != null)
bcFrom?.OnDamageSpell(m_Target, damageGiven);
if (m_From != null)
{
bcTarg.OnHarmfulSpell(m_From);
bcTarg.OnDamagedBySpell(m_From);
bcTarg?.OnHarmfulSpell(m_From);
bcTarg?.OnDamagedBySpell(m_From, damageGiven);
}
m_Spell?.RemoveDelayedDamageContext(m_Target);