コード例 #1
0
 // Token: 0x060005F1 RID: 1521 RVA: 0x0001DD44 File Offset: 0x0001BF44
 private void OnParticleEffectAdded(Entity sender, ParticleEffectAddedEventArgs args)
 {
     try
     {
         ParticleEffect particle     = args.ParticleEffect;
         Entity         owner        = particle.Owner;
         EntityHandle?  entityHandle = (owner != null) ? new EntityHandle?(owner.Handle) : null;
         if (!(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) != this.playerHandle))
         {
             string name = args.Name;
             if (!(name == "particles/units/heroes/hero_kunkka/kunkka_spell_x_spot.vpcf") && !(name == "particles/econ/items/kunkka/divine_anchor/hero_kunkka_dafx_skills/kunkka_spell_x_spot_fxset.vpcf"))
             {
                 if (name == "particles/units/heroes/hero_kunkka/kunkka_ghostship_marker.vpcf")
                 {
                     float time = Game.RawGameTime - Game.Ping / 2000f;
                     UpdateManager.BeginInvoke(delegate
                     {
                         this.ship.CalculateTimings(particle.GetControlPoint(0u), time);
                     }, 0);
                 }
             }
             else
             {
                 UpdateManager.BeginInvoke(delegate
                 {
                     this.xMark.Position = particle.GetControlPoint(0u);
                 }, 0);
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex, null);
     }
 }
コード例 #2
0
        // Token: 0x060002D0 RID: 720 RVA: 0x0001A898 File Offset: 0x00018A98
        public override void AddDrawableAbility(List <IDrawableAbility> drawableAbilities, ParticleEffect particle, Team allyTeam, INotificator notificator)
        {
            Vector3 position = particle.GetControlPoint(base.ControlPoint);

            if (EntityManager9.Heroes.Any((Hero9 x) => x.IsUnit && x.Team == allyTeam && x.IsAlive && x.Distance(position) < 800f))
            {
                return;
            }
            SimpleDrawableAbility drawableAbility = new SimpleDrawableAbility
            {
                AbilityTexture = base.AbilityId + "_rounded",
                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);
            if (base.ShowNotification && notificator != null)
            {
                notificator.PushNotification(new AbilityNotification(null, base.AbilityId.ToString()));
            }
        }
コード例 #3
0
        public void AddParticle(ParticleEffect particle, string name)
        {
            if (this.unitAddTime <= 0)
            {
                return;
            }

            var time          = Game.RawGameTime - (Game.Ping / 2000);
            var startPosition = particle.GetControlPoint(0);
            var endPosition   = particle.GetControlPoint(1);
            var direction     = startPosition + endPosition;
            var flyingTime    = time - this.unitAddTime;
            var position      = startPosition.Extend2D(direction, flyingTime * this.ActiveAbility.Speed);
            var radius        = Math.Min(
                this.maxRadius.GetValue(1),
                Math.Max((flyingTime * this.growRadius.GetValue(1)) + this.minRadius.GetValue(1), this.minRadius.GetValue(1)));

            var obstacle = new IceBlastObstacle(this, position, radius)
            {
                EndCastTime     = time,
                EndObstacleTime = time + particle.GetControlPoint(5).X
            };

            this.Pathfinder.AddObstacle(obstacle);
            this.unitAddTime = 0;
        }
コード例 #4
0
        public void AddParticle(ParticleEffect particle, string name)
        {
            var time = Game.RawGameTime - (Game.Ping / 2000);

            UpdateManager.BeginInvoke(
                () =>
            {
                try
                {
                    if (!particle.IsValid)
                    {
                        return;
                    }

                    var startPosition = particle.GetControlPoint(0);
                    var endPosition   = particle.GetControlPoint(5);

                    var obstacle = new AreaOfEffectObstacle(this, endPosition)
                    {
                        EndObstacleTime = time + (startPosition.Distance2D(endPosition) / this.ActiveAbility.Speed)
                    };

                    this.Pathfinder.AddObstacle(obstacle);
                }
                catch (Exception e)
                {
                    Logger.Error(e);
                }
            });
        }
コード例 #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);
        }
コード例 #6
0
 // Token: 0x060001E3 RID: 483 RVA: 0x0000F314 File Offset: 0x0000D514
 private void CheckTeleport(ParticleEffect particle)
 {
     try
     {
         if (particle.IsValid)
         {
             Vector3 controlPoint       = particle.GetControlPoint(2u);
             System.Drawing.Color color = System.Drawing.Color.FromArgb((int)(255.0 * Math.Round((double)controlPoint.X, 2)), (int)(255.0 * Math.Round((double)controlPoint.Y, 2)), (int)(255.0 * Math.Round((double)controlPoint.Z, 2)));
             uint playerId;
             if (this.colors.TryGetValue(color, out playerId))
             {
                 Player playerById = ObjectManager.GetPlayerById(playerId);
                 if (!(playerById == null) && playerById.Team != this.ownerTeam)
                 {
                     if (particle.Name.Contains("start"))
                     {
                         Hero hero = playerById.Hero;
                         if (hero != null && hero.IsVisible)
                         {
                             return;
                         }
                     }
                     this.AddTeleport(new Teleport(playerById.SelectedHeroId, particle.GetControlPoint(0u), color));
                 }
             }
         }
     }
     catch (Exception exception)
     {
         Logger.Error(exception, null);
     }
 }
コード例 #7
0
 public override void Check()
 {
     if (StartCast <= 0 && IsInPhase && AbilityOwner.IsVisible)
     {
         StartCast = Game.RawGameTime;
         EndCast   = StartCast + CastPoint + GetCastRange() / GetProjectileSpeed();
     }
     else if (StartCast > 0 && Obstacle == null && CanBeStopped() && !AbilityOwner.IsTurning())
     {
         StartPosition = AbilityOwner.NetworkPosition;
         EndPosition   = AbilityOwner.InFront(GetCastRange() + GetRadius() / 2);
         Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
     }
     else if (Obstacle == null && particleEffect != null && !particleAdded)
     {
         particleAdded = true;
         StartPosition = particleEffect.GetControlPoint(0);
         EndPosition   = StartPosition.Extend(particleEffect.GetControlPoint(1), GetCastRange() + GetRadius() / 2);
         StartCast     = Game.RawGameTime;
         EndCast       = StartCast + GetCastRange() / GetProjectileSpeed();
         Obstacle      = Pathfinder.AddObstacle(StartPosition, EndPosition, GetRadius(), Obstacle);
     }
     else if (StartCast > 0 && Game.RawGameTime > EndCast)
     {
         End();
     }
     else if (Obstacle != null && !CanBeStopped())
     {
         Pathfinder.UpdateObstacle(Obstacle.Value, GetProjectilePosition(), GetRadius(), GetEndRadius());
     }
 }
コード例 #8
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);
            }
        }
コード例 #9
0
        // 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);
        }
コード例 #10
0
        public void AddParticle(ParticleEffect particle, string name)
        {
            var time          = Game.RawGameTime - (Game.Ping / 2000);
            var startPosition = particle.GetControlPoint(0);
            var endPosition   = particle.GetControlPoint(1);

            var obstacle = new LinearProjectileObstacle(this, startPosition, endPosition)
            {
                EndCastTime     = time,
                EndObstacleTime = time + (this.RangedAbility.Range / this.RangedAbility.Speed)
            };

            this.Pathfinder.AddObstacle(obstacle);
        }
