/// <summary> /// /// </summary> /// <param name="attacker"></param> /// <param name="damage"></param> void FireRail ( MPWorld world, Entity attacker, int damage, float impulse, short cooldown ) { if (!attacker.ConsumeItem( Inventory.Slugs, 1 )) { return; } var view = Matrix.RotationQuaternion( attacker.Rotation ); Vector3 n,p; Entity e; var direction = view.Forward; var origin = AttackPos( attacker ); if (world.RayCastAgainstAll( origin, origin + direction * 200, out n, out p, out e, attacker )) { //world.SpawnFX( "PlayerDeathMeat", attacker.ID, p, n ); world.SpawnFX( "RailHit", attacker.ID, p, n ); world.SpawnFX( "RailMuzzle", attacker.ID, origin, n ); world.SpawnFX( "RailTrail", attacker.ID, origin, p - origin, attacker.Rotation ); world.InflictDamage( e, attacker.ID, (short)damage, view.Forward * impulse, p, DamageType.RailHit ); } else { world.SpawnFX( "RailMuzzle", attacker.ID, origin, n ); world.SpawnFX( "RailTrail", attacker.ID, origin, direction * 200, attacker.Rotation ); } attacker.SetItemCount( Inventory.WeaponCooldown, cooldown ); }
/// <summary> /// /// </summary> /// <param name="attacker"></param> /// <param name="damage"></param> void FireShot ( MPWorld world, Entity attacker, int damage, int count, float impulse, short cooldown, float spread ) { if (!attacker.ConsumeItem( Inventory.Bullets, 1 )) { return; } var view = Matrix.RotationQuaternion( attacker.Rotation ); Vector3 n,p; Entity e; var origin = AttackPos( attacker ); world.SpawnFX( "MZShotgun", attacker.ID, origin ); for (int i=0; i<count; i++) { var direction = view.Forward + rand.UniformRadialDistribution(0, spread); if (world.RayCastAgainstAll( origin, origin + direction * 400, out n, out p, out e, attacker )) { world.SpawnFX( "ShotTrail", attacker.ID, p, n ); world.InflictDamage( e, attacker.ID, (short)damage, view.Forward * impulse, p, DamageType.BulletHit ); } } attacker.SetItemCount( Inventory.WeaponCooldown, cooldown ); }