initial work on ExperienceAddedMessage and tests

This commit is contained in:
FateJH 2017-01-28 00:38:11 -05:00
parent 774079c6a7
commit da62978ed1
3 changed files with 57 additions and 1 deletions

View file

@ -537,7 +537,7 @@ object GamePacketOpcode extends Enumeration {
case 0xb6 => game.ZonePopulationUpdateMessage.decode
case 0xb7 => game.DisconnectMessage.decode
// 0xb8
case 0xb8 => noDecoder(ExperienceAddedMessage)
case 0xb8 => game.ExperienceAddedMessage.decode
case 0xb9 => game.OrbitalStrikeWaypointMessage.decode
case 0xba => game.KeepAliveMessage.decode
case 0xbb => noDecoder(MapObjectStateBlockMessage)

View file

@ -0,0 +1,35 @@
// Copyright (c) 2016 PSForever.net to present
package net.psforever.packet.game
import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket}
import scodec.Codec
import scodec.codecs._
/**
* Displays a message about being awarded experience points in the events chat.<br>
* <br>
* This packet does not actually award any experience points.
* It merely generates the message:<br>
* `"You have been awarded x experience points."`<br>
* ... where `x` is the number of experience points that have been promised.
* If the `Boolean` parameter is `true`, `x` will be equal to the number provided followed by the word "Command."
* If the `Boolean` parameter is `false`, `x` will be represented as an obvious blank space character.
* (Yes, it prints to the events chat like that.)
* @param exp the number of (Command) experience points earned
* @param unk defaults to `true` for effect;
* if `false`, the number of experience points in the message will be blanked
*/
final case class ExperienceAddedMessage(exp : Int,
unk : Boolean = true)
extends PlanetSideGamePacket {
type Packet = ExperienceAddedMessage
def opcode = GamePacketOpcode.ExperienceAddedMessage
def encode = ExperienceAddedMessage.encode(this)
}
object ExperienceAddedMessage extends Marshallable[ExperienceAddedMessage] {
implicit val codec : Codec[ExperienceAddedMessage] = (
("cep" | uintL(15)) ::
("unk" | bool)
).as[ExperienceAddedMessage]
}

View file

@ -1555,6 +1555,27 @@ class GamePacketTest extends Specification {
}
}
"ExperienceAddedMessage" should {
val string = hex"B8 04 03"
"decode" in {
PacketCoding.DecodePacket(string).require match {
case ExperienceAddedMessage(exp, unk) =>
exp mustEqual 260 //0x104
unk mustEqual true
case default =>
ko
}
}
"encode" in {
val msg = ExperienceAddedMessage(260)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string
}
}
"WeaponFireMessage" should {
val string = hex"34 44130029272F0B5DFD4D4EC5C00009BEF78172003FC0"