コード例 #11
0
        // Token: 0x0600030D RID: 781 RVA: 0x0001B590 File Offset: 0x00019790
        public override void AddDrawableAbility(List <IDrawableAbility> drawableAbilities, ParticleEffect particle, Team allyTeam, INotificator notificator)
        {
            if (particle.Name.Contains("dash"))
            {
                drawableAbilities.RemoveAll((IDrawableAbility x) => x is DrawableFireRemnantAbility);
                return;
            }
            Unit9 unit = EntityManager9.GetUnit(particle.Owner.Owner.Handle);

            if (unit == null)
            {
                return;
            }
            Vector3 startPosition = particle.GetControlPoint(this.StartControlPoint);

            if (!unit.IsVisible)
            {
                DrawableAbility item = new DrawableAbility
                {
                    AbilityTexture     = base.AbilityId + "_rounded",
                    HeroTexture        = unit.Name + "_rounded",
                    MinimapHeroTexture = unit.Name + "_icon",
                    ShowUntil          = Game.RawGameTime + base.TimeToShow,
                    Position           = startPosition.SetZ(new float?((float)350))
                };
                drawableAbilities.Add(item);
            }
            DrawableFireRemnantAbility[] remnants = drawableAbilities.OfType <DrawableFireRemnantAbility>().ToArray <DrawableFireRemnantAbility>();
            Unit unit2 = ObjectManager.GetEntitiesFast <Unit>().Concat(ObjectManager.GetDormantEntities <Unit>()).FirstOrDefault((Unit x) => x.IsAlive && x.Name == "npc_dota_ember_spirit_remnant" && x.Distance2D(startPosition) < 1500f && remnants.All((DrawableFireRemnantAbility z) => z.Unit != x));

            if (unit2 == null)
            {
                return;
            }
            DrawableFireRemnantAbility item2 = new DrawableFireRemnantAbility
            {
                AbilityTexture     = base.AbilityId + "_rounded",
                HeroTexture        = unit.Name + "_rounded",
                MinimapHeroTexture = unit.Name + "_icon",
                Position           = particle.GetControlPoint(base.ControlPoint).SetZ(new float?((float)350)),
                Duration           = base.Duration,
                ShowUntil          = Game.RawGameTime + base.Duration,
                ShowHeroUntil      = Game.RawGameTime + base.TimeToShow,
                Owner = unit.BaseEntity,
                Unit  = unit2
            };

            drawableAbilities.Add(item2);
        }
コード例 #12
0
 // Token: 0x06000178 RID: 376 RVA: 0x0000D4B4 File Offset: 0x0000B6B4
 private void OnParticleEffectAdded(Entity sender, ParticleEffectAddedEventArgs args)
 {
     try
     {
         string name = args.Name;
         if (!(name == "particles/units/heroes/hero_ancient_apparition/ancient_apparition_ice_blast_final.vpcf") && !(name == "particles/econ/items/ancient_apparition/aa_blast_ti_5/ancient_apparition_ice_blast_final_ti5.vpcf"))
         {
             if (name == "particles/econ/items/ancient_apparition/aa_blast_ti_5/ancient_apparition_ice_blast_explode_ti5.vpcf" || name == "particles/units/heroes/hero_ancient_apparition/ancient_apparition_ice_blast_explode.vpcf")
             {
                 Entity.OnParticleEffectAdded -= this.OnParticleEffectAdded;
                 ParticleEffect particleEffect = this.effect;
                 if (particleEffect != null)
                 {
                     particleEffect.Dispose();
                 }
             }
         }
         else
         {
             float time = Game.RawGameTime - Game.Ping / 1000f;
             UpdateManager.BeginInvoke(delegate
             {
                 try
                 {
                     ParticleEffect particleEffect2 = args.ParticleEffect;
                     if (particleEffect2.IsValid)
                     {
                         Vector3 controlPoint  = particleEffect2.GetControlPoint(0u);
                         Vector3 controlPoint2 = particleEffect2.GetControlPoint(1u);
                         float num             = time - this.unitAddTime;
                         Vector3 to            = controlPoint + controlPoint2;
                         Vector3 v             = controlPoint.Extend2D(to, num * this.speed.GetValue(1u));
                         float num2            = Math.Min(this.maxRadius.GetValue(1u), Math.Max(num * this.growRadius.GetValue(1u) + this.minRadius.GetValue(1u), this.minRadius.GetValue(1u)));
                         this.effect           = new ParticleEffect("particles/units/heroes/hero_ancient_apparition/ancient_apparition_ice_blast_marker.vpcf", v.SetZ(new float?((float)384)));
                         this.effect.SetControlPoint(1u, new Vector3(num2, 1f, 1f));
                     }
                 }
                 catch (Exception exception2)
                 {
                     Logger.Error(exception2, null);
                 }
             }, 0);
         }
     }
     catch (Exception exception)
     {
         Logger.Error(exception, null);
     }
 }
コード例 #13
0
 // Token: 0x060001C0 RID: 448 RVA: 0x0000EA5C File Offset: 0x0000CC5C
 private void CheckRune(ParticleEffect particle)
 {
     try
     {
         Entity owner = particle.Owner;
         if (!(owner != null) || (owner.Team != this.ownerTeam && !owner.IsVisible))
         {
             Vector3 position = particle.GetControlPoint(0u);
             Vector3 item     = this.bountySpawns.Find((Vector3 x) => x.Distance2D(position, false) < 500f);
             if (!item.IsZero)
             {
                 if (!this.pickedRunes.Contains(item))
                 {
                     if (this.pickedRunes.Count == 0)
                     {
                         this.context.Renderer.Draw += this.OnDraw;
                     }
                     this.pickedRunes.Add(item);
                 }
             }
         }
     }
     catch (Exception exception)
     {
         Logger.Error(exception, null);
     }
 }
コード例 #14
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);
        }
コード例 #15
0
 // Token: 0x060001D1 RID: 465 RVA: 0x0000EE84 File Offset: 0x0000D084
 private void CheckAttack(ParticleEffect particle)
 {
     try
     {
         if (particle.IsValid && particle.Owner.Team == Team.Neutral && !particle.Owner.IsVisible)
         {
             Vector3 position = particle.GetControlPoint(0u);
             Sleeper value    = this.attacks.FirstOrDefault((KeyValuePair <Vector3, Sleeper> x) => x.Key.Distance2D(position, false) < 500f).Value;
             if (value != null)
             {
                 value.Sleep(3f);
             }
             else
             {
                 if (this.attacks.Count == 0)
                 {
                     this.context.Renderer.Draw += this.OnDraw;
                 }
                 this.attacks[position] = new Sleeper(3f);
             }
         }
     }
     catch (Exception exception)
     {
         Logger.Error(exception, null);
     }
 }
コード例 #16
0
        public void AddParticle(ParticleEffect particle, string name)
        {
            var time = Game.RawGameTime - (Game.Ping / 2000);

            UpdateManager.BeginInvoke(
                () =>
            {
                try
                {
                    if (!particle.IsValid)
                    {
                        return;
                    }

                    var position = particle.GetControlPoint(0);

                    var obstacle = new AreaOfEffectObstacle(this, position)
                    {
                        EndCastTime     = time,
                        EndObstacleTime = time + this.Ability.ActivationDelay
                    };

                    this.Pathfinder.AddObstacle(obstacle);
                }
                catch (Exception e)
                {
                    Logger.Error(e);
                }
            });
        }
コード例 #17
0
        public void AddParticle(ParticleEffect particle, string name)
        {
            if (this.Owner.IsVisible)
            {
                return;
            }

            this.startTime = Game.RawGameTime - (Game.Ping / 2000);

            UpdateManager.BeginInvoke(
                () =>
            {
                try
                {
                    if (!particle.IsValid)
                    {
                        return;
                    }

                    this.startPosition = particle.GetControlPoint(1);
                }
                catch (Exception e)
                {
                    Logger.Error(e);
                }
            });
        }
コード例 #18
0
        // 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);
            }
        }
コード例 #19
0
ファイル: ChaosMeteorEvadable.cs プロジェクト: vana41203/O9K
        public void AddParticle(ParticleEffect particle, string name)
        {
            var time           = Game.RawGameTime - (Game.Ping / 2000);
            var casterPosition = particle.GetControlPoint(0);
            var landPosition   = particle.GetControlPoint(1);

            //todo improve evade timings
            var obstacle = new LinearProjectileObstacle(
                this,
                landPosition.Extend2D(casterPosition, this.RangedAbility.Radius / 2),
                casterPosition.Extend2D(landPosition, 2000))
            {
                EndCastTime     = time,
                EndObstacleTime = time + this.Ability.ActivationDelay + (this.RangedAbility.Range / this.RangedAbility.Speed)
            };

            this.Pathfinder.AddObstacle(obstacle);
        }
コード例 #20
0
        public void AddParticle(ParticleEffect particle, string name)
        {
            if (name.Contains("impact"))
            {
                this.Pathfinder.CancelObstacle(this.Ability.Handle);
                return;
            }

            if (this.Owner.IsVisible)
            {
                return;
            }

            var time = Game.RawGameTime - (Game.Ping / 2000);

            UpdateManager.BeginInvoke(
                () =>
            {
                try
                {
                    if (!particle.IsValid)
                    {
                        return;
                    }

                    var startPosition = particle.GetControlPoint(0);
                    var endPosition   = particle.GetControlPoint(1);

                    var obstacle = new LinearProjectileObstacle(this, startPosition, endPosition)
                    {
                        EndCastTime     = time,
                        EndObstacleTime = time + (this.RangedAbility.Range / this.RangedAbility.Speed)
                    };

                    this.Pathfinder.AddObstacle(obstacle);
                }
                catch (Exception e)
                {
                    Logger.Error(e);
                }
            });
        }
コード例 #21
0
        public void AddParticle(ParticleEffect particle, string name)
        {
            var time = Game.RawGameTime - (Game.Ping / 2000);

            var obstacle = new AreaOfEffectSpeedObstacle(this, particle.GetControlPoint(0), 300)
            {
                EndCastTime     = time,
                EndObstacleTime = time + (this.ActiveAbility.Radius / this.ActiveAbility.Speed)
            };

            this.Pathfinder.AddObstacle(obstacle);
        }
コード例 #22
0
        public void AddParticle(ParticleEffect particle, string name)
        {
            var time     = Game.RawGameTime - (Game.Ping / 2000);
            var position = particle.GetControlPoint(0);

            var obstacle = new AreaOfEffectObstacle(this, position)
            {
                EndCastTime     = time,
                EndObstacleTime = time + this.Ability.Duration
            };

            this.Pathfinder.AddObstacle(obstacle);
        }
コード例 #23
0
ファイル: GlimpseEvadable.cs プロジェクト: vana41203/O9K
        public void AddParticle(ParticleEffect particle, string name)
        {
            var time = Game.RawGameTime - (Game.Ping / 2000);

            UpdateManager.BeginInvoke(
                () =>
            {
                try
                {
                    if (!particle.IsValid)
                    {
                        return;
                    }

                    var targetPosition = particle.GetControlPoint(0);
                    var target         = EntityManager9.Units
                                         .Where(x => x.IsAlive && x.IsEnemy(this.Owner) && x.Distance(targetPosition) < 200)
                                         .OrderBy(x => x.Distance(targetPosition))
                                         .FirstOrDefault();

                    if (target == null)
                    {
                        return;
                    }

                    var obstacle = new GlimpseObstacle(this, target)
                    {
                        EndCastTime     = time,
                        EndObstacleTime = time + particle.GetControlPoint(2).X
                    };

                    this.Pathfinder.AddObstacle(obstacle);
                }
                catch (Exception e)
                {
                    Logger.Error(e);
                }
            });
        }
コード例 #24
0
ファイル: SmokeAbilityData.cs プロジェクト: vana41203/O9K
        public override void AddDrawableAbility(
            List <IDrawableAbility> drawableAbilities,
            ParticleEffect particle,
            Team allyTeam,
            INotificator notificator)
        {
            var position = particle.GetControlPoint(this.ControlPoint);

            if (EntityManager9.Heroes.Any(x => x.IsUnit && x.Team == allyTeam && x.IsAlive && x.Distance(position) < 800))
            {
                return;
            }

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

            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);

            if (this.ShowNotification)
            {
                notificator?.PushNotification(new AbilityNotification(null, this.AbilityId.ToString()));
            }
        }
コード例 #25
0
        // Token: 0x060002F2 RID: 754 RVA: 0x0001B110 File Offset: 0x00019310
        public override void AddDrawableAbility(List <IDrawableAbility> drawableAbilities, ParticleEffect particle, Team allyTeam, INotificator notificator)
        {
            Vector3 position = (base.RawParticlePosition ? particle.Position : particle.GetControlPoint(base.ControlPoint)).SetZ(new float?((float)350));

            if (EntityManager9.AllyUnits.Any((Unit9 x) => x.IsAlive && x.Distance(position) < 400f))
            {
                return;
            }
            Ability9 ability = EntityManager9.Abilities.FirstOrDefault((Ability9 x) => (x.Id == this.AbilityId || x.Id == AbilityId.item_mjollnir) && x.Owner.Team != allyTeam && x.Owner.CanUseAbilities);
            Unit9    unit    = (ability != null) ? ability.Owner : null;

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

            if (unit.IsHero)
            {
                text = unit.Name;
            }
            else
            {
                Unit9 owner = unit.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           = position
            };

            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);
        }
