Packet: WeaponDelayFireMessage (#39)

* Add WeaponDelayFireMessage packet

* Add WeaponDelayFireMessage test

* Add WeaponDelayFireMessage handler stub
This commit is contained in:
tfarley 2016-07-25 23:43:16 -07:00 committed by pschord
parent 7b444ac6aa
commit c77928b915
4 changed files with 50 additions and 1 deletions

View file

@ -481,7 +481,7 @@ object GamePacketOpcode extends Enumeration {
case OffshoreVehicleMessage => noDecoder(opcode)
case ObjectDeployedMessage => noDecoder(opcode)
case ObjectDeployedCountMessage => noDecoder(opcode)
case WeaponDelayFireMessage => noDecoder(opcode)
case WeaponDelayFireMessage => game.WeaponDelayFireMessage.decode
case BugReportMessage => noDecoder(opcode)
case PlayerStasisMessage => noDecoder(opcode)
case UnknownMessage139 => noDecoder(opcode)

View file

@ -0,0 +1,25 @@
// Copyright (c) 2016 PSForever.net to present
package net.psforever.packet.game
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
import scodec.Codec
import scodec.codecs._
/** WeaponDelayFireMessage seems to be sent when a weapon has a delayed projectile after firing, such as the knife.
*
* See [[PlayerStateMessageUpstream]] for explanation of seq_time.
*/
final case class WeaponDelayFireMessage(seq_time : Int,
weapon_guid : PlanetSideGUID)
extends PlanetSideGamePacket {
type Packet = WeaponDelayFireMessage
def opcode = GamePacketOpcode.WeaponDelayFireMessage
def encode = WeaponDelayFireMessage.encode(this)
}
object WeaponDelayFireMessage extends Marshallable[WeaponDelayFireMessage] {
implicit val codec : Codec[WeaponDelayFireMessage] = (
("seq_time" | uintL(10)) ::
("weapon_guid" | PlanetSideGUID.codec)
).as[WeaponDelayFireMessage]
}

View file

@ -580,5 +580,26 @@ class GamePacketTest extends Specification {
pkt_forget mustEqual string_forget
}
}
"WeaponDelayFireMessage" should {
val string = hex"88 A3140000"
"decode" in {
PacketCoding.DecodePacket(string).require match {
case WeaponDelayFireMessage(seq_time, weapon_guid) =>
seq_time mustEqual 163
weapon_guid mustEqual PlanetSideGUID(80)
case default =>
ko
}
}
"encode" in {
val msg = WeaponDelayFireMessage(163, PlanetSideGUID(80))
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string
}
}
}
}

View file

@ -206,6 +206,9 @@ class WorldSessionActor extends Actor with MDCContextAware {
case msg @ ItemTransactionMessage(terminal_guid, transaction_type, item_page, item_name, unk1, item_guid) =>
log.info("ItemTransaction: " + msg)
case msg @ WeaponDelayFireMessage(seq_time, weapon_guid) =>
log.info("WeaponDelayFire: " + msg)
case default => log.debug(s"Unhandled GamePacket ${pkt}")
}