From 9f5e8f230d35fffb106088b72e5fdb148905f450 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Thu, 10 Nov 2022 22:59:32 +0300 Subject: added almost all net/svc messages - currently broken --- packets/messages/message.go | 44 ++++++++++++++++++++++++++ packets/messages/types/SvcClassInfo.go | 11 +++++-- packets/messages/types/SvcCmdKeyValues.go | 14 ++++++++ packets/messages/types/SvcCreateStringTable.go | 32 +++++++++++++++++++ packets/messages/types/SvcCrosshairAngle.go | 17 ++++++++++ packets/messages/types/SvcEntityMessage.go | 20 ++++++++++++ packets/messages/types/SvcFixAngle.go | 21 ++++++++++++ packets/messages/types/SvcGameEventList.go | 17 ++++++++++ packets/messages/types/SvcGetCvarValue.go | 15 +++++++++ packets/messages/types/SvcMenu.go | 17 ++++++++++ packets/messages/types/SvcPacketEntities.go | 39 +++++++++++++++++++++++ packets/messages/types/SvcPaintmapData.go | 14 ++++++++ packets/messages/types/SvcPrefetch.go | 13 ++++++++ packets/messages/types/SvcPrint.go | 13 ++++++++ packets/messages/types/SvcSetView.go | 13 ++++++++ packets/messages/types/SvcSounds.go | 31 ++++++++++++++++++ packets/messages/types/SvcSplitScreen.go | 17 ++++++++++ packets/messages/types/SvcTempEntities.go | 17 ++++++++++ packets/messages/types/SvcUpdateStringTable.go | 21 ++++++++++++ packets/messages/types/SvcUserMessage.go | 17 ++++++++++ packets/messages/types/SvcVoiceData.go | 19 +++++++++++ packets/messages/types/SvcVoiceInit.go | 20 ++++++++++++ packets/packet.go | 2 +- 23 files changed, 440 insertions(+), 4 deletions(-) create mode 100644 packets/messages/types/SvcCmdKeyValues.go create mode 100644 packets/messages/types/SvcCreateStringTable.go create mode 100644 packets/messages/types/SvcCrosshairAngle.go create mode 100644 packets/messages/types/SvcEntityMessage.go create mode 100644 packets/messages/types/SvcFixAngle.go create mode 100644 packets/messages/types/SvcGameEventList.go create mode 100644 packets/messages/types/SvcGetCvarValue.go create mode 100644 packets/messages/types/SvcMenu.go create mode 100644 packets/messages/types/SvcPacketEntities.go create mode 100644 packets/messages/types/SvcPaintmapData.go create mode 100644 packets/messages/types/SvcPrefetch.go create mode 100644 packets/messages/types/SvcPrint.go create mode 100644 packets/messages/types/SvcSetView.go create mode 100644 packets/messages/types/SvcSounds.go create mode 100644 packets/messages/types/SvcSplitScreen.go create mode 100644 packets/messages/types/SvcTempEntities.go create mode 100644 packets/messages/types/SvcUpdateStringTable.go create mode 100644 packets/messages/types/SvcUserMessage.go create mode 100644 packets/messages/types/SvcVoiceData.go create mode 100644 packets/messages/types/SvcVoiceInit.go 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 { messages = append(messages, Message{Data: types.ParseSvcClassInfo(reader)}) case 0x11: messages = append(messages, Message{Data: types.ParseSvcSetPause(reader)}) + case 0x12: + messages = append(messages, Message{Data: types.ParseSvcCreateStringTable(reader)}) + case 0x13: + messages = append(messages, Message{Data: types.ParseSvcUpdateStringTable(reader)}) + case 0x14: + messages = append(messages, Message{Data: types.ParseSvcVoiceInit(reader)}) + case 0x15: + messages = append(messages, Message{Data: types.ParseSvcVoiceData(reader)}) + case 0x16: + messages = append(messages, Message{Data: types.ParseSvcPrint(reader)}) + case 0x17: + messages = append(messages, Message{Data: types.ParseSvcSounds(reader)}) + case 0x18: + messages = append(messages, Message{Data: types.ParseSvcSetView(reader)}) + case 0x19: + messages = append(messages, Message{Data: types.ParseSvcFixAngle(reader)}) + case 0x20: + messages = append(messages, Message{Data: types.ParseSvcCrosshairAngle(reader)}) + case 0x21: + // TODO: SvcBspDecal + case 0x22: + messages = append(messages, Message{Data: types.ParseSvcSplitScreen(reader)}) + case 0x23: + messages = append(messages, Message{Data: types.ParseSvcUserMessage(reader)}) + case 0x24: + messages = append(messages, Message{Data: types.ParseSvcEntityMessage(reader)}) + case 0x25: + // TODO: SvcGameEvent + case 0x26: + messages = append(messages, Message{Data: types.ParseSvcPacketEntities(reader)}) + case 0x27: + messages = append(messages, Message{Data: types.ParseSvcTempEntities(reader)}) + case 0x28: + messages = append(messages, Message{Data: types.ParseSvcPrefetch(reader)}) + case 0x29: + messages = append(messages, Message{Data: types.ParseSvcMenu(reader)}) + case 0x30: + messages = append(messages, Message{Data: types.ParseSvcGameEventList(reader)}) + case 0x31: + messages = append(messages, Message{Data: types.ParseSvcGetCvarValue(reader)}) + case 0x32: + messages = append(messages, Message{Data: types.ParseSvcCmdKeyValues(reader)}) + case 0x33: + messages = append(messages, Message{Data: types.ParseSvcPaintmapData(reader)}) } } 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 @@ package types import ( - "math" - "github.com/pektezol/bitreader" ) @@ -24,7 +22,7 @@ func ParseSvcClassInfo(reader *bitreader.ReaderType) SvcClassInfo { if createonclient { serverclasses := make([]ServerClass, length) for i := 0; i < int(length); i++ { - id, err := reader.ReadBits(int(math.Log2(float64(length))) + 1) + id, err := reader.ReadBits(HighestBitIndex(uint(length)) + 1) if err != nil { panic(err) } @@ -40,3 +38,10 @@ func ParseSvcClassInfo(reader *bitreader.ReaderType) SvcClassInfo { ServerClasses: serverclasses, } } + +func HighestBitIndex(i uint) int { + var j int + for j = 31; j >= 0 && (i&(1<