diff --git a/src/main/scala/net/psforever/actors/bot/BotManager.scala b/src/main/scala/net/psforever/actors/bot/BotManager.scala index 3e0c6fdf..dd59a696 100644 --- a/src/main/scala/net/psforever/actors/bot/BotManager.scala +++ b/src/main/scala/net/psforever/actors/bot/BotManager.scala @@ -201,14 +201,7 @@ class BotManager(zone: Zone) extends Actor { ) // Weapon is already drawn (DrawnSlot set before LoadPlayer packet) - // TEST: Start firing immediately to see if tracers appear - player.Holsters()(2).Equipment.collect { case t: Tool => t }.foreach { weapon => - zone.LocalEvents ! LocalServiceMessage( - zone.id, - LocalAction.SendResponse(ChangeFireStateMessage_Start(weapon.GUID)) - ) - log.info(s"Bot '$name' weapon firing flag set for tracer test") - } + // Firing flag will be set when bot acquires a target and starts combat // Initialize movement state val moveAngle = random.nextFloat() * 360f diff --git a/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala b/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala index e3852014..7c331653 100644 --- a/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala @@ -148,6 +148,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext case "botvs" => ops.customCommandBot(session, PlanetSideEmpire.VS) case "boton" => ops.customCommandBotAI(session, enabled = true) case "botoff" => ops.customCommandBotAI(session, enabled = false) + case "locrec" => ops.customCommandLocRec(session, params) case _ => // command was not handled sendResponse( diff --git a/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala b/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala index 2009aebe..24382216 100644 --- a/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala @@ -1449,6 +1449,30 @@ class ChatOperations( true } + /** + * Log player coordinates to server log for arena/map data capture. + * Usage: !locrec [optional note] + * Output goes to server log (captured by /log) not to chat. + */ + def customCommandLocRec( + session: Session, + params: Seq[String] + ): Boolean = { + val player = session.player + val pos = player.Position + val note = if (params.nonEmpty && params.head.nonEmpty) params.mkString(" ") else "" + val noteStr = if (note.nonEmpty) s" | $note" else "" + + // Log to server log (this gets captured by /log command) + log.info(s"LOCREC: ${player.Name} @ ${session.zone.id} | x=${pos.x} y=${pos.y} z=${pos.z}$noteStr") + + // Also send confirmation to player + sendResponse( + ChatMsg(CMT_GMOPEN, wideContents = false, "Server", s"Logged: (${pos.x}, ${pos.y}, ${pos.z})$noteStr", None) + ) + true + } + override protected[session] def stop(): Unit = { silenceTimer.cancel() chatService ! ChatService.LeaveAllChannels(chatServiceAdapter)