mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-10 22:14:36 +00:00
Refactor opcode mappings to switch statement and hex
This commit is contained in:
parent
4a25298920
commit
3ca1d33d15
3 changed files with 379 additions and 386 deletions
|
|
@ -6,12 +6,12 @@ import scodec.bits.BitVector
|
||||||
import scodec.{Attempt, Codec, DecodeResult, Err}
|
import scodec.{Attempt, Codec, DecodeResult, Err}
|
||||||
import scodec.codecs._
|
import scodec.codecs._
|
||||||
|
|
||||||
|
import scala.annotation.switch
|
||||||
|
|
||||||
object ControlPacketOpcode extends Enumeration {
|
object ControlPacketOpcode extends Enumeration {
|
||||||
type Type = Value
|
type Type = Value
|
||||||
val
|
val
|
||||||
|
// OPCODES 0x00-0f
|
||||||
// Opcodes should have a marker every 10
|
|
||||||
// OPCODE 0
|
|
||||||
HandleGamePacket, // a whoopsi case: not actually a control packet, but a game packet
|
HandleGamePacket, // a whoopsi case: not actually a control packet, but a game packet
|
||||||
ClientStart, // first packet ever sent during client connection
|
ClientStart, // first packet ever sent during client connection
|
||||||
ServerStart, // second packet sent in response to ClientStart
|
ServerStart, // second packet sent in response to ClientStart
|
||||||
|
|
@ -20,80 +20,76 @@ object ControlPacketOpcode extends Enumeration {
|
||||||
TeardownConnection,
|
TeardownConnection,
|
||||||
Unknown6,
|
Unknown6,
|
||||||
ControlSync, // sent to the server from the client
|
ControlSync, // sent to the server from the client
|
||||||
|
// 0x08
|
||||||
ControlSyncResp, // the response generated by the server
|
ControlSyncResp, // the response generated by the server
|
||||||
SlottedMetaPacket0,
|
SlottedMetaPacket0,
|
||||||
|
|
||||||
// OPCODE 10
|
|
||||||
SlottedMetaPacket1,
|
SlottedMetaPacket1,
|
||||||
SlottedMetaPacket2,
|
SlottedMetaPacket2,
|
||||||
SlottedMetaPacket3,
|
SlottedMetaPacket3,
|
||||||
SlottedMetaPacket4,
|
SlottedMetaPacket4,
|
||||||
SlottedMetaPacket5,
|
SlottedMetaPacket5,
|
||||||
SlottedMetaPacket6,
|
SlottedMetaPacket6,
|
||||||
|
|
||||||
|
// OPCODES 0x10-1f
|
||||||
SlottedMetaPacket7,
|
SlottedMetaPacket7,
|
||||||
RelatedA0,
|
RelatedA0,
|
||||||
RelatedA1,
|
RelatedA1,
|
||||||
RelatedA2,
|
RelatedA2,
|
||||||
|
|
||||||
// OPCODE 20
|
|
||||||
RelatedA3,
|
RelatedA3,
|
||||||
RelatedB0,
|
RelatedB0,
|
||||||
RelatedB1,
|
RelatedB1,
|
||||||
RelatedB2,
|
RelatedB2,
|
||||||
|
// 0x18
|
||||||
RelatedB3,
|
RelatedB3,
|
||||||
MultiPacketEx, // same as MultiPacket, but with the ability to send extended length packets
|
MultiPacketEx, // same as MultiPacket, but with the ability to send extended length packets
|
||||||
Unknown26,
|
Unknown26,
|
||||||
Unknown27,
|
Unknown27,
|
||||||
Unknown28,
|
Unknown28,
|
||||||
ConnectionClose,
|
ConnectionClose,
|
||||||
|
|
||||||
// OPCODE 30
|
|
||||||
Unknown30
|
Unknown30
|
||||||
= Value
|
= Value
|
||||||
|
|
||||||
private def noDecoder(opcode : ControlPacketOpcode.Type) = (a : BitVector) =>
|
private def noDecoder(opcode : ControlPacketOpcode.Type) = (a : BitVector) =>
|
||||||
Attempt.failure(Err(s"Could not find a marshaller for control packet ${opcode}"))
|
Attempt.failure(Err(s"Could not find a marshaller for control packet ${opcode}"))
|
||||||
|
|
||||||
def getPacketDecoder(opcode : ControlPacketOpcode.Type) : (BitVector) => Attempt[DecodeResult[PlanetSideControlPacket]] = opcode match {
|
def getPacketDecoder(opcode : ControlPacketOpcode.Type) : (BitVector) => Attempt[DecodeResult[PlanetSideControlPacket]] = (opcode.id : @switch) match {
|
||||||
// OPCODE 0
|
// OPCODES 0x00-0f
|
||||||
case HandleGamePacket => control.HandleGamePacket.decode
|
case 0x00 => control.HandleGamePacket.decode
|
||||||
case ServerStart => control.ServerStart.decode
|
case 0x01 => control.ClientStart.decode
|
||||||
case ClientStart => control.ClientStart.decode
|
case 0x02 => control.ServerStart.decode
|
||||||
case MultiPacket => control.MultiPacket.decode
|
case 0x03 => control.MultiPacket.decode
|
||||||
case Unknown4 => noDecoder(opcode)
|
case 0x04 => noDecoder(Unknown4)
|
||||||
case TeardownConnection => control.TeardownConnection.decode
|
case 0x05 => control.TeardownConnection.decode
|
||||||
case Unknown6 => noDecoder(opcode)
|
case 0x06 => noDecoder(Unknown6)
|
||||||
case ControlSync => control.ControlSync.decode
|
case 0x07 => control.ControlSync.decode
|
||||||
case ControlSyncResp => control.ControlSyncResp.decode
|
// 0x08
|
||||||
case SlottedMetaPacket0 => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket0)
|
case 0x08 => control.ControlSyncResp.decode
|
||||||
|
case 0x09 => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket0)
|
||||||
|
case 0x0a => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket1)
|
||||||
|
case 0x0b => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket2)
|
||||||
|
case 0x0c => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket3)
|
||||||
|
case 0x0d => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket4)
|
||||||
|
case 0x0e => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket5)
|
||||||
|
case 0x0f => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket6)
|
||||||
|
|
||||||
// OPCODE 10
|
// OPCODES 0x10-1e
|
||||||
case SlottedMetaPacket1 => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket1)
|
case 0x10 => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket7)
|
||||||
case SlottedMetaPacket2 => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket2)
|
case 0x11 => noDecoder(RelatedA0)
|
||||||
case SlottedMetaPacket3 => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket3)
|
case 0x12 => noDecoder(RelatedA1)
|
||||||
case SlottedMetaPacket4 => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket4)
|
case 0x13 => noDecoder(RelatedA2)
|
||||||
case SlottedMetaPacket5 => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket5)
|
case 0x14 => noDecoder(RelatedA3)
|
||||||
case SlottedMetaPacket6 => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket6)
|
case 0x15 => noDecoder(RelatedB0)
|
||||||
case SlottedMetaPacket7 => SlottedMetaPacket.decodeWithOpcode(SlottedMetaPacket7)
|
case 0x16 => noDecoder(RelatedB1)
|
||||||
case RelatedA0 => noDecoder(opcode)
|
case 0x17 => noDecoder(RelatedB2)
|
||||||
case RelatedA1 => noDecoder(opcode)
|
// 0x18
|
||||||
case RelatedA2 => noDecoder(opcode)
|
case 0x18 => noDecoder(RelatedB3)
|
||||||
|
case 0x19 => control.MultiPacketEx.decode
|
||||||
// OPCODE 20
|
case 0x1a => noDecoder(Unknown26)
|
||||||
case RelatedA3 => noDecoder(opcode)
|
case 0x1b => noDecoder(Unknown27)
|
||||||
case RelatedB0 => noDecoder(opcode)
|
case 0x1c => noDecoder(Unknown28)
|
||||||
case RelatedB1 => noDecoder(opcode)
|
case 0x1d => control.ConnectionClose.decode
|
||||||
case RelatedB2 => noDecoder(opcode)
|
case 0x1e => noDecoder(Unknown30)
|
||||||
case RelatedB3 => noDecoder(opcode)
|
case default => noDecoder(opcode)
|
||||||
case MultiPacketEx => control.MultiPacketEx.decode
|
|
||||||
case Unknown26 => noDecoder(opcode)
|
|
||||||
case Unknown27 => noDecoder(opcode)
|
|
||||||
case Unknown28 => noDecoder(opcode)
|
|
||||||
case ConnectionClose => control.ConnectionClose.decode
|
|
||||||
|
|
||||||
// OPCODE 30
|
|
||||||
case Unknown30 => noDecoder(opcode)
|
|
||||||
case default => noDecoder(opcode)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
implicit val codec: Codec[this.Value] = PacketHelpers.createEnumerationCodec(this, uint8L)
|
implicit val codec: Codec[this.Value] = PacketHelpers.createEnumerationCodec(this, uint8L)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ import scodec.{Attempt, Codec, DecodeResult, Err}
|
||||||
import scodec.bits.BitVector
|
import scodec.bits.BitVector
|
||||||
import scodec.codecs._
|
import scodec.codecs._
|
||||||
|
|
||||||
|
import scala.annotation.switch
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The master list of Game packet opcodes that have been discovered in the PlanetSide client.
|
* The master list of Game packet opcodes that have been discovered in the PlanetSide client.
|
||||||
*
|
*
|
||||||
|
|
@ -17,9 +19,7 @@ import scodec.codecs._
|
||||||
object GamePacketOpcode extends Enumeration {
|
object GamePacketOpcode extends Enumeration {
|
||||||
type Type = Value
|
type Type = Value
|
||||||
val
|
val
|
||||||
|
// OPCODES 0x00-0f
|
||||||
// Opcodes should have a marker every 10 (decimal)
|
|
||||||
// OPCODE 0
|
|
||||||
Unknown0,
|
Unknown0,
|
||||||
LoginMessage,
|
LoginMessage,
|
||||||
LoginRespMessage,
|
LoginRespMessage,
|
||||||
|
|
@ -28,36 +28,36 @@ object GamePacketOpcode extends Enumeration {
|
||||||
VNLWorldStatusMessage,
|
VNLWorldStatusMessage,
|
||||||
UnknownMessage6,
|
UnknownMessage6,
|
||||||
UnknownMessage7,
|
UnknownMessage7,
|
||||||
|
// 0x08
|
||||||
PlayerStateMessage,
|
PlayerStateMessage,
|
||||||
HitMessage,
|
HitMessage,
|
||||||
|
|
||||||
// OPCODE 10
|
|
||||||
HitHint,
|
HitHint,
|
||||||
DamageMessage,
|
DamageMessage,
|
||||||
DestroyMessage,
|
DestroyMessage,
|
||||||
ReloadMessage,
|
ReloadMessage,
|
||||||
MountVehicleMsg,
|
MountVehicleMsg,
|
||||||
DismountVehicleMsg,
|
DismountVehicleMsg,
|
||||||
|
|
||||||
|
// OPCODES 0x10-1f
|
||||||
UseItemMessage,
|
UseItemMessage,
|
||||||
MoveItemMessage,
|
MoveItemMessage,
|
||||||
ChatMsg,
|
ChatMsg,
|
||||||
CharacterNoRecordMessage,
|
CharacterNoRecordMessage,
|
||||||
|
|
||||||
// OPCODE 20
|
|
||||||
CharacterInfoMessage,
|
CharacterInfoMessage,
|
||||||
UnknownMessage21,
|
UnknownMessage21,
|
||||||
BindPlayerMessage,
|
BindPlayerMessage,
|
||||||
ObjectCreateMessage_Duplicate,
|
ObjectCreateMessage_Duplicate,
|
||||||
|
// 0x18
|
||||||
ObjectCreateMessage,
|
ObjectCreateMessage,
|
||||||
ObjectDeleteMessage,
|
ObjectDeleteMessage,
|
||||||
PingMsg,
|
PingMsg,
|
||||||
VehicleStateMessage,
|
VehicleStateMessage,
|
||||||
FrameVehicleStateMessage,
|
FrameVehicleStateMessage,
|
||||||
GenericObjectStateMsg,
|
GenericObjectStateMsg,
|
||||||
|
|
||||||
// OPCODE 30
|
|
||||||
ChildObjectStateMessage,
|
ChildObjectStateMessage,
|
||||||
ActionResultMessage,
|
ActionResultMessage,
|
||||||
|
|
||||||
|
// OPCODES 0x20-2f
|
||||||
UnknownMessage32,
|
UnknownMessage32,
|
||||||
ActionProgressMessage,
|
ActionProgressMessage,
|
||||||
ActionCancelMessage,
|
ActionCancelMessage,
|
||||||
|
|
@ -66,8 +66,7 @@ object GamePacketOpcode extends Enumeration {
|
||||||
EmoteMsg,
|
EmoteMsg,
|
||||||
UnuseItemMessage,
|
UnuseItemMessage,
|
||||||
ObjectDetachMessage,
|
ObjectDetachMessage,
|
||||||
|
// 0x28
|
||||||
// OPCODE 40
|
|
||||||
CreateShortcutMessage,
|
CreateShortcutMessage,
|
||||||
ChangeShortcutBankMessage,
|
ChangeShortcutBankMessage,
|
||||||
ObjectAttachMessage,
|
ObjectAttachMessage,
|
||||||
|
|
@ -76,36 +75,36 @@ object GamePacketOpcode extends Enumeration {
|
||||||
RequestDestroyMessage,
|
RequestDestroyMessage,
|
||||||
UnknownMessage46,
|
UnknownMessage46,
|
||||||
CharacterCreateRequestMessage,
|
CharacterCreateRequestMessage,
|
||||||
|
|
||||||
|
// OPCODES 0x30-3f
|
||||||
CharacterRequestMessage,
|
CharacterRequestMessage,
|
||||||
LoadMapMessage,
|
LoadMapMessage,
|
||||||
|
|
||||||
// OPCODE 50
|
|
||||||
SetCurrentAvatarMessage,
|
SetCurrentAvatarMessage,
|
||||||
ObjectHeldMessage,
|
ObjectHeldMessage,
|
||||||
WeaponFireMessage,
|
WeaponFireMessage,
|
||||||
AvatarJumpMessage,
|
AvatarJumpMessage,
|
||||||
PickupItemMessage,
|
PickupItemMessage,
|
||||||
DropItemMessage,
|
DropItemMessage,
|
||||||
|
// 0x38
|
||||||
InventoryStateMessage,
|
InventoryStateMessage,
|
||||||
ChangeFireStateMessage_Start,
|
ChangeFireStateMessage_Start,
|
||||||
ChangeFireStateMessage_Stop,
|
ChangeFireStateMessage_Stop,
|
||||||
UnknownMessage59,
|
UnknownMessage59,
|
||||||
|
|
||||||
// OPCODE 60
|
|
||||||
GenericCollisionMsg,
|
GenericCollisionMsg,
|
||||||
QuantityUpdateMessage,
|
QuantityUpdateMessage,
|
||||||
ArmorChangedMessage,
|
ArmorChangedMessage,
|
||||||
ProjectileStateMessage,
|
ProjectileStateMessage,
|
||||||
|
|
||||||
|
// OPCODES 0x40-4f
|
||||||
MountVehicleCargoMsg,
|
MountVehicleCargoMsg,
|
||||||
DismountVehicleCargoMsg,
|
DismountVehicleCargoMsg,
|
||||||
CargoMountPointStatusMessage,
|
CargoMountPointStatusMessage,
|
||||||
BeginZoningMessage,
|
BeginZoningMessage,
|
||||||
ItemTransactionMessage,
|
ItemTransactionMessage,
|
||||||
ItemTransactionResultMessage,
|
ItemTransactionResultMessage,
|
||||||
|
|
||||||
// OPCODE 70
|
|
||||||
ChangeFireModeMessage,
|
ChangeFireModeMessage,
|
||||||
ChangeAmmoMessage,
|
ChangeAmmoMessage,
|
||||||
|
// 0x48
|
||||||
TimeOfDayMessage,
|
TimeOfDayMessage,
|
||||||
UnknownMessage73,
|
UnknownMessage73,
|
||||||
SpawnRequestMessage,
|
SpawnRequestMessage,
|
||||||
|
|
@ -115,7 +114,7 @@ object GamePacketOpcode extends Enumeration {
|
||||||
ServerVehicleOverrideMsg,
|
ServerVehicleOverrideMsg,
|
||||||
LashMessage,
|
LashMessage,
|
||||||
|
|
||||||
// OPCODE 80
|
// OPCODES 0x50-5f
|
||||||
TargetingInfoMessage,
|
TargetingInfoMessage,
|
||||||
TriggerEffectMessage,
|
TriggerEffectMessage,
|
||||||
WeaponDryFireMessage,
|
WeaponDryFireMessage,
|
||||||
|
|
@ -124,36 +123,36 @@ object GamePacketOpcode extends Enumeration {
|
||||||
DroppodLaunchResponseMessage,
|
DroppodLaunchResponseMessage,
|
||||||
GenericObjectActionMessage,
|
GenericObjectActionMessage,
|
||||||
AvatarVehicleTimerMessage,
|
AvatarVehicleTimerMessage,
|
||||||
|
// 0x58
|
||||||
AvatarImplantMessage,
|
AvatarImplantMessage,
|
||||||
UnknownMessage89,
|
UnknownMessage89,
|
||||||
|
|
||||||
// OPCODE 90
|
|
||||||
DelayedPathMountMsg,
|
DelayedPathMountMsg,
|
||||||
OrbitalShuttleTimeMsg,
|
OrbitalShuttleTimeMsg,
|
||||||
AIDamage,
|
AIDamage,
|
||||||
DeployObjectMessage,
|
DeployObjectMessage,
|
||||||
FavoritesRequest,
|
FavoritesRequest,
|
||||||
FavoritesResponse,
|
FavoritesResponse,
|
||||||
|
|
||||||
|
// OPCODES 0x60-6f
|
||||||
FavoritesMessage,
|
FavoritesMessage,
|
||||||
ObjectDetectedMessage,
|
ObjectDetectedMessage,
|
||||||
SplashHitMessage,
|
SplashHitMessage,
|
||||||
SetChatFilterMessage,
|
SetChatFilterMessage,
|
||||||
|
|
||||||
// OPCODE 100
|
|
||||||
AvatarSearchCriteriaMessage,
|
AvatarSearchCriteriaMessage,
|
||||||
AvatarSearchResponse,
|
AvatarSearchResponse,
|
||||||
WeaponJammedMessage,
|
WeaponJammedMessage,
|
||||||
LinkDeadAwarenessMsg,
|
LinkDeadAwarenessMsg,
|
||||||
|
// 0x68
|
||||||
DroppodFreefallingMessage,
|
DroppodFreefallingMessage,
|
||||||
AvatarFirstTimeEventMessage,
|
AvatarFirstTimeEventMessage,
|
||||||
AggravatedDamageMessage,
|
AggravatedDamageMessage,
|
||||||
TriggerSoundMessage,
|
TriggerSoundMessage,
|
||||||
LootItemMessage,
|
LootItemMessage,
|
||||||
VehicleSubStateMessage,
|
VehicleSubStateMessage,
|
||||||
|
|
||||||
// OPCODE 110
|
|
||||||
SquadMembershipRequest,
|
SquadMembershipRequest,
|
||||||
SquadMembershipResponse,
|
SquadMembershipResponse,
|
||||||
|
|
||||||
|
// OPCODES 0x70-7f
|
||||||
SquadMemberEvent,
|
SquadMemberEvent,
|
||||||
PlatoonEvent,
|
PlatoonEvent,
|
||||||
FriendsRequest,
|
FriendsRequest,
|
||||||
|
|
@ -162,8 +161,7 @@ object GamePacketOpcode extends Enumeration {
|
||||||
TrainingZoneMessage,
|
TrainingZoneMessage,
|
||||||
DeployableObjectsInfoMessage,
|
DeployableObjectsInfoMessage,
|
||||||
SquadState,
|
SquadState,
|
||||||
|
// 0x78
|
||||||
// OPCODE 120
|
|
||||||
OxygenStateMessage,
|
OxygenStateMessage,
|
||||||
TradeMessage,
|
TradeMessage,
|
||||||
UnknownMessage122,
|
UnknownMessage122,
|
||||||
|
|
@ -172,36 +170,36 @@ object GamePacketOpcode extends Enumeration {
|
||||||
UnknownMessage125,
|
UnknownMessage125,
|
||||||
UnknownMessage126,
|
UnknownMessage126,
|
||||||
AvatarStatisticsMessage,
|
AvatarStatisticsMessage,
|
||||||
|
|
||||||
|
// OPCODES 0x80-8f
|
||||||
GenericObjectAction2Message,
|
GenericObjectAction2Message,
|
||||||
DestroyDisplayMessage,
|
DestroyDisplayMessage,
|
||||||
|
|
||||||
// OPCODE 130
|
|
||||||
TriggerBotAction,
|
TriggerBotAction,
|
||||||
SquadWaypointRequest,
|
SquadWaypointRequest,
|
||||||
SquadWaypointEvent,
|
SquadWaypointEvent,
|
||||||
OffshoreVehicleMessage,
|
OffshoreVehicleMessage,
|
||||||
ObjectDeployedMessage,
|
ObjectDeployedMessage,
|
||||||
ObjectDeployedCountMessage,
|
ObjectDeployedCountMessage,
|
||||||
|
// 0x88
|
||||||
WeaponDelayFireMessage,
|
WeaponDelayFireMessage,
|
||||||
BugReportMessage,
|
BugReportMessage,
|
||||||
PlayerStasisMessage,
|
PlayerStasisMessage,
|
||||||
UnknownMessage139,
|
UnknownMessage139,
|
||||||
|
|
||||||
// OPCODE 140
|
|
||||||
OutfitMembershipRequest,
|
OutfitMembershipRequest,
|
||||||
OutfitMembershipResponse,
|
OutfitMembershipResponse,
|
||||||
OutfitRequest,
|
OutfitRequest,
|
||||||
OutfitEvent,
|
OutfitEvent,
|
||||||
|
|
||||||
|
// OPCODES 0x90-9f
|
||||||
OutfitMemberEvent,
|
OutfitMemberEvent,
|
||||||
OutfitMemberUpdate,
|
OutfitMemberUpdate,
|
||||||
PlanetsideStringAttributeMessage,
|
PlanetsideStringAttributeMessage,
|
||||||
DataChallengeMessage,
|
DataChallengeMessage,
|
||||||
DataChallengeMessageResp,
|
DataChallengeMessageResp,
|
||||||
WeatherMessage,
|
WeatherMessage,
|
||||||
|
|
||||||
// OPCODE 150
|
|
||||||
SimDataChallenge,
|
SimDataChallenge,
|
||||||
SimDataChallengeResp,
|
SimDataChallengeResp,
|
||||||
|
// 0x98
|
||||||
OutfitListEvent,
|
OutfitListEvent,
|
||||||
EmpireIncentivesMessage,
|
EmpireIncentivesMessage,
|
||||||
InvalidTerrainMessage,
|
InvalidTerrainMessage,
|
||||||
|
|
@ -211,7 +209,7 @@ object GamePacketOpcode extends Enumeration {
|
||||||
UplinkPositionEvent,
|
UplinkPositionEvent,
|
||||||
HotSpotUpdateMessage,
|
HotSpotUpdateMessage,
|
||||||
|
|
||||||
// OPCODE 160
|
// OPCODES 0xa0-af
|
||||||
BuildingInfoUpdateMessage,
|
BuildingInfoUpdateMessage,
|
||||||
FireHintMessage,
|
FireHintMessage,
|
||||||
UplinkRequest,
|
UplinkRequest,
|
||||||
|
|
@ -220,36 +218,36 @@ object GamePacketOpcode extends Enumeration {
|
||||||
WarpgateResponse,
|
WarpgateResponse,
|
||||||
DamageWithPositionMessage,
|
DamageWithPositionMessage,
|
||||||
GenericActionMessage,
|
GenericActionMessage,
|
||||||
|
// 0xa8
|
||||||
ContinentalLockUpdateMessage,
|
ContinentalLockUpdateMessage,
|
||||||
AvatarGrenadeStateMessage,
|
AvatarGrenadeStateMessage,
|
||||||
|
|
||||||
// OPCODE 170
|
|
||||||
UnknownMessage170,
|
UnknownMessage170,
|
||||||
UnknownMessage171,
|
UnknownMessage171,
|
||||||
ReleaseAvatarRequestMessage,
|
ReleaseAvatarRequestMessage,
|
||||||
AvatarDeadStateMessage,
|
AvatarDeadStateMessage,
|
||||||
CSAssistMessage,
|
CSAssistMessage,
|
||||||
CSAssistCommentMessage,
|
CSAssistCommentMessage,
|
||||||
|
|
||||||
|
// OPCODES 0xb0-bf
|
||||||
VoiceHostRequest,
|
VoiceHostRequest,
|
||||||
VoiceHostKill,
|
VoiceHostKill,
|
||||||
VoiceHostInfo,
|
VoiceHostInfo,
|
||||||
BattleplanMessage,
|
BattleplanMessage,
|
||||||
|
|
||||||
// OPCODE 180
|
|
||||||
BattleExperienceMessage,
|
BattleExperienceMessage,
|
||||||
TargetingImplantRequest,
|
TargetingImplantRequest,
|
||||||
ZonePopulationUpdateMessage,
|
ZonePopulationUpdateMessage,
|
||||||
DisconnectMessage,
|
DisconnectMessage,
|
||||||
|
// 0xb8
|
||||||
ExperienceAddedMessage,
|
ExperienceAddedMessage,
|
||||||
OrbitalStrikeWaypointMessage,
|
OrbitalStrikeWaypointMessage,
|
||||||
KeepAliveMessage,
|
KeepAliveMessage,
|
||||||
MapObjectStateBlockMessage,
|
MapObjectStateBlockMessage,
|
||||||
SnoopMsg,
|
SnoopMsg,
|
||||||
PlayerStateMessageUpstream,
|
PlayerStateMessageUpstream,
|
||||||
|
|
||||||
// OPCODE 190
|
|
||||||
PlayerStateShiftMessage,
|
PlayerStateShiftMessage,
|
||||||
ZipLineMessage,
|
ZipLineMessage,
|
||||||
|
|
||||||
|
// OPCODES 0xc0-cf
|
||||||
CaptureFlagUpdateMessage,
|
CaptureFlagUpdateMessage,
|
||||||
VanuModuleUpdateMessage,
|
VanuModuleUpdateMessage,
|
||||||
FacilityBenefitShieldChargeRequestMessage,
|
FacilityBenefitShieldChargeRequestMessage,
|
||||||
|
|
@ -258,8 +256,7 @@ object GamePacketOpcode extends Enumeration {
|
||||||
ChainLashMessage,
|
ChainLashMessage,
|
||||||
ZoneInfoMessage,
|
ZoneInfoMessage,
|
||||||
LongRangeProjectileInfoMessage,
|
LongRangeProjectileInfoMessage,
|
||||||
|
// 0xc8
|
||||||
// OPCODE 200
|
|
||||||
WeaponLazeTargetPositionMessage,
|
WeaponLazeTargetPositionMessage,
|
||||||
ModuleLimitsMessage,
|
ModuleLimitsMessage,
|
||||||
OutfitBenefitMessage,
|
OutfitBenefitMessage,
|
||||||
|
|
@ -268,36 +265,36 @@ object GamePacketOpcode extends Enumeration {
|
||||||
DensityLevelUpdateMessage,
|
DensityLevelUpdateMessage,
|
||||||
ActOfGodMessage,
|
ActOfGodMessage,
|
||||||
AvatarAwardMessage,
|
AvatarAwardMessage,
|
||||||
|
|
||||||
|
// OPCODES 0xd0-df
|
||||||
UnknownMessage208,
|
UnknownMessage208,
|
||||||
DisplayedAwardMessage,
|
DisplayedAwardMessage,
|
||||||
|
|
||||||
// OPCODE 210
|
|
||||||
RespawnAMSInfoMessage,
|
RespawnAMSInfoMessage,
|
||||||
ComponentDamageMessage,
|
ComponentDamageMessage,
|
||||||
GenericObjectActionAtPositionMessage,
|
GenericObjectActionAtPositionMessage,
|
||||||
PropertyOverrideMessage,
|
PropertyOverrideMessage,
|
||||||
WarpgateLinkOverrideMessage,
|
WarpgateLinkOverrideMessage,
|
||||||
EmpireBenefitsMessage,
|
EmpireBenefitsMessage,
|
||||||
|
// 0xd8
|
||||||
ForceEmpireMessage,
|
ForceEmpireMessage,
|
||||||
BroadcastWarpgateUpdateMessage,
|
BroadcastWarpgateUpdateMessage,
|
||||||
UnknownMessage218,
|
UnknownMessage218,
|
||||||
SquadMainTerminalMessage,
|
SquadMainTerminalMessage,
|
||||||
|
|
||||||
// OPCODE 220
|
|
||||||
SquadMainTerminalResponseMessage,
|
SquadMainTerminalResponseMessage,
|
||||||
SquadOrderMessage,
|
SquadOrderMessage,
|
||||||
SquadOrderResponse,
|
SquadOrderResponse,
|
||||||
ZoneLockInfoMessage,
|
ZoneLockInfoMessage,
|
||||||
|
|
||||||
|
// OPCODES 0xe0-ef
|
||||||
SquadBindInfoMessage,
|
SquadBindInfoMessage,
|
||||||
AudioSequenceMessage,
|
AudioSequenceMessage,
|
||||||
SquadFacilityBindInfoMessage,
|
SquadFacilityBindInfoMessage,
|
||||||
ZoneForcedCavernConnectionsMessage,
|
ZoneForcedCavernConnectionsMessage,
|
||||||
MissionActionMessage,
|
MissionActionMessage,
|
||||||
MissionKillTriggerMessage,
|
MissionKillTriggerMessage,
|
||||||
|
|
||||||
// OPCODE 230
|
|
||||||
ReplicationStreamMessage,
|
ReplicationStreamMessage,
|
||||||
SquadDefinitionActionMessage,
|
SquadDefinitionActionMessage,
|
||||||
|
// 0xe8
|
||||||
SquadDetailDefinitionUpdateMessage,
|
SquadDetailDefinitionUpdateMessage,
|
||||||
TacticsMessage,
|
TacticsMessage,
|
||||||
RabbitUpdateMessage,
|
RabbitUpdateMessage,
|
||||||
|
|
@ -307,7 +304,7 @@ object GamePacketOpcode extends Enumeration {
|
||||||
UnknownMessage238,
|
UnknownMessage238,
|
||||||
OrderTerminalBugMessage,
|
OrderTerminalBugMessage,
|
||||||
|
|
||||||
// OPCODE 240
|
// OPCODES 0xf0-f3
|
||||||
QueueTimedHelpMessage,
|
QueueTimedHelpMessage,
|
||||||
MailMessage,
|
MailMessage,
|
||||||
GameVarUpdate,
|
GameVarUpdate,
|
||||||
|
|
@ -316,302 +313,302 @@ object GamePacketOpcode extends Enumeration {
|
||||||
|
|
||||||
private def noDecoder(opcode : GamePacketOpcode.Type) = (a : BitVector) =>
|
private def noDecoder(opcode : GamePacketOpcode.Type) = (a : BitVector) =>
|
||||||
Attempt.failure(Err(s"Could not find a marshaller for game packet ${opcode}"))
|
Attempt.failure(Err(s"Could not find a marshaller for game packet ${opcode}"))
|
||||||
|
|
||||||
|
/// Mapping of packet IDs to decoders. Notice that we are using the @switch annotation which ensures that the Scala
|
||||||
|
/// compiler will be able to optimize this as a lookup table (switch statement). Microbenchmarks show a nearly 400x
|
||||||
|
/// speedup when using a switch (given the worst case of not finding a decoder)
|
||||||
|
def getPacketDecoder(opcode : GamePacketOpcode.Type) : (BitVector) => Attempt[DecodeResult[PlanetSideGamePacket]] = (opcode.id : @switch) match {
|
||||||
|
// OPCODES 0x00-0f
|
||||||
|
case 0x00 => noDecoder(Unknown0)
|
||||||
|
case 0x01 => game.LoginMessage.decode
|
||||||
|
case 0x02 => game.LoginRespMessage.decode
|
||||||
|
case 0x03 => game.ConnectToWorldRequestMessage.decode
|
||||||
|
case 0x04 => game.ConnectToWorldMessage.decode
|
||||||
|
case 0x05 => game.VNLWorldStatusMessage.decode
|
||||||
|
case 0x06 => noDecoder(UnknownMessage6)
|
||||||
|
case 0x07 => noDecoder(UnknownMessage7)
|
||||||
|
// 0x08
|
||||||
|
case 0x08 => noDecoder(PlayerStateMessage)
|
||||||
|
case 0x09 => game.HitMessage.decode
|
||||||
|
case 0x0a => noDecoder(HitHint)
|
||||||
|
case 0x0b => noDecoder(DamageMessage)
|
||||||
|
case 0x0c => noDecoder(DestroyMessage)
|
||||||
|
case 0x0d => game.ReloadMessage.decode
|
||||||
|
case 0x0e => noDecoder(MountVehicleMsg)
|
||||||
|
case 0x0f => noDecoder(DismountVehicleMsg)
|
||||||
|
|
||||||
def getPacketDecoder(opcode : GamePacketOpcode.Type) : (BitVector) => Attempt[DecodeResult[PlanetSideGamePacket]] = opcode match {
|
// OPCODES 0x10-1f
|
||||||
// OPCODE 0
|
case 0x10 => game.UseItemMessage.decode
|
||||||
case Unknown0 => noDecoder(opcode)
|
case 0x11 => game.MoveItemMessage.decode
|
||||||
case LoginMessage => game.LoginMessage.decode
|
case 0x12 => game.ChatMsg.decode
|
||||||
case LoginRespMessage => game.LoginRespMessage.decode
|
case 0x13 => noDecoder(CharacterNoRecordMessage)
|
||||||
case ConnectToWorldRequestMessage => game.ConnectToWorldRequestMessage.decode
|
case 0x14 => game.CharacterInfoMessage.decode
|
||||||
case ConnectToWorldMessage => game.ConnectToWorldMessage.decode
|
case 0x15 => noDecoder(UnknownMessage21)
|
||||||
case VNLWorldStatusMessage => game.VNLWorldStatusMessage.decode
|
case 0x16 => noDecoder(BindPlayerMessage)
|
||||||
case UnknownMessage6 => noDecoder(opcode)
|
case 0x17 => noDecoder(ObjectCreateMessage_Duplicate)
|
||||||
case UnknownMessage7 => noDecoder(opcode)
|
// 0x18
|
||||||
case PlayerStateMessage => noDecoder(opcode)
|
case 0x18 => game.ObjectCreateMessage.decode
|
||||||
case HitMessage => game.HitMessage.decode
|
case 0x19 => game.ObjectDeleteMessage.decode
|
||||||
|
case 0x1a => game.PingMsg.decode
|
||||||
|
case 0x1b => noDecoder(VehicleStateMessage)
|
||||||
|
case 0x1c => noDecoder(FrameVehicleStateMessage)
|
||||||
|
case 0x1d => game.GenericObjectStateMsg.decode
|
||||||
|
case 0x1e => noDecoder(ChildObjectStateMessage)
|
||||||
|
case 0x1f => game.ActionResultMessage.decode
|
||||||
|
|
||||||
// OPCODE 10
|
// OPCODES 0x20-2f
|
||||||
case HitHint => noDecoder(opcode)
|
case 0x20 => noDecoder(UnknownMessage32)
|
||||||
case DamageMessage => noDecoder(opcode)
|
case 0x21 => noDecoder(ActionProgressMessage)
|
||||||
case DestroyMessage => noDecoder(opcode)
|
case 0x22 => noDecoder(ActionCancelMessage)
|
||||||
case ReloadMessage => game.ReloadMessage.decode
|
case 0x23 => noDecoder(ActionCancelAcknowledgeMessage)
|
||||||
case MountVehicleMsg => noDecoder(opcode)
|
case 0x24 => game.SetEmpireMessage.decode
|
||||||
case DismountVehicleMsg => noDecoder(opcode)
|
case 0x25 => game.EmoteMsg.decode
|
||||||
case UseItemMessage => game.UseItemMessage.decode
|
case 0x26 => noDecoder(UnuseItemMessage)
|
||||||
case MoveItemMessage => game.MoveItemMessage.decode
|
case 0x27 => noDecoder(ObjectDetachMessage)
|
||||||
case ChatMsg => game.ChatMsg.decode
|
// 0x28
|
||||||
case CharacterNoRecordMessage => noDecoder(opcode)
|
case 0x28 => noDecoder(CreateShortcutMessage)
|
||||||
|
case 0x29 => noDecoder(ChangeShortcutBankMessage)
|
||||||
|
case 0x2a => noDecoder(ObjectAttachMessage)
|
||||||
|
case 0x2b => noDecoder(UnknownMessage43)
|
||||||
|
case 0x2c => noDecoder(PlanetsideAttributeMessage)
|
||||||
|
case 0x2d => game.RequestDestroyMessage.decode
|
||||||
|
case 0x2e => noDecoder(UnknownMessage46)
|
||||||
|
case 0x2f => game.CharacterCreateRequestMessage.decode
|
||||||
|
|
||||||
// OPCODE 20
|
// OPCODES 0x30-3f
|
||||||
case CharacterInfoMessage => game.CharacterInfoMessage.decode
|
case 0x30 => game.CharacterRequestMessage.decode
|
||||||
case UnknownMessage21 => noDecoder(opcode)
|
case 0x31 => noDecoder(LoadMapMessage)
|
||||||
case BindPlayerMessage => noDecoder(opcode)
|
case 0x32 => game.SetCurrentAvatarMessage.decode
|
||||||
case ObjectCreateMessage_Duplicate => noDecoder(opcode)
|
case 0x33 => game.ObjectHeldMessage.decode
|
||||||
case ObjectCreateMessage => game.ObjectCreateMessage.decode
|
case 0x34 => game.WeaponFireMessage.decode
|
||||||
case ObjectDeleteMessage => game.ObjectDeleteMessage.decode
|
case 0x35 => game.AvatarJumpMessage.decode
|
||||||
case PingMsg => game.PingMsg.decode
|
case 0x36 => noDecoder(PickupItemMessage)
|
||||||
case VehicleStateMessage => noDecoder(opcode)
|
case 0x37 => game.DropItemMessage.decode
|
||||||
case FrameVehicleStateMessage => noDecoder(opcode)
|
// 0x38
|
||||||
case GenericObjectStateMsg => game.GenericObjectStateMsg.decode
|
case 0x38 => noDecoder(InventoryStateMessage)
|
||||||
|
case 0x39 => game.ChangeFireStateMessage_Start.decode
|
||||||
|
case 0x3a => game.ChangeFireStateMessage_Stop.decode
|
||||||
|
case 0x3b => noDecoder(UnknownMessage59)
|
||||||
|
case 0x3c => noDecoder(GenericCollisionMsg)
|
||||||
|
case 0x3d => game.QuantityUpdateMessage.decode
|
||||||
|
case 0x3e => noDecoder(ArmorChangedMessage)
|
||||||
|
case 0x3f => noDecoder(ProjectileStateMessage)
|
||||||
|
|
||||||
// OPCODE 30
|
// OPCODES 0x40-4f
|
||||||
case ChildObjectStateMessage => noDecoder(opcode)
|
case 0x40 => noDecoder(MountVehicleCargoMsg)
|
||||||
case ActionResultMessage => game.ActionResultMessage.decode
|
case 0x41 => noDecoder(DismountVehicleCargoMsg)
|
||||||
case UnknownMessage32 => noDecoder(opcode)
|
case 0x42 => noDecoder(CargoMountPointStatusMessage)
|
||||||
case ActionProgressMessage => noDecoder(opcode)
|
case 0x43 => noDecoder(BeginZoningMessage)
|
||||||
case ActionCancelMessage => noDecoder(opcode)
|
case 0x44 => game.ItemTransactionMessage.decode
|
||||||
case ActionCancelAcknowledgeMessage => noDecoder(opcode)
|
case 0x45 => noDecoder(ItemTransactionResultMessage)
|
||||||
case SetEmpireMessage => game.SetEmpireMessage.decode
|
case 0x46 => game.ChangeFireModeMessage.decode
|
||||||
case EmoteMsg => game.EmoteMsg.decode
|
case 0x47 => game.ChangeAmmoMessage.decode
|
||||||
case UnuseItemMessage => noDecoder(opcode)
|
// 0x48
|
||||||
case ObjectDetachMessage => noDecoder(opcode)
|
case 0x48 => game.TimeOfDayMessage.decode
|
||||||
|
case 0x49 => noDecoder(UnknownMessage73)
|
||||||
|
case 0x4a => noDecoder(SpawnRequestMessage)
|
||||||
|
case 0x4b => noDecoder(DeployRequestMessage)
|
||||||
|
case 0x4c => noDecoder(UnknownMessage76)
|
||||||
|
case 0x4d => noDecoder(RepairMessage)
|
||||||
|
case 0x4e => noDecoder(ServerVehicleOverrideMsg)
|
||||||
|
case 0x4f => noDecoder(LashMessage)
|
||||||
|
|
||||||
// OPCODE 40
|
// OPCODES 0x50-5f
|
||||||
case CreateShortcutMessage => noDecoder(opcode)
|
case 0x50 => noDecoder(TargetingInfoMessage)
|
||||||
case ChangeShortcutBankMessage => noDecoder(opcode)
|
case 0x51 => noDecoder(TriggerEffectMessage)
|
||||||
case ObjectAttachMessage => noDecoder(opcode)
|
case 0x52 => game.WeaponDryFireMessage.decode
|
||||||
case UnknownMessage43 => noDecoder(opcode)
|
case 0x53 => noDecoder(DroppodLaunchRequestMessage)
|
||||||
case PlanetsideAttributeMessage => noDecoder(opcode)
|
case 0x54 => noDecoder(HackMessage)
|
||||||
case RequestDestroyMessage => game.RequestDestroyMessage.decode
|
case 0x55 => noDecoder(DroppodLaunchResponseMessage)
|
||||||
case UnknownMessage46 => noDecoder(opcode)
|
case 0x56 => noDecoder(GenericObjectActionMessage)
|
||||||
case CharacterCreateRequestMessage => game.CharacterCreateRequestMessage.decode
|
case 0x57 => noDecoder(AvatarVehicleTimerMessage)
|
||||||
case CharacterRequestMessage => game.CharacterRequestMessage.decode
|
// 0x58
|
||||||
case LoadMapMessage => game.LoadMapMessage.decode
|
case 0x58 => noDecoder(AvatarImplantMessage)
|
||||||
|
case 0x59 => noDecoder(UnknownMessage89)
|
||||||
|
case 0x5a => noDecoder(DelayedPathMountMsg)
|
||||||
|
case 0x5b => noDecoder(OrbitalShuttleTimeMsg)
|
||||||
|
case 0x5c => noDecoder(AIDamage)
|
||||||
|
case 0x5d => noDecoder(DeployObjectMessage)
|
||||||
|
case 0x5e => noDecoder(FavoritesRequest)
|
||||||
|
case 0x5f => noDecoder(FavoritesResponse)
|
||||||
|
|
||||||
// OPCODE 50
|
// OPCODES 0x60-6f
|
||||||
case SetCurrentAvatarMessage => game.SetCurrentAvatarMessage.decode
|
case 0x60 => noDecoder(FavoritesMessage)
|
||||||
case ObjectHeldMessage => game.ObjectHeldMessage.decode
|
case 0x61 => noDecoder(ObjectDetectedMessage)
|
||||||
case WeaponFireMessage => game.WeaponFireMessage.decode
|
case 0x62 => noDecoder(SplashHitMessage)
|
||||||
case AvatarJumpMessage => game.AvatarJumpMessage.decode
|
case 0x63 => noDecoder(SetChatFilterMessage)
|
||||||
case PickupItemMessage => noDecoder(opcode)
|
case 0x64 => noDecoder(AvatarSearchCriteriaMessage)
|
||||||
case DropItemMessage => game.DropItemMessage.decode
|
case 0x65 => noDecoder(AvatarSearchResponse)
|
||||||
case InventoryStateMessage => noDecoder(opcode)
|
case 0x66 => game.WeaponJammedMessage.decode
|
||||||
case ChangeFireStateMessage_Start => game.ChangeFireStateMessage_Start.decode
|
case 0x67 => noDecoder(LinkDeadAwarenessMsg)
|
||||||
case ChangeFireStateMessage_Stop => game.ChangeFireStateMessage_Stop.decode
|
// 0x68
|
||||||
case UnknownMessage59 => noDecoder(opcode)
|
case 0x68 => noDecoder(DroppodFreefallingMessage)
|
||||||
|
case 0x69 => game.AvatarFirstTimeEventMessage.decode
|
||||||
|
case 0x6a => noDecoder(AggravatedDamageMessage)
|
||||||
|
case 0x6b => noDecoder(TriggerSoundMessage)
|
||||||
|
case 0x6c => noDecoder(LootItemMessage)
|
||||||
|
case 0x6d => noDecoder(VehicleSubStateMessage)
|
||||||
|
case 0x6e => noDecoder(SquadMembershipRequest)
|
||||||
|
case 0x6f => noDecoder(SquadMembershipResponse)
|
||||||
|
|
||||||
// OPCODE 60
|
// OPCODES 0x70-7f
|
||||||
case GenericCollisionMsg => noDecoder(opcode)
|
case 0x70 => noDecoder(SquadMemberEvent)
|
||||||
case QuantityUpdateMessage => game.QuantityUpdateMessage.decode
|
case 0x71 => noDecoder(PlatoonEvent)
|
||||||
case ArmorChangedMessage => noDecoder(opcode)
|
case 0x72 => noDecoder(FriendsRequest)
|
||||||
case ProjectileStateMessage => noDecoder(opcode)
|
case 0x73 => noDecoder(FriendsResponse)
|
||||||
case MountVehicleCargoMsg => noDecoder(opcode)
|
case 0x74 => noDecoder(TriggerEnvironmentalDamageMessage)
|
||||||
case DismountVehicleCargoMsg => noDecoder(opcode)
|
case 0x75 => noDecoder(TrainingZoneMessage)
|
||||||
case CargoMountPointStatusMessage => noDecoder(opcode)
|
case 0x76 => noDecoder(DeployableObjectsInfoMessage)
|
||||||
case BeginZoningMessage => noDecoder(opcode)
|
case 0x77 => noDecoder(SquadState)
|
||||||
case ItemTransactionMessage => game.ItemTransactionMessage.decode
|
// 0x78
|
||||||
case ItemTransactionResultMessage => noDecoder(opcode)
|
case 0x78 => noDecoder(OxygenStateMessage)
|
||||||
|
case 0x79 => noDecoder(TradeMessage)
|
||||||
|
case 0x7a => noDecoder(UnknownMessage122)
|
||||||
|
case 0x7b => noDecoder(DamageFeedbackMessage)
|
||||||
|
case 0x7c => noDecoder(DismountBuildingMsg)
|
||||||
|
case 0x7d => noDecoder(UnknownMessage125)
|
||||||
|
case 0x7e => noDecoder(UnknownMessage126)
|
||||||
|
case 0x7f => noDecoder(AvatarStatisticsMessage)
|
||||||
|
|
||||||
// OPCODE 70
|
// OPCODES 0x80-8f
|
||||||
case ChangeFireModeMessage => game.ChangeFireModeMessage.decode
|
case 0x80 => noDecoder(GenericObjectAction2Message)
|
||||||
case ChangeAmmoMessage => game.ChangeAmmoMessage.decode
|
case 0x81 => noDecoder(DestroyDisplayMessage)
|
||||||
case TimeOfDayMessage => game.TimeOfDayMessage.decode
|
case 0x82 => noDecoder(TriggerBotAction)
|
||||||
case UnknownMessage73 => noDecoder(opcode)
|
case 0x83 => noDecoder(SquadWaypointRequest)
|
||||||
case SpawnRequestMessage => noDecoder(opcode)
|
case 0x84 => noDecoder(SquadWaypointEvent)
|
||||||
case DeployRequestMessage => noDecoder(opcode)
|
case 0x85 => noDecoder(OffshoreVehicleMessage)
|
||||||
case UnknownMessage76 => noDecoder(opcode)
|
case 0x86 => noDecoder(ObjectDeployedMessage)
|
||||||
case RepairMessage => noDecoder(opcode)
|
case 0x87 => noDecoder(ObjectDeployedCountMessage)
|
||||||
case ServerVehicleOverrideMsg => noDecoder(opcode)
|
// 0x88
|
||||||
case LashMessage => noDecoder(opcode)
|
case 0x88 => game.WeaponDelayFireMessage.decode
|
||||||
|
case 0x89 => noDecoder(BugReportMessage)
|
||||||
|
case 0x8a => noDecoder(PlayerStasisMessage)
|
||||||
|
case 0x8b => noDecoder(UnknownMessage139)
|
||||||
|
case 0x8c => noDecoder(OutfitMembershipRequest)
|
||||||
|
case 0x8d => noDecoder(OutfitMembershipResponse)
|
||||||
|
case 0x8e => noDecoder(OutfitRequest)
|
||||||
|
case 0x8f => noDecoder(OutfitEvent)
|
||||||
|
|
||||||
// OPCODE 80
|
// OPCODES 0x90-9f
|
||||||
case TargetingInfoMessage => noDecoder(opcode)
|
case 0x90 => noDecoder(OutfitMemberEvent)
|
||||||
case TriggerEffectMessage => noDecoder(opcode)
|
case 0x91 => noDecoder(OutfitMemberUpdate)
|
||||||
case WeaponDryFireMessage => game.WeaponDryFireMessage.decode
|
case 0x92 => noDecoder(PlanetsideStringAttributeMessage)
|
||||||
case DroppodLaunchRequestMessage => noDecoder(opcode)
|
case 0x93 => noDecoder(DataChallengeMessage)
|
||||||
case HackMessage => noDecoder(opcode)
|
case 0x94 => noDecoder(DataChallengeMessageResp)
|
||||||
case DroppodLaunchResponseMessage => noDecoder(opcode)
|
case 0x95 => noDecoder(WeatherMessage)
|
||||||
case GenericObjectActionMessage => noDecoder(opcode)
|
case 0x96 => noDecoder(SimDataChallenge)
|
||||||
case AvatarVehicleTimerMessage => noDecoder(opcode)
|
case 0x97 => noDecoder(SimDataChallengeResp)
|
||||||
case AvatarImplantMessage => noDecoder(opcode)
|
// 0x98
|
||||||
case UnknownMessage89 => noDecoder(opcode)
|
case 0x98 => noDecoder(OutfitListEvent)
|
||||||
|
case 0x99 => noDecoder(EmpireIncentivesMessage)
|
||||||
|
case 0x9a => noDecoder(InvalidTerrainMessage)
|
||||||
|
case 0x9b => noDecoder(SyncMessage)
|
||||||
|
case 0x9c => noDecoder(DebugDrawMessage)
|
||||||
|
case 0x9d => noDecoder(SoulMarkMessage)
|
||||||
|
case 0x9e => noDecoder(UplinkPositionEvent)
|
||||||
|
case 0x9f => noDecoder(HotSpotUpdateMessage)
|
||||||
|
|
||||||
// OPCODE 90
|
// OPCODES 0xa0-af
|
||||||
case DelayedPathMountMsg => noDecoder(opcode)
|
case 0xa0 => noDecoder(BuildingInfoUpdateMessage)
|
||||||
case OrbitalShuttleTimeMsg => noDecoder(opcode)
|
case 0xa1 => noDecoder(FireHintMessage)
|
||||||
case AIDamage => noDecoder(opcode)
|
case 0xa2 => noDecoder(UplinkRequest)
|
||||||
case DeployObjectMessage => noDecoder(opcode)
|
case 0xa3 => noDecoder(UplinkResponse)
|
||||||
case FavoritesRequest => noDecoder(opcode)
|
case 0xa4 => noDecoder(WarpgateRequest)
|
||||||
case FavoritesResponse => noDecoder(opcode)
|
case 0xa5 => noDecoder(WarpgateResponse)
|
||||||
case FavoritesMessage => noDecoder(opcode)
|
case 0xa6 => noDecoder(DamageWithPositionMessage)
|
||||||
case ObjectDetectedMessage => noDecoder(opcode)
|
case 0xa7 => noDecoder(GenericActionMessage)
|
||||||
case SplashHitMessage => noDecoder(opcode)
|
// 0xa8
|
||||||
case SetChatFilterMessage => noDecoder(opcode)
|
case 0xa8 => game.ContinentalLockUpdateMessage.decode
|
||||||
|
case 0xa9 => noDecoder(AvatarGrenadeStateMessage)
|
||||||
|
case 0xaa => noDecoder(UnknownMessage170)
|
||||||
|
case 0xab => noDecoder(UnknownMessage171)
|
||||||
|
case 0xac => noDecoder(ReleaseAvatarRequestMessage)
|
||||||
|
case 0xad => noDecoder(AvatarDeadStateMessage)
|
||||||
|
case 0xae => noDecoder(CSAssistMessage)
|
||||||
|
case 0xaf => noDecoder(CSAssistCommentMessage)
|
||||||
|
|
||||||
// OPCODE 100
|
// OPCODES 0xb0-bf
|
||||||
case AvatarSearchCriteriaMessage => noDecoder(opcode)
|
case 0xb0 => noDecoder(VoiceHostRequest)
|
||||||
case AvatarSearchResponse => noDecoder(opcode)
|
case 0xb1 => noDecoder(VoiceHostKill)
|
||||||
case WeaponJammedMessage => game.WeaponJammedMessage.decode
|
case 0xb2 => noDecoder(VoiceHostInfo)
|
||||||
case LinkDeadAwarenessMsg => noDecoder(opcode)
|
case 0xb3 => noDecoder(BattleplanMessage)
|
||||||
case DroppodFreefallingMessage => noDecoder(opcode)
|
case 0xb4 => noDecoder(BattleExperienceMessage)
|
||||||
case AvatarFirstTimeEventMessage => game.AvatarFirstTimeEventMessage.decode
|
case 0xb5 => noDecoder(TargetingImplantRequest)
|
||||||
case AggravatedDamageMessage => noDecoder(opcode)
|
case 0xb6 => noDecoder(ZonePopulationUpdateMessage)
|
||||||
case TriggerSoundMessage => noDecoder(opcode)
|
case 0xb7 => noDecoder(DisconnectMessage)
|
||||||
case LootItemMessage => noDecoder(opcode)
|
// 0xb8
|
||||||
case VehicleSubStateMessage => noDecoder(opcode)
|
case 0xb8 => noDecoder(ExperienceAddedMessage)
|
||||||
|
case 0xb9 => noDecoder(OrbitalStrikeWaypointMessage)
|
||||||
|
case 0xba => game.KeepAliveMessage.decode
|
||||||
|
case 0xbb => noDecoder(MapObjectStateBlockMessage)
|
||||||
|
case 0xbc => noDecoder(SnoopMsg)
|
||||||
|
case 0xbd => game.PlayerStateMessageUpstream.decode
|
||||||
|
case 0xbe => noDecoder(PlayerStateShiftMessage)
|
||||||
|
case 0xbf => noDecoder(ZipLineMessage)
|
||||||
|
|
||||||
// OPCODE 110
|
// OPCODES 0xc0-cf
|
||||||
case SquadMembershipRequest => noDecoder(opcode)
|
case 0xc0 => noDecoder(CaptureFlagUpdateMessage)
|
||||||
case SquadMembershipResponse => noDecoder(opcode)
|
case 0xc1 => noDecoder(VanuModuleUpdateMessage)
|
||||||
case SquadMemberEvent => noDecoder(opcode)
|
case 0xc2 => noDecoder(FacilityBenefitShieldChargeRequestMessage)
|
||||||
case PlatoonEvent => noDecoder(opcode)
|
case 0xc3 => noDecoder(ProximityTerminalUseMessage)
|
||||||
case FriendsRequest => noDecoder(opcode)
|
case 0xc4 => game.QuantityDeltaUpdateMessage.decode
|
||||||
case FriendsResponse => noDecoder(opcode)
|
case 0xc5 => noDecoder(ChainLashMessage)
|
||||||
case TriggerEnvironmentalDamageMessage => noDecoder(opcode)
|
case 0xc6 => noDecoder(ZoneInfoMessage)
|
||||||
case TrainingZoneMessage => noDecoder(opcode)
|
case 0xc7 => noDecoder(LongRangeProjectileInfoMessage)
|
||||||
case DeployableObjectsInfoMessage => noDecoder(opcode)
|
// 0xc8
|
||||||
case SquadState => noDecoder(opcode)
|
case 0xc8 => noDecoder(WeaponLazeTargetPositionMessage)
|
||||||
|
case 0xc9 => noDecoder(ModuleLimitsMessage)
|
||||||
|
case 0xca => noDecoder(OutfitBenefitMessage)
|
||||||
|
case 0xcb => noDecoder(EmpireChangeTimeMessage)
|
||||||
|
case 0xcc => noDecoder(ClockCalibrationMessage)
|
||||||
|
case 0xcd => noDecoder(DensityLevelUpdateMessage)
|
||||||
|
case 0xce => noDecoder(ActOfGodMessage)
|
||||||
|
case 0xcf => noDecoder(AvatarAwardMessage)
|
||||||
|
|
||||||
// OPCODE 120
|
// OPCODES 0xd0-df
|
||||||
case OxygenStateMessage => noDecoder(opcode)
|
case 0xd0 => noDecoder(UnknownMessage208)
|
||||||
case TradeMessage => noDecoder(opcode)
|
case 0xd1 => noDecoder(DisplayedAwardMessage)
|
||||||
case UnknownMessage122 => noDecoder(opcode)
|
case 0xd2 => noDecoder(RespawnAMSInfoMessage)
|
||||||
case DamageFeedbackMessage => noDecoder(opcode)
|
case 0xd3 => noDecoder(ComponentDamageMessage)
|
||||||
case DismountBuildingMsg => noDecoder(opcode)
|
case 0xd4 => noDecoder(GenericObjectActionAtPositionMessage)
|
||||||
case UnknownMessage125 => noDecoder(opcode)
|
case 0xd5 => noDecoder(PropertyOverrideMessage)
|
||||||
case UnknownMessage126 => noDecoder(opcode)
|
case 0xd6 => noDecoder(WarpgateLinkOverrideMessage)
|
||||||
case AvatarStatisticsMessage => noDecoder(opcode)
|
case 0xd7 => noDecoder(EmpireBenefitsMessage)
|
||||||
case GenericObjectAction2Message => noDecoder(opcode)
|
// 0xd8
|
||||||
case DestroyDisplayMessage => noDecoder(opcode)
|
case 0xd8 => noDecoder(ForceEmpireMessage)
|
||||||
|
case 0xd9 => game.BroadcastWarpgateUpdateMessage.decode
|
||||||
|
case 0xda => noDecoder(UnknownMessage218)
|
||||||
|
case 0xdb => noDecoder(SquadMainTerminalMessage)
|
||||||
|
case 0xdc => noDecoder(SquadMainTerminalResponseMessage)
|
||||||
|
case 0xdd => noDecoder(SquadOrderMessage)
|
||||||
|
case 0xde => noDecoder(SquadOrderResponse)
|
||||||
|
case 0xdf => noDecoder(ZoneLockInfoMessage)
|
||||||
|
|
||||||
// OPCODE 130
|
// OPCODES 0xe0-ef
|
||||||
case TriggerBotAction => noDecoder(opcode)
|
case 0xe0 => noDecoder(SquadBindInfoMessage)
|
||||||
case SquadWaypointRequest => noDecoder(opcode)
|
case 0xe1 => noDecoder(AudioSequenceMessage)
|
||||||
case SquadWaypointEvent => noDecoder(opcode)
|
case 0xe2 => noDecoder(SquadFacilityBindInfoMessage)
|
||||||
case OffshoreVehicleMessage => noDecoder(opcode)
|
case 0xe3 => noDecoder(ZoneForcedCavernConnectionsMessage)
|
||||||
case ObjectDeployedMessage => noDecoder(opcode)
|
case 0xe4 => noDecoder(MissionActionMessage)
|
||||||
case ObjectDeployedCountMessage => noDecoder(opcode)
|
case 0xe5 => noDecoder(MissionKillTriggerMessage)
|
||||||
case WeaponDelayFireMessage => game.WeaponDelayFireMessage.decode
|
case 0xe6 => noDecoder(ReplicationStreamMessage)
|
||||||
case BugReportMessage => noDecoder(opcode)
|
case 0xe7 => noDecoder(SquadDefinitionActionMessage)
|
||||||
case PlayerStasisMessage => noDecoder(opcode)
|
// 0xe8
|
||||||
case UnknownMessage139 => noDecoder(opcode)
|
case 0xe8 => noDecoder(SquadDetailDefinitionUpdateMessage)
|
||||||
|
case 0xe9 => noDecoder(TacticsMessage)
|
||||||
|
case 0xea => noDecoder(RabbitUpdateMessage)
|
||||||
|
case 0xeb => noDecoder(SquadInvitationRequestMessage)
|
||||||
|
case 0xec => noDecoder(CharacterKnowledgeMessage)
|
||||||
|
case 0xed => noDecoder(GameScoreUpdateMessage)
|
||||||
|
case 0xee => noDecoder(UnknownMessage238)
|
||||||
|
case 0xef => noDecoder(OrderTerminalBugMessage)
|
||||||
|
|
||||||
// OPCODE 140
|
// OPCODES 0xf0-f3
|
||||||
case OutfitMembershipRequest => noDecoder(opcode)
|
case 0xf0 => noDecoder(QueueTimedHelpMessage)
|
||||||
case OutfitMembershipResponse => noDecoder(opcode)
|
case 0xf1 => noDecoder(MailMessage)
|
||||||
case OutfitRequest => noDecoder(opcode)
|
case 0xf2 => noDecoder(GameVarUpdate)
|
||||||
case OutfitEvent => noDecoder(opcode)
|
case 0xf3 => noDecoder(ClientCheatedMessage)
|
||||||
case OutfitMemberEvent => noDecoder(opcode)
|
case default => noDecoder(opcode)
|
||||||
case OutfitMemberUpdate => noDecoder(opcode)
|
|
||||||
case PlanetsideStringAttributeMessage => noDecoder(opcode)
|
|
||||||
case DataChallengeMessage => noDecoder(opcode)
|
|
||||||
case DataChallengeMessageResp => noDecoder(opcode)
|
|
||||||
case WeatherMessage => noDecoder(opcode)
|
|
||||||
|
|
||||||
// OPCODE 150
|
|
||||||
case SimDataChallenge => noDecoder(opcode)
|
|
||||||
case SimDataChallengeResp => noDecoder(opcode)
|
|
||||||
case OutfitListEvent => noDecoder(opcode)
|
|
||||||
case EmpireIncentivesMessage => noDecoder(opcode)
|
|
||||||
case InvalidTerrainMessage => noDecoder(opcode)
|
|
||||||
case SyncMessage => noDecoder(opcode)
|
|
||||||
case DebugDrawMessage => noDecoder(opcode)
|
|
||||||
case SoulMarkMessage => noDecoder(opcode)
|
|
||||||
case UplinkPositionEvent => noDecoder(opcode)
|
|
||||||
case HotSpotUpdateMessage => noDecoder(opcode)
|
|
||||||
|
|
||||||
// OPCODE 160
|
|
||||||
case BuildingInfoUpdateMessage => game.BuildingInfoUpdateMessage.decode
|
|
||||||
case FireHintMessage => noDecoder(opcode)
|
|
||||||
case UplinkRequest => noDecoder(opcode)
|
|
||||||
case UplinkResponse => noDecoder(opcode)
|
|
||||||
case WarpgateRequest => noDecoder(opcode)
|
|
||||||
case WarpgateResponse => noDecoder(opcode)
|
|
||||||
case DamageWithPositionMessage => noDecoder(opcode)
|
|
||||||
case GenericActionMessage => noDecoder(opcode)
|
|
||||||
case ContinentalLockUpdateMessage => game.ContinentalLockUpdateMessage.decode
|
|
||||||
case AvatarGrenadeStateMessage => noDecoder(opcode)
|
|
||||||
|
|
||||||
// OPCODE 170
|
|
||||||
case UnknownMessage170 => noDecoder(opcode)
|
|
||||||
case UnknownMessage171 => noDecoder(opcode)
|
|
||||||
case ReleaseAvatarRequestMessage => noDecoder(opcode)
|
|
||||||
case AvatarDeadStateMessage => noDecoder(opcode)
|
|
||||||
case CSAssistMessage => noDecoder(opcode)
|
|
||||||
case CSAssistCommentMessage => noDecoder(opcode)
|
|
||||||
case VoiceHostRequest => noDecoder(opcode)
|
|
||||||
case VoiceHostKill => noDecoder(opcode)
|
|
||||||
case VoiceHostInfo => noDecoder(opcode)
|
|
||||||
case BattleplanMessage => noDecoder(opcode)
|
|
||||||
|
|
||||||
// OPCODE 180
|
|
||||||
case BattleExperienceMessage => noDecoder(opcode)
|
|
||||||
case TargetingImplantRequest => noDecoder(opcode)
|
|
||||||
case ZonePopulationUpdateMessage => noDecoder(opcode)
|
|
||||||
case DisconnectMessage => noDecoder(opcode)
|
|
||||||
case ExperienceAddedMessage => noDecoder(opcode)
|
|
||||||
case OrbitalStrikeWaypointMessage => noDecoder(opcode)
|
|
||||||
case KeepAliveMessage => game.KeepAliveMessage.decode
|
|
||||||
case MapObjectStateBlockMessage => noDecoder(opcode)
|
|
||||||
case SnoopMsg => noDecoder(opcode)
|
|
||||||
case PlayerStateMessageUpstream => game.PlayerStateMessageUpstream.decode
|
|
||||||
|
|
||||||
// OPCODE 190
|
|
||||||
case PlayerStateShiftMessage => noDecoder(opcode)
|
|
||||||
case ZipLineMessage => noDecoder(opcode)
|
|
||||||
case CaptureFlagUpdateMessage => noDecoder(opcode)
|
|
||||||
case VanuModuleUpdateMessage => noDecoder(opcode)
|
|
||||||
case FacilityBenefitShieldChargeRequestMessage => noDecoder(opcode)
|
|
||||||
case ProximityTerminalUseMessage => noDecoder(opcode)
|
|
||||||
case QuantityDeltaUpdateMessage => game.QuantityDeltaUpdateMessage.decode
|
|
||||||
case ChainLashMessage => noDecoder(opcode)
|
|
||||||
case ZoneInfoMessage => noDecoder(opcode)
|
|
||||||
case LongRangeProjectileInfoMessage => noDecoder(opcode)
|
|
||||||
|
|
||||||
// OPCODE 200
|
|
||||||
case WeaponLazeTargetPositionMessage => noDecoder(opcode)
|
|
||||||
case ModuleLimitsMessage => noDecoder(opcode)
|
|
||||||
case OutfitBenefitMessage => noDecoder(opcode)
|
|
||||||
case EmpireChangeTimeMessage => noDecoder(opcode)
|
|
||||||
case ClockCalibrationMessage => noDecoder(opcode)
|
|
||||||
case DensityLevelUpdateMessage => noDecoder(opcode)
|
|
||||||
case ActOfGodMessage => noDecoder(opcode)
|
|
||||||
case AvatarAwardMessage => noDecoder(opcode)
|
|
||||||
case UnknownMessage208 => noDecoder(opcode)
|
|
||||||
case DisplayedAwardMessage => noDecoder(opcode)
|
|
||||||
|
|
||||||
// OPCODE 210
|
|
||||||
case RespawnAMSInfoMessage => noDecoder(opcode)
|
|
||||||
case ComponentDamageMessage => noDecoder(opcode)
|
|
||||||
case GenericObjectActionAtPositionMessage => noDecoder(opcode)
|
|
||||||
case PropertyOverrideMessage => noDecoder(opcode)
|
|
||||||
case WarpgateLinkOverrideMessage => noDecoder(opcode)
|
|
||||||
case EmpireBenefitsMessage => noDecoder(opcode)
|
|
||||||
case ForceEmpireMessage => noDecoder(opcode)
|
|
||||||
case BroadcastWarpgateUpdateMessage => game.BroadcastWarpgateUpdateMessage.decode
|
|
||||||
case UnknownMessage218 => noDecoder(opcode)
|
|
||||||
case SquadMainTerminalMessage => noDecoder(opcode)
|
|
||||||
|
|
||||||
// OPCODE 220
|
|
||||||
case SquadMainTerminalResponseMessage => noDecoder(opcode)
|
|
||||||
case SquadOrderMessage => noDecoder(opcode)
|
|
||||||
case SquadOrderResponse => noDecoder(opcode)
|
|
||||||
case ZoneLockInfoMessage => noDecoder(opcode)
|
|
||||||
case SquadBindInfoMessage => noDecoder(opcode)
|
|
||||||
case AudioSequenceMessage => noDecoder(opcode)
|
|
||||||
case SquadFacilityBindInfoMessage => noDecoder(opcode)
|
|
||||||
case ZoneForcedCavernConnectionsMessage => noDecoder(opcode)
|
|
||||||
case MissionActionMessage => noDecoder(opcode)
|
|
||||||
case MissionKillTriggerMessage => noDecoder(opcode)
|
|
||||||
|
|
||||||
// OPCODE 230
|
|
||||||
case ReplicationStreamMessage => noDecoder(opcode)
|
|
||||||
case SquadDefinitionActionMessage => noDecoder(opcode)
|
|
||||||
case SquadDetailDefinitionUpdateMessage => noDecoder(opcode)
|
|
||||||
case TacticsMessage => noDecoder(opcode)
|
|
||||||
case RabbitUpdateMessage => noDecoder(opcode)
|
|
||||||
case SquadInvitationRequestMessage => noDecoder(opcode)
|
|
||||||
case CharacterKnowledgeMessage => noDecoder(opcode)
|
|
||||||
case GameScoreUpdateMessage => noDecoder(opcode)
|
|
||||||
case UnknownMessage238 => noDecoder(opcode)
|
|
||||||
case OrderTerminalBugMessage => noDecoder(opcode)
|
|
||||||
|
|
||||||
// OPCODE 240
|
|
||||||
case QueueTimedHelpMessage => noDecoder(opcode)
|
|
||||||
case MailMessage => noDecoder(opcode)
|
|
||||||
case GameVarUpdate => noDecoder(opcode)
|
|
||||||
case ClientCheatedMessage => noDecoder(opcode)
|
|
||||||
case default => noDecoder(opcode)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
implicit val codec: Codec[this.Value] = PacketHelpers.createEnumerationCodec(this, uint8L)
|
implicit val codec: Codec[this.Value] = PacketHelpers.createEnumerationCodec(this, uint8L)
|
||||||
|
|
|
||||||
|
|
@ -280,16 +280,16 @@ object PacketCoding {
|
||||||
|
|
||||||
opcode match {
|
opcode match {
|
||||||
case Failure(e) =>
|
case Failure(e) =>
|
||||||
return Attempt.failure(Err("Failed to decode control packet's opcode: " + e.message))
|
Attempt.failure(Err("Failed to decode control packet's opcode: " + e.message))
|
||||||
case _ =>
|
case Successful(op) =>
|
||||||
}
|
val packet = ControlPacketOpcode.getPacketDecoder(op.value)(op.remainder)
|
||||||
|
|
||||||
val packet = ControlPacketOpcode.getPacketDecoder(opcode.require.value)(opcode.require.remainder)
|
packet match {
|
||||||
|
case Failure(e) =>
|
||||||
packet match {
|
Attempt.failure(Err(f"Failed to parse control packet ${op.value}: " + e.messageWithContext))
|
||||||
case Failure(e) =>
|
case Successful(p) =>
|
||||||
Attempt.failure(Err(f"Failed to parse control packet 0x${opcode.require.value.id}%02x: " + e.messageWithContext))
|
Attempt.successful(p.value)
|
||||||
case Successful(p) => Attempt.successful(p.value)
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue