From 8174a3351c09ad30cb61704969e8129a8301c08b Mon Sep 17 00:00:00 2001 From: Mazo Date: Mon, 29 Jun 2020 18:06:28 +0100 Subject: [PATCH] Check that weapon magzine is empty before sending WeaponDryFireMessage (#507) --- pslogin/src/main/scala/WorldSessionActor.scala | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala index 3c0c35c3..a7b564d1 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -1973,7 +1973,16 @@ class WorldSessionActor extends Actor case AvatarResponse.WeaponDryFire(weapon_guid) => if(tplayer_guid != guid) { - sendResponse(WeaponDryFireMessage(weapon_guid)) + // Check that the magazine is still empty before sending WeaponDryFireMessage + // As it could have been reloaded since the packet was dispatched, which would make other clients not see it firing + continent.GUID(weapon_guid) match { + case Some(tool : Tool) => { + if(tool.Magazine == 0) { + sendResponse(WeaponDryFireMessage(weapon_guid)) + } + } + case _ => log.warn(s"Tried to send WeaponDryFire but GUID ${weapon_guid} does not seem to be a Tool") + } } case AvatarResponse.TerminalOrderResult(terminal_guid, action, result) =>