Пример #1
0
        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);
            }
        }
Пример #2
0
        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");
            }
        }
Пример #3
0
        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);
            }
        }