From 6aa511f2ae3d5c84e7db02627ffd4d7f6796ce75 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Sun, 17 Sep 2023 18:24:18 +0300 Subject: decide what message types are left --- pkg/messages/messages.go | 24 ++++----- pkg/messages/types/netSetConVar.go | 6 +-- pkg/messages/types/netSignOnState.go | 24 +++++---- pkg/messages/types/netTick.go | 8 +-- pkg/messages/types/svcBspDecal.go | 12 ++--- pkg/messages/types/svcClassInfo.go | 10 ++-- pkg/messages/types/svcCmdKeyValues.go | 4 +- pkg/messages/types/svcCreateStringTable.go | 2 +- pkg/messages/types/svcCrosshairAngle.go | 14 ++++- pkg/messages/types/svcEntityMessage.go | 12 ++--- pkg/messages/types/svcFixAngle.go | 14 ++++- pkg/messages/types/svcGameEvent.go | 4 +- pkg/messages/types/svcGetCvarValue.go | 4 +- pkg/messages/types/svcMenu.go | 10 ++-- pkg/messages/types/svcPacketEntities.go | 19 +++---- pkg/messages/types/svcPaintmapData.go | 4 +- pkg/messages/types/svcSendTable.go | 15 +++--- pkg/messages/types/svcSetView.go | 4 +- pkg/messages/types/svcSounds.go | 12 ++--- pkg/messages/types/svcSplitScreen.go | 10 ++-- pkg/messages/types/svcTempEntities.go | 8 +-- pkg/messages/types/svcUpdateStringTable.go | 8 +-- pkg/messages/types/svcUserMessage.go | 86 ++++++++++++++++++++++++++++-- pkg/messages/types/svcVoiceData.go | 16 +++--- pkg/messages/types/svcVoiceInit.go | 16 ++++-- 25 files changed, 225 insertions(+), 121 deletions(-) diff --git a/pkg/messages/messages.go b/pkg/messages/messages.go index 6fa58fc..9e7dfae 100644 --- a/pkg/messages/messages.go +++ b/pkg/messages/messages.go @@ -36,9 +36,9 @@ func ParseMessages(messageType int, reader *bitreader.Reader) any { case 11: messageData = messages.ParseSvcSetPause(reader) case 12: - messageData = messages.ParseSvcCreateStringTable(reader) + messageData = messages.ParseSvcCreateStringTable(reader) // TODO: case 13: - messageData = messages.ParseSvcUpdateStringTable(reader) + messageData = messages.ParseSvcUpdateStringTable(reader) // TODO: case 14: messageData = messages.ParseSvcVoiceInit(reader) case 15: @@ -46,7 +46,7 @@ func ParseMessages(messageType int, reader *bitreader.Reader) any { case 16: messageData = messages.ParseSvcPrint(reader) case 17: - messageData = messages.ParseSvcSounds(reader) + messageData = messages.ParseSvcSounds(reader) // TODO: case 18: messageData = messages.ParseSvcSetView(reader) case 19: @@ -54,25 +54,25 @@ func ParseMessages(messageType int, reader *bitreader.Reader) any { case 20: messageData = messages.ParseSvcCrosshairAngle(reader) case 21: - messageData = messages.ParseSvcBspDecal(reader) + messageData = messages.ParseSvcBspDecal(reader) // untested case 22: - messageData = messages.ParseSvcSplitScreen(reader) + messageData = messages.ParseSvcSplitScreen(reader) // skipped case 23: - messageData = messages.ParseSvcUserMessage(reader) + messageData = messages.ParseSvcUserMessage(reader) // TODO: case 24: - messageData = messages.ParseSvcEntityMessage(reader) + messageData = messages.ParseSvcEntityMessage(reader) // skipped case 25: - messageData = messages.ParseSvcGameEvent(reader) + messageData = messages.ParseSvcGameEvent(reader) // TODO: case 26: - messageData = messages.ParseSvcPacketEntities(reader) + messageData = messages.ParseSvcPacketEntities(reader) // TODO: case 27: - messageData = messages.ParseSvcTempEntities(reader) + messageData = messages.ParseSvcTempEntities(reader) // skipped case 28: messageData = messages.ParseSvcPrefetch(reader) case 29: - messageData = messages.ParseSvcMenu(reader) + messageData = messages.ParseSvcMenu(reader) // skipped case 30: - messageData = messages.ParseSvcGameEventList(reader) + messageData = messages.ParseSvcGameEventList(reader) // TODO: case 31: messageData = messages.ParseSvcGetCvarValue(reader) case 32: diff --git a/pkg/messages/types/netSetConVar.go b/pkg/messages/types/netSetConVar.go index f04f564..44b75b9 100644 --- a/pkg/messages/types/netSetConVar.go +++ b/pkg/messages/types/netSetConVar.go @@ -3,7 +3,7 @@ package messages import "github.com/pektezol/bitreader" type NetSetConVar struct { - Length int8 + Length uint8 ConVars []conVar } @@ -13,7 +13,7 @@ type conVar struct { } func ParseNetSetConVar(reader *bitreader.Reader) NetSetConVar { - length := reader.TryReadBits(8) + length := reader.TryReadUInt8() convars := []conVar{} for count := 0; count < int(length); count++ { convar := conVar{ @@ -23,7 +23,7 @@ func ParseNetSetConVar(reader *bitreader.Reader) NetSetConVar { convars = append(convars, convar) } return NetSetConVar{ - Length: int8(length), + Length: length, ConVars: convars, } } diff --git a/pkg/messages/types/netSignOnState.go b/pkg/messages/types/netSignOnState.go index f7a5132..78d03aa 100644 --- a/pkg/messages/types/netSignOnState.go +++ b/pkg/messages/types/netSignOnState.go @@ -9,10 +9,10 @@ import ( type NetSignOnState struct { SignOnState string SpawnCount int32 - NumServerPlayers int32 - IdsLength int32 + NumServerPlayers uint32 + IdsLength uint32 PlayersNetworksIds []byte - MapNameLength int32 + MapNameLength uint32 MapName string } @@ -54,13 +54,17 @@ func (signOnState SignOnState) String() string { func ParseNetSignOnState(reader *bitreader.Reader) NetSignOnState { netSignOnState := NetSignOnState{ - SignOnState: SignOnState(reader.TryReadBits(8)).String(), - SpawnCount: int32(reader.TryReadBits(32)), - NumServerPlayers: int32(reader.TryReadBits(32)), - IdsLength: int32(reader.TryReadBits(32)), + SignOnState: SignOnState(reader.TryReadUInt8()).String(), + SpawnCount: reader.TryReadSInt32(), + NumServerPlayers: reader.TryReadUInt32(), + IdsLength: reader.TryReadUInt32(), + } + if netSignOnState.IdsLength > 0 { + netSignOnState.PlayersNetworksIds = reader.TryReadBytesToSlice(uint64(netSignOnState.IdsLength)) + } + netSignOnState.MapNameLength = reader.TryReadUInt32() + if netSignOnState.MapNameLength > 0 { + netSignOnState.MapName = reader.TryReadStringLength(uint64(netSignOnState.MapNameLength)) } - netSignOnState.PlayersNetworksIds = reader.TryReadBytesToSlice(uint64(netSignOnState.IdsLength)) - netSignOnState.MapNameLength = int32(reader.TryReadBits(32)) - netSignOnState.MapName = reader.TryReadStringLength(uint64(netSignOnState.MapNameLength)) return netSignOnState } diff --git a/pkg/messages/types/netTick.go b/pkg/messages/types/netTick.go index 2870c9c..dc941ad 100644 --- a/pkg/messages/types/netTick.go +++ b/pkg/messages/types/netTick.go @@ -3,15 +3,15 @@ package messages import "github.com/pektezol/bitreader" type NetTick struct { - Tick int32 + Tick uint32 HostFrameTime float32 HostFrameTimeStdDeviation float32 } func ParseNetTick(reader *bitreader.Reader) NetTick { return NetTick{ - Tick: int32(reader.TryReadBits(32)), - HostFrameTime: float32(reader.TryReadBits(16)) / 1e5, - HostFrameTimeStdDeviation: float32(reader.TryReadBits(16)) / 1e5, + Tick: reader.TryReadUInt32(), + HostFrameTime: float32(reader.TryReadUInt16()) / 1e5, + HostFrameTimeStdDeviation: float32(reader.TryReadUInt16()) / 1e5, } } diff --git a/pkg/messages/types/svcBspDecal.go b/pkg/messages/types/svcBspDecal.go index dda81dd..220f63a 100644 --- a/pkg/messages/types/svcBspDecal.go +++ b/pkg/messages/types/svcBspDecal.go @@ -7,9 +7,9 @@ import ( type SvcBspDecal struct { Pos []vectorCoord DecalTextureIndex int16 - EntityIndex int16 - ModelIndex int16 - LowPriority int8 + EntityIndex uint16 + ModelIndex uint16 + LowPriority bool } type vectorCoord struct { @@ -23,10 +23,10 @@ func ParseSvcBspDecal(reader *bitreader.Reader) SvcBspDecal { DecalTextureIndex: int16(reader.TryReadBits(9)), } if reader.TryReadBool() { - svcBspDecal.EntityIndex = int16(reader.TryReadBits(11)) - svcBspDecal.ModelIndex = int16(reader.TryReadBits(11)) + svcBspDecal.EntityIndex = uint16(reader.TryReadBits(11)) + svcBspDecal.ModelIndex = uint16(reader.TryReadBits(11)) } - svcBspDecal.LowPriority = int8(reader.TryReadBits(1)) + svcBspDecal.LowPriority = reader.TryReadBool() return svcBspDecal } diff --git a/pkg/messages/types/svcClassInfo.go b/pkg/messages/types/svcClassInfo.go index 27862bf..d2f6a90 100644 --- a/pkg/messages/types/svcClassInfo.go +++ b/pkg/messages/types/svcClassInfo.go @@ -1,14 +1,13 @@ package messages import ( - "fmt" "math" "github.com/pektezol/bitreader" ) type SvcClassInfo struct { - Length int16 + ClassCount uint16 CreateOnClient bool ServerClasses []serverClass } @@ -21,15 +20,14 @@ type serverClass struct { func ParseSvcClassInfo(reader *bitreader.Reader) SvcClassInfo { svcClassInfo := SvcClassInfo{ - Length: int16(reader.TryReadBits(16)), + ClassCount: reader.TryReadUInt16(), CreateOnClient: reader.TryReadBool(), } classes := []serverClass{} if !svcClassInfo.CreateOnClient { - for count := 0; count < int(svcClassInfo.Length); count++ { - fmt.Println(classes) + for count := 0; count < int(svcClassInfo.ClassCount); count++ { classes = append(classes, serverClass{ - ClassId: int16(reader.TryReadBits(uint64(math.Log2(float64(svcClassInfo.Length)) + 1))), + ClassId: int16(reader.TryReadBits(uint64(math.Log2(float64(svcClassInfo.ClassCount)) + 1))), ClassName: reader.TryReadString(), DataTableName: reader.TryReadString(), }) diff --git a/pkg/messages/types/svcCmdKeyValues.go b/pkg/messages/types/svcCmdKeyValues.go index 35a8a8d..8fdd076 100644 --- a/pkg/messages/types/svcCmdKeyValues.go +++ b/pkg/messages/types/svcCmdKeyValues.go @@ -3,13 +3,13 @@ package messages import "github.com/pektezol/bitreader" type SvcCmdKeyValues struct { - Length int32 + Length uint32 Data []byte } func ParseSvcCmdKeyValues(reader *bitreader.Reader) SvcCmdKeyValues { svcCmdKeyValues := SvcCmdKeyValues{ - Length: int32(reader.TryReadBits(32)), + Length: reader.TryReadUInt32(), } svcCmdKeyValues.Data = reader.TryReadBytesToSlice(uint64(svcCmdKeyValues.Length)) return svcCmdKeyValues diff --git a/pkg/messages/types/svcCreateStringTable.go b/pkg/messages/types/svcCreateStringTable.go index 3c15e5c..aea40b0 100644 --- a/pkg/messages/types/svcCreateStringTable.go +++ b/pkg/messages/types/svcCreateStringTable.go @@ -21,7 +21,7 @@ type SvcCreateStringTable struct { func ParseSvcCreateStringTable(reader *bitreader.Reader) SvcCreateStringTable { svcCreateStringTable := SvcCreateStringTable{ Name: reader.TryReadString(), - MaxEntries: int16(reader.TryReadBits(16)), + MaxEntries: reader.TryReadSInt16(), } svcCreateStringTable.NumEntries = int8(reader.TryReadBits(uint64(math.Log2(float64(svcCreateStringTable.MaxEntries))) + 1)) svcCreateStringTable.Length = int32(reader.TryReadBits(20)) diff --git a/pkg/messages/types/svcCrosshairAngle.go b/pkg/messages/types/svcCrosshairAngle.go index e8424e1..b7d234c 100644 --- a/pkg/messages/types/svcCrosshairAngle.go +++ b/pkg/messages/types/svcCrosshairAngle.go @@ -3,11 +3,21 @@ package messages import "github.com/pektezol/bitreader" type SvcCrosshairAngle struct { - Angle []int16 + Angle crosshairAngles +} + +type crosshairAngles struct { + X float32 + Y float32 + Z float32 } func ParseSvcCrosshairAngle(reader *bitreader.Reader) SvcCrosshairAngle { return SvcCrosshairAngle{ - Angle: []int16{int16(reader.TryReadBits(16)), int16(reader.TryReadBits(16)), int16(reader.TryReadBits(16))}, + Angle: crosshairAngles{ + X: float32(reader.TryReadBits(16)), + Y: float32(reader.TryReadBits(16)), + Z: float32(reader.TryReadBits(16)), + }, } } diff --git a/pkg/messages/types/svcEntityMessage.go b/pkg/messages/types/svcEntityMessage.go index 8d5c4aa..58f42ba 100644 --- a/pkg/messages/types/svcEntityMessage.go +++ b/pkg/messages/types/svcEntityMessage.go @@ -3,17 +3,17 @@ package messages import "github.com/pektezol/bitreader" type SvcEntityMessage struct { - EntityIndex int16 - ClassId int16 - Length int16 + EntityIndex uint16 + ClassId uint16 + Length uint16 Data []byte } func ParseSvcEntityMessage(reader *bitreader.Reader) SvcEntityMessage { svcEntityMessage := SvcEntityMessage{ - EntityIndex: int16(reader.TryReadBits(11)), - ClassId: int16(reader.TryReadBits(9)), - Length: int16(reader.TryReadBits(11)), + EntityIndex: uint16(reader.TryReadBits(11)), + ClassId: uint16(reader.TryReadBits(9)), + Length: uint16(reader.TryReadBits(11)), } svcEntityMessage.Data = reader.TryReadBitsToSlice(uint64(svcEntityMessage.Length)) return svcEntityMessage diff --git a/pkg/messages/types/svcFixAngle.go b/pkg/messages/types/svcFixAngle.go index 675c50e..95f67ec 100644 --- a/pkg/messages/types/svcFixAngle.go +++ b/pkg/messages/types/svcFixAngle.go @@ -4,12 +4,22 @@ import "github.com/pektezol/bitreader" type SvcFixAngle struct { Relative bool - Angle []int16 + Angle fixAngles +} + +type fixAngles struct { + X float32 + Y float32 + Z float32 } func ParseSvcFixAngle(reader *bitreader.Reader) SvcFixAngle { return SvcFixAngle{ Relative: reader.TryReadBool(), - Angle: []int16{int16(reader.TryReadBits(16)), int16(reader.TryReadBits(16)), int16(reader.TryReadBits(16))}, + Angle: fixAngles{ + X: float32(reader.TryReadBits(16)), + Y: float32(reader.TryReadBits(16)), + Z: float32(reader.TryReadBits(16)), + }, } } diff --git a/pkg/messages/types/svcGameEvent.go b/pkg/messages/types/svcGameEvent.go index 44d6dd5..9e4564a 100644 --- a/pkg/messages/types/svcGameEvent.go +++ b/pkg/messages/types/svcGameEvent.go @@ -3,13 +3,13 @@ package messages import "github.com/pektezol/bitreader" type SvcGameEvent struct { - Length int16 + Length uint16 Data []byte // TODO: GameEvent[] } func ParseSvcGameEvent(reader *bitreader.Reader) SvcGameEvent { svcGameEvent := SvcGameEvent{ - Length: int16(reader.TryReadBits(11)), + Length: uint16(reader.TryReadBits(11)), } svcGameEvent.Data = reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)) return svcGameEvent diff --git a/pkg/messages/types/svcGetCvarValue.go b/pkg/messages/types/svcGetCvarValue.go index 0598722..19fc362 100644 --- a/pkg/messages/types/svcGetCvarValue.go +++ b/pkg/messages/types/svcGetCvarValue.go @@ -3,13 +3,13 @@ package messages import "github.com/pektezol/bitreader" type SvcGetCvarValue struct { - Cookie string + Cookie int32 CvarName string } func ParseSvcGetCvarValue(reader *bitreader.Reader) SvcGetCvarValue { svcGetCvarValue := SvcGetCvarValue{ - Cookie: reader.TryReadStringLength(4), + Cookie: reader.TryReadSInt32(), CvarName: reader.TryReadString(), } return svcGetCvarValue diff --git a/pkg/messages/types/svcMenu.go b/pkg/messages/types/svcMenu.go index 9958e99..9e8e2eb 100644 --- a/pkg/messages/types/svcMenu.go +++ b/pkg/messages/types/svcMenu.go @@ -3,15 +3,15 @@ package messages import "github.com/pektezol/bitreader" type SvcMenu struct { - MenuType int16 - Length int32 - Data []byte + Type uint16 + Length uint32 + Data []byte } func ParseSvcMenu(reader *bitreader.Reader) SvcMenu { svcMenu := SvcMenu{ - MenuType: int16(reader.TryReadBits(16)), - Length: int32(reader.TryReadBits(32)), + Type: reader.TryReadUInt16(), + Length: reader.TryReadUInt32(), } svcMenu.Data = reader.TryReadBitsToSlice(uint64(svcMenu.Length)) return svcMenu diff --git a/pkg/messages/types/svcPacketEntities.go b/pkg/messages/types/svcPacketEntities.go index 54e4a2a..2d86bf2 100644 --- a/pkg/messages/types/svcPacketEntities.go +++ b/pkg/messages/types/svcPacketEntities.go @@ -5,33 +5,30 @@ import ( ) type SvcPacketEntities struct { - MaxEntries int16 + MaxEntries uint16 IsDelta bool DeltaFrom int32 BaseLine bool - UpdatedEntries int16 - Length int32 + UpdatedEntries uint16 + Length uint32 UpdatedBaseline bool Data []byte } func ParseSvcPacketEntities(reader *bitreader.Reader) SvcPacketEntities { svcPacketEntities := SvcPacketEntities{ - MaxEntries: int16(reader.TryReadBits(11)), + MaxEntries: uint16(reader.TryReadBits(11)), IsDelta: reader.TryReadBool(), } if svcPacketEntities.IsDelta { - svcPacketEntities.DeltaFrom = int32(reader.TryReadBits(32)) + svcPacketEntities.DeltaFrom = reader.TryReadSInt32() } else { svcPacketEntities.DeltaFrom = -1 } svcPacketEntities.BaseLine = reader.TryReadBool() - svcPacketEntities.UpdatedEntries = int16(reader.TryReadBits(11)) - svcPacketEntities.Length = int32(reader.TryReadBits(20)) + svcPacketEntities.UpdatedEntries = uint16(reader.TryReadBits(11)) + svcPacketEntities.Length = uint32(reader.TryReadBits(20)) svcPacketEntities.UpdatedBaseline = reader.TryReadBool() - svcPacketEntities.Data = reader.TryReadBitsToSlice(uint64(svcPacketEntities.Length)) //, dataReader = reader.ForkAndSkip(int(svcPacketEntities.Length)) - // for count := 0; count < int(svcPacketEntities.UpdatedEntries); count++ { - // dataReader.TryReadBool() - // } + svcPacketEntities.Data = reader.TryReadBitsToSlice(uint64(svcPacketEntities.Length)) return svcPacketEntities } diff --git a/pkg/messages/types/svcPaintmapData.go b/pkg/messages/types/svcPaintmapData.go index 41ef515..380016a 100644 --- a/pkg/messages/types/svcPaintmapData.go +++ b/pkg/messages/types/svcPaintmapData.go @@ -3,13 +3,13 @@ package messages import "github.com/pektezol/bitreader" type SvcPaintmapData struct { - Length int32 + Length uint32 Data []byte } func ParseSvcPaintmapData(reader *bitreader.Reader) SvcPaintmapData { svcPaintmapData := SvcPaintmapData{ - Length: int32(reader.TryReadBits(32)), + Length: reader.TryReadUInt32(), } svcPaintmapData.Data = reader.TryReadBitsToSlice(uint64(svcPaintmapData.Length)) return svcPaintmapData diff --git a/pkg/messages/types/svcSendTable.go b/pkg/messages/types/svcSendTable.go index 9eb47fc..2395e9f 100644 --- a/pkg/messages/types/svcSendTable.go +++ b/pkg/messages/types/svcSendTable.go @@ -3,15 +3,16 @@ package messages import "github.com/pektezol/bitreader" type SvcSendTable struct { - NeedsDecoder int8 - Length int8 - Props int32 + NeedsDecoder bool + Length uint8 + Props uint32 } func ParseSvcSendTable(reader *bitreader.Reader) SvcSendTable { - return SvcSendTable{ - NeedsDecoder: int8(reader.TryReadBits(8)), - Length: int8(reader.TryReadBits(8)), - Props: int32(reader.TryReadBits(32)), + svcSendTable := SvcSendTable{ + NeedsDecoder: reader.TryReadBool(), + Length: reader.TryReadUInt8(), } + svcSendTable.Props = uint32(reader.TryReadBits(uint64(svcSendTable.Length))) + return svcSendTable } diff --git a/pkg/messages/types/svcSetView.go b/pkg/messages/types/svcSetView.go index 266a539..4ba5e3c 100644 --- a/pkg/messages/types/svcSetView.go +++ b/pkg/messages/types/svcSetView.go @@ -3,11 +3,11 @@ package messages import "github.com/pektezol/bitreader" type SvcSetView struct { - EntityIndex int16 + EntityIndex uint16 } func ParseSvcSetView(reader *bitreader.Reader) SvcSetView { return SvcSetView{ - EntityIndex: int16(reader.TryReadBits(11)), + EntityIndex: uint16(reader.TryReadBits(11)), } } diff --git a/pkg/messages/types/svcSounds.go b/pkg/messages/types/svcSounds.go index 22d4a66..1553450 100644 --- a/pkg/messages/types/svcSounds.go +++ b/pkg/messages/types/svcSounds.go @@ -4,8 +4,8 @@ import "github.com/pektezol/bitreader" type SvcSounds struct { ReliableSound bool - Size int8 - Length int16 + SoundCount uint8 + Length uint16 Data []byte } @@ -14,11 +14,11 @@ func ParseSvcSounds(reader *bitreader.Reader) SvcSounds { ReliableSound: reader.TryReadBool(), } if svcSounds.ReliableSound { - svcSounds.Size = 1 - svcSounds.Length = int16(reader.TryReadBits(8)) + svcSounds.SoundCount = 1 + svcSounds.Length = uint16(reader.TryReadUInt8()) } else { - svcSounds.Size = int8(reader.TryReadBits(8)) - svcSounds.Length = int16(reader.TryReadBits(16)) + svcSounds.SoundCount = reader.TryReadUInt8() + svcSounds.Length = reader.TryReadUInt16() } svcSounds.Data = reader.TryReadBitsToSlice(uint64(svcSounds.Length)) return svcSounds diff --git a/pkg/messages/types/svcSplitScreen.go b/pkg/messages/types/svcSplitScreen.go index 3ba6ee8..5ddc131 100644 --- a/pkg/messages/types/svcSplitScreen.go +++ b/pkg/messages/types/svcSplitScreen.go @@ -3,15 +3,15 @@ package messages import "github.com/pektezol/bitreader" type SvcSplitScreen struct { - Unk bool - Length int16 - Data []byte + RemoveUser bool + Length uint16 + Data []byte } func ParseSvcSplitScreen(reader *bitreader.Reader) SvcSplitScreen { svcSplitScreen := SvcSplitScreen{ - Unk: reader.TryReadBool(), - Length: int16(reader.TryReadBits(11)), + RemoveUser: reader.TryReadBool(), + Length: uint16(reader.TryReadBits(11)), } svcSplitScreen.Data = reader.TryReadBitsToSlice(uint64(svcSplitScreen.Length)) return svcSplitScreen diff --git a/pkg/messages/types/svcTempEntities.go b/pkg/messages/types/svcTempEntities.go index ca4b995..9c20a65 100644 --- a/pkg/messages/types/svcTempEntities.go +++ b/pkg/messages/types/svcTempEntities.go @@ -3,15 +3,15 @@ package messages import "github.com/pektezol/bitreader" type SvcTempEntities struct { - NumEntries int8 - Length int32 + NumEntries uint8 + Length uint32 Data []byte } func ParseSvcTempEntities(reader *bitreader.Reader) SvcTempEntities { svcTempEntities := SvcTempEntities{ - NumEntries: int8(reader.TryReadBits(8)), - Length: int32(reader.TryReadBits(17)), + NumEntries: reader.TryReadUInt8(), + Length: uint32(reader.TryReadBits(17)), } svcTempEntities.Data = reader.TryReadBitsToSlice(uint64(svcTempEntities.Length)) return svcTempEntities diff --git a/pkg/messages/types/svcUpdateStringTable.go b/pkg/messages/types/svcUpdateStringTable.go index c606141..9a3cbe0 100644 --- a/pkg/messages/types/svcUpdateStringTable.go +++ b/pkg/messages/types/svcUpdateStringTable.go @@ -3,18 +3,18 @@ package messages import "github.com/pektezol/bitreader" type SvcUpdateStringTable struct { - TableId int8 - NumChangedEntries int16 + TableId uint8 + NumChangedEntries uint16 Length int32 Data []byte } func ParseSvcUpdateStringTable(reader *bitreader.Reader) SvcUpdateStringTable { svcUpdateStringTable := SvcUpdateStringTable{ - TableId: int8(reader.TryReadBits(5)), + TableId: reader.TryReadUInt8(), } if reader.TryReadBool() { - svcUpdateStringTable.NumChangedEntries = int16(reader.TryReadBits(16)) + svcUpdateStringTable.NumChangedEntries = reader.TryReadUInt16() } svcUpdateStringTable.Length = int32(reader.TryReadBits(20)) svcUpdateStringTable.Data = reader.TryReadBitsToSlice(uint64(svcUpdateStringTable.Length)) diff --git a/pkg/messages/types/svcUserMessage.go b/pkg/messages/types/svcUserMessage.go index fb8be20..3cc6de2 100644 --- a/pkg/messages/types/svcUserMessage.go +++ b/pkg/messages/types/svcUserMessage.go @@ -3,16 +3,92 @@ package messages import "github.com/pektezol/bitreader" type SvcUserMessage struct { - MsgType int8 - Length int16 - Data []byte + Type int8 + Length int16 + Data []byte } +type UserMessageType int + +const ( + EUserMessageTypeUnknown UserMessageType = iota + EUserMessageTypeInvalid + EUserMessageTypeGeiger + EUserMessageTypeTrain + EUserMessageTypeHudText + EUserMessageTypeSayText + EUserMessageTypeSayText2 + EUserMessageTypeTextMsg + EUserMessageTypeHUDMsg + EUserMessageTypeResetHUD + EUserMessageTypeGameTitle + EUserMessageTypeItemPickup + EUserMessageTypeShowMenu + EUserMessageTypeShake + EUserMessageTypeFade + EUserMessageTypeVGUIMenu + EUserMessageTypeRumble + EUserMessageTypeBattery + EUserMessageTypeDamage + EUserMessageTypeVoiceMask + EUserMessageTypeRequestState + EUserMessageTypeCloseCaption + EUserMessageTypeHintText + EUserMessageTypeKeyHintText + EUserMessageTypeSquadMemberDied + EUserMessageTypeAmmoDenied + EUserMessageTypeCreditsMsg + EUserMessageTypeCreditsPortalMsg + EUserMessageTypeLogoTimeMsg + EUserMessageTypeAchievementEvent + EUserMessageTypeEntityPortalled + EUserMessageTypeKillCam + EUserMessageTypeTilt + EUserMessageTypeCloseCaptionDirect + EUserMessageTypeUpdateJalopyRadar + EUserMessageTypeCurrentTimescale + EUserMessageTypeDesiredTimescale + EUserMessageTypeInventoryFlash + EUserMessageTypeIndicatorFlash + EUserMessageTypeControlHelperAnimate + EUserMessageTypeTakePhoto + EUserMessageTypeFlash + EUserMessageTypeHudPingIndicator + EUserMessageTypeOpenRadialMenu + EUserMessageTypeAddLocator + EUserMessageTypeMPMapCompleted + EUserMessageTypeMPMapIncomplete + EUserMessageTypeMPMapCompletedData + EUserMessageTypeMPTauntEarned + EUserMessageTypeMPTauntUnlocked + EUserMessageTypeMPTauntLocked + EUserMessageTypeMPAllTauntsLocked + EUserMessageTypePortalFX_Surface + EUserMessageTypePaintWorld + EUserMessageTypePaintEntity + EUserMessageTypeChangePaintColor + EUserMessageTypePaintBombExplode + EUserMessageTypeRemoveAllPaint + EUserMessageTypePaintAllSurfaces + EUserMessageTypeRemovePaint + EUserMessageTypeStartSurvey + EUserMessageTypeApplyHitBoxDamageEffect + EUserMessageTypeSetMixLayerTriggerFactor + EUserMessageTypeTransitionFade + EUserMessageTypeScoreboardTempUpdate + EUserMessageTypeChallengeModCheatSession + EUserMessageTypeChallengeModCloseAllUI +) + func ParseSvcUserMessage(reader *bitreader.Reader) SvcUserMessage { svcUserMessage := SvcUserMessage{ - MsgType: int8(reader.TryReadBits(8)), - Length: int16(reader.TryReadBits(12)), + Type: int8(reader.TryReadBits(8)), + Length: int16(reader.TryReadBits(12)), } svcUserMessage.Data = reader.TryReadBitsToSlice(uint64(svcUserMessage.Length)) return svcUserMessage } + +// func byteToUserMessageType() { + +// } diff --git a/pkg/messages/types/svcVoiceData.go b/pkg/messages/types/svcVoiceData.go index 9609d80..efcae85 100644 --- a/pkg/messages/types/svcVoiceData.go +++ b/pkg/messages/types/svcVoiceData.go @@ -3,17 +3,19 @@ package messages import "github.com/pektezol/bitreader" type SvcVoiceData struct { - Client int8 - Proximity int8 - Length int16 - Data []byte + FromClient uint8 + Proximity bool + Length int16 + Data []byte } func ParseSvcVoiceData(reader *bitreader.Reader) SvcVoiceData { svcVoiceData := SvcVoiceData{ - Client: int8(reader.TryReadBits(8)), - Proximity: int8(reader.TryReadBits(8)), - Length: int16(reader.TryReadBits(16)), + FromClient: reader.TryReadUInt8(), + } + proximity := reader.TryReadUInt8() + if proximity != 0 { + svcVoiceData.Proximity = true } svcVoiceData.Data = reader.TryReadBitsToSlice(uint64(svcVoiceData.Length)) return svcVoiceData diff --git a/pkg/messages/types/svcVoiceInit.go b/pkg/messages/types/svcVoiceInit.go index afabfc9..a6d711a 100644 --- a/pkg/messages/types/svcVoiceInit.go +++ b/pkg/messages/types/svcVoiceInit.go @@ -3,18 +3,24 @@ package messages import "github.com/pektezol/bitreader" type SvcVoiceInit struct { - Codec string - Quality uint8 - Unk float32 + Codec string + Quality uint8 + SampleRate int32 } func ParseSvcVoiceInit(reader *bitreader.Reader) SvcVoiceInit { svcVoiceInit := SvcVoiceInit{ Codec: reader.TryReadString(), - Quality: uint8(reader.TryReadBits(8)), + Quality: reader.TryReadUInt8(), } if svcVoiceInit.Quality == 0b11111111 { - svcVoiceInit.Unk = reader.TryReadFloat32() + svcVoiceInit.SampleRate = reader.TryReadSInt32() + } else { + if svcVoiceInit.Codec == "vaudio_celt" { + svcVoiceInit.SampleRate = 22050 + } else { + svcVoiceInit.SampleRate = 11025 + } } return svcVoiceInit } -- cgit v1.2.3