fix: Cleans up potential memory leak in monster abilities. (#2185)

This commit is contained in:
Kamron Batman 2025-05-15 19:42:54 -07:00 • committed by GitHub
parent f2526c82f3
commit 91b2912ee4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 52 additions and 33 deletions

View file

@ -1,15 +1,14 @@
using System;
using Server.Random;
using WeightedMonsterAbility = Server.Random.WeightedValue<Server.Mobiles.MonsterAbility>;
namespace Server.Mobiles;
public class MonsterAbilityGroup : MonsterAbility
{
private WeightedMonsterAbility[] _weightedAbilities;
private WeightedMonsterAbility[] _availableToTrigger;
private readonly WeightedMonsterAbility[] _weightedAbilities;
private readonly WeightedMonsterAbility[] _availableToTrigger;
private readonly MonsterAbilityTrigger _triggers;
private int _availableToTriggerCount;
private MonsterAbilityTrigger _triggers;
public MonsterAbilityGroup(params WeightedMonsterAbility[] weightedAbilities)
{
@ -18,8 +17,7 @@ public class MonsterAbilityGroup : MonsterAbility
for (var i = 0; i < _weightedAbilities.Length; i++)
{
var weightedAbility = _weightedAbilities[i];
_triggers |= weightedAbility.Value.AbilityTrigger;
_triggers |= _weightedAbilities[i].Value.AbilityTrigger;
}
}
@ -66,7 +64,7 @@ public class MonsterAbilityGroup : MonsterAbility
for (var i = 0; i < _weightedAbilities.Length; i++)
{
var weightedAbility = _weightedAbilities[i];
if (weightedAbility.Value.WillTrigger(trigger) && weightedAbility.Value.CanTrigger(source, trigger))
if (weightedAbility.Value.CanTrigger(source, trigger))
{
_availableToTrigger[_availableToTriggerCount++] = weightedAbility;
}
@ -83,7 +81,7 @@ public class MonsterAbilityGroup : MonsterAbility
return;
}
var slice = new ReadOnlySpan<WeightedValue<MonsterAbility>>(_availableToTrigger, 0, _availableToTriggerCount);
var slice = new ReadOnlySpan<WeightedMonsterAbility>(_availableToTrigger, 0, _availableToTriggerCount);
var chosenAbility = slice.RandomWeightedElement().Value;
// Just in case?