private static void OnProjectileHit(IProjectile projectile, ProjectileHitArgs args)
        {
            if (m_projectiles.ContainsKey(projectile.InstanceID))
            {
                var proj    = m_projectiles[projectile.InstanceID];
                var ownerID = proj.InitialOwnerPlayerID;

                // Projectile is not fired from IPlayer, custom weapon with custom powerup is not supported
                if (ownerID == 0)
                {
                    return;
                }

                proj.OnProjectileHit(args);

                // TODO: powerup is not activated if the player is dead
                PlayerWeapon playerWpn;
                if (m_owners.TryGetValue(ownerID, out playerWpn))
                {
                    var currentRangeWpn = playerWpn.CurrentRangeWeapon;
                    if (currentRangeWpn != null)
                    {
                        playerWpn.CurrentRangeWeapon.OnProjectileHit(projectile, args);
                    }
                }

                // NOTE: the reason I dont remove projectile when RemoveFlag = true is because some projectiles
                // like Spinner have longer lifecycle than the original projectile itself
            }
        }
 private void OnProjectileHit(IProjectile projectile, ProjectileHitArgs args)
 {
     if (args.RemoveFlag)
     {
         m_customBullets.Remove(projectile.InstanceID);
     }
 }
Exemple #3
0
        public override void OnProjectileHit(IProjectile projectile, ProjectileHitArgs args)
        {
            base.OnProjectileHit(projectile, args);

            if (RandomHelper.Between(0, 100) < 90)
            {
                DeflectBullet(projectile, args.HitNormal);
            }
        }
        public override void OnProjectileHit(ProjectileHitArgs args)
        {
            base.OnProjectileHit(args);

            // in case bouncing ammo hit multiple times
            if (CurrentState == State.Normal && args.RemoveFlag)
            {
                Hover();
            }
        }
Exemple #5
0
        public override void OnProjectileHit(ProjectileHitArgs args)
        {
            base.OnProjectileHit(args);

            var o = Game.GetObject(args.HitObjectID);

            if (o != null)
            {
                Electrocute(o);
            }
        }
        public override void OnProjectileHit(ProjectileHitArgs args)
        {
            IsRemoved = true;
            base.OnProjectileHit(args);

            if (!args.IsPlayer || IsExplosiveProjectile)
            {
                return;
            }

            Fatigue(args.HitObjectID);
        }
        public override void OnProjectileHit(ProjectileHitArgs args)
        {
            var rndNum = RandomHelper.Between(0, 1);

            if (rndNum < StunRangeChance)
            {
                ElectrocuteRange(args.HitPosition);
            }
            if (StunRangeChance <= rndNum && rndNum < StunChance)
            {
                Electrocute(args);
            }
        }
Exemple #8
0
        public override void OnProjectileHit(ProjectileHitArgs args)
        {
            base.OnProjectileHit(args);

            if (IsExplosiveProjectile)
            {
                var explosiveArea   = ScriptHelper.GrowFromCenter(args.HitPosition, Constants.ExplosionRadius * 2);
                var playersInRadius = Game.GetObjectsByArea <IPlayer>(explosiveArea)
                                      .Where((p) => ScriptHelper.IntersectCircle(p.GetAABB(), args.HitPosition, Constants.ExplosionRadius));

                OnProjectileExploded(playersInRadius);
            }
        }
        public override void OnProjectileHit(ProjectileHitArgs args)
        {
            base.OnProjectileHit(args);

            var hitObject = GetObject(args);

            if (!args.IsPlayer && hitObject.GetBodyType() == BodyType.Static)
            {
                return;
            }

            var angles = new float[] { MathExtension.ToRadians(35), MathExtension.ToRadians(70) };
            var angle  = MathExtension.NormalizeAngle(ScriptHelper.GetAngle(Instance.Direction));

            if (angle > MathHelper.PIOver2 && angle <= MathExtension.PI_3Over2)
            {
                angles = ScriptHelper.Flip(angles, FlipDirection.Horizontal);
            }

            var position      = Instance.Position;
            var pushDirection = Instance.Direction;
            var upDirection   = RandomHelper.Direction(angles[0], angles[1], true);
            var modifiers     = GetForceModifier();
            var velocity      = hitObject.GetLinearVelocity();

            if (args.IsPlayer)
            {
                velocity += Instance.Direction * 4 + upDirection * 14 * modifiers;
                hitObject.SetLinearVelocity(MathExtension.ClampMagnitude(velocity, 15));
            }
            else
            {
                var mass      = hitObject.GetMass();
                var magnitude = MathHelper.Clamp(1f / mass / 7f, 3, 30) * modifiers;
                velocity += Instance.Direction * magnitude + upDirection * magnitude / 10;
                hitObject.SetLinearVelocity(velocity);
                //ScriptHelper.LogDebug(hitObject.Name, mass, magnitude);
            }

            //if (Game.IsEditorTest)
            //{
            //    ScriptHelper.RunIn(() =>
            //    {
            //        if (args.IsPlayer)
            //            Game.DrawText(modifiers.ToString(), position);
            //        Game.DrawLine(position, position + pushDirection * 3);
            //        Game.DrawLine(position, position + upDirection * 3, Color.Yellow);
            //        Game.DrawLine(position, position + velocity, Color.Green);
            //    }, 2000);
            //}
        }
        private void Electrocute(ProjectileHitArgs args)
        {
            var position = args.HitPosition;

            if (args.IsPlayer)
            {
                var player = (IPlayer)Game.GetObject(args.HitObjectID);

                if (CanBeStunned(player))
                {
                    Game.PlayEffect(EffectName.CustomFloatText, position, "stunned");
                    m_stunnedPlayers.Add(player.UniqueID, new StunnedPlayer(player, position));
                }
            }
        }
        public override void OnProjectileHit(ProjectileHitArgs args)
        {
            base.OnProjectileHit(args);

            if (!IsExplosiveProjectile)
            {
                if (!args.IsPlayer)
                {
                    return;
                }

                var player = Game.GetPlayer(args.HitObjectID);
                Strip(player);
            }
        }
Exemple #12
0
        private static void OnProjectileHit(IProjectile projectile, ProjectileHitArgs args)
        {
            if (args.IsPlayer)
            {
                var player = Game.GetPlayer(args.HitObjectID);
                var bot    = GetBot(player);
                if (bot == Bot.None)
                {
                    return;
                }

                // I use this instead of PlayerDamage callback because this one include additional
                // info like normal vector
                bot.OnProjectileHit(projectile, args);
            }
        }
        private void OnProjectileHit(IProjectile projectile, ProjectileHitArgs args)
        {
            if (m_customBullets.ContainsKey(projectile.InstanceID))
            {
                var rndNum = rnd.Next(0, 100);
                if (rndNum < 1)
                {
                    ElectrocuteRange(args.HitPosition);
                }
                if (1 <= rndNum && rndNum < 21)
                {
                    var obj = Game.GetObject(args.HitObjectID);
                    Electrocute(args);
                }

                m_customBullets.Remove(projectile.InstanceID);
            }
        }
        private IObject GetObject(ProjectileHitArgs args)
        {
            if (args.IsPlayer)
            {
                var player = Game.GetPlayer(args.HitObjectID);

                if (!player.IsFalling)
                {
                    ScriptHelper.ExecuteSingleCommand(player, PlayerCommandType.Fall, 30);
                }

                return(player);
            }
            else
            {
                return(Game.GetObject(args.HitObjectID));
            }
        }
Exemple #15
0
        private void Electrocute(ProjectileHitArgs args)
        {
            var position = args.HitPosition;

            if (args.IsPlayer)
            {
                var player = Game.GetPlayer(args.HitObjectID);
                var bot    = BotManager.GetBot(player);

                if (bot != Bot.None)
                {
                    StunBot(bot, position);
                }
            }
            else
            {
                PlayStunEffects(position, false);
            }
        }
        public override void OnProjectileHit(ProjectileHitArgs args)
        {
            base.OnProjectileHit(args);

            if (!args.IsPlayer)
            {
                return;
            }
            var bot = BotManager.GetBot(args.HitObjectID);

            if (bot == Bot.None)
            {
                return;
            }

            var info     = GetInfo(bot.Player);
            var modifier = Instance.GetProperties().PlayerDamage / 6; // SMG projectile deals 6hp

            info.Inflate(modifier);
        }
Exemple #17
0
        public virtual void OnProjectileHit(IProjectile projectile, ProjectileHitArgs args)
        {
            var player = Game.GetPlayer(projectile.InitialOwnerPlayerID);

            if (player == null)
            {
                return;
            }

            var bot       = BotManager.GetBot(player);
            var cowboyBot = bot as CowboyBot;

            // TODO: not apply if the bot is dead before this event runs
            if (cowboyBot != null)
            {
                if (args.IsCrit)
                {
                    var destroyWeapon = RandomHelper.Percentage(cowboyBot.DestroyWeaponWhenCritDisarmChance);
                    if (RandomHelper.Percentage(cowboyBot.CritDisarmChance))
                    {
                        Disarm(projectile.Direction, destroyWeapon);
                    }
                }
                else
                {
                    var destroyWeapon = RandomHelper.Percentage(cowboyBot.DestroyWeaponWhenDisarmChance);
                    if (RandomHelper.Percentage(cowboyBot.DisarmChance))
                    {
                        Disarm(projectile.Direction, destroyWeapon);
                    }
                }
            }
            if (bot.Type == BotType.Hunter && !Player.IsRemoved)
            {
                var skinName = Player.GetProfile().Skin.Name;
                if (skinName == "FrankenbearSkin" || skinName == "BearSkin")
                {
                    Player.DealDamage(projectile.GetProperties().PlayerDamage * 2);
                }
            }
        }
        public override void OnProjectileHit(ProjectileHitArgs args)
        {
            base.OnProjectileHit(args);

            if (!args.RemoveFlag)
            {
                return;
            }

            var hitObject = Game.GetObject(args.HitObjectID);

            if (hitObject != null && hitObject.GetCollisionFilter().CategoryBits == CategoryBits.StaticGround)
            {
                return;
            }

            m_explodePosition = Instance.Position;
            m_explodeTime     = Game.TotalElapsedGameTime;
            Instance.FlagForRemoval();

            var rcResult = Game.RayCast(args.HitPosition, args.HitPosition - Vector2.UnitY * SmokeRadius, new RayCastInput()
            {
                IncludeOverlap   = true,
                ClosestHitOnly   = true,
                FilterOnMaskBits = true,
                MaskBits         = CategoryBits.StaticGround,
            }).Where(r => r.HitObject != null);

            if (rcResult.Any())
            {
                m_groundPositionY = rcResult.Single().HitObject.GetWorldPosition().Y;
            }
            else
            {
                m_groundPositionY = float.MinValue;
            }
        }
Exemple #19
0
 public void OnProjectileHit(IProjectile projectile, ProjectileHitArgs args)
 {
     Game.WriteToConsole(string.Format("Projectile {0} hit {1} {2} for {3} damage", projectile.InstanceID, (args.IsPlayer ? "player" : "object"), args.HitObjectID, args.Damage));
 }
Exemple #20
0
 public virtual void OnProjectileHit(IProjectile projectile, ProjectileHitArgs args)
 {
 }
 public virtual void OnProjectileHit(ProjectileHitArgs args)
 {
 }