From 833a46544df2ed2a7afdba08ebfe02ed7741d86a Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Tue, 8 Nov 2022 22:48:20 +0300 Subject: net/svc messages --- packets/messages/types/NetDisconnect.go | 11 +++++++ packets/messages/types/NetFile.go | 17 +++++++++++ packets/messages/types/NetNop.go | 3 ++ packets/messages/types/NetSetConVar.go | 28 ++++++++++++++++++ packets/messages/types/NetSignOnState.go | 31 ++++++++++++++++++++ packets/messages/types/NetSplitScreenUser.go | 13 +++++++++ packets/messages/types/NetStringCmd.go | 13 +++++++++ packets/messages/types/NetTick.go | 17 +++++++++++ packets/messages/types/SvcClassInfo.go | 42 +++++++++++++++++++++++++++ packets/messages/types/SvcSendTable.go | 17 +++++++++++ packets/messages/types/SvcServerInfo.go | 43 ++++++++++++++++++++++++++++ packets/messages/types/SvcSetPause.go | 11 +++++++ 12 files changed, 246 insertions(+) create mode 100644 packets/messages/types/NetDisconnect.go create mode 100644 packets/messages/types/NetFile.go create mode 100644 packets/messages/types/NetNop.go create mode 100644 packets/messages/types/NetSetConVar.go create mode 100644 packets/messages/types/NetSignOnState.go create mode 100644 packets/messages/types/NetSplitScreenUser.go create mode 100644 packets/messages/types/NetStringCmd.go create mode 100644 packets/messages/types/NetTick.go create mode 100644 packets/messages/types/SvcClassInfo.go create mode 100644 packets/messages/types/SvcSendTable.go create mode 100644 packets/messages/types/SvcServerInfo.go create mode 100644 packets/messages/types/SvcSetPause.go (limited to 'packets/messages/types') diff --git a/packets/messages/types/NetDisconnect.go b/packets/messages/types/NetDisconnect.go new file mode 100644 index 0000000..8b65568 --- /dev/null +++ b/packets/messages/types/NetDisconnect.go @@ -0,0 +1,11 @@ +package types + +import "github.com/pektezol/bitreader" + +type NetDisconnect struct { + Text string +} + +func ParseNetDisconnect(reader *bitreader.ReaderType) NetDisconnect { + return NetDisconnect{Text: reader.TryReadString()} +} diff --git a/packets/messages/types/NetFile.go b/packets/messages/types/NetFile.go new file mode 100644 index 0000000..c65873d --- /dev/null +++ b/packets/messages/types/NetFile.go @@ -0,0 +1,17 @@ +package types + +import "github.com/pektezol/bitreader" + +type NetFile struct { + TransferId uint32 + FileName string + FileRequested bool +} + +func ParseNetFile(reader *bitreader.ReaderType) NetFile { + return NetFile{ + TransferId: reader.TryReadInt32(), + FileName: reader.TryReadString(), + FileRequested: reader.TryReadBool(), + } +} diff --git a/packets/messages/types/NetNop.go b/packets/messages/types/NetNop.go new file mode 100644 index 0000000..d0a1f7a --- /dev/null +++ b/packets/messages/types/NetNop.go @@ -0,0 +1,3 @@ +package types + +type NetNop struct{} diff --git a/packets/messages/types/NetSetConVar.go b/packets/messages/types/NetSetConVar.go new file mode 100644 index 0000000..b502953 --- /dev/null +++ b/packets/messages/types/NetSetConVar.go @@ -0,0 +1,28 @@ +package types + +import "github.com/pektezol/bitreader" + +type NetSetConVar struct { + Length uint8 + ConVars []ConVar +} + +type ConVar struct { + Name string + Value string +} + +func ParseNetSetConVar(reader *bitreader.ReaderType) NetSetConVar { + var convars []ConVar + netsetconvar := NetSetConVar{ + Length: reader.TryReadInt8(), + } + for i := 0; i < int(netsetconvar.Length); i++ { + convars = append(convars, ConVar{ + Name: reader.TryReadString(), + Value: reader.TryReadString(), + }) + } + netsetconvar.ConVars = convars + return netsetconvar +} diff --git a/packets/messages/types/NetSignOnState.go b/packets/messages/types/NetSignOnState.go new file mode 100644 index 0000000..3d02e91 --- /dev/null +++ b/packets/messages/types/NetSignOnState.go @@ -0,0 +1,31 @@ +package types + +import ( + "fmt" + + "github.com/pektezol/bitreader" +) + +type NetSignOnState struct { + SignonState int8 + SpawnCount uint32 + NumServerPlayers uint32 + IdsLength uint32 + PlayersNetworkIds []byte + MapNameLength uint32 + MapName string +} + +func ParseNetSignOnState(reader *bitreader.ReaderType) NetSignOnState { + netsignonstate := NetSignOnState{ + SignonState: int8(reader.TryReadInt8()), + SpawnCount: reader.TryReadInt32(), + NumServerPlayers: reader.TryReadInt32(), + IdsLength: reader.TryReadInt32(), + } + fmt.Println(netsignonstate.IdsLength) + netsignonstate.PlayersNetworkIds = reader.TryReadBytesToSlice(int(netsignonstate.IdsLength)) + netsignonstate.MapNameLength = reader.TryReadInt32() + netsignonstate.MapName = reader.TryReadStringLen(int(netsignonstate.MapNameLength)) + return netsignonstate +} diff --git a/packets/messages/types/NetSplitScreenUser.go b/packets/messages/types/NetSplitScreenUser.go new file mode 100644 index 0000000..66a7c85 --- /dev/null +++ b/packets/messages/types/NetSplitScreenUser.go @@ -0,0 +1,13 @@ +package types + +import "github.com/pektezol/bitreader" + +type NetSplitScreenUser struct { + Unknown bool +} + +func ParseNetSplitScreenUser(reader *bitreader.ReaderType) NetSplitScreenUser { + return NetSplitScreenUser{ + Unknown: reader.TryReadBool(), + } +} diff --git a/packets/messages/types/NetStringCmd.go b/packets/messages/types/NetStringCmd.go new file mode 100644 index 0000000..1ee9f67 --- /dev/null +++ b/packets/messages/types/NetStringCmd.go @@ -0,0 +1,13 @@ +package types + +import "github.com/pektezol/bitreader" + +type NetStringCmd struct { + Command string +} + +func ParseNetStringCmd(reader *bitreader.ReaderType) NetStringCmd { + return NetStringCmd{ + Command: reader.TryReadString(), + } +} diff --git a/packets/messages/types/NetTick.go b/packets/messages/types/NetTick.go new file mode 100644 index 0000000..9dae14b --- /dev/null +++ b/packets/messages/types/NetTick.go @@ -0,0 +1,17 @@ +package types + +import "github.com/pektezol/bitreader" + +type NetTick struct { + Tick uint32 + HostFrameTime float32 + HostFrameTimeStdDeviation float32 +} + +func ParseNetTick(reader *bitreader.ReaderType) NetTick { + return NetTick{ + Tick: reader.TryReadInt32(), + HostFrameTime: float32(reader.TryReadInt16()) / 1e5, + HostFrameTimeStdDeviation: float32(reader.TryReadInt16()) / 1e5, + } +} diff --git a/packets/messages/types/SvcClassInfo.go b/packets/messages/types/SvcClassInfo.go new file mode 100644 index 0000000..58e43b7 --- /dev/null +++ b/packets/messages/types/SvcClassInfo.go @@ -0,0 +1,42 @@ +package types + +import ( + "math" + + "github.com/pektezol/bitreader" +) + +type SvcClassInfo struct { + Length uint16 + CreateOnClient bool + ServerClasses []ServerClass +} + +type ServerClass struct { + ClassId int32 + ClassName string + DataTableName string +} + +func ParseSvcClassInfo(reader *bitreader.ReaderType) SvcClassInfo { + var serverclasses []ServerClass + svcclassinfo := SvcClassInfo{ + Length: reader.TryReadInt16(), + CreateOnClient: reader.TryReadBool(), + } + if svcclassinfo.CreateOnClient { + for i := 0; i < int(svcclassinfo.Length); i++ { + id, err := reader.ReadBits(int(math.Log2(float64(svcclassinfo.Length))) + 1) + if err != nil { + panic(err) + } + serverclasses = append(serverclasses, ServerClass{ + ClassId: int32(id), + ClassName: reader.TryReadString(), + DataTableName: reader.TryReadString(), + }) + } + } + svcclassinfo.ServerClasses = serverclasses + return svcclassinfo +} diff --git a/packets/messages/types/SvcSendTable.go b/packets/messages/types/SvcSendTable.go new file mode 100644 index 0000000..f76aadb --- /dev/null +++ b/packets/messages/types/SvcSendTable.go @@ -0,0 +1,17 @@ +package types + +import "github.com/pektezol/bitreader" + +type SvcSendTable struct { + NeedsDecoder bool + Length uint8 + Props int32 +} + +func ParseSvcSendTable(reader *bitreader.ReaderType) SvcSendTable { + return SvcSendTable{ + NeedsDecoder: reader.TryReadBool(), + Length: reader.TryReadInt8(), + } + // No one cares about SvcSendTable +} diff --git a/packets/messages/types/SvcServerInfo.go b/packets/messages/types/SvcServerInfo.go new file mode 100644 index 0000000..9d2648b --- /dev/null +++ b/packets/messages/types/SvcServerInfo.go @@ -0,0 +1,43 @@ +package types + +import "github.com/pektezol/bitreader" + +type SvcServerInfo struct { + Protocol uint16 + ServerCount uint32 + IsHltv bool + IsDedicated bool + ClientCrc int32 + MaxClasses uint16 + MapCrc uint32 + PlayerSlot uint8 + MaxClients uint8 + Unk uint32 + TickInterval float32 + COs byte + GameDir string + MapName string + SkyName string + HostName string +} + +func ParseSvcServerInfo(reader *bitreader.ReaderType) SvcServerInfo { + return SvcServerInfo{ + Protocol: reader.TryReadInt16(), + ServerCount: reader.TryReadInt32(), + IsHltv: reader.TryReadBool(), + IsDedicated: reader.TryReadBool(), + ClientCrc: int32(reader.TryReadInt32()), + MaxClasses: reader.TryReadInt16(), + MapCrc: reader.TryReadInt32(), + PlayerSlot: reader.TryReadInt8(), + MaxClients: reader.TryReadInt8(), + Unk: reader.TryReadInt32(), + TickInterval: reader.TryReadFloat32(), + COs: reader.TryReadInt8(), + GameDir: reader.TryReadString(), + MapName: reader.TryReadString(), + SkyName: reader.TryReadString(), + HostName: reader.TryReadString(), + } +} diff --git a/packets/messages/types/SvcSetPause.go b/packets/messages/types/SvcSetPause.go new file mode 100644 index 0000000..040fb6a --- /dev/null +++ b/packets/messages/types/SvcSetPause.go @@ -0,0 +1,11 @@ +package types + +import "github.com/pektezol/bitreader" + +type SvcSetPause struct { + Paused bool +} + +func ParseSvcSetPause(reader *bitreader.ReaderType) SvcSetPause { + return SvcSetPause{Paused: reader.TryReadBool()} +} -- cgit v1.2.3