public static void ForceReload() { try { foreach (var unit in Units) { try { UnitRemoved?.Invoke(unit); } catch (Exception e) { Logger.Error(e); } finally { if (unit is IDisposable disposable) { disposable.Dispose(); } } } foreach (var ability in Abilities) { try { AbilityRemoved?.Invoke(ability); } catch (Exception e) { Logger.Error(e); } finally { ability.Dispose(); } } unitsDictionary.Clear(); unitsList.Clear(); abilitiesDictionary.Clear(); abilitiesList.Clear(); delayedAbilities.Clear(); delayedHeroes.Clear(); AddCurrentUnits(); AddCurrentAbilities(); } catch (Exception e) { Logger.Error(e); } }
internal static void ChangeEntityControl(Entity entity) { try { var unit = GetUnit(entity.Handle); if (unit == null) { return; } var entityOwner = entity.Owner; if (entityOwner?.IsValid != true) { return; } if (!unit.IsHero && unit.BaseOwner?.IsValid == true && unit.BaseOwner.Handle == entityOwner.Handle) { return; } UnitRemoved?.Invoke(unit); foreach (var ability in unit.Abilities) { AbilityRemoved?.Invoke(ability); } unit.IsControllable = unit.BaseUnit.IsControllable; unit.Team = unit.BaseUnit.Team; unit.EnemyTeam = unit.Team == Team.Radiant ? Team.Dire : Team.Radiant; unit.BaseOwner = entityOwner; if (entityOwner is Unit owner) { unit.Owner = AddUnit(owner); } unitAdded?.Invoke(unit); foreach (var ability in unit.Abilities) { abilityAdded?.Invoke(ability); } } catch (Exception e) { Logger.Error(e, entity, "Change owner"); } }
internal static void RemoveAbility(Ability ability) { try { var ability9 = GetAbilityFast(ability.Handle); if (ability9 == null) { return; } ability9.Dispose(); abilitiesDictionary.Remove(ability9.Handle); abilitiesList.Remove(ability9); AbilityRemoved?.Invoke(ability9); ability9.IsValid = false; } catch (Exception e) { Logger.Error(e, ability); } }