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); } }
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(); } }
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); } }
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); } }
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)); } }
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); }
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; } }
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)); }
public virtual void OnProjectileHit(IProjectile projectile, ProjectileHitArgs args) { }
public virtual void OnProjectileHit(ProjectileHitArgs args) { }