private static void RemoveUnit(Entity unit) { try { var unit9 = GetUnitFast(unit.Handle); if (unit9 == null) { return; } if (unit9 is IDisposable disposable) { disposable.Dispose(); } unitsDictionary.Remove(unit9.Handle); unitsList.Remove(unit9); UnitRemoved?.Invoke(unit9); unit9.IsValid = false; } catch (Exception e) { Logger.Error(e, unit); } }
private void OnUnitRemoved(Unit unit) { UnitRemoved?.Invoke(unit); unit.Removed -= OnUnitRemoved; _units.Remove(unit); }
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"); } }