fix: Fixes stabled, abilities targeting self, and unsummon memory leak (#1418)
## **MAJOR CHANGE** * `Stabled` has been moved to `PlayerMobile`. * New methods added, `PlayerMobile.AddStabled` and `PlayerMobile.RemoveStabled`. * Added `PlayerMobile.AddFollower` and `PlayerMobile.RemoveFollower`. * `Stabled`, `AutoStabled`, and `AllFollowers` are now `HashSet` and **_CAN BE NULL_**. ### Summary * Fixes monster abilities causing harm to the monster through reflect * Adds `CanTriggerAgainstSelf` to override this for healing or some other self-affecting ability * Fixes a major memory leak where `UnsummonTimer` from animated dead spell lasts up-to 24hrs and therefore holds onto references of dead/deleted mobs. * Fixes another minor leak where a mob is not unregistered from the animated dead spell list until the next spell cast.
This commit is contained in:
parent
d99e72db8f
commit
3b97e8d39c
13 changed files with 391 additions and 280 deletions
|
|
@ -239,9 +239,7 @@ namespace Server.Spells.Necromancy
|
|||
return;
|
||||
}
|
||||
|
||||
list.Remove(summoned);
|
||||
|
||||
if (list.Count == 0)
|
||||
if (list.Remove(summoned) && list.Count == 0)
|
||||
{
|
||||
_table.Remove(master);
|
||||
}
|
||||
|
|
@ -278,10 +276,17 @@ namespace Server.Spells.Necromancy
|
|||
|
||||
if (list.Count > 3)
|
||||
{
|
||||
Timer.StartTimer(list[0].Kill);
|
||||
var toKill = list[0];
|
||||
Unregister(master, toKill);
|
||||
toKill.Kill();
|
||||
}
|
||||
|
||||
Timer.StartTimer(TimeSpan.FromSeconds(2.0), TimeSpan.FromSeconds(2.0), () => Summoned_Damage(summoned));
|
||||
Timer.DelayCall(
|
||||
TimeSpan.FromMilliseconds(1650),
|
||||
TimeSpan.FromMilliseconds(1650),
|
||||
Summoned_Damage,
|
||||
summoned
|
||||
);
|
||||
}
|
||||
|
||||
private static void Summoned_Damage(Mobile mob)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue