From 9346a4a0c8240dbcc84d87101b7bb388b02cacde Mon Sep 17 00:00:00 2001 From: ScrawnyRonnie Date: Fri, 9 Jan 2026 10:18:51 -0500 Subject: [PATCH] deploy if same faction --- .../objects/avatar/PlayerControl.scala | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala index f1e8e3440..8a2767e9f 100644 --- a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala +++ b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala @@ -758,7 +758,8 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm val deployables = player.avatar.deployables if (deployables.Valid(obj) && !deployables.Contains(obj) && - Players.deployableWithinBuildLimits(player, obj)) { + Players.deployableWithinBuildLimits(player, obj) && + routerFactionSame(obj)) { //deployables, upon construction, may display an animation effect tool.Definition match { case GlobalDefinitions.router_telepad => () /* no special animation */ @@ -804,6 +805,29 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm } } + /** + Prevent a player from deploying a telepad that belongs to a Router of a different faction + */ + private def routerFactionSame(obj: Deployable): Boolean = { + obj match { + case tp: TelepadDeployable => + val zone = player.Zone + tp.Router match { + case Some(routerGuid) => + zone.Vehicles.find(_.GUID == routerGuid) match { + case Some(router) => + router.Faction == player.Faction + case None => + false + } + case None => + false + } + case _ => + true //not a telepad + } + } + override protected def PerformDamage( target: Target, applyDamageTo: Output