work on BugReportMessage packet and tests

This commit is contained in:
FateJH 2017-01-21 18:05:58 -05:00
parent 491e263f71
commit 1bf189b34f
3 changed files with 107 additions and 1 deletions

View file

@ -481,7 +481,7 @@ object GamePacketOpcode extends Enumeration {
case 0x87 => noDecoder(ObjectDeployedCountMessage)
// 0x88
case 0x88 => game.WeaponDelayFireMessage.decode
case 0x89 => noDecoder(BugReportMessage)
case 0x89 => game.BugReportMessage.decode
case 0x8a => noDecoder(PlayerStasisMessage)
case 0x8b => noDecoder(UnknownMessage139)
case 0x8c => noDecoder(OutfitMembershipRequest)

View file

@ -0,0 +1,74 @@
// Copyright (c) 2016 PSForever.net to present
package net.psforever.packet.game
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
import net.psforever.types.Vector3
import scodec.Codec
import scodec.codecs._
/**
* An `Enumeration` of the kinds of bugs applicable to the reporting system.
*/
object BugType extends Enumeration {
type Type = Value
val CRASH,
GAMEPLAY,
ART,
SOUND,
HARDWARE,
OTHER
= Value
implicit val codec = PacketHelpers.createEnumerationCodec(this, uint4L)
}
/**
* Allow the user to report a bug they have found in the game.<br>
* <br>
* Bug reports are prepended by the version of the client on which the player is encountering the issue.
* The last delivered client by Sony Online Entertainment was `3.15.84` with date `Dec&nbsp;&nbsp;2 2009`.<br>
* <br>
* The path of bug reports submitted to the game's official server is not known.
* @param version_major the client's major version number
* @param version_minor the client's minor version number
* @param version_date the date the client was compiled
* @param bug_type the kind of bug that took place
* @param repeatable whether the bug is repeatable
* @param unk na;
* always 0?
* @param zone which zone the bug took place
* @param pos the location where ther bug took place
* @param summary a short explanation of the bug
* @param desc a detailed explanation of the bug
*/
final case class BugReportMessage(version_major : Long,
version_minor : Long,
version_date : String,
bug_type : BugType.Value,
repeatable : Boolean,
unk : Int,
zone : Int,
pos : Vector3,
summary : String,
desc : String)
extends PlanetSideGamePacket {
type Packet = BugReportMessage
def opcode = GamePacketOpcode.BugReportMessage
def encode = BugReportMessage.encode(this)
}
object BugReportMessage extends Marshallable[BugReportMessage] {
implicit val codec : Codec[BugReportMessage] = (
("versionMajor" | uint32L) ::
("versionMinor" | uint32L) ::
("versionDate" | PacketHelpers.encodedString) ::
("bug_type" | BugType.codec) ::
ignore(3) ::
("repeatable" | bool) ::
("unk" | uint4L) ::
("zone" | uint8L) ::
("pos" | Vector3.codec_pos) ::
("summary" | PacketHelpers.encodedWideStringAligned(4)) ::
("desc" | PacketHelpers.encodedWideString)
).as[BugReportMessage]
}