From a30f89fc50a5c60bc02896d24677c49f420db06e Mon Sep 17 00:00:00 2001 From: ScrawnyRonnie Date: Mon, 15 Apr 2024 08:26:31 -0400 Subject: [PATCH 1/4] no damage if dead --- .../net/psforever/actors/session/support/SessionData.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/scala/net/psforever/actors/session/support/SessionData.scala b/src/main/scala/net/psforever/actors/session/support/SessionData.scala index 0143400f8..81f0a7331 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionData.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionData.scala @@ -2208,6 +2208,8 @@ class SessionData( // auto kick players damaging spectators if (obj.spectator && obj != player) { administrativeKick(player) + } else if (!player.isAlive) { + } else { obj.Actor ! Vitality.Damage(func) } From 417959745e25558d649f221faa5c175228fa8bac Mon Sep 17 00:00:00 2001 From: Fate-JH Date: Mon, 15 Apr 2024 18:35:28 -0400 Subject: [PATCH 2/4] sidedness now helps determine target validity for automated turrets (#1192) --- .../serverobject/turret/auto/AutomatedTurret.scala | 6 ++++-- .../turret/auto/AutomatedTurretBehavior.scala | 9 ++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurret.scala b/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurret.scala index 88fa250c8..e5f76687d 100644 --- a/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurret.scala +++ b/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurret.scala @@ -3,13 +3,15 @@ package net.psforever.objects.serverobject.turret.auto import net.psforever.objects.definition.ObjectDefinition import net.psforever.objects.serverobject.PlanetSideServerObject +import net.psforever.objects.serverobject.interior.InteriorAware import net.psforever.objects.serverobject.turret.{TurretDefinition, WeaponTurret} import net.psforever.objects.sourcing.{SourceEntry, SourceUniqueness} import net.psforever.objects.vital.Vitality trait AutomatedTurret extends PlanetSideServerObject - with WeaponTurret { + with WeaponTurret + with InteriorAware { import AutomatedTurret.Target private var currentTarget: Option[Target] = None @@ -66,5 +68,5 @@ trait AutomatedTurret } object AutomatedTurret { - type Target = PlanetSideServerObject with Vitality + type Target = PlanetSideServerObject with Vitality with InteriorAware } diff --git a/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurretBehavior.scala b/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurretBehavior.scala index bdb818afd..1c2f64354 100644 --- a/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurretBehavior.scala +++ b/src/main/scala/net/psforever/objects/serverobject/turret/auto/AutomatedTurretBehavior.scala @@ -6,6 +6,7 @@ import net.psforever.objects.avatar.scoring.EquipmentStat import net.psforever.objects.equipment.EffectTarget import net.psforever.objects.serverobject.PlanetSideServerObject import net.psforever.objects.serverobject.damage.DamageableEntity +import net.psforever.objects.serverobject.interior.Sidedness import net.psforever.objects.serverobject.mount.Mountable import net.psforever.objects.serverobject.turret.Automation import net.psforever.objects.sourcing.{PlayerSource, SourceEntry, SourceUniqueness} @@ -326,6 +327,7 @@ trait AutomatedTurretBehavior { AutomatedTurretObject.Target.orElse { val turretPosition = AutomatedTurretObject.Position val turretGuid = AutomatedTurretObject.GUID + val side = AutomatedTurretObject.WhichSide val weaponGuid = AutomatedTurretObject.Weapons.values.head.Equipment.get.GUID val radius = autoStats.get.ranges.trigger val validation = autoStats.get.checks.validation @@ -337,6 +339,7 @@ trait AutomatedTurretBehavior { .collect { case target if !target.Destroyed && target.Faction != faction && + Sidedness.equals(target.WhichSide, side) && AutomatedTurretBehavior.shapedDistanceCheckAgainstValue(autoStats, target.Position, turretPosition, radius, result = -1) && validation.exists(func => func(target)) && disqualifiers.takeWhile(func => func(target)).isEmpty => @@ -650,7 +653,7 @@ trait AutomatedTurretBehavior { * @param cause information about the damaging incident that caused the turret to consider retaliation * @return something the turret can potentially shoot at */ - protected def attemptRetaliation(target: Target, cause: DamageResult): Option[Target] = { + protected def attemptRetaliation(target: PlanetSideServerObject with Vitality, cause: DamageResult): Option[PlanetSideServerObject with Vitality] = { val unique = SourceUniqueness(target) if ( automaticOperation && @@ -931,7 +934,7 @@ object AutomatedTurretBehavior { * @return entity that caused the damage * @see `Vitality` */ - def getAttackVectorFromCause(zone: Zone, cause: DamageResult): Option[PlanetSideServerObject with Vitality] = { + def getAttackVectorFromCause(zone: Zone, cause: DamageResult): Option[AutomatedTurret.Target] = { import net.psforever.objects.sourcing._ cause .interaction @@ -962,7 +965,7 @@ object AutomatedTurretBehavior { } .flatten .collect { - case out: PlanetSideServerObject with Vitality => out + case out: AutomatedTurret.Target => out } } From e91d91294e4a51300433d7a9acfe5c4ce16e4f01 Mon Sep 17 00:00:00 2001 From: ScrawnyRonnie Date: Mon, 15 Apr 2024 22:15:00 -0400 Subject: [PATCH 3/4] projectile change --- .../net/psforever/actors/session/support/SessionData.scala | 2 -- .../session/support/WeaponAndProjectileOperations.scala | 4 +++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/net/psforever/actors/session/support/SessionData.scala b/src/main/scala/net/psforever/actors/session/support/SessionData.scala index 81f0a7331..0143400f8 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionData.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionData.scala @@ -2208,8 +2208,6 @@ class SessionData( // auto kick players damaging spectators if (obj.spectator && obj != player) { administrativeKick(player) - } else if (!player.isAlive) { - } else { obj.Actor ! Vitality.Damage(func) } diff --git a/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala b/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala index 4e1d27387..afba349ba 100644 --- a/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala @@ -609,11 +609,13 @@ private[support] class WeaponAndProjectileOperations( if (tool.Magazine <= 0) { //safety: enforce ammunition depletion prefire -= weaponGUID EmptyMagazine(weaponGUID, tool) + (o, Some(tool)) } else if (!player.isAlive) { //proper internal accounting, but no projectile prefire += weaponGUID tool.Discharge() projectiles(projectileGUID.guid - Projectile.baseUID) = None shotsWhileDead += 1 + (None, None) } else { //shooting if ( avatar.stamina > 0 && @@ -628,8 +630,8 @@ private[support] class WeaponAndProjectileOperations( tool.Discharge() prefire += weaponGUID addShotsFired(tool.Definition.ObjectId, tool.AmmoSlot.Chamber) + (o, Some(tool)) } - (o, Some(tool)) } collectedTools.headOption.getOrElse((None, None)) } else { From cc29ee3be0ec40d8b3e0e2f087ce9416d544e9df Mon Sep 17 00:00:00 2001 From: Jakob Gillich Date: Wed, 17 Apr 2024 12:55:06 +0200 Subject: [PATCH 4/4] fix docker-compose.yml --- docker-compose.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index b7e3d4220..a49ed2236 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,6 @@ -version: "3" services: loginserver: - image: mozilla/sbt + image: sbtscala/scala-sbt:eclipse-temurin-jammy-8u352-b08_1.8.3_2.13.10 volumes: - .:/PSF-Loginserver:z working_dir: /PSF-Loginserver @@ -19,7 +18,7 @@ services: ports: - 51010:8080 db: - image: postgres:12 + image: postgres:14 ports: - 5432:5432 environment: