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:
parent
ad0e1702a3
commit
bd4e6fc30e
10 changed files with 126 additions and 126 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue