mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-13 07:24:53 +00:00
Packet: CharacterCreateRequestMessage
This commit is contained in:
parent
c18ec5c6ba
commit
f6d84791e6
4 changed files with 47 additions and 9 deletions
|
|
@ -66,7 +66,7 @@ object GamePacketOpcode extends Enumeration {
|
||||||
PlanetsideAttributeMessage,
|
PlanetsideAttributeMessage,
|
||||||
UnknownMessage45,
|
UnknownMessage45,
|
||||||
UnknownMessage46,
|
UnknownMessage46,
|
||||||
UnknownMessage47,
|
CharacterCreateRequestMessage,
|
||||||
CharacterRequestMessage,
|
CharacterRequestMessage,
|
||||||
LoadMapMessage,
|
LoadMapMessage,
|
||||||
|
|
||||||
|
|
@ -379,7 +379,7 @@ object GamePacketOpcode extends Enumeration {
|
||||||
case PlanetsideAttributeMessage => noDecoder(opcode)
|
case PlanetsideAttributeMessage => noDecoder(opcode)
|
||||||
case UnknownMessage45 => noDecoder(opcode)
|
case UnknownMessage45 => noDecoder(opcode)
|
||||||
case UnknownMessage46 => noDecoder(opcode)
|
case UnknownMessage46 => noDecoder(opcode)
|
||||||
case UnknownMessage47 => noDecoder(opcode)
|
case CharacterCreateRequestMessage => game.CharacterCreateRequestMessage.decode
|
||||||
case CharacterRequestMessage => game.CharacterRequestMessage.decode
|
case CharacterRequestMessage => game.CharacterRequestMessage.decode
|
||||||
case LoadMapMessage => noDecoder(opcode)
|
case LoadMapMessage => noDecoder(opcode)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
}
|
||||||
|
|
@ -22,7 +22,7 @@ object ServerType extends Enumeration(1) {
|
||||||
implicit val codec = PacketHelpers.createEnumerationCodec(this, uint8L)
|
implicit val codec = PacketHelpers.createEnumerationCodec(this, uint8L)
|
||||||
}
|
}
|
||||||
|
|
||||||
object EmpireNeed extends Enumeration {
|
object PlanetSideEmpire extends Enumeration {
|
||||||
type Type = Value
|
type Type = Value
|
||||||
val TR, NC, VS = 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,
|
final case class WorldInformation(name : String, status : WorldStatus.Value,
|
||||||
serverType : ServerType.Value,
|
serverType : ServerType.Value,
|
||||||
connections : Vector[WorldConnectionInfo],
|
connections : Vector[WorldConnectionInfo],
|
||||||
empireNeed : EmpireNeed.Value)
|
empireNeed : PlanetSideEmpire.Value)
|
||||||
|
|
||||||
final case class VNLWorldStatusMessage(welcomeMessage : String, worlds : Vector[WorldInformation])
|
final case class VNLWorldStatusMessage(welcomeMessage : String, worlds : Vector[WorldInformation])
|
||||||
extends PlanetSideGamePacket {
|
extends PlanetSideGamePacket {
|
||||||
|
|
@ -114,7 +114,7 @@ object VNLWorldStatusMessage extends Marshallable[VNLWorldStatusMessage] {
|
||||||
("status_and_type" | statusCodec) :+
|
("status_and_type" | statusCodec) :+
|
||||||
// TODO: limit the size of this vector to 11 as the client will fail on any more
|
// TODO: limit the size of this vector to 11 as the client will fail on any more
|
||||||
("connections" | vectorOfN(uint8L, connectionCodec)) :+
|
("connections" | vectorOfN(uint8L, connectionCodec)) :+
|
||||||
("empire_need" | EmpireNeed.codec)
|
("empire_need" | PlanetSideEmpire.codec)
|
||||||
)
|
)
|
||||||
).as[WorldInformation]
|
).as[WorldInformation]
|
||||||
))).as[VNLWorldStatusMessage]
|
))).as[VNLWorldStatusMessage]
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ class GamePacketTest extends Specification {
|
||||||
val world = worlds{0}
|
val world = worlds{0}
|
||||||
|
|
||||||
world.name mustEqual "gemini"
|
world.name mustEqual "gemini"
|
||||||
world.empireNeed mustEqual EmpireNeed.NC
|
world.empireNeed mustEqual PlanetSideEmpire.NC
|
||||||
world.status mustEqual WorldStatus.Up
|
world.status mustEqual WorldStatus.Up
|
||||||
world.serverType mustEqual ServerType.Released
|
world.serverType mustEqual ServerType.Released
|
||||||
|
|
||||||
|
|
@ -89,7 +89,7 @@ class GamePacketTest extends Specification {
|
||||||
WorldInformation("gemini", WorldStatus.Up, ServerType.Released,
|
WorldInformation("gemini", WorldStatus.Up, ServerType.Released,
|
||||||
Vector(
|
Vector(
|
||||||
WorldConnectionInfo(new InetSocketAddress(InetAddress.getByName("64.37.158.69"), 30007))
|
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 {
|
"encode and decode multiple worlds" in {
|
||||||
val msg = VNLWorldStatusMessage("Welcome to PlanetSide! ",
|
val msg = VNLWorldStatusMessage("Welcome to PlanetSide! ",
|
||||||
Vector(
|
Vector(
|
||||||
WorldInformation("PSForever1", WorldStatus.Up, ServerType.Released, Vector(), EmpireNeed.NC),
|
WorldInformation("PSForever1", WorldStatus.Up, ServerType.Released, Vector(), PlanetSideEmpire.NC),
|
||||||
WorldInformation("PSForever2", WorldStatus.Down, ServerType.Beta, Vector(), EmpireNeed.TR)
|
WorldInformation("PSForever2", WorldStatus.Down, ServerType.Beta, Vector(), PlanetSideEmpire.TR)
|
||||||
))
|
))
|
||||||
|
|
||||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue