Exemplo n.º 1
0
        public bool ShouldBlock(ExecuteOrderEventArgs args)
        {
            if (!this.menu.SlowDown)
            {
                return(false);
            }

            if (!args.Entities.Any())
            {
                return(false);
            }

            switch (args.OrderId)
            {
            case OrderId.Ability:
            case OrderId.AbilityTarget:
            case OrderId.AbilityLocation:
            case OrderId.AbilityTargetRune:
            case OrderId.AbilityTargetTree:
            {
                var handle = args.Entities.First().Handle;
                if (this.abilitySleeper.IsSleeping(handle))
                {
                    return(true);
                }

                var ability = (ActiveAbility)EntityManager9.GetAbilityFast(args.Ability.Handle);
                if (ability == null)
                {
                    return(false);
                }

                if (this.lowDelayAbilities.Contains(ability.Id))
                {
                    this.abilitySleeper.Sleep(handle, ability.CastPoint + AbilityLowDelay);
                }
                else
                {
                    this.abilitySleeper.Sleep(handle, ability.CastPoint + AbilityDelay);
                }

                return(false);
            }

            case OrderId.Hold:
            case OrderId.Stop:
                //case OrderId.MoveLocation:
                //case OrderId.AttackTarget:
            {
                var handle = args.Entities.First().Handle;
                this.abilitySleeper.Reset(handle);

                break;
            }
            }

            return(false);
        }
Exemplo n.º 2
0
        private static void StartChanneling(uint abilityHandle)
        {
            if (!(EntityManager9.GetAbilityFast(abilityHandle) is IChanneled channeled))
            {
                return;
            }

            channeled.Owner.ChannelEndTime = Game.RawGameTime + channeled.GetCastDelay() + 1f;
        }
Exemplo n.º 3
0
        // Token: 0x060003B2 RID: 946 RVA: 0x0001CE3C File Offset: 0x0001B03C
        private static void StartChanneling(uint abilityHandle)
        {
            IChanneled channeled;

            if ((channeled = (EntityManager9.GetAbilityFast(abilityHandle) as IChanneled)) == null)
            {
                return;
            }
            channeled.Owner.ChannelEndTime = channeled.GetCastDelay() + 1f;
        }