コード例 #26
0
        // Token: 0x06000322 RID: 802 RVA: 0x0001BBC4 File Offset: 0x00019DC4
        public override void AddDrawableAbility(List <IDrawableAbility> drawableAbilities, ParticleEffect particle, Team allyTeam, INotificator notificator)
        {
            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;
            }
            if (Game.RawGameTime - unit2.LastVisibleTime >= 1f)
            {
                DrawableAbility item = new DrawableAbility
                {
                    AbilityTexture     = base.AbilityId + "_rounded",
                    HeroTexture        = unit2.Name + "_rounded",
                    MinimapHeroTexture = unit2.Name + "_icon",
                    ShowUntil          = Game.RawGameTime + base.TimeToShow,
                    Position           = particle.GetControlPoint(base.ControlPoint)
                };
                drawableAbilities.Add(item);
                return;
            }
            Ability9 ability2 = unit2.Abilities.FirstOrDefault((Ability9 x) => x.Id == this.AbilityId);

            if (ability2 == null)
            {
                return;
            }
            DrawableAbility item2 = new DrawableAbility
            {
                AbilityTexture     = base.AbilityId + "_rounded",
                HeroTexture        = unit2.Name + "_rounded",
                MinimapHeroTexture = unit2.Name + "_icon",
                ShowUntil          = Game.RawGameTime + base.TimeToShow,
                Position           = unit2.InFront(ability2.Range, 0f, true)
            };

            drawableAbilities.Add(item2);
        }
コード例 #27
0
        public override void AddDrawableAbility(
            List <IDrawableAbility> drawableAbilities,
            ParticleEffect particle,
            Team allyTeam,
            INotificator notificator)
        {
            var owner = EntityManager9.GetUnit(particle.Owner.Handle);

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

            var position = this.RawParticlePosition ? particle.Position : particle.GetControlPoint(this.ControlPoint);

            if (position.IsZero || position.Distance2D(owner.BaseUnit.Position) < 50)
            {
                return;
            }

            var ownerName = owner.Name;

            var drawableAbility = new DrawableAbility
            {
                AbilityTexture     = this.AbilityId + "_rounded",
                HeroTexture        = ownerName + "_rounded",
                MinimapHeroTexture = ownerName + "_icon",
                ShowUntil          = Game.RawGameTime + this.TimeToShow,
                Position           = position.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);
        }
コード例 #28
0
        // Token: 0x060002F8 RID: 760 RVA: 0x0001B2C0 File Offset: 0x000194C0
        public override void AddDrawableAbility(List <IDrawableAbility> drawableAbilities, ParticleEffect particle, Team allyTeam, INotificator notificator)
        {
            Vector3 position = base.RawParticlePosition ? particle.Position : particle.GetControlPoint(base.ControlPoint);

            if (position.IsZero)
            {
                Logger.Error("ParticleZero", particle.Name);
                return;
            }
            Ability9 ability = (from x in EntityManager9.Abilities
                                where x.Id == this.AbilityId && x.Owner.CanUseAbilities
                                orderby x.Owner.Position.Distance2D(position, false)
                                select x).FirstOrDefault <Ability9>();
            Unit9 unit = (ability != null) ? ability.Owner : null;

            if (unit == null || unit.IsVisible || unit.Team == allyTeam)
            {
                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           = position.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);
            if (base.ShowNotification && notificator != null)
            {
                notificator.PushNotification(new AbilityNotification(name, base.AbilityId.ToString()));
            }
        }
コード例 #29
0
        public virtual void AddDrawableAbility(
            List <IDrawableAbility> drawableAbilities,
            ParticleEffect particle,
            Team allyTeam,
            INotificator notificator)
        {
            var owner = this.SearchOwner || !(particle.Owner is Unit)
                            ? EntityManager9.Abilities.FirstOrDefault(
                x => x.Id == this.AbilityId && x.Owner.Team != allyTeam && x.Owner.CanUseAbilities)
                        ?.Owner
                            : EntityManager9.GetUnit(particle.Owner.Handle);

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

            string ownerName;

            if (owner.IsHero)
            {
                if (owner.Name == nameof(HeroId.npc_dota_hero_rubick) &&
                    (this.AbilityId != AbilityId.rubick_fade_bolt || this.AbilityId != AbilityId.rubick_telekinesis))
                {
                    return;
                }

                ownerName = owner.Name;
            }
            else
            {
                ownerName = owner.Owner?.Name;

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

            var position = this.RawParticlePosition ? particle.Position : particle.GetControlPoint(this.ControlPoint);

            if (position.IsZero || (owner.IsHero && owner.Distance(position) < 50))
            {
                return;
            }

            var drawableAbility = new DrawableAbility
            {
                AbilityTexture     = this.AbilityId + "_rounded",
                HeroTexture        = ownerName + "_rounded",
                MinimapHeroTexture = ownerName + "_icon",
                ShowUntil          = Game.RawGameTime + this.TimeToShow,
                Position           = position.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);

            if (this.ShowNotification)
            {
                notificator?.PushNotification(new AbilityNotification(ownerName, this.AbilityId.ToString()));
            }
        }
コード例 #30
0
        private void OnDebugDrawOnMap(EventArgs args)
        {
            foreach (ObstacleParticle obstacleParticle in obstacleParticles)
            {
                if (!obstacleParticle.IsValid)
                {
                    continue;
                }

                if (obstacleParticle.IsLine)
                {
                    Vector2 startPos, endPos;
                    //Debugging.WriteLine("Len {0}", (obstacleParticle.EndPosition - obstacleParticle.Position).Length());

                    var visible = Drawing.WorldToScreen(obstacleParticle.Position, out startPos);
                    visible |= Drawing.WorldToScreen(obstacleParticle.EndPosition, out endPos);
                    if (visible)
                    {
                        var ortho = (obstacleParticle.EndPosition - obstacleParticle.Position);
                        ortho = ortho.Rotated(MathUtil.DegreesToRadians(90));
                        ortho.Normalize();
                        ortho *= obstacleParticle.Radius;

                        var a = obstacleParticle.Position + ortho;
                        var b = obstacleParticle.Position - ortho;
                        var c = obstacleParticle.EndPosition - ortho;
                        var d = obstacleParticle.EndPosition + ortho;

                        Vector2 sa, sb, sc, sd;
                        Drawing.WorldToScreen(a, out sa);
                        Drawing.WorldToScreen(b, out sb);
                        Drawing.WorldToScreen(c, out sc);
                        Drawing.WorldToScreen(d, out sd);
                        Drawing.DrawLine(sa, sb, Color.Blue);
                        Drawing.DrawLine(sb, sc, Color.Blue);
                        Drawing.DrawLine(sc, sd, Color.Blue);
                        Drawing.DrawLine(sd, sa, Color.Blue);

                        if (obstacleParticle.Position != obstacleParticle.CurrentPosition)
                        {
                            var     t1 = obstacleParticle.CurrentPosition + ortho;
                            var     t2 = obstacleParticle.CurrentPosition - ortho;
                            Vector2 st1, st2;
                            Drawing.WorldToScreen(t1, out st1);
                            Drawing.WorldToScreen(t2, out st2);
                            Drawing.DrawLine(st1, st2, Color.Yellow);
                        }
                    }
                }
                else
                {
                    Vector2 screenPos;
                    if (Drawing.WorldToScreen(obstacleParticle.EndPosition, out screenPos))
                    {
                        Vector2 radiusPos;
                        var     tmp = obstacleParticle.EndPosition;
                        tmp.X += obstacleParticle.Radius;
                        Drawing.WorldToScreen(tmp, out radiusPos);
                        Drawing.DrawCircle(screenPos, (uint)(radiusPos - screenPos).Length(), 24, Color.Red);
                    }
                }
            }
            if (testParticle != null && testParticle.IsValid)
            {
                Vector2 startPos, endPos;
                Drawing.WorldToScreen(testParticle.GetControlPoint(0), out startPos);
                Drawing.WorldToScreen(testParticle.GetControlPoint(1), out endPos);

                Console.WriteLine("TestParticle {0}:", testParticle.HighestControlPoint);
                for (uint i = 0; i < testParticle.HighestControlPoint; ++i)
                {
                    Console.WriteLine(testParticle.GetControlPoint(i));
                }
                Console.WriteLine();

                /*
                 * 0 == StartPosition
                 * 1 == EndPosition
                 * 3 == CurrenPosition
                 */
                // Drawing.DrawCircle(startPos, (uint)200, 24, Color.Red);
                Drawing.DrawLine(startPos, endPos, Color.Red);
            }
            //if (miranaArrow != null && miranaArrow.IsValid)
            //{
            //    Console.WriteLine(miranaArrow.MovementSpeed);
            //}
        }