diff options
| author | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2022-11-10 22:59:32 +0300 |
|---|---|---|
| committer | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2023-09-16 21:39:40 +0300 |
| commit | 9f5e8f230d35fffb106088b72e5fdb148905f450 (patch) | |
| tree | 2f22a5357a7bea2ce516b9a5e56e21435414529a /packets | |
| parent | upgraded to v1.2.3 (diff) | |
| download | sdp.go-9f5e8f230d35fffb106088b72e5fdb148905f450.tar.gz sdp.go-9f5e8f230d35fffb106088b72e5fdb148905f450.tar.bz2 sdp.go-9f5e8f230d35fffb106088b72e5fdb148905f450.zip | |
added almost all net/svc messages - currently broken
Diffstat (limited to 'packets')
23 files changed, 440 insertions, 4 deletions
diff --git a/packets/messages/message.go b/packets/messages/message.go index c508bfa..05690cc 100644 --- a/packets/messages/message.go +++ b/packets/messages/message.go | |||
| @@ -40,6 +40,50 @@ func ParseMessage(data []byte) []Message { | |||
| 40 | messages = append(messages, Message{Data: types.ParseSvcClassInfo(reader)}) | 40 | messages = append(messages, Message{Data: types.ParseSvcClassInfo(reader)}) |
| 41 | case 0x11: | 41 | case 0x11: |
| 42 | messages = append(messages, Message{Data: types.ParseSvcSetPause(reader)}) | 42 | messages = append(messages, Message{Data: types.ParseSvcSetPause(reader)}) |
| 43 | case 0x12: | ||
| 44 | messages = append(messages, Message{Data: types.ParseSvcCreateStringTable(reader)}) | ||
| 45 | case 0x13: | ||
| 46 | messages = append(messages, Message{Data: types.ParseSvcUpdateStringTable(reader)}) | ||
| 47 | case 0x14: | ||
| 48 | messages = append(messages, Message{Data: types.ParseSvcVoiceInit(reader)}) | ||
| 49 | case 0x15: | ||
| 50 | messages = append(messages, Message{Data: types.ParseSvcVoiceData(reader)}) | ||
| 51 | case 0x16: | ||
| 52 | messages = append(messages, Message{Data: types.ParseSvcPrint(reader)}) | ||
| 53 | case 0x17: | ||
| 54 | messages = append(messages, Message{Data: types.ParseSvcSounds(reader)}) | ||
| 55 | case 0x18: | ||
| 56 | messages = append(messages, Message{Data: types.ParseSvcSetView(reader)}) | ||
| 57 | case 0x19: | ||
| 58 | messages = append(messages, Message{Data: types.ParseSvcFixAngle(reader)}) | ||
| 59 | case 0x20: | ||
| 60 | messages = append(messages, Message{Data: types.ParseSvcCrosshairAngle(reader)}) | ||
| 61 | case 0x21: | ||
| 62 | // TODO: SvcBspDecal | ||
| 63 | case 0x22: | ||
| 64 | messages = append(messages, Message{Data: types.ParseSvcSplitScreen(reader)}) | ||
| 65 | case 0x23: | ||
| 66 | messages = append(messages, Message{Data: types.ParseSvcUserMessage(reader)}) | ||
| 67 | case 0x24: | ||
| 68 | messages = append(messages, Message{Data: types.ParseSvcEntityMessage(reader)}) | ||
| 69 | case 0x25: | ||
| 70 | // TODO: SvcGameEvent | ||
| 71 | case 0x26: | ||
| 72 | messages = append(messages, Message{Data: types.ParseSvcPacketEntities(reader)}) | ||
| 73 | case 0x27: | ||
| 74 | messages = append(messages, Message{Data: types.ParseSvcTempEntities(reader)}) | ||
| 75 | case 0x28: | ||
| 76 | messages = append(messages, Message{Data: types.ParseSvcPrefetch(reader)}) | ||
| 77 | case 0x29: | ||
| 78 | messages = append(messages, Message{Data: types.ParseSvcMenu(reader)}) | ||
| 79 | case 0x30: | ||
| 80 | messages = append(messages, Message{Data: types.ParseSvcGameEventList(reader)}) | ||
| 81 | case 0x31: | ||
| 82 | messages = append(messages, Message{Data: types.ParseSvcGetCvarValue(reader)}) | ||
| 83 | case 0x32: | ||
| 84 | messages = append(messages, Message{Data: types.ParseSvcCmdKeyValues(reader)}) | ||
| 85 | case 0x33: | ||
| 86 | messages = append(messages, Message{Data: types.ParseSvcPaintmapData(reader)}) | ||
| 43 | } | 87 | } |
| 44 | } | 88 | } |
| 45 | return messages | 89 | return messages |
diff --git a/packets/messages/types/SvcClassInfo.go b/packets/messages/types/SvcClassInfo.go index fb9dbd8..d41723d 100644 --- a/packets/messages/types/SvcClassInfo.go +++ b/packets/messages/types/SvcClassInfo.go | |||
| @@ -1,8 +1,6 @@ | |||
| 1 | package types | 1 | package types |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "math" | ||
| 5 | |||
| 6 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 7 | ) | 5 | ) |
| 8 | 6 | ||
| @@ -24,7 +22,7 @@ func ParseSvcClassInfo(reader *bitreader.ReaderType) SvcClassInfo { | |||
| 24 | if createonclient { | 22 | if createonclient { |
| 25 | serverclasses := make([]ServerClass, length) | 23 | serverclasses := make([]ServerClass, length) |
| 26 | for i := 0; i < int(length); i++ { | 24 | for i := 0; i < int(length); i++ { |
| 27 | id, err := reader.ReadBits(int(math.Log2(float64(length))) + 1) | 25 | id, err := reader.ReadBits(HighestBitIndex(uint(length)) + 1) |
| 28 | if err != nil { | 26 | if err != nil { |
| 29 | panic(err) | 27 | panic(err) |
| 30 | } | 28 | } |
| @@ -40,3 +38,10 @@ func ParseSvcClassInfo(reader *bitreader.ReaderType) SvcClassInfo { | |||
| 40 | ServerClasses: serverclasses, | 38 | ServerClasses: serverclasses, |
| 41 | } | 39 | } |
| 42 | } | 40 | } |
| 41 | |||
| 42 | func HighestBitIndex(i uint) int { | ||
| 43 | var j int | ||
| 44 | for j = 31; j >= 0 && (i&(1<<j)) == 0; j-- { | ||
| 45 | } | ||
| 46 | return j | ||
| 47 | } | ||
diff --git a/packets/messages/types/SvcCmdKeyValues.go b/packets/messages/types/SvcCmdKeyValues.go new file mode 100644 index 0000000..06504a2 --- /dev/null +++ b/packets/messages/types/SvcCmdKeyValues.go | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcCmdKeyValues struct { | ||
| 6 | Data []byte | ||
| 7 | } | ||
| 8 | |||
| 9 | func ParseSvcCmdKeyValues(reader *bitreader.ReaderType) SvcCmdKeyValues { | ||
| 10 | length := reader.TryReadInt32() | ||
| 11 | return SvcCmdKeyValues{ | ||
| 12 | Data: reader.TryReadBytesToSlice(int(length)), | ||
| 13 | } | ||
| 14 | } | ||
diff --git a/packets/messages/types/SvcCreateStringTable.go b/packets/messages/types/SvcCreateStringTable.go new file mode 100644 index 0000000..6e97ea7 --- /dev/null +++ b/packets/messages/types/SvcCreateStringTable.go | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcCreateStringTable struct { | ||
| 6 | Name string | ||
| 7 | MaxEntries uint16 | ||
| 8 | NumEntries uint8 | ||
| 9 | UserDataFixedSize bool | ||
| 10 | UserDataSize uint16 | ||
| 11 | UserDataSizeBits uint8 | ||
| 12 | Flags uint8 | ||
| 13 | StringData int | ||
| 14 | } | ||
| 15 | |||
| 16 | func ParseSvcCreateStringTable(reader *bitreader.ReaderType) SvcCreateStringTable { | ||
| 17 | svccreatestringtable := SvcCreateStringTable{ | ||
| 18 | Name: reader.TryReadString(), | ||
| 19 | MaxEntries: reader.TryReadInt16(), | ||
| 20 | } | ||
| 21 | svccreatestringtable.NumEntries = uint8(reader.TryReadBits(HighestBitIndex(uint(svccreatestringtable.MaxEntries)) + 1)) | ||
| 22 | length := reader.TryReadBits(20) | ||
| 23 | svccreatestringtable.UserDataFixedSize = reader.TryReadBool() | ||
| 24 | if svccreatestringtable.UserDataFixedSize { | ||
| 25 | svccreatestringtable.UserDataSize = uint16(reader.TryReadBits(12)) | ||
| 26 | svccreatestringtable.UserDataSizeBits = uint8(reader.TryReadBits(4)) | ||
| 27 | } | ||
| 28 | svccreatestringtable.Flags = uint8(reader.TryReadBits(2)) | ||
| 29 | svccreatestringtable.StringData = int(reader.TryReadBits(int(length / 8))) | ||
| 30 | return svccreatestringtable | ||
| 31 | |||
| 32 | } | ||
diff --git a/packets/messages/types/SvcCrosshairAngle.go b/packets/messages/types/SvcCrosshairAngle.go new file mode 100644 index 0000000..6584426 --- /dev/null +++ b/packets/messages/types/SvcCrosshairAngle.go | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcCrosshairAngle struct { | ||
| 6 | Angle []int16 | ||
| 7 | } | ||
| 8 | |||
| 9 | func ParseSvcCrosshairAngle(reader *bitreader.ReaderType) SvcCrosshairAngle { | ||
| 10 | return SvcCrosshairAngle{ | ||
| 11 | Angle: []int16{ | ||
| 12 | int16(reader.TryReadInt16()), | ||
| 13 | int16(reader.TryReadInt16()), | ||
| 14 | int16(reader.TryReadInt16()), | ||
| 15 | }, | ||
| 16 | } | ||
| 17 | } | ||
diff --git a/packets/messages/types/SvcEntityMessage.go b/packets/messages/types/SvcEntityMessage.go new file mode 100644 index 0000000..f4fb518 --- /dev/null +++ b/packets/messages/types/SvcEntityMessage.go | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcEntityMessage struct { | ||
| 6 | EntityIndex int16 | ||
| 7 | ClassId int16 | ||
| 8 | Data []byte | ||
| 9 | } | ||
| 10 | |||
| 11 | func ParseSvcEntityMessage(reader *bitreader.ReaderType) SvcEntityMessage { | ||
| 12 | entityindex := reader.TryReadBits(11) | ||
| 13 | classid := reader.TryReadBits(9) | ||
| 14 | length := reader.TryReadBits(11) | ||
| 15 | return SvcEntityMessage{ | ||
| 16 | EntityIndex: int16(entityindex), | ||
| 17 | ClassId: int16(classid), | ||
| 18 | Data: reader.TryReadBytesToSlice(int(length / 8)), | ||
| 19 | } | ||
| 20 | } | ||
diff --git a/packets/messages/types/SvcFixAngle.go b/packets/messages/types/SvcFixAngle.go new file mode 100644 index 0000000..d98dedd --- /dev/null +++ b/packets/messages/types/SvcFixAngle.go | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcFixAngle struct { | ||
| 6 | Relative bool | ||
| 7 | Angle []int16 | ||
| 8 | } | ||
| 9 | |||
| 10 | func ParseSvcFixAngle(reader *bitreader.ReaderType) SvcFixAngle { | ||
| 11 | relative := reader.TryReadBool() | ||
| 12 | angles := []int16{ | ||
| 13 | int16(reader.TryReadInt16()), | ||
| 14 | int16(reader.TryReadInt16()), | ||
| 15 | int16(reader.TryReadInt16()), | ||
| 16 | } | ||
| 17 | return SvcFixAngle{ | ||
| 18 | Relative: relative, | ||
| 19 | Angle: angles, | ||
| 20 | } | ||
| 21 | } | ||
diff --git a/packets/messages/types/SvcGameEventList.go b/packets/messages/types/SvcGameEventList.go new file mode 100644 index 0000000..bdba161 --- /dev/null +++ b/packets/messages/types/SvcGameEventList.go | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcGameEventList struct { | ||
| 6 | Events int16 | ||
| 7 | Data []byte | ||
| 8 | } | ||
| 9 | |||
| 10 | func ParseSvcGameEventList(reader *bitreader.ReaderType) SvcGameEventList { | ||
| 11 | events := reader.TryReadBits(9) | ||
| 12 | length := reader.TryReadBits(20) | ||
| 13 | return SvcGameEventList{ | ||
| 14 | Events: int16(events), | ||
| 15 | Data: reader.TryReadBytesToSlice(int(length)), | ||
| 16 | } | ||
| 17 | } | ||
diff --git a/packets/messages/types/SvcGetCvarValue.go b/packets/messages/types/SvcGetCvarValue.go new file mode 100644 index 0000000..2925da5 --- /dev/null +++ b/packets/messages/types/SvcGetCvarValue.go | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcGetCvarValue struct { | ||
| 6 | Cookie string | ||
| 7 | CvarName string | ||
| 8 | } | ||
| 9 | |||
| 10 | func ParseSvcGetCvarValue(reader *bitreader.ReaderType) SvcGetCvarValue { | ||
| 11 | return SvcGetCvarValue{ | ||
| 12 | Cookie: reader.TryReadStringLen(32), | ||
| 13 | CvarName: reader.TryReadString(), | ||
| 14 | } | ||
| 15 | } | ||
diff --git a/packets/messages/types/SvcMenu.go b/packets/messages/types/SvcMenu.go new file mode 100644 index 0000000..312115a --- /dev/null +++ b/packets/messages/types/SvcMenu.go | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcMenu struct { | ||
| 6 | MenuType int16 | ||
| 7 | Data []byte | ||
| 8 | } | ||
| 9 | |||
| 10 | func ParseSvcMenu(reader *bitreader.ReaderType) SvcMenu { | ||
| 11 | menutype := reader.TryReadInt16() | ||
| 12 | length := reader.TryReadInt32() | ||
| 13 | return SvcMenu{ | ||
| 14 | MenuType: int16(menutype), | ||
| 15 | Data: reader.TryReadBytesToSlice(int(length / 8)), | ||
| 16 | } | ||
| 17 | } | ||
diff --git a/packets/messages/types/SvcPacketEntities.go b/packets/messages/types/SvcPacketEntities.go new file mode 100644 index 0000000..bc4c41a --- /dev/null +++ b/packets/messages/types/SvcPacketEntities.go | |||
| @@ -0,0 +1,39 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "fmt" | ||
| 5 | |||
| 6 | "github.com/pektezol/bitreader" | ||
| 7 | ) | ||
| 8 | |||
| 9 | type SvcPacketEntities struct { | ||
| 10 | MaxEntries uint16 | ||
| 11 | IsDelta bool | ||
| 12 | DeltaFrom int32 | ||
| 13 | BaseLine bool | ||
| 14 | UpdatedEntries uint16 | ||
| 15 | UpdateBaseline bool | ||
| 16 | Data []byte | ||
| 17 | } | ||
| 18 | |||
| 19 | func ParseSvcPacketEntities(reader *bitreader.ReaderType) SvcPacketEntities { | ||
| 20 | maxentries := reader.TryReadBits(11) | ||
| 21 | isdelta := reader.TryReadBool() | ||
| 22 | var deltafrom int32 | ||
| 23 | if isdelta { | ||
| 24 | deltafrom = int32(reader.TryReadInt32()) | ||
| 25 | } | ||
| 26 | baseline := reader.TryReadBool() | ||
| 27 | updatedentries := reader.TryReadBits(11) | ||
| 28 | length := reader.TryReadBits(20) | ||
| 29 | fmt.Println(length) | ||
| 30 | return SvcPacketEntities{ | ||
| 31 | MaxEntries: uint16(maxentries), | ||
| 32 | IsDelta: isdelta, | ||
| 33 | DeltaFrom: deltafrom, | ||
| 34 | BaseLine: baseline, | ||
| 35 | UpdatedEntries: uint16(updatedentries), | ||
| 36 | UpdateBaseline: reader.TryReadBool(), | ||
| 37 | Data: reader.TryReadBytesToSlice(int(length / 8)), | ||
| 38 | } | ||
| 39 | } | ||
diff --git a/packets/messages/types/SvcPaintmapData.go b/packets/messages/types/SvcPaintmapData.go new file mode 100644 index 0000000..f3bd1a3 --- /dev/null +++ b/packets/messages/types/SvcPaintmapData.go | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcPaintmapData struct { | ||
| 6 | Data []byte | ||
| 7 | } | ||
| 8 | |||
| 9 | func ParseSvcPaintmapData(reader *bitreader.ReaderType) SvcPaintmapData { | ||
| 10 | length := reader.TryReadInt32() | ||
| 11 | return SvcPaintmapData{ | ||
| 12 | Data: reader.TryReadBytesToSlice(int(length / 8)), | ||
| 13 | } | ||
| 14 | } | ||
diff --git a/packets/messages/types/SvcPrefetch.go b/packets/messages/types/SvcPrefetch.go new file mode 100644 index 0000000..b277252 --- /dev/null +++ b/packets/messages/types/SvcPrefetch.go | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcPrefetch struct { | ||
| 6 | SoundIndex int16 | ||
| 7 | } | ||
| 8 | |||
| 9 | func ParseSvcPrefetch(reader *bitreader.ReaderType) SvcPrefetch { | ||
| 10 | return SvcPrefetch{ | ||
| 11 | SoundIndex: int16(reader.TryReadBits(13)), | ||
| 12 | } | ||
| 13 | } | ||
diff --git a/packets/messages/types/SvcPrint.go b/packets/messages/types/SvcPrint.go new file mode 100644 index 0000000..c6d91ac --- /dev/null +++ b/packets/messages/types/SvcPrint.go | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcPrint struct { | ||
| 6 | Message string | ||
| 7 | } | ||
| 8 | |||
| 9 | func ParseSvcPrint(reader *bitreader.ReaderType) SvcPrint { | ||
| 10 | return SvcPrint{ | ||
| 11 | Message: reader.TryReadString(), | ||
| 12 | } | ||
| 13 | } | ||
diff --git a/packets/messages/types/SvcSetView.go b/packets/messages/types/SvcSetView.go new file mode 100644 index 0000000..5507eae --- /dev/null +++ b/packets/messages/types/SvcSetView.go | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcSetView struct { | ||
| 6 | EntityIndex int16 | ||
| 7 | } | ||
| 8 | |||
| 9 | func ParseSvcSetView(reader *bitreader.ReaderType) SvcSetView { | ||
| 10 | return SvcSetView{ | ||
| 11 | EntityIndex: int16(reader.TryReadBits(11)), | ||
| 12 | } | ||
| 13 | } | ||
diff --git a/packets/messages/types/SvcSounds.go b/packets/messages/types/SvcSounds.go new file mode 100644 index 0000000..1f76a03 --- /dev/null +++ b/packets/messages/types/SvcSounds.go | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcSounds struct { | ||
| 6 | ReliableSound bool | ||
| 7 | Size int8 | ||
| 8 | Data []byte | ||
| 9 | } | ||
| 10 | |||
| 11 | func ParseSvcSounds(reader *bitreader.ReaderType) SvcSounds { | ||
| 12 | reliablesound := reader.TryReadBool() | ||
| 13 | var size int8 | ||
| 14 | var length int16 | ||
| 15 | if reliablesound { | ||
| 16 | size = 1 | ||
| 17 | } else { | ||
| 18 | size = int8(reader.TryReadInt8()) | ||
| 19 | } | ||
| 20 | if reliablesound { | ||
| 21 | length = int16(reader.TryReadInt8()) | ||
| 22 | } else { | ||
| 23 | length = int16(reader.TryReadInt16()) | ||
| 24 | } | ||
| 25 | data := reader.TryReadBytesToSlice(int(length / 8)) | ||
| 26 | return SvcSounds{ | ||
| 27 | ReliableSound: reliablesound, | ||
| 28 | Size: size, | ||
| 29 | Data: data, | ||
| 30 | } | ||
| 31 | } | ||
diff --git a/packets/messages/types/SvcSplitScreen.go b/packets/messages/types/SvcSplitScreen.go new file mode 100644 index 0000000..6727558 --- /dev/null +++ b/packets/messages/types/SvcSplitScreen.go | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcSplitScreen struct { | ||
| 6 | Unk bool | ||
| 7 | Data []byte | ||
| 8 | } | ||
| 9 | |||
| 10 | func ParseSvcSplitScreen(reader *bitreader.ReaderType) SvcSplitScreen { | ||
| 11 | unk := reader.TryReadBool() | ||
| 12 | length := reader.TryReadBits(11) | ||
| 13 | return SvcSplitScreen{ | ||
| 14 | Unk: unk, | ||
| 15 | Data: reader.TryReadBytesToSlice(int(length / 8)), | ||
| 16 | } | ||
| 17 | } | ||
diff --git a/packets/messages/types/SvcTempEntities.go b/packets/messages/types/SvcTempEntities.go new file mode 100644 index 0000000..cd021a8 --- /dev/null +++ b/packets/messages/types/SvcTempEntities.go | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcTempEntities struct { | ||
| 6 | NumEntries uint8 | ||
| 7 | Data []byte | ||
| 8 | } | ||
| 9 | |||
| 10 | func ParseSvcTempEntities(reader *bitreader.ReaderType) SvcTempEntities { | ||
| 11 | numentries := reader.TryReadInt8() | ||
| 12 | length := reader.TryReadBits(17) | ||
| 13 | return SvcTempEntities{ | ||
| 14 | NumEntries: numentries, | ||
| 15 | Data: reader.TryReadBytesToSlice(int(length / 8)), | ||
| 16 | } | ||
| 17 | } | ||
diff --git a/packets/messages/types/SvcUpdateStringTable.go b/packets/messages/types/SvcUpdateStringTable.go new file mode 100644 index 0000000..d4a0609 --- /dev/null +++ b/packets/messages/types/SvcUpdateStringTable.go | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcUpdateStringTable struct { | ||
| 6 | TableId int8 | ||
| 7 | NumChangedEntries int16 | ||
| 8 | Data []byte | ||
| 9 | } | ||
| 10 | |||
| 11 | func ParseSvcUpdateStringTable(reader *bitreader.ReaderType) SvcUpdateStringTable { | ||
| 12 | svcupdatestringtable := SvcUpdateStringTable{ | ||
| 13 | TableId: int8(reader.TryReadBits(5)), | ||
| 14 | } | ||
| 15 | if reader.TryReadBool() { | ||
| 16 | svcupdatestringtable.NumChangedEntries = int16(reader.TryReadInt16()) | ||
| 17 | } | ||
| 18 | length := reader.TryReadBits(20) | ||
| 19 | svcupdatestringtable.Data = reader.TryReadBytesToSlice(int(length / 8)) | ||
| 20 | return svcupdatestringtable | ||
| 21 | } | ||
diff --git a/packets/messages/types/SvcUserMessage.go b/packets/messages/types/SvcUserMessage.go new file mode 100644 index 0000000..2e6f74a --- /dev/null +++ b/packets/messages/types/SvcUserMessage.go | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcUserMessage struct { | ||
| 6 | MsgType uint8 | ||
| 7 | Data []byte | ||
| 8 | } | ||
| 9 | |||
| 10 | func ParseSvcUserMessage(reader *bitreader.ReaderType) SvcUserMessage { | ||
| 11 | msgtype := reader.TryReadInt8() | ||
| 12 | length := reader.TryReadBits(12) | ||
| 13 | return SvcUserMessage{ | ||
| 14 | MsgType: msgtype, | ||
| 15 | Data: reader.TryReadBytesToSlice(int(length / 8)), | ||
| 16 | } | ||
| 17 | } | ||
diff --git a/packets/messages/types/SvcVoiceData.go b/packets/messages/types/SvcVoiceData.go new file mode 100644 index 0000000..f99db38 --- /dev/null +++ b/packets/messages/types/SvcVoiceData.go | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcVoiceData struct { | ||
| 6 | Client int8 | ||
| 7 | Proximity int8 | ||
| 8 | Data []byte | ||
| 9 | } | ||
| 10 | |||
| 11 | func ParseSvcVoiceData(reader *bitreader.ReaderType) SvcVoiceData { | ||
| 12 | svcvoicedata := SvcVoiceData{ | ||
| 13 | Client: int8(reader.TryReadInt8()), | ||
| 14 | Proximity: int8(reader.TryReadInt8()), | ||
| 15 | } | ||
| 16 | length := reader.TryReadInt16() | ||
| 17 | svcvoicedata.Data = reader.TryReadBytesToSlice(int(length / 8)) | ||
| 18 | return svcvoicedata | ||
| 19 | } | ||
diff --git a/packets/messages/types/SvcVoiceInit.go b/packets/messages/types/SvcVoiceInit.go new file mode 100644 index 0000000..3e18a7b --- /dev/null +++ b/packets/messages/types/SvcVoiceInit.go | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | package types | ||
| 2 | |||
| 3 | import "github.com/pektezol/bitreader" | ||
| 4 | |||
| 5 | type SvcVoiceInit struct { | ||
| 6 | Codec string | ||
| 7 | Quality uint8 | ||
| 8 | Unk float32 | ||
| 9 | } | ||
| 10 | |||
| 11 | func ParseSvcVoiceInit(reader *bitreader.ReaderType) SvcVoiceInit { | ||
| 12 | svcvoiceinit := SvcVoiceInit{ | ||
| 13 | Codec: reader.TryReadString(), | ||
| 14 | Quality: reader.TryReadInt8(), | ||
| 15 | } | ||
| 16 | if svcvoiceinit.Quality == 255 { | ||
| 17 | svcvoiceinit.Unk = reader.TryReadFloat32() | ||
| 18 | } | ||
| 19 | return svcvoiceinit | ||
| 20 | } | ||
diff --git a/packets/packet.go b/packets/packet.go index 23a21e6..b27f2e7 100644 --- a/packets/packet.go +++ b/packets/packet.go | |||
| @@ -44,7 +44,7 @@ func ParsePacket(reader *bitreader.ReaderType) (status int) { | |||
| 44 | Size: int32(reader.TryReadInt32()), | 44 | Size: int32(reader.TryReadInt32()), |
| 45 | } | 45 | } |
| 46 | consoleCmd.Data = reader.TryReadStringLen(int(consoleCmd.Size)) | 46 | consoleCmd.Data = reader.TryReadStringLen(int(consoleCmd.Size)) |
| 47 | //fmt.Printf("[%d] (%d) ConsoleCmd: %s\n", messageTick, messageType, consoleCmd.Data) | 47 | fmt.Printf("[%d] (%d) ConsoleCmd: %s\n", messageTick, messageType, consoleCmd.Data) |
| 48 | return 4 | 48 | return 4 |
| 49 | case 0x05: // TODO: UserCmd - Buttons | 49 | case 0x05: // TODO: UserCmd - Buttons |
| 50 | userCmd := UserCmd{ | 50 | userCmd := UserCmd{ |