diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs index 7b72445346..2939c6a6a3 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs @@ -104,7 +104,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition } } - public IEntity TakeBullet(MapCoordinates spawnAt) + public IEntity TakeBullet(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap) { if (_ammoIsProjectile) { @@ -122,7 +122,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition appearanceComponent.SetData(AmmoVisuals.Spent, true); } - var entity = Owner.EntityManager.SpawnEntity(_projectileId, spawnAt); + var entity = spawnAtGrid.GridID != GridId.Invalid ? Owner.EntityManager.SpawnEntity(_projectileId, spawnAtGrid) : Owner.EntityManager.SpawnEntity(_projectileId, spawnAtMap); + DebugTools.AssertNotNull(entity); return entity; } diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs index 298fdcc63a..87d8e24faf 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs @@ -164,14 +164,14 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels return _chamberContainer.ContainedEntity; } - public override IEntity TakeProjectile(MapCoordinates spawnAt) + public override IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap) { var chamberEntity = _chamberContainer.ContainedEntity; if (_autoCycle) { Cycle(); } - return chamberEntity?.GetComponent().TakeBullet(spawnAt); + return chamberEntity?.GetComponent().TakeBullet(spawnAtGrid, spawnAtMap); } protected override bool WeaponCanFire() diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/PumpBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/PumpBarrelComponent.cs index 832b68f827..b7cd964a27 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/PumpBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/PumpBarrelComponent.cs @@ -124,14 +124,14 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels return _chamberContainer.ContainedEntity; } - public override IEntity TakeProjectile(MapCoordinates spawnAt) + public override IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap) { var chamberEntity = _chamberContainer.ContainedEntity; if (!_manualCycle) { Cycle(); } - return chamberEntity?.GetComponent().TakeBullet(spawnAt); + return chamberEntity?.GetComponent().TakeBullet(spawnAtGrid, spawnAtMap); } private void Cycle(bool manual = false) diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs index 7d04ca57ad..d66f0554d7 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs @@ -172,17 +172,16 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels /// Takes a projectile out if possible /// IEnumerable just to make supporting shotguns saner /// - /// /// /// - public override IEntity TakeProjectile(MapCoordinates spawnAt) + public override IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap) { var ammo = _ammoSlots[_currentSlot]; IEntity bullet = null; if (ammo != null) { var ammoComponent = ammo.GetComponent(); - bullet = ammoComponent.TakeBullet(spawnAt); + bullet = ammoComponent.TakeBullet(spawnAtGrid, spawnAtMap); if (ammoComponent.Caseless) { _ammoSlots[_currentSlot] = null; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs index 16b4254d3f..d357af3bfd 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs @@ -137,7 +137,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels return ammo; } - public override IEntity TakeProjectile(MapCoordinates spawnAt) + public override IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap) { var powerCellEntity = _powerCellContainer.ContainedEntity; @@ -166,7 +166,9 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels } else { - entity = Owner.EntityManager.SpawnEntity(_ammoPrototype, Owner.Transform.GridPosition); + entity = Owner.Transform.GridID != GridId.Invalid ? + Owner.EntityManager.SpawnEntity(_ammoPrototype, Owner.Transform.GridPosition) + : Owner.EntityManager.SpawnEntity(_ammoPrototype, Owner.Transform.MapPosition); } if (entity.TryGetComponent(out ProjectileComponent projectileComponent)) diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs index 0db88429ef..e51c75b4df 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs @@ -184,7 +184,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels return BoltOpen ? null : _chamberContainer.ContainedEntity; } - public override IEntity TakeProjectile(MapCoordinates spawnAt) + public override IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap) { if (BoltOpen) { @@ -193,7 +193,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels var entity = _chamberContainer.ContainedEntity; Cycle(); - return entity?.GetComponent().TakeBullet(spawnAt); + return entity?.GetComponent().TakeBullet(spawnAtGrid, spawnAtMap); } private void Cycle(bool manual = false) diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs index 8c214ffd8f..1c191ba133 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs @@ -52,7 +52,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels private TimeSpan _lastFire; public abstract IEntity PeekAmmo(); - public abstract IEntity TakeProjectile(MapCoordinates spawnAt); + public abstract IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap); // Recoil / spray control private Angle _minAngle; @@ -189,7 +189,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels } var ammo = PeekAmmo(); - var projectile = TakeProjectile(shooter.Transform.MapPosition); + var projectile = TakeProjectile(shooter.Transform.GridPosition, shooter.Transform.MapPosition); if (projectile == null) { soundSystem.PlayAtCoords(_soundEmpty, Owner.Transform.GridPosition);