diff --git a/server/src/main/resources/overrides/game_objects0.adb.lst b/server/src/main/resources/overrides/game_objects0.adb.lst index 5c86f5d4b..ea68b51ab 100644 --- a/server/src/main/resources/overrides/game_objects0.adb.lst +++ b/server/src/main/resources/overrides/game_objects0.adb.lst @@ -55,7 +55,7 @@ add_property lasher holstertime 750 add_property lasher_projectile_ap lasher_projectile_ap false add_property lasher_projectile_ap lasher_projectile true add_property lightgunship maxhealth 855 -add_property maelstrom allowed false +add_property maelstrom allowed true add_property maelstrom equiptime 1000 add_property maelstrom holstertime 1000 add_property magcutter equiptime 250 diff --git a/src/main/scala/net/psforever/actors/session/csr/WeaponAndProjectileLogic.scala b/src/main/scala/net/psforever/actors/session/csr/WeaponAndProjectileLogic.scala index 3b2d780d2..b8c0b6485 100644 --- a/src/main/scala/net/psforever/actors/session/csr/WeaponAndProjectileLogic.scala +++ b/src/main/scala/net/psforever/actors/session/csr/WeaponAndProjectileLogic.scala @@ -132,7 +132,10 @@ class WeaponAndProjectileLogic(val ops: WeaponAndProjectileOperations, implicit } //... if (list.isEmpty) { - ops.handleProxyDamage(pkt.projectile_guid, pkt.hit_info.map(_.hit_pos).getOrElse(Vector3.Zero)) + ops.handleProxyDamage(pkt.projectile_guid, pkt.hit_info.map(_.hit_pos).getOrElse(Vector3.Zero)).foreach { + case (target, proxy, hitPos, _) => + ops.resolveProjectileInteraction(target, proxy, DamageResolution.Hit, hitPos) + } } } } @@ -182,7 +185,10 @@ class WeaponAndProjectileLogic(val ops: WeaponAndProjectileOperations, implicit } } //... - ops.handleProxyDamage(pkt.projectile_uid, pkt.projectile_pos) + ops.handleProxyDamage(pkt.projectile_uid, pkt.projectile_pos).foreach { + case (target, proxy, hitPos, _) => + ops.resolveProjectileInteraction(target, proxy, DamageResolution.Splash, hitPos) + } } } diff --git a/src/main/scala/net/psforever/actors/session/normal/WeaponAndProjectileLogic.scala b/src/main/scala/net/psforever/actors/session/normal/WeaponAndProjectileLogic.scala index 785cb06c2..e1ed812fc 100644 --- a/src/main/scala/net/psforever/actors/session/normal/WeaponAndProjectileLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/WeaponAndProjectileLogic.scala @@ -8,8 +8,8 @@ import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObjec import net.psforever.objects.{BoomerDeployable, BoomerTrigger, Player, SpecialEmp, Tool, Vehicle} import net.psforever.objects.vital.base.{DamageResolution, DamageType} import net.psforever.objects.zones.{Zone, ZoneProjectile} -import net.psforever.packet.game.{AIDamage, AvatarGrenadeStateMessage, ChangeAmmoMessage, ChangeFireModeMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, HitMessage, LashMessage, LongRangeProjectileInfoMessage, OrbitalStrikeWaypointMessage, ProjectileStateMessage, ReloadMessage, SplashHitMessage, TriggerEffectMessage, TriggeredEffectLocation, UplinkRequest, UplinkRequestType, UplinkResponse, WeaponDelayFireMessage, WeaponDryFireMessage, WeaponFireMessage, WeaponLazeTargetPositionMessage} -import net.psforever.types.{ValidPlanetSideGUID, Vector3} +import net.psforever.packet.game.{AIDamage, AvatarGrenadeStateMessage, ChangeAmmoMessage, ChangeFireModeMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, HitMessage, LashMessage, LongRangeProjectileInfoMessage, ProjectileStateMessage, ReloadMessage, SplashHitMessage, UplinkRequest, WeaponDelayFireMessage, WeaponDryFireMessage, WeaponFireMessage, WeaponLazeTargetPositionMessage} +import net.psforever.types.Vector3 object WeaponAndProjectileLogic { def apply(ops: WeaponAndProjectileOperations): WeaponAndProjectileLogic = { @@ -153,6 +153,7 @@ class WeaponAndProjectileLogic(val ops: WeaponAndProjectileOperations, implicit ops.handleProxyDamage(pkt.projectile_guid, pkt.hit_info.map(_.hit_pos).getOrElse(Vector3.Zero)).foreach { case (target, proxy, hitPos, _) => ops.checkForHitPositionDiscrepancy(proxy.GUID, hitPos, target) + ops.resolveProjectileInteraction(target, proxy, DamageResolution.Hit, hitPos) } } } @@ -207,6 +208,7 @@ class WeaponAndProjectileLogic(val ops: WeaponAndProjectileOperations, implicit ops.handleProxyDamage(pkt.projectile_uid, pkt.projectile_pos).foreach { case (target, proxy, hitPos, _) => ops.checkForHitPositionDiscrepancy(proxy.GUID, hitPos, target) + ops.resolveProjectileInteraction(target, proxy, DamageResolution.Splash, hitPos) } } diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala index be9f4e581..71687b2d8 100644 --- a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala @@ -12,7 +12,7 @@ import net.psforever.objects.definition.converter.{ import net.psforever.objects.equipment.{ArmorSiphonRepairHost, EffectTarget, TargetValidation} import net.psforever.objects.serverobject.aura.Aura import net.psforever.objects.vital.base.DamageType -import net.psforever.objects.vital.damage.{RadialDegrade, StandardDamageProfile} +import net.psforever.objects.vital.damage.{RadialDegrade, SameHit, StandardDamageProfile} import net.psforever.objects.vital.etc.{ ArmorSiphonMaxDistanceCutoff, ExplosionDamagesOnlyAbove, @@ -1054,7 +1054,7 @@ object GlobalDefinitionsProjectile { maelstrom_grenade_projectile.Lifespan = 2f maelstrom_grenade_projectile.DamageProxy = 464 //maelstrom_grenade_damager ProjectileDefinition.CalculateDerivedFields(maelstrom_grenade_projectile) - maelstrom_grenade_projectile.Modifiers = RadialDegrade + maelstrom_grenade_projectile.Modifiers = SameHit maelstrom_grenade_projectile_contact.Name = "maelstrom_grenade_projectile_contact" // TODO for later, maybe : set_resource_parent maelstrom_grenade_projectile_contact game_objects maelstrom_grenade_projectile @@ -1069,7 +1069,7 @@ object GlobalDefinitionsProjectile { maelstrom_grenade_projectile_contact.Lifespan = 15f maelstrom_grenade_projectile_contact.DamageProxy = 464 //maelstrom_grenade_damager ProjectileDefinition.CalculateDerivedFields(maelstrom_grenade_projectile_contact) - maelstrom_grenade_projectile_contact.Modifiers = RadialDegrade + maelstrom_grenade_projectile_contact.Modifiers = SameHit maelstrom_stream_projectile.Name = "maelstrom_stream_projectile" maelstrom_stream_projectile.Damage0 = 15