Exemplo n.º 4
0
        private void OnBoolPropertyChange(Entity sender, BoolPropertyChangeEventArgs args)
        {
            var newValue = args.NewValue;

            if (newValue == args.OldValue)
            {
                return;
            }

            try
            {
                switch (args.PropertyName)
                {
                case "m_bToggleState":
                {
                    if (!newValue)
                    {
                        break;
                    }

                    var ability = EntityManager9.GetAbilityFast(sender.Handle);
                    if (ability == null)
                    {
                        return;
                    }

                    this.AbilityCasted?.Invoke(ability);
                    break;
                }
                    //case "m_bInAbilityPhase":
                    //{
                    //    var ability = EntityManager9.GetAbilityFast(sender.Handle);
                    //    if (ability == null)
                    //    {
                    //        return;
                    //    }

                    //    ability.IsCasting = newValue;
                    //    ability.Owner.IsCasting = newValue;

                    //    this.AbilityCastChange?.Invoke(ability);
                    //    break;
                    //}
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
 // Token: 0x06000392 RID: 914 RVA: 0x0001BEA8 File Offset: 0x0001A0A8
 private static void OnRemoveEntity(EntityEventArgs args)
 {
     try
     {
         PhysicalItem physicalItem = args.Entity as PhysicalItem;
         if (!(physicalItem == null) && !(physicalItem.Item == null))
         {
             Ability9 abilityFast = EntityManager9.GetAbilityFast(physicalItem.Item.Handle);
             if (!(abilityFast == null))
             {
                 abilityFast.IsActive = true;
             }
         }
     }
     catch (Exception exception)
     {
         Logger.Error(exception, null);
     }
 }
Exemplo n.º 6
0
        private void OnEntityAdded(EntityAddedEventArgs e)
        {
            try
            {
                var physicalItem = e.Entity as PhysicalItem;
                if (physicalItem == null || physicalItem.Item == null)
                {
                    return;
                }

                var item = EntityManager9.GetAbilityFast(physicalItem.Item.Handle);
                if (item == null)
                {
                    return;
                }

                item.IsAvailable = false;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Exemplo n.º 7
0
        private static void OnRemoveEntity(EntityEventArgs args)
        {
            try
            {
                var physicalItem = args.Entity as PhysicalItem;
                if (physicalItem == null || physicalItem.Item == null)
                {
                    return;
                }

                var item = EntityManager9.GetAbilityFast(physicalItem.Item.Handle);
                if (item == null)
                {
                    return;
                }

                item.IsAvailable = true;
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 8
0
        private void OnEntityRemoved(EntityRemovedEventArgs e)
        {
            try
            {
                var physicalItem = e.Entity as PhysicalItem;
                if (physicalItem == null || physicalItem.Item == null)
                {
                    return;
                }

                var item = EntityManager9.GetAbilityFast(physicalItem.Item.Handle);
                if (item == null)
                {
                    return;
                }

                item.IsAvailable = true;
                //UpdateManager.BeginInvoke(100, () => InventoryChanged?.Invoke(null, EventArgs.Empty));
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Exemplo n.º 9
0
        private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
            case "m_bToggleState":
            {
                var newValue = e.NewValue.GetBoolean();
                if (!newValue || newValue == e.OldValue.GetBoolean())
                {
                    break;
                }

                UpdateManager.BeginInvoke(() =>
                    {
                        var ability = EntityManager9.GetAbilityFast(sender.Handle);
                        if (ability == null)
                        {
                            return;
                        }

                        this.AbilityCasted?.Invoke(ability);
                    });
            }
            break;

            case "m_bInAbilityPhase":
            {
                var newValue = e.NewValue.GetBoolean();
                if (newValue == e.OldValue.GetBoolean())
                {
                    break;
                }

                UpdateManager.BeginInvoke(() =>
                    {
                        var ability = EntityManager9.GetAbilityFast(sender.Handle);
                        if (ability == null)
                        {
                            return;
                        }

                        ability.IsCasting       = newValue;
                        ability.Owner.IsCasting = newValue;

                        this.AbilityCastChange?.Invoke(ability);
                    });
            }
            break;

            case "m_flEnableTime":
            {
                var newValue = e.NewValue.GetSingle();
                if (newValue == e.OldValue.GetSingle())
                {
                    break;
                }

                UpdateManager.BeginInvoke(() =>
                    {
                        var ability = EntityManager9.GetAbilityFast(sender.Handle);
                        if (ability == null)
                        {
                            return;
                        }

                        ability.ItemEnableTimeSleeper.SleepUntil(newValue);
                    });
            }
            break;

            case "m_flCastStartTime":
            {
                var newValue = e.NewValue.GetSingle();
                var oldValue = e.OldValue.GetSingle();
                if (newValue == oldValue)
                {
                    break;
                }

                UpdateManager.BeginInvoke(() =>
                    {
                        if (this.AbilityCasted == null)
                        {
                            return;
                        }

                        var ability = EntityManager9.GetAbilityFast(sender.Handle);
                        if (ability == null)
                        {
                            return;
                        }

                        if (!ability.IsDisplayingCharges)
                        {
                            return;
                        }

                        var castTime = newValue - oldValue;
                        if (castTime < 0 || oldValue < 0)
                        {
                            return;
                        }

                        var visibleTime = GameManager.RawGameTime - ability.Owner.LastNotVisibleTime;
                        if (visibleTime < 0.05f)
                        {
                            return;
                        }

                        if (ability.CastPoint <= 0)
                        {
                            this.AbilityCasted(ability);
                        }
                        else
                        {
                            if (Math.Abs(ability.CastPoint - castTime) < 0.03f)
                            {
                                this.AbilityCasted(ability);
                            }
                        }
                    });
            }
            break;

            case "m_fCooldown":
            {
                var newValue = e.NewValue.GetSingle();
                var oldValue = e.OldValue.GetSingle();
                if (newValue == oldValue)
                {
                    break;
                }

                UpdateManager.BeginInvoke(() =>
                    {
                        if (this.AbilityCasted == null)
                        {
                            return;
                        }

                        if (newValue <= oldValue || oldValue > 0)
                        {
                            return;
                        }

                        var ability = EntityManager9.GetAbilityFast(sender.Handle);
                        if (ability == null)
                        {
                            return;
                        }

                        var visibleTime = GameManager.RawGameTime - ability.Owner.LastNotVisibleTime;
                        if (visibleTime < 0.05f)
                        {
                            return;
                        }

                        this.AbilityCasted(ability);
                    });
            }
            break;

            case "m_flChannelStartTime":
            {
                var newValue = e.NewValue.GetSingle();
                if (newValue == e.OldValue.GetSingle())
                {
                    break;
                }

                UpdateManager.BeginInvoke(() =>
                    {
                        var ability = EntityManager9.GetAbilityFast(sender.Handle);
                        if (ability == null)
                        {
                            return;
                        }

                        if (!(ability is IChanneled channeled))
                        {
                            return;
                        }

                        if (newValue > 0)
                        {
                            ability.IsChanneling                   = true;
                            channeled.Owner.ChannelEndTime         = newValue + channeled.ChannelTime;
                            channeled.Owner.ChannelActivatesOnCast = channeled.IsActivatesOnChannelStart;

                            this.AbilityChannel?.Invoke(ability);
                        }
                        else
                        {
                            ability.IsChanneling                   = false;
                            channeled.Owner.ChannelEndTime         = 0;
                            channeled.Owner.ChannelActivatesOnCast = false;
                        }
                    });
            }
            break;

            case "m_iParity":
            {
                if (e.NewValue.GetInt32() == e.OldValue.GetInt32())
                {
                    break;
                }

                UpdateManager.BeginInvoke(() =>
                    {
                        var owner = EntityManager9.GetUnitFast(sender.Handle);

                        if (owner == null)
                        {
                            return;
                        }

                        var inventory    = owner.BaseInventory;
                        var checkedItems = new List <uint>();

                        foreach (var handle in this.GetInventoryItems(inventory).Select(x => x.Handle))
                        {
                            var item = EntityManager9.GetAbilityFast(handle);
                            if (item == null)
                            {
                                continue;
                            }

                            checkedItems.Add(handle);

                            if (item.Owner == owner)
                            {
                                item.IsAvailable = true;
                                //UpdateManager.BeginInvoke(100, () => InventoryChanged?.Invoke(null, EventArgs.Empty));
                                continue;
                            }

                            EntityManager9.RemoveAbility(item.BaseAbility);
                            EntityManager9.AddAbility(item.BaseAbility);
                        }

                        foreach (var handle in this.GetStashItems(inventory).Select(x => x.Handle))
                        {
                            var item = EntityManager9.GetAbilityFast(handle);
                            if (item == null)
                            {
                                continue;
                            }

                            checkedItems.Add(handle);

                            if (item.Owner == owner)
                            {
                                item.IsAvailable = false;
                                //UpdateManager.BeginInvoke(100, () => InventoryChanged?.Invoke(null, EventArgs.Empty));
                                continue;
                            }

                            EntityManager9.RemoveAbility(item.BaseAbility);
                            EntityManager9.AddAbility(item.BaseAbility);
                        }

                        // stashed neutral items
                        foreach (var item in owner.AbilitiesFast.Where(x => x.IsItem && x.IsAvailable && !checkedItems.Contains(x.Handle)))
                        {
                            item.IsAvailable = false;
                            //UpdateManager.BeginInvoke(100, () => InventoryChanged?.Invoke(null, EventArgs.Empty));
                        }
                    });
            }
            break;
            }
        }
Exemplo n.º 10
0
        private void GameOnUpdate2()
        {
            //hack
            try
            {
                foreach (var unit in EntityManager9.Units.Where(x => x.IsVisible))
                {
                    var inventory = unit.BaseUnit?.Inventory;
                    if (inventory == null)
                    {
                        continue;
                    }

                    var checkedItems = new List <uint>();

                    foreach (var handle in this.GetInventoryItems(inventory).Select(x => x.Handle))
                    {
                        var item = EntityManager9.GetAbilityFast(handle);
                        if (item == null)
                        {
                            continue;
                        }

                        checkedItems.Add(handle);

                        if (item.Owner == unit)
                        {
                            item.IsAvailable = true;
                            continue;
                        }

                        EntityManager9.RemoveAbility(item.BaseAbility);
                        EntityManager9.AddAbility(item.BaseAbility);
                    }


                    foreach (var handle in this.GetStashItems(inventory).Select(x => x.Handle))
                    {
                        var item = EntityManager9.GetAbilityFast(handle);
                        if (item == null)
                        {
                            continue;
                        }

                        checkedItems.Add(handle);

                        if (item.Owner == unit)
                        {
                            item.IsAvailable = false;
                            continue;
                        }

                        EntityManager9.RemoveAbility(item.BaseAbility);
                        EntityManager9.AddAbility(item.BaseAbility);
                    }

                    // stashed neutral items
                    foreach (var item in unit.AbilitiesFast.Where(
                                 x => x.IsItem && x.IsAvailable && !checkedItems.Contains(x.Handle)))
                    {
                        item.IsAvailable = false;
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 11
0
        private void OnInt32PropertyChange(Entity sender, Int32PropertyChangeEventArgs args)
        {
            if (args.NewValue == args.OldValue || args.PropertyName != "m_iParity")
            {
                return;
            }

            var owner = EntityManager9.GetUnitFast(sender.Handle);

            if (owner == null)
            {
                return;
            }

            UpdateManager.BeginInvoke(
                () =>
            {
                try
                {
                    var inventory    = owner.BaseInventory;
                    var checkedItems = new List <uint>();

                    foreach (var handle in this.GetInventoryItems(inventory).Select(x => x.Handle))
                    {
                        var item = EntityManager9.GetAbilityFast(handle);
                        if (item == null)
                        {
                            continue;
                        }

                        checkedItems.Add(handle);

                        if (item.Owner == owner)
                        {
                            item.IsAvailable = true;
                            continue;
                        }

                        EntityManager9.RemoveAbility(item.BaseAbility);
                        EntityManager9.AddAbility(item.BaseAbility);
                    }

                    foreach (var handle in this.GetStashItems(inventory).Select(x => x.Handle))
                    {
                        var item = EntityManager9.GetAbilityFast(handle);
                        if (item == null)
                        {
                            continue;
                        }

                        checkedItems.Add(handle);

                        if (item.Owner == owner)
                        {
                            item.IsAvailable = false;
                            continue;
                        }

                        EntityManager9.RemoveAbility(item.BaseAbility);
                        EntityManager9.AddAbility(item.BaseAbility);
                    }

                    // stashed neutral items
                    foreach (var item in owner.AbilitiesFast.Where(
                                 x => x.IsItem && x.IsAvailable && !checkedItems.Contains(x.Handle)))
                    {
                        item.IsAvailable = false;
                    }
                }
                catch (Exception e)
                {
                    Logger.Error(e);
                }
            });
        }
Exemplo n.º 12
0
        private void OnFloatPropertyChange(Entity sender, FloatPropertyChangeEventArgs args)
        {
            var newValue = args.NewValue;

            // ReSharper disable once CompareOfFloatsByEqualityOperator
            if (newValue == args.OldValue)
            {
                return;
            }

            try
            {
                switch (args.PropertyName)
                {
                case "m_flEnableTime":
                {
                    var ability = EntityManager9.GetAbilityFast(sender.Handle);
                    if (ability == null)
                    {
                        return;
                    }

                    ability.ItemEnableTimeSleeper.SleepUntil(newValue);
                    break;
                }

                case "m_flCastStartTime":
                {
                    if (this.AbilityCasted == null)
                    {
                        break;
                    }

                    var ability = EntityManager9.GetAbilityFast(sender.Handle);
                    if (ability == null)
                    {
                        return;
                    }

                    if (!ability.IsDisplayingCharges)
                    {
                        return;
                    }

                    var castTime = newValue - args.OldValue;
                    if (castTime < 0 || args.OldValue < 0)
                    {
                        return;
                    }

                    var visibleTime = Game.RawGameTime - ability.Owner.LastNotVisibleTime;
                    if (visibleTime < 0.05f)
                    {
                        return;
                    }

                    if (ability.CastPoint <= 0)
                    {
                        this.AbilityCasted(ability);
                    }
                    else
                    {
                        if (Math.Abs(ability.CastPoint - castTime) < 0.03f)
                        {
                            this.AbilityCasted(ability);
                        }
                    }

                    break;
                }

                case "m_fCooldown":
                {
                    if (this.AbilityCasted == null)
                    {
                        break;
                    }

                    if (newValue <= args.OldValue || args.OldValue > 0)
                    {
                        break;
                    }

                    var ability = EntityManager9.GetAbilityFast(sender.Handle);
                    if (ability == null)
                    {
                        return;
                    }

                    var visibleTime = Game.RawGameTime - ability.Owner.LastNotVisibleTime;
                    if (visibleTime < 0.05f)
                    {
                        return;
                    }

                    this.AbilityCasted(ability);
                    break;
                }

                case "m_flChannelStartTime":
                {
                    var ability = EntityManager9.GetAbilityFast(sender.Handle);
                    if (ability == null)
                    {
                        return;
                    }

                    if (!(ability is IChanneled channeled))
                    {
                        break;
                    }

                    if (newValue > 0)
                    {
                        ability.IsChanneling                   = true;
                        channeled.Owner.ChannelEndTime         = newValue + channeled.ChannelTime;
                        channeled.Owner.ChannelActivatesOnCast = channeled.IsActivatesOnChannelStart;

                        this.AbilityChannel?.Invoke(ability);
                    }
                    else
                    {
                        ability.IsChanneling                   = false;
                        channeled.Owner.ChannelEndTime         = 0;
                        channeled.Owner.ChannelActivatesOnCast = false;
                    }

                    break;
                }
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }