fix: Fixes curses and spell effects (#1112)

* * Fix statmod naming mismatch: everything in code searches for "[Magic] {type} Offset" but stat reductions are being added as "[Magic] {type} Curse"

* Clarifies and cleans up curses

* Fixes blood oath

* * NobleSacrifice remove all curses in one go

* Dont need a method

* Fix extra parentheses

Co-authored-by: Kamron Batman <3953314+kamronbatman@users.noreply.github.com>
This commit is contained in:
mark1145 2022-07-08 16:59:46 +10:00 • committed by GitHub
parent ad0e1702a3
commit bd4e6fc30e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 126 additions and 126 deletions

View file

@ -1,7 +1,10 @@
using System;
using System.Collections.Generic;
using Server.Gumps;
using Server.Items;
using Server.Mobiles;
using Server.Spells.Fourth;
using Server.Spells.Mysticism;
using Server.Spells.Necromancy;
namespace Server.Spells.Chivalry
@ -83,7 +86,7 @@ namespace Server.Spells.Chivalry
}
else
{
var sendEffect = false;
bool sendEffect = false;
if (m.Poisoned && m.CurePoison(Caster))
{
@ -108,26 +111,24 @@ namespace Server.Spells.Chivalry
sendEffect = true;
}
StatMod mod;
mod = m.GetStatMod("[Magic] Str Offset");
var mod = m.GetStatMod("[Magic] Str Curse");
if (mod?.Offset < 0)
{
m.RemoveStatMod("[Magic] Str Offset");
m.RemoveStatMod("[Magic] Str Curse");
sendEffect = true;
}
mod = m.GetStatMod("[Magic] Dex Offset");
mod = m.GetStatMod("[Magic] Dex Curse");
if (mod?.Offset < 0)
{
m.RemoveStatMod("[Magic] Dex Offset");
m.RemoveStatMod("[Magic] Dex Curse");
sendEffect = true;
}
mod = m.GetStatMod("[Magic] Int Offset");
mod = m.GetStatMod("[Magic] Int Curse");
if (mod?.Offset < 0)
{
m.RemoveStatMod("[Magic] Int Offset");
m.RemoveStatMod("[Magic] Int Curse");
sendEffect = true;
}
@ -137,22 +138,24 @@ namespace Server.Spells.Chivalry
sendEffect = true;
}
if (EvilOmenSpell.TryEndEffect(m))
{
sendEffect = true;
}
sendEffect = EvilOmenSpell.TryEndEffect(m) || sendEffect;
sendEffect = StrangleSpell.RemoveCurse(m) || sendEffect;
sendEffect = CorpseSkinSpell.RemoveCurse(m) || sendEffect;
sendEffect = CurseSpell.RemoveEffect(m) || sendEffect;
sendEffect = MortalStrike.EndWound(m) || sendEffect;
sendEffect = MindRotSpell.ClearMindRotScalar(m) || sendEffect;
sendEffect = BloodOathSpell.RemoveCurse(m) || sendEffect;
sendEffect = SpellPlagueSpell.RemoveEffect(m) || sendEffect;
if (StrangleSpell.RemoveCurse(m))
{
sendEffect = true;
}
if (CorpseSkinSpell.RemoveCurse(m))
{
sendEffect = true;
}
// TODO: Should this remove blood oath? Pain spike?
// TODO: Move these into their respective end effect methods
BuffInfo.RemoveBuff(m, BuffIcon.Clumsy);
BuffInfo.RemoveBuff(m, BuffIcon.FeebleMind);
BuffInfo.RemoveBuff(m, BuffIcon.Weaken);
BuffInfo.RemoveBuff(m, BuffIcon.Curse);
BuffInfo.RemoveBuff(m, BuffIcon.MassCurse);
BuffInfo.RemoveBuff(m, BuffIcon.MortalStrike);
BuffInfo.RemoveBuff(m, BuffIcon.Strangle);
BuffInfo.RemoveBuff(m, BuffIcon.EvilOmen);
if (sendEffect)
{

View file

@ -2,6 +2,7 @@ using System;
using Server.Engines.ConPVP;
using Server.Items;
using Server.Spells.Fourth;
using Server.Spells.Mysticism;
using Server.Spells.Necromancy;
using Server.Targeting;
@ -44,24 +45,13 @@ namespace Server.Spells.Chivalry
* Chance of removing curse is affected by Caster's Karma.
*/
int chance;
if (Caster.Karma < -5000)
int chance = Caster.Karma switch
{
chance = 0;
}
else if (Caster.Karma < 0)
{
chance = (int)Math.Sqrt(20000 + Caster.Karma) - 122;
}
else if (Caster.Karma < 5625)
{
chance = (int)Math.Sqrt(Caster.Karma) + 25;
}
else
{
chance = 100;
}
< -5000 => 0,
< 0 => (int)Math.Sqrt(20000 + Caster.Karma) - 122,
< 5625 => (int)Math.Sqrt(Caster.Karma) + 25,
_ => 100
};
if (chance > Utility.Random(100))
{
@ -88,22 +78,22 @@ namespace Server.Spells.Chivalry
0x100
);
var mod = m.GetStatMod("[Magic] Str Offset");
var mod = m.GetStatMod("[Magic] Str Curse");
if (mod?.Offset < 0)
{
m.RemoveStatMod("[Magic] Str Offset");
m.RemoveStatMod("[Magic] Str Curse");
}
mod = m.GetStatMod("[Magic] Dex Offset");
mod = m.GetStatMod("[Magic] Dex Curse");
if (mod?.Offset < 0)
{
m.RemoveStatMod("[Magic] Dex Offset");
m.RemoveStatMod("[Magic] Dex Curse");
}
mod = m.GetStatMod("[Magic] Int Offset");
mod = m.GetStatMod("[Magic] Int Curse");
if (mod?.Offset < 0)
{
m.RemoveStatMod("[Magic] Int Offset");
m.RemoveStatMod("[Magic] Int Curse");
}
m.Paralyzed = false;
@ -113,22 +103,19 @@ namespace Server.Spells.Chivalry
CorpseSkinSpell.RemoveCurse(m);
CurseSpell.RemoveEffect(m);
MortalStrike.EndWound(m);
if (Core.ML)
{
BloodOathSpell.RemoveCurse(m);
}
MindRotSpell.ClearMindRotScalar(m);
BloodOathSpell.RemoveCurse(m);
SpellPlagueSpell.RemoveEffect(m);
// TODO: Move these into their respective end effect methods
BuffInfo.RemoveBuff(m, BuffIcon.Clumsy);
BuffInfo.RemoveBuff(m, BuffIcon.FeebleMind);
BuffInfo.RemoveBuff(m, BuffIcon.Weaken);
BuffInfo.RemoveBuff(m, BuffIcon.Curse);
BuffInfo.RemoveBuff(m, BuffIcon.MassCurse);
BuffInfo.RemoveBuff(m, BuffIcon.MortalStrike);
BuffInfo.RemoveBuff(m, BuffIcon.Mindrot);
// TODO: Should this remove blood oath? Pain spike?
BuffInfo.RemoveBuff(m, BuffIcon.Strangle);
BuffInfo.RemoveBuff(m, BuffIcon.EvilOmen);
}
else
{