Exemplo n.º 1
0
        private void OnModifierAdded(Unit sender, ModifierChangedEventArgs args)
        {
            try
            {
                if (sender.Team == this.OwnerTeam)
                {
                    return;
                }

                if (args.Modifier.Name != "modifier_slark_dark_pact")
                {
                    return;
                }

                this.unit = EntityManager9.GetUnit(sender.Handle);
                if (this.unit == null)
                {
                    return;
                }

                this.effect = new ParticleEffect(
                    "particles/units/heroes/hero_slark/slark_dark_pact_start.vpcf",
                    sender,
                    ParticleAttachment.AbsOriginFollow);

                Unit.OnModifierRemoved += this.OnModifierRemoved;
                this.handler.IsEnabled  = true;
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 2
0
 // Token: 0x06000434 RID: 1076 RVA: 0x00017138 File Offset: 0x00015338
 private void OnAddTrackingProjectile(TrackingProjectileEventArgs args)
 {
     try
     {
         TrackingProjectile projectile   = args.Projectile;
         Entity             target       = projectile.Target;
         EntityHandle?      entityHandle = (target != null) ? new EntityHandle?(target.Handle) : null;
         if (!(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) != base.Owner.HeroHandle))
         {
             Unit unit = projectile.Source as Unit;
             if (!(unit == null))
             {
                 Unit9 unit2 = EntityManager9.GetUnit(unit.Handle);
                 if (!(unit2 == null))
                 {
                     this.projectiles[projectile] = unit2.GetAttackDamage(base.Owner, 2, 0f);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex, null);
     }
 }
Exemplo n.º 3
0
        public bool ShouldBlock(ExecuteOrderEventArgs args)
        {
            if (!this.menu.BlockTooFastReaction)
            {
                return(false);
            }

            switch (args.OrderId)
            {
            case OrderId.AttackTarget:
            case OrderId.AbilityTarget:
            case OrderId.MoveTarget:
            {
                var target = EntityManager9.GetUnitFast(args.Target.Handle);
                if (target == null)
                {
                    return(false);
                }

                if (Game.RawGameTime - target.LastNotVisibleTime < RNG.Randomize(0.25f, 0.03f))
                {
                    return(true);
                }

                break;
            }
            }

            return(false);
        }
Exemplo n.º 4
0
        private void OnHandlePropertyChange(Entity sender, HandlePropertyChangeEventArgs args)
        {
            try
            {
                if (args.NewValue == args.OldValue || args.PropertyName != "m_hTowerAttackTarget")
                {
                    return;
                }

                var unit = EntityManager9.GetUnit(args.NewValue);
                if (unit == null || !unit.IsHero || unit.IsIllusion || unit.Distance(this.owner) > 1000)
                {
                    return;
                }

                this.effect?.Dispose();

                this.effect = new ParticleEffect(@"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 e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 5
0
        public override void AddDrawableAbility(
            List <IDrawableAbility> drawableAbilities,
            ParticleEffect particle,
            Team allyTeam,
            INotificator notificator)
        {
            if (particle.GetControlPoint(1) == new Vector3(-1))
            {
                return;
            }

            var owner = this.SearchOwner || !(particle.Owner is Unit)
                            ? EntityManager9.Abilities.FirstOrDefault(x => x.Id == this.AbilityId && x.Owner.Team != allyTeam)?.Owner
                            : EntityManager9.GetUnit(particle.Owner.Handle);

            if (owner?.IsVisible != false)
            {
                return;
            }

            string ownerName;

            if (owner.IsHero)
            {
                ownerName = owner.Name;
            }
            else
            {
                ownerName = owner.Owner?.Name;

                if (ownerName == null)
                {
                    return;
                }
            }

            var drawableAbility = new DrawableAbility
            {
                AbilityTexture     = this.AbilityId + "_rounded",
                HeroTexture        = ownerName + "_rounded",
                MinimapHeroTexture = ownerName + "_icon",
                ShowUntil          = Game.RawGameTime + this.TimeToShow,
                Position           = (this.RawParticlePosition ? particle.Position : particle.GetControlPoint(this.ControlPoint)).SetZ(350)
            };

            owner.ChangeBasePosition(drawableAbility.Position);

            if (this.Replace)
            {
                var exist = drawableAbilities.LastOrDefault(
                    x => x.AbilityTexture == drawableAbility.AbilityTexture && x.HeroTexture == drawableAbility.HeroTexture);

                if (exist != null)
                {
                    drawableAbilities.Remove(exist);
                }
            }

            drawableAbilities.Add(drawableAbility);
        }
Exemplo n.º 6
0
        private void OnModifierAdded(ModifierAddedEventArgs e)
        {
            try
            {
                var modifier = e.Modifier;
                var sender   = modifier.Owner;
                if (sender.Team == this.OwnerTeam)
                {
                    return;
                }

                if (modifier.Name != "modifier_slark_dark_pact")
                {
                    return;
                }

                this.unit = EntityManager9.GetUnit(sender.Handle);
                if (this.unit == null)
                {
                    return;
                }

                this.effect = ParticleManager.CreateParticle(
                    "particles/units/heroes/hero_slark/slark_dark_pact_start.vpcf",
                    ParticleAttachment.AbsOriginFollow,
                    sender);

                ModifierManager.ModifierRemoved += this.OnModifierRemoved;
                this.handler.IsEnabled           = true;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Exemplo n.º 7
0
        // Token: 0x06000316 RID: 790 RVA: 0x0001B808 File Offset: 0x00019A08
        public override void AddDrawableAbility(List <IDrawableAbility> drawableAbilities, ParticleEffect particle, Team allyTeam, INotificator notificator)
        {
            Unit9 unit = EntityManager9.GetUnit(particle.Owner.Handle);

            if (unit == null || unit.IsVisible)
            {
                return;
            }
            Vector3 v = base.RawParticlePosition ? particle.Position : particle.GetControlPoint(base.ControlPoint);

            if (v.Distance2D(unit.BaseUnit.Position, false) < 50f)
            {
                return;
            }
            string          name            = unit.Name;
            DrawableAbility drawableAbility = new DrawableAbility
            {
                AbilityTexture     = base.AbilityId + "_rounded",
                HeroTexture        = name + "_rounded",
                MinimapHeroTexture = name + "_icon",
                ShowUntil          = Game.RawGameTime + base.TimeToShow,
                Position           = v.SetZ(new float?((float)350))
            };

            if (base.Replace)
            {
                IDrawableAbility drawableAbility2 = drawableAbilities.LastOrDefault((IDrawableAbility x) => x.AbilityTexture == drawableAbility.AbilityTexture && x.HeroTexture == drawableAbility.HeroTexture);
                if (drawableAbility2 != null)
                {
                    drawableAbilities.Remove(drawableAbility2);
                }
            }
            drawableAbilities.Add(drawableAbility);
        }
Exemplo n.º 8
0
        private void OnOrderAdding(OrderAddingEventArgs e)
        {
            var order = e.Order;

            if (order.IsQueued || !e.Process)
            {
                return;
            }

            try
            {
                switch (order.Type)
                {
                case OrderType.AttackTarget:
                {
                    SetTarget(order.Units, order.Target.Handle);
                    break;
                }

                case OrderType.Hold:
                case OrderType.Stop:
                {
                    var units = order.Units;
                    DropTarget(units);
                    StopChanneling(units);
                    break;
                }

                case OrderType.MovePosition:
                case OrderType.MoveTarget:
                {
                    DropTarget(order.Units);
                    break;
                }

                case OrderType.CastTarget:
                {
                    var target = EntityManager9.GetUnitFast(order.Target.Handle);
                    if (target?.IsLinkensProtected == true)
                    {
                        return;
                    }

                    StartChanneling(order.Ability.Handle);
                    break;
                }

                case OrderType.Cast:
                case OrderType.CastPosition:
                {
                    StartChanneling(order.Ability.Handle);
                    break;
                }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Exemplo n.º 9
0
 // Token: 0x06000111 RID: 273 RVA: 0x0000A8A4 File Offset: 0x00008AA4
 private void OnAbilityRemoved(Ability9 ability)
 {
     try
     {
         if (ability.IsItem)
         {
             Unit9 unit = ability.Owner;
             if (unit is SpiritBear)
             {
                 unit = EntityManager9.GetUnit(unit.Owner.Handle);
                 if (unit == null)
                 {
                     return;
                 }
             }
             if (this.units.ContainsKey(unit))
             {
                 Dictionary <Unit9, int> dictionary = this.units;
                 Unit9 key = unit;
                 dictionary[key] -= (int)ability.BaseItem.Cost;
             }
         }
     }
     catch (Exception exception)
     {
         Logger.Error(exception, null);
     }
 }
Exemplo n.º 10
0
        public override bool IsIntersecting(Unit9 unit, bool checkPrediction)
        {
            var position = this.missileUnit.NetworkPosition;

            if (this.initialPosition == position)
            {
                return(false);
            }

            var missile = EntityManager9.GetUnit(this.missileUnit.Handle);

            if (missile == null)
            {
                return(false);
            }

            var target = EntityManager9.Units.Where(x => x.IsEnemy(this.Caster) && x.IsAlive && x.IsUnit)
                         .OrderBy(x => missile.GetAngle(x.Position))
                         .FirstOrDefault();

            if (target == null)
            {
                return(false);
            }

            return(unit.Equals(target));
        }
Exemplo n.º 11
0
        // Token: 0x060003B9 RID: 953 RVA: 0x0001D1F8 File Offset: 0x0001B3F8
        private void OnExecuteOrder(Player sender, ExecuteOrderEventArgs args)
        {
            if (args.IsQueued)
            {
                return;
            }
            try
            {
                OrderId orderId = args.OrderId;
                switch (orderId)
                {
                case OrderId.MoveLocation:
                case OrderId.MoveTarget:
                    UnitMonitor.DropTarget(args.Entities);
                    goto IL_DE;

                case OrderId.AttackLocation:
                case OrderId.AbilityTargetTree:
                case OrderId.ToggleAbility:
                    goto IL_DE;

                case OrderId.AttackTarget:
                    UnitMonitor.SetTarget(args.Entities, args.Target.Handle);
                    goto IL_DE;

                case OrderId.AbilityLocation:
                case OrderId.Ability:
                    UnitMonitor.StartChanneling(args.Ability.Handle);
                    goto IL_DE;

                case OrderId.AbilityTarget:
                {
                    Unit9 unitFast = EntityManager9.GetUnitFast(args.Target.Handle);
                    if (unitFast != null && unitFast.IsLinkensProtected)
                    {
                        return;
                    }
                    UnitMonitor.StartChanneling(args.Ability.Handle);
                    goto IL_DE;
                }

                case OrderId.Hold:
                    break;

                default:
                    if (orderId != OrderId.Stop)
                    {
                        goto IL_DE;
                    }
                    break;
                }
                UnitMonitor.DropTarget(args.Entities);
                UnitMonitor.StopChanneling(args.Entities);
                IL_DE :;
            }
            catch (Exception exception)
            {
                Logger.Error(exception, null);
            }
        }
Exemplo n.º 12
0
        // Token: 0x060008DB RID: 2267 RVA: 0x000226F8 File Offset: 0x000208F8
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.zuus_static_field)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability != null)
            {
                this.staticField = (StaticField)EntityManager9.AddAbility(ability);
            }
            ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.zuus_lightning_bolt)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });
            if (ability != null)
            {
                this.lightningBolt = (LightningBolt)EntityManager9.AddAbility(ability);
            }
        }
Exemplo n.º 13
0
        private void OnOrderAdding(OrderAddingEventArgs e)
        {
            try
            {
                if (!e.Process || !e.IsCustom)
                {
                    return;
                }

                var order = e.Order;
                if (order.Type != OrderType.CastPosition)
                {
                    return;
                }

                var ability = EntityManager9.GetAbility(order.Ability.Handle);
                if (ability == null)
                {
                    return;
                }

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

                this.abilityPositions[ability.Handle] = order.Position;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Exemplo n.º 14
0
        private void OnExecuteOrder(Player sender, ExecuteOrderEventArgs args)
        {
            try
            {
                if (!args.Process || args.IsPlayerInput || args.OrderId != OrderId.AbilityLocation)
                {
                    return;
                }

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

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

                this.abilityPositions[ability.Handle] = args.TargetPosition;
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 15
0
        private void OnBoolPropertyChange(Entity sender, BoolPropertyChangeEventArgs args)
        {
            try
            {
                if (args.OldValue == args.NewValue || (!args.OldValue && args.NewValue) || args.PropertyName != "m_bIsWaitingToSpawn")
                {
                    return;
                }

                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 e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 16
0
        private void OnAddTrackingProjectile(TrackingProjectileAddedEventArgs args)
        {
            if (!this.Menu.AbilitySettings.IsCounterEnabled(this.Ability.Name))
            {
                return;
            }

            try
            {
                var projectile = args.TrackingProjectile;
                if (projectile.Target?.Handle != this.Owner.Handle)
                {
                    return;
                }

                var source = projectile.Source as Unit;
                if (source == null)
                {
                    return;
                }

                var unit = EntityManager9.GetUnit(source.Handle);
                if (unit == null)
                {
                    return;
                }

                this.projectiles[projectile] = unit.GetAttackDamage(this.Owner, DamageValue.Maximum);
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 17
0
        private void OnHandlePropertyChange(Entity sender, HandlePropertyChangeEventArgs args)
        {
            if (sender.Team == this.allyTeam || args.NewValue == args.OldValue || !args.OldValue.IsValid ||
                args.PropertyName != "m_hKillCamUnit")
            {
                return;
            }

            try
            {
                // respawn
                var handle = ((Player)sender).Hero?.Handle;
                var unit   = (Hero9)EntityManager9.GetUnitFast(handle);

                if (unit == null)
                {
                    return;
                }

                UpdateManager.BeginInvoke(() => RespawnUnit(unit), 500);
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 18
0
        private void OnModifierRemoved(ModifierRemovedEventArgs e)
        {
            var modifier = e.Modifier;
            var sender   = modifier.Owner;

            try
            {
                if (sender.Team != this.owner.Team || modifier.IsHidden || !this.denyModifiers.Contains(modifier.Name))
                {
                    return;
                }

                var unit = EntityManager9.GetUnit(sender.Handle);
                if (unit == null || !this.units.TryGetValue(unit, out var effect))
                {
                    return;
                }

                effect?.Dispose();
                this.units.Remove(unit);
            }
            catch (Exception ex)
            {
                Logger.Error(ex, sender);
            }
        }
Exemplo n.º 19
0
        private void OnModifierAdded(ModifierAddedEventArgs e)
        {
            var modifier = e.Modifier;
            var sender   = modifier.Owner;

            try
            {
                if (sender.Team != this.owner.Team || modifier.IsHidden || !this.denyModifiers.Contains(modifier.Name))
                {
                    return;
                }

                var unit = EntityManager9.GetUnit(sender.Handle);
                if (unit == null || unit.IsMyHero || unit.IsIllusion || !unit.IsHero)
                {
                    return;
                }

                this.units[unit]       = null;
                this.handler.IsEnabled = true;
            }
            catch (Exception ex)
            {
                Logger.Error(ex, sender);
            }
        }
Exemplo n.º 20
0
        private void OnBoolPropertyChange(Entity sender, BoolPropertyChangeEventArgs args)
        {
            try
            {
                if (args.NewValue == args.OldValue || args.PropertyName != "m_bInAbilityPhase")
                {
                    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 (args.NewValue)
                {
                    if (ability is AreaOfEffectAbility)
                    {
                        if (ability.CastRange > 0)
                        {
                            UpdateManager.BeginInvoke(
                                () => this.abilityPositions[ability.Handle] = ability.Owner.InFront(ability.CastRange),
                                10);
                        }
                        else
                        {
                            UpdateManager.BeginInvoke(() => this.abilityPositions[ability.Handle] = ability.Owner.Position, 10);
                        }
                    }

                    this.abilityTimings[ability]   = Game.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 e)
            {
                Logger.Error(e);
            }
        }
        // Token: 0x060002E4 RID: 740 RVA: 0x0001ACFC File Offset: 0x00018EFC
        public override void AddDrawableAbility(List <IDrawableAbility> drawableAbilities, ParticleEffect particle, Team allyTeam, INotificator notificator)
        {
            Vector3 position = particle.GetControlPoint(base.ControlPoint);

            if (particle.Name.Contains("detonate"))
            {
                DrawableRemoteMinesAbility drawableRemoteMinesAbility = drawableAbilities.OfType <DrawableRemoteMinesAbility>().FirstOrDefault((DrawableRemoteMinesAbility x) => x.Position.Distance2D(position, false) < 10f);
                if (drawableRemoteMinesAbility != null)
                {
                    if (drawableRemoteMinesAbility.IsShowingRange)
                    {
                        drawableRemoteMinesAbility.RemoveRange();
                    }
                    drawableAbilities.Remove(drawableRemoteMinesAbility);
                    return;
                }
            }
            else
            {
                if (ObjectManager.GetEntitiesFast <Unit>().FirstOrDefault((Unit x) => x.Name == "npc_dota_techies_remote_mine" && x.Distance2D(position) < 10f) != null)
                {
                    return;
                }
                Unit9 owner = EntityManager9.GetUnit(particle.Owner.Handle);
                if (owner == null)
                {
                    return;
                }
                UpdateManager.BeginInvoke(delegate
                {
                    try
                    {
                        if (particle.IsValid)
                        {
                            DrawableRemoteMinesAbility drawableRemoteMinesAbility2 = new DrawableRemoteMinesAbility
                            {
                                AbilityTexture     = this.AbilityId + "_rounded",
                                HeroTexture        = owner.Name + "_rounded",
                                MinimapHeroTexture = owner.Name + "_icon",
                                Position           = position.SetZ(new float?((float)350)),
                                Duration           = this.Duration,
                                IsShowingRange     = this.ShowRange,
                                Range         = this.Range,
                                RangeColor    = this.RangeColor,
                                ShowUntil     = Game.RawGameTime + this.Duration,
                                ShowHeroUntil = Game.RawGameTime + this.TimeToShow,
                                Owner         = owner.BaseEntity
                            };
                            drawableRemoteMinesAbility2.DrawRange();
                            drawableAbilities.Add(drawableRemoteMinesAbility2);
                        }
                    }
                    catch (Exception exception)
                    {
                        Logger.Error(exception, null);
                    }
                }, 1000);
            }
        }
Exemplo n.º 22
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.º 23
0
        private void OnGameEvent(GameEventEventArgs e)
        {
            try
            {
                var gameEvent = e.GameEvent;

                switch (gameEvent.Name)
                {
                case "dota_player_kill":
                case "dota_player_deny":
                {
                    var id     = gameEvent.GetInt32("victim_userid");
                    var handle = EntityManager.GetPlayerById(id)?.Hero?.Handle;
                    var unit   = (Hero9)EntityManager9.GetUnitFast(handle);

                    if (unit == null || unit.Team == this.allyTeam)
                    {
                        break;
                    }

                    unit.BaseIsAlive = false;

                    if (unit.IsVisible)
                    {
                        var delay = (int)(((unit.BaseHero.RespawnTime - GameManager.RawGameTime) + 0.5f) * 1000);
                        if (delay <= 0)
                        {
                            break;
                        }

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

                case "dota_buyback":
                {
                    var id     = gameEvent.GetInt32("player_id");
                    var handle = EntityManager.GetPlayerById(id)?.Hero?.Handle;
                    var unit   = EntityManager9.GetUnitFast(handle);

                    if (unit == null || unit.Team == this.allyTeam)
                    {
                        break;
                    }

                    unit.BaseIsAlive = true;
                    unit.BaseHealth  = unit.MaximumHealth;
                    unit.BaseMana    = unit.MaximumMana;
                }
                break;
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Exemplo n.º 24
0
        private void OnAddTrackingProjectile(TrackingProjectileEventArgs args)
        {
            try
            {
                var projectile = args.Projectile;
                if (projectile.IsAutoAttackProjectile())
                {
                    return;
                }

                var target = EntityManager9.GetUnit(projectile.Target.Handle);
                if (target == null || target.Team != this.myTeam)
                {
                    return;
                }

                var source = args.Projectile.Source;
                if (source != null)
                {
                    //// enemy ability, but added though ally
                    //// might add some ability prediction problems...
                    //var thoughAlly = target.Team == this.myTeam && source.Team == this.myTeam;

                    //var ability = this.evadableAbilities.OfType<IProjectile>()
                    //    .FirstOrDefault(
                    //        x => (int)x.ActiveAbility.Speed == projectile.Speed && x.ActiveAbility.TimeSinceCasted < 1.5f
                    //             && (thoughAlly || x.ActiveAbility.Owner.Handle == source.Handle));

                    var ability = this.evadableAbilities
                                  .Where(
                        x => x.Ability.Owner.Handle == source.Handle &&
                        (x.Ability.TimeSinceCasted < 1.5f + (x.Ability is IChanneled channeled ? channeled.ChannelTime : 0) ||
                         x.Ability.BaseAbility.IsHidden))
                                  .OfType <IProjectile>()
                                  .FirstOrDefault(x => (int)x.ActiveAbility.Speed == projectile.Speed);

                    ability?.AddProjectile(projectile, target);
                    return;
                }

                var predictedAbilities = this.evadableAbilities.Where(
                    x => !x.Ability.Owner.IsVisible || x.Ability.TimeSinceCasted < 1.5f
                    /*+ x.AdditionalDelay*/)
                                         .OfType <IProjectile>()
                                         .Where(x => (int)x.ActiveAbility.Speed == projectile.Speed)
                                         .ToList();

                if (predictedAbilities.Count == 1)
                {
                    predictedAbilities[0].AddProjectile(projectile, target);
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 25
0
        // Token: 0x060003BA RID: 954 RVA: 0x0001D300 File Offset: 0x0001B500
        private void OnInt32PropertyChange(Entity sender, Int32PropertyChangeEventArgs args)
        {
            int newValue = args.NewValue;

            if (newValue == args.OldValue)
            {
                return;
            }
            try
            {
                Unit9 unitFast = EntityManager9.GetUnitFast(sender.Handle);
                if (!(unitFast == null))
                {
                    string propertyName = args.PropertyName;
                    if (!(propertyName == "m_iHealth"))
                    {
                        if (propertyName == "m_NetworkActivity")
                        {
                            if (unitFast.IsValid)
                            {
                                if (this.attackActivities.Contains(newValue))
                                {
                                    this.AttackStarted(unitFast);
                                }
                                else
                                {
                                    this.AttackStopped(unitFast);
                                }
                            }
                        }
                    }
                    else if (newValue > 0)
                    {
                        UnitMonitor.HealthEventHandler unitHealthChange = this.UnitHealthChange;
                        if (unitHealthChange != null)
                        {
                            unitHealthChange(unitFast, (float)newValue);
                        }
                    }
                    else
                    {
                        unitFast.DeathTime = Game.RawGameTime;
                        this.AttackStopped(unitFast);
                        this.attackSleeper.Remove(unitFast.Handle);
                        UnitMonitor.EventHandler unitDied = this.UnitDied;
                        if (unitDied != null)
                        {
                            unitDied(unitFast);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, sender, null);
            }
        }
        // Token: 0x060002ED RID: 749 RVA: 0x0001AF90 File Offset: 0x00019190
        public override void AddDrawableAbility(List <IDrawableAbility> drawableAbilities, ParticleEffect particle, Team allyTeam, INotificator notificator)
        {
            if (particle.GetControlPoint(1u) == new Vector3(-1f))
            {
                return;
            }
            Unit9 unit;

            if (!base.SearchOwner && particle.Owner is Unit)
            {
                unit = EntityManager9.GetUnit(particle.Owner.Handle);
            }
            else
            {
                Ability9 ability = EntityManager9.Abilities.FirstOrDefault((Ability9 x) => x.Id == this.AbilityId && x.Owner.Team != allyTeam);
                unit = ((ability != null) ? ability.Owner : null);
            }
            Unit9 unit2 = unit;

            if (unit2 == null || unit2.IsVisible)
            {
                return;
            }
            string text;

            if (unit2.IsHero)
            {
                text = unit2.Name;
            }
            else
            {
                Unit9 owner = unit2.Owner;
                text = ((owner != null) ? owner.Name : null);
                if (text == null)
                {
                    return;
                }
            }
            DrawableAbility drawableAbility = new DrawableAbility
            {
                AbilityTexture     = base.AbilityId + "_rounded",
                HeroTexture        = text + "_rounded",
                MinimapHeroTexture = text + "_icon",
                ShowUntil          = Game.RawGameTime + base.TimeToShow,
                Position           = (base.RawParticlePosition ? particle.Position : particle.GetControlPoint(base.ControlPoint)).SetZ(new float?((float)350))
            };

            if (base.Replace)
            {
                IDrawableAbility drawableAbility2 = drawableAbilities.LastOrDefault((IDrawableAbility x) => x.AbilityTexture == drawableAbility.AbilityTexture && x.HeroTexture == drawableAbility.HeroTexture);
                if (drawableAbility2 != null)
                {
                    drawableAbilities.Remove(drawableAbility2);
                }
            }
            drawableAbilities.Add(drawableAbility);
        }
Exemplo n.º 27
0
        private static void OnExecuteOrder(Player sender, ExecuteOrderEventArgs args)
        {
            if (args.IsQueued || !args.Process)
            {
                return;
            }

            try
            {
                switch (args.OrderId)
                {
                case OrderId.AttackTarget:
                {
                    SetTarget(args.Entities, args.Target.Handle);
                    break;
                }

                case OrderId.Hold:
                case OrderId.Stop:
                {
                    DropTarget(args.Entities);
                    StopChanneling(args.Entities);
                    break;
                }

                case OrderId.MoveLocation:
                case OrderId.MoveTarget:
                {
                    DropTarget(args.Entities);
                    break;
                }

                case OrderId.AbilityTarget:
                {
                    var target = EntityManager9.GetUnitFast(args.Target.Handle);
                    if (target?.IsLinkensProtected == true)
                    {
                        return;
                    }

                    StartChanneling(args.Ability.Handle);
                    break;
                }

                case OrderId.Ability:
                case OrderId.AbilityLocation:
                {
                    StartChanneling(args.Ability.Handle);
                    break;
                }
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 28
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.º 29
0
        private void CheckTeleport(ParticleEffect particle, bool start)
        {
            try
            {
                if (!particle.IsValid)
                {
                    return;
                }

                var colorCp = particle.GetControlPoint(2);
                var color   = Color.FromArgb(
                    (int)(255 * Math.Round(colorCp.X, 2)),
                    (int)(255 * Math.Round(colorCp.Y, 2)),
                    (int)(255 * Math.Round(colorCp.Z, 2)));

                if (!this.colors.TryGetValue(color, out var id))
                {
                    return;
                }

                var player = ObjectManager.GetPlayerById(id);
                if (player == null || player.Hero == null || player.Team == this.ownerTeam)
                {
                    return;
                }

                var hero = (Hero9)EntityManager9.GetUnit(player.Hero.Handle);
                if (hero == null || (hero.IsVisible && start))
                {
                    return;
                }

                var position = particle.GetControlPoint(0);
                var heroId   = hero.Id;
                var duration = 3f;

                //  if (hero.Abilities.Any(x => x.Id == AbilityId.item_travel_boots && x.CanBeCasted(false)))
                {
                    duration = this.GetDuration(heroId, position, start);
                }

                this.AddTeleport(new Teleport(particle, heroId, position, duration, start));

                if (start)
                {
                    hero.ChangeBasePosition(position);
                }
                else
                {
                    UpdateManager.BeginInvoke(() => this.SetPosition(particle, position, hero), (int)(duration * 1000) - 200);
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Exemplo n.º 30
0
        private void OnInt32PropertyChange(Entity sender, Int32PropertyChangeEventArgs args)
        {
            var newValue = args.NewValue;

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

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

                switch (args.PropertyName)
                {
                case "m_iHealth":
                {
                    if (newValue > 0)
                    {
                        this.UnitHealthChange?.Invoke(unit, newValue);
                        break;
                    }

                    unit.DeathTime = Game.RawGameTime;

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

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

                case "m_NetworkActivity":
                {
                    if (this.attackActivities.Contains(newValue))
                    {
                        this.AttackStarted(unit);
                    }
                    else
                    {
                        this.AttackStopped(unit);
                    }

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