Packet: CharacterCreateRequestMessage

This commit is contained in:
Chord 2016-06-04 03:33:11 -04:00
parent c18ec5c6ba
commit f6d84791e6
4 changed files with 47 additions and 9 deletions

View file

@ -66,7 +66,7 @@ object GamePacketOpcode extends Enumeration {
PlanetsideAttributeMessage,
UnknownMessage45,
UnknownMessage46,
UnknownMessage47,
CharacterCreateRequestMessage,
CharacterRequestMessage,
LoadMapMessage,
@ -379,7 +379,7 @@ object GamePacketOpcode extends Enumeration {
case PlanetsideAttributeMessage => noDecoder(opcode)
case UnknownMessage45 => noDecoder(opcode)
case UnknownMessage46 => noDecoder(opcode)
case UnknownMessage47 => noDecoder(opcode)
case CharacterCreateRequestMessage => game.CharacterCreateRequestMessage.decode
case CharacterRequestMessage => game.CharacterRequestMessage.decode
case LoadMapMessage => noDecoder(opcode)

View file

@ -0,0 +1,38 @@
// 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._
object CharacterGender extends Enumeration(1) {
type Type = Value
val Male, Female = Value
implicit val codec = PacketHelpers.createEnumerationCodec(this, uint2L)
}
/**
* Is sent by the PlanetSide client on character selection completion.
*/
final case class CharacterCreateRequestMessage(name : String,
headId : Int,
voiceId : Int,
gender : CharacterGender.Value,
empire : PlanetSideEmpire.Value)
extends PlanetSideGamePacket {
type Packet = CharacterCreateRequestMessage
def opcode = GamePacketOpcode.CharacterCreateRequestMessage
def encode = CharacterCreateRequestMessage.encode(this)
}
object CharacterCreateRequestMessage extends Marshallable[CharacterCreateRequestMessage] {
implicit val codec : Codec[CharacterCreateRequestMessage] = (
("name" | PacketHelpers.encodedWideString) ::
("headId" | uint8L) ::
("voiceId" | uint8L) ::
("gender" | CharacterGender.codec) ::
("empire" | PlanetSideEmpire.codec)
).as[CharacterCreateRequestMessage]
}

View file

@ -22,7 +22,7 @@ object ServerType extends Enumeration(1) {
implicit val codec = PacketHelpers.createEnumerationCodec(this, uint8L)
}
object EmpireNeed extends Enumeration {
object PlanetSideEmpire extends Enumeration {
type Type = Value
val TR, NC, VS = Value
@ -34,7 +34,7 @@ final case class WorldConnectionInfo(address : InetSocketAddress)
final case class WorldInformation(name : String, status : WorldStatus.Value,
serverType : ServerType.Value,
connections : Vector[WorldConnectionInfo],
empireNeed : EmpireNeed.Value)
empireNeed : PlanetSideEmpire.Value)
final case class VNLWorldStatusMessage(welcomeMessage : String, worlds : Vector[WorldInformation])
extends PlanetSideGamePacket {
@ -114,7 +114,7 @@ object VNLWorldStatusMessage extends Marshallable[VNLWorldStatusMessage] {
("status_and_type" | statusCodec) :+
// TODO: limit the size of this vector to 11 as the client will fail on any more
("connections" | vectorOfN(uint8L, connectionCodec)) :+
("empire_need" | EmpireNeed.codec)
("empire_need" | PlanetSideEmpire.codec)
)
).as[WorldInformation]
))).as[VNLWorldStatusMessage]

View file

@ -71,7 +71,7 @@ class GamePacketTest extends Specification {
val world = worlds{0}
world.name mustEqual "gemini"
world.empireNeed mustEqual EmpireNeed.NC
world.empireNeed mustEqual PlanetSideEmpire.NC
world.status mustEqual WorldStatus.Up
world.serverType mustEqual ServerType.Released
@ -89,7 +89,7 @@ class GamePacketTest extends Specification {
WorldInformation("gemini", WorldStatus.Up, ServerType.Released,
Vector(
WorldConnectionInfo(new InetSocketAddress(InetAddress.getByName("64.37.158.69"), 30007))
), EmpireNeed.NC
), PlanetSideEmpire.NC
)
)
)
@ -103,8 +103,8 @@ class GamePacketTest extends Specification {
"encode and decode multiple worlds" in {
val msg = VNLWorldStatusMessage("Welcome to PlanetSide! ",
Vector(
WorldInformation("PSForever1", WorldStatus.Up, ServerType.Released, Vector(), EmpireNeed.NC),
WorldInformation("PSForever2", WorldStatus.Down, ServerType.Beta, Vector(), EmpireNeed.TR)
WorldInformation("PSForever1", WorldStatus.Up, ServerType.Released, Vector(), PlanetSideEmpire.NC),
WorldInformation("PSForever2", WorldStatus.Down, ServerType.Beta, Vector(), PlanetSideEmpire.TR)
))
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector