Beispiel #1
0
        private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e)
        {
            if (e.PropertyName != "fStockTime")
            {
                return;
            }

            UpdateManager.BeginInvoke(() =>
            {
                if (this.tomeSleeper.IsSleeping)
                {
                    return;
                }

                this.OnUpdate();
            });
        }
Beispiel #2
0
        private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e)
        {
            if (e.PropertyName != "m_bIsWaitingToSpawn")
            {
                return;
            }

            var newValue = e.NewValue.GetBoolean();
            var oldValue = e.OldValue.GetBoolean();

            if (newValue == oldValue || (!oldValue && newValue))
            {
                return;
            }

            UpdateManager.BeginInvoke(() =>
            {
                try
                {
                    if (this.spawnSleeper)
                    {
                        return;
                    }

                    var unit = EntityManager9.GetUnit(sender.Handle);
                    if (unit == null || !unit.IsLaneCreep || unit.Team != this.ownerTeam)
                    {
                        return;
                    }

                    foreach (var creepWave in this.creepWaves.Where(x => !x.IsSpawned))
                    {
                        creepWave.Spawn();
                    }

                    this.spawnSleeper.Sleep(25);
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                }
            });
        }
Beispiel #3
0
        private void Entity_NetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e)
        {
            if (e.PropertyName == "m_angRotation" && sender.ClassId == ClassId.CDOTA_Unit_Hero_Mirana)
            {
                Console.WriteLine(e.PropertyName + "  " + ((Unit)sender).Rotation);
            }

            if (e.PropertyName != "m_anglediff" || sender.ClassId != ClassId.CDOTA_Unit_Hero_Mirana)
            {
                return;
            }

            Console.WriteLine(e.PropertyName + "  " + ((Unit)sender).Rotation + "  " + e.NewValue.GetInt32());

            /*UpdateManager.BeginInvoke(() =>
             * {
             *  //Console.WriteLine(sender + "  " + (NetworkActivity)e.OldValue.GetInt32());
             *  Console.WriteLine(sender + "  " + e.PropertyName + "  " + e.NewValue.GetInt32());
             * });*/
        }
Beispiel #4
0
        private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e)
        {
            if (e.PropertyName != "m_hTowerAttackTarget")
            {
                return;
            }

            var newValue = e.NewValue.GetUInt32();

            if (newValue == e.OldValue.GetUInt32())
            {
                return;
            }

            UpdateManager.BeginInvoke(() =>
            {
                try
                {
                    var unit = EntityManager9.GetUnit(newValue);
                    if (unit == null || !unit.IsHero || unit.IsIllusion || unit.Distance(this.owner) > 1000)
                    {
                        return;
                    }

                    this.effect?.Dispose();

                    this.effect = ParticleManager.CreateParticle(@"materials\ensage_ui\particles\target.vpcf", unit.Position);
                    this.effect.SetControlPoint(2, sender.Position);
                    this.effect.SetControlPoint(5, new Vector3(255, 0, 0));
                    this.effect.SetControlPoint(6, new Vector3(255));

                    this.tower             = (Tower)sender;
                    this.towerTarget       = unit;
                    this.handler.IsEnabled = true;
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                }
            });
        }
Beispiel #5
0
        private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e)
        {
            if (e.PropertyName != "m_iAbilityPoints")
            {
                return;
            }

            UpdateManager.BeginInvoke(async() =>
            {
                if (sender.Handle != this.owner.HeroHandle)
                {
                    return;
                }

                var newValue = e.NewValue.GetInt32();
                if (newValue == e.OldValue.GetInt32())
                {
                    return;
                }

                await Task.Delay(100);
                this.LearnAbility(newValue);
            });
        }
Beispiel #6
0
        private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e)
        {
            if (e.PropertyName != "m_bInAbilityPhase")
            {
                return;
            }

            UpdateManager.BeginInvoke(() =>
            {
                try
                {
                    var newValue = e.NewValue.GetBoolean();
                    if (newValue == e.OldValue.GetBoolean())
                    {
                        return;
                    }

                    var ability = EntityManager9.GetAbility(sender.Handle) as ActiveAbility;
                    if (ability?.IsControllable != true)
                    {
                        return;
                    }

                    if (this.IsIgnored(ability))
                    {
                        return;
                    }

                    if (!(ability is AreaOfEffectAbility) && !(ability is PredictionAbility))
                    {
                        return;
                    }

                    if (newValue)
                    {
                        if (ability is AreaOfEffectAbility)
                        {
                            if (ability.CastRange > 0)
                            {
                                UpdateManager.BeginInvoke(10, () => this.abilityPositions[ability.Handle] = ability.Owner.InFront(ability.CastRange));
                            }
                            else
                            {
                                UpdateManager.BeginInvoke(10, () => this.abilityPositions[ability.Handle] = ability.Owner.Position);
                            }
                        }

                        this.abilityTimings[ability]   = GameManager.RawGameTime + ability.CastPoint;
                        this.failSafeHandler.IsEnabled = true;
                    }
                    else
                    {
                        this.abilityTimings.Remove(ability);
                        this.abilityPositions.Remove(ability.Handle);
                        if (this.abilityTimings.Count <= 0)
                        {
                            this.failSafeHandler.IsEnabled = false;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                }
            });
        }
Beispiel #7
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;
            }
        }
Beispiel #8
0
        private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
            case "m_bReincarnating":
            {
                var newValue = e.NewValue.GetBoolean();
                if (newValue == e.OldValue.GetBoolean())
                {
                    break;
                }

                UpdateManager.BeginInvoke(() =>
                    {
                        var unit = (Hero9)EntityManager9.GetUnitFast(sender.Handle);
                        if (unit == null)
                        {
                            return;
                        }

                        unit.IsReincarnating = newValue;
                    });
            }
            break;

            case "m_iIsControllableByPlayer64":
            {
                if (e.NewValue.GetInt64() == e.OldValue.GetInt64())
                {
                    break;
                }

                UpdateManager.BeginInvoke(() =>
                    {
                        EntityManager9.ChangeEntityControl(sender);
                    });
            }
            break;

            case "m_hKillCamUnit":
            {
                if (e.NewValue.GetUInt32() == e.OldValue.GetUInt32())
                {
                    break;
                }

                UpdateManager.BeginInvoke(() =>
                    {
                        if (sender.Team == this.allyTeam)
                        {
                            return;
                        }

                        var entity = e.NewValue.GetEntity();
                        if (entity == null || !entity.IsValid)
                        {
                            return;
                        }

                        var handle = ((Player)sender).Hero?.Handle;
                        var unit   = (Hero9)EntityManager9.GetUnitFast(handle);
                        if (unit == null)
                        {
                            return;
                        }

                        UpdateManager.BeginInvoke(500, () => RespawnUnit(unit));
                    });
            }
            break;

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

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

                        if (newValue > 0)
                        {
                            this.UnitHealthChange?.Invoke(unit, newValue);
                        }
                        else
                        {
                            unit.DeathTime = GameManager.RawGameTime;

                            this.AttackStopped(unit);
                            this.attackSleeper.Remove(unit.Handle);

                            this.UnitDied?.Invoke(unit);
                        }
                    });
            }
            break;

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

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

                        if (this.attackActivities.Contains(newValue))
                        {
                            this.AttackStarted(unit);
                        }
                        else
                        {
                            this.AttackStopped(unit);
                        }
                    });
            }
            break;
            }
        }