示例#1
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);
            }
        }
示例#2
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;
            }
        }
示例#3
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);
                }
            });
        }