From 39ecba8a16a1ef734edb216f1fafb094c5c38745 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Mon, 7 Nov 2022 17:55:50 +0300 Subject: done until the hard part --- packets/classes/cmdinfo.go | 51 +++++++++++++++++++++++ packets/classes/stringtable.go | 0 packets/classes/types.go | 28 +++++++++++++ packets/classes/usercmd.go | 94 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 173 insertions(+) create mode 100644 packets/classes/cmdinfo.go create mode 100644 packets/classes/stringtable.go create mode 100644 packets/classes/types.go create mode 100644 packets/classes/usercmd.go diff --git a/packets/classes/cmdinfo.go b/packets/classes/cmdinfo.go new file mode 100644 index 0000000..bfe732d --- /dev/null +++ b/packets/classes/cmdinfo.go @@ -0,0 +1,51 @@ +package classes + +import "github.com/pektezol/bitreader" + +func ParseCmdInfo(reader *bitreader.ReaderType, MSSC int) []CmdInfo { + var out []CmdInfo + for i := 0; i < MSSC; i++ { + flags := reader.TryReadInt32() + viewOrigin := []float32{ + reader.TryReadFloat32(), + reader.TryReadFloat32(), + reader.TryReadFloat32(), + } + viewAngles := []float32{ + reader.TryReadFloat32(), + reader.TryReadFloat32(), + reader.TryReadFloat32(), + } + localViewAngles := []float32{ + reader.TryReadFloat32(), + reader.TryReadFloat32(), + reader.TryReadFloat32(), + } + viewOrigin2 := []float32{ + reader.TryReadFloat32(), + reader.TryReadFloat32(), + reader.TryReadFloat32(), + } + viewAngles2 := []float32{ + reader.TryReadFloat32(), + reader.TryReadFloat32(), + reader.TryReadFloat32(), + } + localViewAngles2 := []float32{ + reader.TryReadFloat32(), + reader.TryReadFloat32(), + reader.TryReadFloat32(), + } + cmdInfo := CmdInfo{ + Flags: int32(flags), + ViewOrigin: viewOrigin, + ViewAngles: viewAngles, + LocalViewAngles: localViewAngles, + ViewOrigin2: viewOrigin2, + ViewAngles2: viewAngles2, + LocalViewAngles2: localViewAngles2, + } + out = append(out, cmdInfo) + } + return out +} diff --git a/packets/classes/stringtable.go b/packets/classes/stringtable.go new file mode 100644 index 0000000..e69de29 diff --git a/packets/classes/types.go b/packets/classes/types.go new file mode 100644 index 0000000..8e630b6 --- /dev/null +++ b/packets/classes/types.go @@ -0,0 +1,28 @@ +package classes + +type CmdInfo struct { + Flags int32 + ViewOrigin []float32 + ViewAngles []float32 + LocalViewAngles []float32 + ViewOrigin2 []float32 + ViewAngles2 []float32 + LocalViewAngles2 []float32 +} + +type UserCmdInfo struct { + CommandNumber int + TickCount int + ViewAnglesX float32 + ViewAnglesY float32 + ViewAnglesZ float32 + ForwardMove float32 + SideMove float32 + UpMove float32 + Buttons int + Impulse byte + WeaponSelect int + WeaponSubtype int + MouseDx int16 + MouseDy int16 +} diff --git a/packets/classes/usercmd.go b/packets/classes/usercmd.go new file mode 100644 index 0000000..a3183b6 --- /dev/null +++ b/packets/classes/usercmd.go @@ -0,0 +1,94 @@ +package classes + +import ( + "github.com/pektezol/bitreader" +) + +func ParseUserCmdInfo(reader *bitreader.ReaderType, size int) UserCmdInfo { + var bitCount int + var userCmdInfo UserCmdInfo + if reader.TryReadBool() { + userCmdInfo.CommandNumber = int(reader.TryReadInt32()) + bitCount += 32 + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.TickCount = int(reader.TryReadInt32()) + bitCount += 32 + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.ViewAnglesX = reader.TryReadFloat32() + bitCount += 32 + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.ViewAnglesY = reader.TryReadFloat32() + bitCount += 32 + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.ViewAnglesZ = reader.TryReadFloat32() + bitCount += 32 + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.ForwardMove = reader.TryReadFloat32() + bitCount += 32 + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.SideMove = reader.TryReadFloat32() + bitCount += 32 + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.UpMove = reader.TryReadFloat32() + bitCount += 32 + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.Buttons = int(reader.TryReadInt32()) + bitCount += 32 + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.Impulse = reader.TryReadInt8() + bitCount += 8 + } + bitCount++ + if reader.TryReadBool() { + value, err := reader.ReadBits(11) + if err != nil { + panic(err) + } + userCmdInfo.WeaponSelect = int(value) + bitCount += 11 + if reader.TryReadBool() { + value, err := reader.ReadBits(6) + if err != nil { + panic(err) + } + userCmdInfo.WeaponSubtype = int(value) + bitCount += 6 + } + bitCount++ + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.MouseDx = int16(reader.TryReadInt16()) + bitCount += 16 + } + bitCount++ + if reader.TryReadBool() { + userCmdInfo.MouseDy = int16(reader.TryReadInt16()) + bitCount += 16 + } + bitCount++ + /*if bitCount > size*8 { + //reader.SkipBits(size * 8) + return userCmdInfo + }*/ + reader.SkipBits(size*8 - bitCount) + return userCmdInfo +} -- cgit v1.2.3