diff options
| author | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2024-06-15 13:58:30 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-15 13:58:30 +0300 |
| commit | 77e4b066cb8d506b4bc944ab4eb2d6e4679e2202 (patch) | |
| tree | 1d549eca619ed36cb881e487cb054c4643ac8376 /pkg/messages | |
| parent | change project name to sdp.go (diff) | |
| download | sdp.go-77e4b066cb8d506b4bc944ab4eb2d6e4679e2202.tar.gz sdp.go-77e4b066cb8d506b4bc944ab4eb2d6e4679e2202.tar.bz2 sdp.go-77e4b066cb8d506b4bc944ab4eb2d6e4679e2202.zip | |
enable multithreading with goroutines (#20)
Diffstat (limited to 'pkg/messages')
35 files changed, 592 insertions, 652 deletions
diff --git a/pkg/messages/messages.go b/pkg/messages/messages.go index 0dca169..1c6cf1f 100644 --- a/pkg/messages/messages.go +++ b/pkg/messages/messages.go | |||
| @@ -5,84 +5,84 @@ import ( | |||
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | messages "github.com/pektezol/sdp.go/pkg/messages/types" | 7 | messages "github.com/pektezol/sdp.go/pkg/messages/types" |
| 8 | "github.com/pektezol/sdp.go/pkg/writer" | 8 | types "github.com/pektezol/sdp.go/pkg/types" |
| 9 | ) | 9 | ) |
| 10 | 10 | ||
| 11 | func ParseMessages(messageType uint64, reader *bitreader.Reader) any { | 11 | func ParseMessages(messageType uint64, reader *bitreader.Reader, demo *types.Demo) any { |
| 12 | var messageData any | 12 | var messageData any |
| 13 | switch messageType { | 13 | switch messageType { |
| 14 | case 0: | 14 | case 0: |
| 15 | messageData = messages.ParseNetNop(reader) | 15 | messageData = messages.ParseNetNop(reader, demo) |
| 16 | case 1: | 16 | case 1: |
| 17 | messageData = messages.ParseNetDisconnect(reader) | 17 | messageData = messages.ParseNetDisconnect(reader, demo) |
| 18 | case 2: | 18 | case 2: |
| 19 | messageData = messages.ParseNetFile(reader) | 19 | messageData = messages.ParseNetFile(reader, demo) |
| 20 | case 3: | 20 | case 3: |
| 21 | messageData = messages.ParseNetSplitScreenUser(reader) | 21 | messageData = messages.ParseNetSplitScreenUser(reader, demo) |
| 22 | case 4: | 22 | case 4: |
| 23 | messageData = messages.ParseNetTick(reader) | 23 | messageData = messages.ParseNetTick(reader, demo) |
| 24 | case 5: | 24 | case 5: |
| 25 | messageData = messages.ParseNetStringCmd(reader) | 25 | messageData = messages.ParseNetStringCmd(reader, demo) |
| 26 | case 6: | 26 | case 6: |
| 27 | messageData = messages.ParseNetSetConVar(reader) | 27 | messageData = messages.ParseNetSetConVar(reader, demo) |
| 28 | case 7: | 28 | case 7: |
| 29 | messageData = messages.ParseNetSignOnState(reader) | 29 | messageData = messages.ParseNetSignOnState(reader, demo) |
| 30 | case 8: | 30 | case 8: |
| 31 | messageData = messages.ParseSvcServerInfo(reader) | 31 | messageData = messages.ParseSvcServerInfo(reader, demo) |
| 32 | case 9: | 32 | case 9: |
| 33 | messageData = messages.ParseSvcSendTable(reader) | 33 | messageData = messages.ParseSvcSendTable(reader, demo) |
| 34 | case 10: | 34 | case 10: |
| 35 | messageData = messages.ParseSvcClassInfo(reader) | 35 | messageData = messages.ParseSvcClassInfo(reader, demo) |
| 36 | case 11: | 36 | case 11: |
| 37 | messageData = messages.ParseSvcSetPause(reader) | 37 | messageData = messages.ParseSvcSetPause(reader, demo) |
| 38 | case 12: | 38 | case 12: |
| 39 | messageData = messages.ParseSvcCreateStringTable(reader) // TODO: | 39 | messageData = messages.ParseSvcCreateStringTable(reader, demo) // TODO: |
| 40 | case 13: | 40 | case 13: |
| 41 | messageData = messages.ParseSvcUpdateStringTable(reader) // TODO: | 41 | messageData = messages.ParseSvcUpdateStringTable(reader, demo) // TODO: |
| 42 | case 14: | 42 | case 14: |
| 43 | messageData = messages.ParseSvcVoiceInit(reader) | 43 | messageData = messages.ParseSvcVoiceInit(reader, demo) |
| 44 | case 15: | 44 | case 15: |
| 45 | messageData = messages.ParseSvcVoiceData(reader) | 45 | messageData = messages.ParseSvcVoiceData(reader, demo) |
| 46 | case 16: | 46 | case 16: |
| 47 | messageData = messages.ParseSvcPrint(reader) | 47 | messageData = messages.ParseSvcPrint(reader, demo) |
| 48 | case 17: | 48 | case 17: |
| 49 | messageData = messages.ParseSvcSounds(reader) // TODO: | 49 | messageData = messages.ParseSvcSounds(reader, demo) // TODO: |
| 50 | case 18: | 50 | case 18: |
| 51 | messageData = messages.ParseSvcSetView(reader) | 51 | messageData = messages.ParseSvcSetView(reader, demo) |
| 52 | case 19: | 52 | case 19: |
| 53 | messageData = messages.ParseSvcFixAngle(reader) | 53 | messageData = messages.ParseSvcFixAngle(reader, demo) |
| 54 | case 20: | 54 | case 20: |
| 55 | messageData = messages.ParseSvcCrosshairAngle(reader) | 55 | messageData = messages.ParseSvcCrosshairAngle(reader, demo) |
| 56 | case 21: | 56 | case 21: |
| 57 | messageData = messages.ParseSvcBspDecal(reader) // untested | 57 | messageData = messages.ParseSvcBspDecal(reader, demo) // untested |
| 58 | case 22: | 58 | case 22: |
| 59 | messageData = messages.ParseSvcSplitScreen(reader) // skipped | 59 | messageData = messages.ParseSvcSplitScreen(reader, demo) // skipped |
| 60 | case 23: | 60 | case 23: |
| 61 | messageData = messages.ParseSvcUserMessage(reader) | 61 | messageData = messages.ParseSvcUserMessage(reader, demo) |
| 62 | case 24: | 62 | case 24: |
| 63 | messageData = messages.ParseSvcEntityMessage(reader) // skipped | 63 | messageData = messages.ParseSvcEntityMessage(reader, demo) // skipped |
| 64 | case 25: | 64 | case 25: |
| 65 | messageData = messages.ParseSvcGameEvent(reader) | 65 | messageData = messages.ParseSvcGameEvent(reader, demo) |
| 66 | case 26: | 66 | case 26: |
| 67 | messageData = messages.ParseSvcPacketEntities(reader) // TODO: | 67 | messageData = messages.ParseSvcPacketEntities(reader, demo) // TODO: |
| 68 | case 27: | 68 | case 27: |
| 69 | messageData = messages.ParseSvcTempEntities(reader) // skipped | 69 | messageData = messages.ParseSvcTempEntities(reader, demo) // skipped |
| 70 | case 28: | 70 | case 28: |
| 71 | messageData = messages.ParseSvcPrefetch(reader) | 71 | messageData = messages.ParseSvcPrefetch(reader, demo) |
| 72 | case 29: | 72 | case 29: |
| 73 | messageData = messages.ParseSvcMenu(reader) // skipped | 73 | messageData = messages.ParseSvcMenu(reader, demo) // skipped |
| 74 | case 30: | 74 | case 30: |
| 75 | messageData = messages.ParseSvcGameEventList(reader) | 75 | messageData = messages.ParseSvcGameEventList(reader, demo) |
| 76 | case 31: | 76 | case 31: |
| 77 | messageData = messages.ParseSvcGetCvarValue(reader) | 77 | messageData = messages.ParseSvcGetCvarValue(reader, demo) |
| 78 | case 32: | 78 | case 32: |
| 79 | messageData = messages.ParseSvcCmdKeyValues(reader) | 79 | messageData = messages.ParseSvcCmdKeyValues(reader, demo) |
| 80 | case 33: | 80 | case 33: |
| 81 | messageData = messages.ParseSvcPaintmapData(reader) // skipped | 81 | messageData = messages.ParseSvcPaintmapData(reader, demo) // skipped |
| 82 | default: | 82 | default: |
| 83 | return nil | 83 | return nil |
| 84 | } | 84 | } |
| 85 | writer.AppendLine("\tMessage: %s (%d):", reflect.ValueOf(messageData).Type(), messageType) | 85 | demo.Writer.AppendLine("\tMessage: %s (%d):", reflect.ValueOf(messageData).Type(), messageType) |
| 86 | writer.AppendOutputFromTemp() | 86 | demo.Writer.AppendOutputFromTemp() |
| 87 | return messageData | 87 | return messageData |
| 88 | } | 88 | } |
diff --git a/pkg/messages/types/netDisconnect.go b/pkg/messages/types/netDisconnect.go index c3c857e..c8514c0 100644 --- a/pkg/messages/types/netDisconnect.go +++ b/pkg/messages/types/netDisconnect.go | |||
| @@ -2,17 +2,17 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type NetDisconnect struct { | 8 | type NetDisconnect struct { |
| 9 | Text string | 9 | Text string `json:"text"` |
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | func ParseNetDisconnect(reader *bitreader.Reader) NetDisconnect { | 12 | func ParseNetDisconnect(reader *bitreader.Reader, demo *types.Demo) NetDisconnect { |
| 13 | netDisconnect := NetDisconnect{ | 13 | netDisconnect := NetDisconnect{ |
| 14 | Text: reader.TryReadString(), | 14 | Text: reader.TryReadString(), |
| 15 | } | 15 | } |
| 16 | writer.TempAppendLine("\t\tText: %s", netDisconnect.Text) | 16 | demo.Writer.TempAppendLine("\t\tText: %s", netDisconnect.Text) |
| 17 | return netDisconnect | 17 | return netDisconnect |
| 18 | } | 18 | } |
diff --git a/pkg/messages/types/netFile.go b/pkg/messages/types/netFile.go index e74cdb3..837a4c0 100644 --- a/pkg/messages/types/netFile.go +++ b/pkg/messages/types/netFile.go | |||
| @@ -4,13 +4,13 @@ import ( | |||
| 4 | "fmt" | 4 | "fmt" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/sdp.go/pkg/writer" | 7 | "github.com/pektezol/sdp.go/pkg/types" |
| 8 | ) | 8 | ) |
| 9 | 9 | ||
| 10 | type NetFile struct { | 10 | type NetFile struct { |
| 11 | TransferId uint32 | 11 | TransferId uint32 `json:"transfer_id"` |
| 12 | FileName string | 12 | FileName string `json:"file_name"` |
| 13 | FileFlags string | 13 | FileFlags string `json:"file_flags"` |
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | type NetFileFlags int | 16 | type NetFileFlags int |
| @@ -34,14 +34,14 @@ func (netFileFlags NetFileFlags) String() string { | |||
| 34 | } | 34 | } |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | func ParseNetFile(reader *bitreader.Reader) NetFile { | 37 | func ParseNetFile(reader *bitreader.Reader, demo *types.Demo) NetFile { |
| 38 | netFile := NetFile{ | 38 | netFile := NetFile{ |
| 39 | TransferId: reader.TryReadUInt32(), | 39 | TransferId: reader.TryReadUInt32(), |
| 40 | FileName: reader.TryReadString(), | 40 | FileName: reader.TryReadString(), |
| 41 | FileFlags: NetFileFlags(reader.TryReadBits(2)).String(), | 41 | FileFlags: NetFileFlags(reader.TryReadBits(2)).String(), |
| 42 | } | 42 | } |
| 43 | writer.TempAppendLine("\t\tTransfer ID: %d", netFile.TransferId) | 43 | demo.Writer.TempAppendLine("\t\tTransfer ID: %d", netFile.TransferId) |
| 44 | writer.TempAppendLine("\t\tFile Name: %s", netFile.FileName) | 44 | demo.Writer.TempAppendLine("\t\tFile Name: %s", netFile.FileName) |
| 45 | writer.TempAppendLine("\t\tFile Flags: %s", netFile.FileFlags) | 45 | demo.Writer.TempAppendLine("\t\tFile Flags: %s", netFile.FileFlags) |
| 46 | return netFile | 46 | return netFile |
| 47 | } | 47 | } |
diff --git a/pkg/messages/types/netNop.go b/pkg/messages/types/netNop.go index c7ba66c..5405659 100644 --- a/pkg/messages/types/netNop.go +++ b/pkg/messages/types/netNop.go | |||
| @@ -2,12 +2,12 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type NetNop struct{} | 8 | type NetNop struct{} |
| 9 | 9 | ||
| 10 | func ParseNetNop(reader *bitreader.Reader) NetNop { | 10 | func ParseNetNop(reader *bitreader.Reader, demo *types.Demo) NetNop { |
| 11 | writer.TempAppendLine("\t\t{}") | 11 | demo.Writer.TempAppendLine("\t\t{}") |
| 12 | return NetNop{} | 12 | return NetNop{} |
| 13 | } | 13 | } |
diff --git a/pkg/messages/types/netSetConVar.go b/pkg/messages/types/netSetConVar.go index e9902b5..0c62fdd 100644 --- a/pkg/messages/types/netSetConVar.go +++ b/pkg/messages/types/netSetConVar.go | |||
| @@ -2,29 +2,29 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type NetSetConVar struct { | 8 | type NetSetConVar struct { |
| 9 | Length uint8 | 9 | Length uint8 `json:"length"` |
| 10 | ConVars []conVar | 10 | ConVars []conVar `json:"con_vars"` |
| 11 | } | 11 | } |
| 12 | 12 | ||
| 13 | type conVar struct { | 13 | type conVar struct { |
| 14 | Name string | 14 | Name string `json:"name"` |
| 15 | Value string | 15 | Value string `json:"value"` |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | func ParseNetSetConVar(reader *bitreader.Reader) NetSetConVar { | 18 | func ParseNetSetConVar(reader *bitreader.Reader, demo *types.Demo) NetSetConVar { |
| 19 | length := reader.TryReadUInt8() | 19 | length := reader.TryReadUInt8() |
| 20 | convars := []conVar{} | 20 | convars := []conVar{} |
| 21 | writer.TempAppendLine("\t\tLength: %d", length) | 21 | demo.Writer.TempAppendLine("\t\tLength: %d", length) |
| 22 | for count := 0; count < int(length); count++ { | 22 | for count := 0; count < int(length); count++ { |
| 23 | convar := conVar{ | 23 | convar := conVar{ |
| 24 | Name: reader.TryReadString(), | 24 | Name: reader.TryReadString(), |
| 25 | Value: reader.TryReadString(), | 25 | Value: reader.TryReadString(), |
| 26 | } | 26 | } |
| 27 | writer.TempAppendLine("\t\t[%d] %s: %s", count, convar.Name, convar.Value) | 27 | demo.Writer.TempAppendLine("\t\t[%d] %s: %s", count, convar.Name, convar.Value) |
| 28 | convars = append(convars, convar) | 28 | convars = append(convars, convar) |
| 29 | } | 29 | } |
| 30 | return NetSetConVar{ | 30 | return NetSetConVar{ |
diff --git a/pkg/messages/types/netSignOnState.go b/pkg/messages/types/netSignOnState.go index e25eaed..0043465 100644 --- a/pkg/messages/types/netSignOnState.go +++ b/pkg/messages/types/netSignOnState.go | |||
| @@ -4,17 +4,17 @@ import ( | |||
| 4 | "fmt" | 4 | "fmt" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/sdp.go/pkg/writer" | 7 | "github.com/pektezol/sdp.go/pkg/types" |
| 8 | ) | 8 | ) |
| 9 | 9 | ||
| 10 | type NetSignOnState struct { | 10 | type NetSignOnState struct { |
| 11 | SignOnState string | 11 | SignOnState string `json:"sign_on_state"` |
| 12 | SpawnCount int32 | 12 | SpawnCount int32 `json:"spawn_count"` |
| 13 | NumServerPlayers uint32 | 13 | NumServerPlayers uint32 `json:"num_server_players"` |
| 14 | IdsLength uint32 | 14 | IdsLength uint32 `json:"ids_length"` |
| 15 | PlayersNetworksIds []byte | 15 | PlayersNetworksIds []byte `json:"players_networks_ids"` |
| 16 | MapNameLength uint32 | 16 | MapNameLength uint32 `json:"map_name_length"` |
| 17 | MapName string | 17 | MapName string `json:"map_name"` |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | type SignOnState int | 20 | type SignOnState int |
| @@ -53,24 +53,24 @@ func (signOnState SignOnState) String() string { | |||
| 53 | } | 53 | } |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | func ParseNetSignOnState(reader *bitreader.Reader) NetSignOnState { | 56 | func ParseNetSignOnState(reader *bitreader.Reader, demo *types.Demo) NetSignOnState { |
| 57 | netSignOnState := NetSignOnState{ | 57 | netSignOnState := NetSignOnState{ |
| 58 | SignOnState: SignOnState(reader.TryReadUInt8()).String(), | 58 | SignOnState: SignOnState(reader.TryReadUInt8()).String(), |
| 59 | SpawnCount: reader.TryReadSInt32(), | 59 | SpawnCount: reader.TryReadSInt32(), |
| 60 | NumServerPlayers: reader.TryReadUInt32(), | 60 | NumServerPlayers: reader.TryReadUInt32(), |
| 61 | IdsLength: reader.TryReadUInt32(), | 61 | IdsLength: reader.TryReadUInt32(), |
| 62 | } | 62 | } |
| 63 | writer.TempAppendLine("\t\tSign On State: %s", netSignOnState.SignOnState) | 63 | demo.Writer.TempAppendLine("\t\tSign On State: %s", netSignOnState.SignOnState) |
| 64 | writer.TempAppendLine("\t\tSpawn Count: %d", netSignOnState.SpawnCount) | 64 | demo.Writer.TempAppendLine("\t\tSpawn Count: %d", netSignOnState.SpawnCount) |
| 65 | writer.TempAppendLine("\t\tNumber Of Server Players: %d", netSignOnState.NumServerPlayers) | 65 | demo.Writer.TempAppendLine("\t\tNumber Of Server Players: %d", netSignOnState.NumServerPlayers) |
| 66 | if netSignOnState.IdsLength > 0 { | 66 | if netSignOnState.IdsLength > 0 { |
| 67 | netSignOnState.PlayersNetworksIds = reader.TryReadBytesToSlice(uint64(netSignOnState.IdsLength)) | 67 | netSignOnState.PlayersNetworksIds = reader.TryReadBytesToSlice(uint64(netSignOnState.IdsLength)) |
| 68 | writer.TempAppendLine("\t\tPlayer Network IDs: %v", netSignOnState.PlayersNetworksIds) | 68 | demo.Writer.TempAppendLine("\t\tPlayer Network IDs: %v", netSignOnState.PlayersNetworksIds) |
| 69 | } | 69 | } |
| 70 | netSignOnState.MapNameLength = reader.TryReadUInt32() | 70 | netSignOnState.MapNameLength = reader.TryReadUInt32() |
| 71 | if netSignOnState.MapNameLength > 0 { | 71 | if netSignOnState.MapNameLength > 0 { |
| 72 | netSignOnState.MapName = reader.TryReadStringLength(uint64(netSignOnState.MapNameLength)) | 72 | netSignOnState.MapName = reader.TryReadStringLength(uint64(netSignOnState.MapNameLength)) |
| 73 | writer.TempAppendLine("\t\tMap Name: %s", netSignOnState.MapName) | 73 | demo.Writer.TempAppendLine("\t\tMap Name: %s", netSignOnState.MapName) |
| 74 | } | 74 | } |
| 75 | return netSignOnState | 75 | return netSignOnState |
| 76 | } | 76 | } |
diff --git a/pkg/messages/types/netSplitScreenUser.go b/pkg/messages/types/netSplitScreenUser.go index 535552a..691c723 100644 --- a/pkg/messages/types/netSplitScreenUser.go +++ b/pkg/messages/types/netSplitScreenUser.go | |||
| @@ -2,17 +2,17 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type NetSplitScreenUser struct { | 8 | type NetSplitScreenUser struct { |
| 9 | Slot bool | 9 | Slot bool `json:"slot"` |
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | func ParseNetSplitScreenUser(reader *bitreader.Reader) NetSplitScreenUser { | 12 | func ParseNetSplitScreenUser(reader *bitreader.Reader, demo *types.Demo) NetSplitScreenUser { |
| 13 | netSplitScreenUser := NetSplitScreenUser{ | 13 | netSplitScreenUser := NetSplitScreenUser{ |
| 14 | Slot: reader.TryReadBool(), | 14 | Slot: reader.TryReadBool(), |
| 15 | } | 15 | } |
| 16 | writer.TempAppendLine("\t\tSlot: %t", netSplitScreenUser.Slot) | 16 | demo.Writer.TempAppendLine("\t\tSlot: %t", netSplitScreenUser.Slot) |
| 17 | return netSplitScreenUser | 17 | return netSplitScreenUser |
| 18 | } | 18 | } |
diff --git a/pkg/messages/types/netStringCmd.go b/pkg/messages/types/netStringCmd.go index 13d5a13..fb6af2e 100644 --- a/pkg/messages/types/netStringCmd.go +++ b/pkg/messages/types/netStringCmd.go | |||
| @@ -4,17 +4,17 @@ import ( | |||
| 4 | "strings" | 4 | "strings" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/sdp.go/pkg/writer" | 7 | "github.com/pektezol/sdp.go/pkg/types" |
| 8 | ) | 8 | ) |
| 9 | 9 | ||
| 10 | type NetStringCmd struct { | 10 | type NetStringCmd struct { |
| 11 | Command string | 11 | Command string `json:"command"` |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | func ParseNetStringCmd(reader *bitreader.Reader) NetStringCmd { | 14 | func ParseNetStringCmd(reader *bitreader.Reader, demo *types.Demo) NetStringCmd { |
| 15 | netStringCmd := NetStringCmd{ | 15 | netStringCmd := NetStringCmd{ |
| 16 | Command: reader.TryReadString(), | 16 | Command: reader.TryReadString(), |
| 17 | } | 17 | } |
| 18 | writer.TempAppendLine("\t\tCommand: \"%s\"", strings.TrimSpace(netStringCmd.Command)) | 18 | demo.Writer.TempAppendLine("\t\tCommand: \"%s\"", strings.TrimSpace(netStringCmd.Command)) |
| 19 | return netStringCmd | 19 | return netStringCmd |
| 20 | } | 20 | } |
diff --git a/pkg/messages/types/netTick.go b/pkg/messages/types/netTick.go index 9ef1ce2..0bcbc05 100644 --- a/pkg/messages/types/netTick.go +++ b/pkg/messages/types/netTick.go | |||
| @@ -2,23 +2,23 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type NetTick struct { | 8 | type NetTick struct { |
| 9 | Tick uint32 | 9 | Tick uint32 `json:"tick"` |
| 10 | HostFrameTime float32 | 10 | HostFrameTime float32 `json:"host_frame_time"` |
| 11 | HostFrameTimeStdDeviation float32 | 11 | HostFrameTimeStdDeviation float32 `json:"host_frame_time_std_deviation"` |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | func ParseNetTick(reader *bitreader.Reader) NetTick { | 14 | func ParseNetTick(reader *bitreader.Reader, demo *types.Demo) NetTick { |
| 15 | netTick := NetTick{ | 15 | netTick := NetTick{ |
| 16 | Tick: reader.TryReadUInt32(), | 16 | Tick: reader.TryReadUInt32(), |
| 17 | HostFrameTime: float32(reader.TryReadUInt16()) / 1e5, | 17 | HostFrameTime: float32(reader.TryReadUInt16()) / 1e5, |
| 18 | HostFrameTimeStdDeviation: float32(reader.TryReadUInt16()) / 1e5, | 18 | HostFrameTimeStdDeviation: float32(reader.TryReadUInt16()) / 1e5, |
| 19 | } | 19 | } |
| 20 | writer.TempAppendLine("\t\tTick: %d", netTick.Tick) | 20 | demo.Writer.TempAppendLine("\t\tTick: %d", netTick.Tick) |
| 21 | writer.TempAppendLine("\t\tHost Frame Time: %f", netTick.HostFrameTime) | 21 | demo.Writer.TempAppendLine("\t\tHost Frame Time: %f", netTick.HostFrameTime) |
| 22 | writer.TempAppendLine("\t\tHost Frame Time Std Deviation: %f", netTick.HostFrameTimeStdDeviation) | 22 | demo.Writer.TempAppendLine("\t\tHost Frame Time Std Deviation: %f", netTick.HostFrameTimeStdDeviation) |
| 23 | return netTick | 23 | return netTick |
| 24 | } | 24 | } |
diff --git a/pkg/messages/types/svcBspDecal.go b/pkg/messages/types/svcBspDecal.go index fc5698f..9ef2458 100644 --- a/pkg/messages/types/svcBspDecal.go +++ b/pkg/messages/types/svcBspDecal.go | |||
| @@ -2,23 +2,23 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcBspDecal struct { | 8 | type SvcBspDecal struct { |
| 9 | Pos []vectorCoord | 9 | Pos []vectorCoord `json:"pos"` |
| 10 | DecalTextureIndex int16 | 10 | DecalTextureIndex int16 `json:"decal_texture_index"` |
| 11 | EntityIndex uint16 | 11 | EntityIndex uint16 `json:"entity_index"` |
| 12 | ModelIndex uint16 | 12 | ModelIndex uint16 `json:"model_index"` |
| 13 | LowPriority bool | 13 | LowPriority bool `json:"low_priority"` |
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | type vectorCoord struct { | 16 | type vectorCoord struct { |
| 17 | Value float32 | 17 | Value float32 `json:"value"` |
| 18 | Valid bool | 18 | Valid bool `json:"valid"` |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | func ParseSvcBspDecal(reader *bitreader.Reader) SvcBspDecal { | 21 | func ParseSvcBspDecal(reader *bitreader.Reader, demo *types.Demo) SvcBspDecal { |
| 22 | svcBspDecal := SvcBspDecal{ | 22 | svcBspDecal := SvcBspDecal{ |
| 23 | Pos: readVectorCoords(reader), | 23 | Pos: readVectorCoords(reader), |
| 24 | DecalTextureIndex: int16(reader.TryReadBits(9)), | 24 | DecalTextureIndex: int16(reader.TryReadBits(9)), |
| @@ -28,11 +28,11 @@ func ParseSvcBspDecal(reader *bitreader.Reader) SvcBspDecal { | |||
| 28 | svcBspDecal.ModelIndex = uint16(reader.TryReadBits(11)) | 28 | svcBspDecal.ModelIndex = uint16(reader.TryReadBits(11)) |
| 29 | } | 29 | } |
| 30 | svcBspDecal.LowPriority = reader.TryReadBool() | 30 | svcBspDecal.LowPriority = reader.TryReadBool() |
| 31 | writer.TempAppendLine("\t\tPosition: %v", svcBspDecal.Pos) | 31 | demo.Writer.TempAppendLine("\t\tPosition: %v", svcBspDecal.Pos) |
| 32 | writer.TempAppendLine("\t\tDecal Texture Index: %d", svcBspDecal.DecalTextureIndex) | 32 | demo.Writer.TempAppendLine("\t\tDecal Texture Index: %d", svcBspDecal.DecalTextureIndex) |
| 33 | writer.TempAppendLine("\t\tEntity Index: %d", svcBspDecal.EntityIndex) | 33 | demo.Writer.TempAppendLine("\t\tEntity Index: %d", svcBspDecal.EntityIndex) |
| 34 | writer.TempAppendLine("\t\tModel Index: %d", svcBspDecal.ModelIndex) | 34 | demo.Writer.TempAppendLine("\t\tModel Index: %d", svcBspDecal.ModelIndex) |
| 35 | writer.TempAppendLine("\t\tLow Priority: %t", svcBspDecal.LowPriority) | 35 | demo.Writer.TempAppendLine("\t\tLow Priority: %t", svcBspDecal.LowPriority) |
| 36 | return svcBspDecal | 36 | return svcBspDecal |
| 37 | } | 37 | } |
| 38 | 38 | ||
diff --git a/pkg/messages/types/svcClassInfo.go b/pkg/messages/types/svcClassInfo.go index af382a8..995c61d 100644 --- a/pkg/messages/types/svcClassInfo.go +++ b/pkg/messages/types/svcClassInfo.go | |||
| @@ -4,40 +4,40 @@ import ( | |||
| 4 | "math" | 4 | "math" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/sdp.go/pkg/writer" | 7 | "github.com/pektezol/sdp.go/pkg/types" |
| 8 | ) | 8 | ) |
| 9 | 9 | ||
| 10 | type SvcClassInfo struct { | 10 | type SvcClassInfo struct { |
| 11 | ClassCount uint16 | 11 | ClassCount uint16 `json:"class_count"` |
| 12 | CreateOnClient bool | 12 | CreateOnClient bool `json:"create_on_client"` |
| 13 | ServerClasses []serverClass | 13 | ServerClasses []serverClass `json:"server_classes"` |
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | type serverClass struct { | 16 | type serverClass struct { |
| 17 | ClassId int16 | 17 | ClassId int16 `json:"class_id"` |
| 18 | ClassName string | 18 | ClassName string `json:"class_name"` |
| 19 | DataTableName string | 19 | DataTableName string `json:"data_table_name"` |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | func ParseSvcClassInfo(reader *bitreader.Reader) SvcClassInfo { | 22 | func ParseSvcClassInfo(reader *bitreader.Reader, demo *types.Demo) SvcClassInfo { |
| 23 | svcClassInfo := SvcClassInfo{ | 23 | svcClassInfo := SvcClassInfo{ |
| 24 | ClassCount: reader.TryReadUInt16(), | 24 | ClassCount: reader.TryReadUInt16(), |
| 25 | CreateOnClient: reader.TryReadBool(), | 25 | CreateOnClient: reader.TryReadBool(), |
| 26 | } | 26 | } |
| 27 | classes := []serverClass{} | 27 | classes := []serverClass{} |
| 28 | writer.TempAppendLine("\t\tCreate On Client: %t", svcClassInfo.CreateOnClient) | 28 | demo.Writer.TempAppendLine("\t\tCreate On Client: %t", svcClassInfo.CreateOnClient) |
| 29 | if !svcClassInfo.CreateOnClient { | 29 | if !svcClassInfo.CreateOnClient { |
| 30 | writer.TempAppendLine("\t\t%d Server Classes:", svcClassInfo.ClassCount) | 30 | demo.Writer.TempAppendLine("\t\t%d Server Classes:", svcClassInfo.ClassCount) |
| 31 | for count := 0; count < int(svcClassInfo.ClassCount); count++ { | 31 | for count := 0; count < int(svcClassInfo.ClassCount); count++ { |
| 32 | classes = append(classes, serverClass{ | 32 | classes = append(classes, serverClass{ |
| 33 | ClassId: int16(reader.TryReadBits(uint64(math.Log2(float64(svcClassInfo.ClassCount)) + 1))), | 33 | ClassId: int16(reader.TryReadBits(uint64(math.Log2(float64(svcClassInfo.ClassCount)) + 1))), |
| 34 | ClassName: reader.TryReadString(), | 34 | ClassName: reader.TryReadString(), |
| 35 | DataTableName: reader.TryReadString(), | 35 | DataTableName: reader.TryReadString(), |
| 36 | }) | 36 | }) |
| 37 | writer.TempAppendLine("\t\t\t[%d] %s (%s)", classes[len(classes)-1].ClassId, classes[len(classes)-1].ClassName, classes[len(classes)-1].DataTableName) | 37 | demo.Writer.TempAppendLine("\t\t\t[%d] %s (%s)", classes[len(classes)-1].ClassId, classes[len(classes)-1].ClassName, classes[len(classes)-1].DataTableName) |
| 38 | } | 38 | } |
| 39 | } else { | 39 | } else { |
| 40 | writer.TempAppendLine("\t\t%d Server Classes", svcClassInfo.ClassCount) | 40 | demo.Writer.TempAppendLine("\t\t%d Server Classes", svcClassInfo.ClassCount) |
| 41 | } | 41 | } |
| 42 | svcClassInfo.ServerClasses = classes | 42 | svcClassInfo.ServerClasses = classes |
| 43 | return svcClassInfo | 43 | return svcClassInfo |
diff --git a/pkg/messages/types/svcCmdKeyValues.go b/pkg/messages/types/svcCmdKeyValues.go index a5d8f62..6ab9c99 100644 --- a/pkg/messages/types/svcCmdKeyValues.go +++ b/pkg/messages/types/svcCmdKeyValues.go | |||
| @@ -2,19 +2,19 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcCmdKeyValues struct { | 8 | type SvcCmdKeyValues struct { |
| 9 | Length uint32 | 9 | Length uint32 `json:"length"` |
| 10 | Data []byte | 10 | Data []byte `json:"data"` |
| 11 | } | 11 | } |
| 12 | 12 | ||
| 13 | func ParseSvcCmdKeyValues(reader *bitreader.Reader) SvcCmdKeyValues { | 13 | func ParseSvcCmdKeyValues(reader *bitreader.Reader, demo *types.Demo) SvcCmdKeyValues { |
| 14 | svcCmdKeyValues := SvcCmdKeyValues{ | 14 | svcCmdKeyValues := SvcCmdKeyValues{ |
| 15 | Length: reader.TryReadUInt32(), | 15 | Length: reader.TryReadUInt32(), |
| 16 | } | 16 | } |
| 17 | svcCmdKeyValues.Data = reader.TryReadBytesToSlice(uint64(svcCmdKeyValues.Length)) | 17 | svcCmdKeyValues.Data = reader.TryReadBytesToSlice(uint64(svcCmdKeyValues.Length)) |
| 18 | writer.TempAppendLine("\t\tData: %v", svcCmdKeyValues.Data) | 18 | demo.Writer.TempAppendLine("\t\tData: %v", svcCmdKeyValues.Data) |
| 19 | return svcCmdKeyValues | 19 | return svcCmdKeyValues |
| 20 | } | 20 | } |
diff --git a/pkg/messages/types/svcCreateStringTable.go b/pkg/messages/types/svcCreateStringTable.go index 0fc07cd..9a0c3e0 100644 --- a/pkg/messages/types/svcCreateStringTable.go +++ b/pkg/messages/types/svcCreateStringTable.go | |||
| @@ -4,22 +4,22 @@ import ( | |||
| 4 | "math" | 4 | "math" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/sdp.go/pkg/writer" | 7 | "github.com/pektezol/sdp.go/pkg/types" |
| 8 | ) | 8 | ) |
| 9 | 9 | ||
| 10 | type SvcCreateStringTable struct { | 10 | type SvcCreateStringTable struct { |
| 11 | Name string | 11 | Name string `json:"name"` |
| 12 | MaxEntries int16 | 12 | MaxEntries int16 `json:"max_entries"` |
| 13 | NumEntries int8 | 13 | NumEntries int8 `json:"num_entries"` |
| 14 | Length int32 | 14 | Length int32 `json:"length"` |
| 15 | UserDataFixedSize bool | 15 | UserDataFixedSize bool `json:"user_data_fixed_size"` |
| 16 | UserDataSize int16 | 16 | UserDataSize int16 `json:"user_data_size"` |
| 17 | UserDataSizeBits int8 | 17 | UserDataSizeBits int8 `json:"user_data_size_bits"` |
| 18 | Flags int8 | 18 | Flags int8 `json:"flags"` |
| 19 | StringData int | 19 | StringData int `json:"string_data"` |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | func ParseSvcCreateStringTable(reader *bitreader.Reader) SvcCreateStringTable { | 22 | func ParseSvcCreateStringTable(reader *bitreader.Reader, demo *types.Demo) SvcCreateStringTable { |
| 23 | svcCreateStringTable := SvcCreateStringTable{ | 23 | svcCreateStringTable := SvcCreateStringTable{ |
| 24 | Name: reader.TryReadString(), | 24 | Name: reader.TryReadString(), |
| 25 | MaxEntries: reader.TryReadSInt16(), | 25 | MaxEntries: reader.TryReadSInt16(), |
| @@ -32,13 +32,13 @@ func ParseSvcCreateStringTable(reader *bitreader.Reader) SvcCreateStringTable { | |||
| 32 | svcCreateStringTable.UserDataSizeBits = int8(reader.TryReadBits(4)) | 32 | svcCreateStringTable.UserDataSizeBits = int8(reader.TryReadBits(4)) |
| 33 | } | 33 | } |
| 34 | svcCreateStringTable.Flags = int8(reader.TryReadBits(2)) | 34 | svcCreateStringTable.Flags = int8(reader.TryReadBits(2)) |
| 35 | writer.TempAppendLine("\t\tName: %s", svcCreateStringTable.Name) | 35 | demo.Writer.TempAppendLine("\t\tName: %s", svcCreateStringTable.Name) |
| 36 | writer.TempAppendLine("\t\tMax Enties: %d", svcCreateStringTable.MaxEntries) | 36 | demo.Writer.TempAppendLine("\t\tMax Enties: %d", svcCreateStringTable.MaxEntries) |
| 37 | writer.TempAppendLine("\t\tNumber Of Entiries: %d", svcCreateStringTable.NumEntries) | 37 | demo.Writer.TempAppendLine("\t\tNumber Of Entiries: %d", svcCreateStringTable.NumEntries) |
| 38 | writer.TempAppendLine("\t\tUser Data Fixed Size: %t", svcCreateStringTable.UserDataFixedSize) | 38 | demo.Writer.TempAppendLine("\t\tUser Data Fixed Size: %t", svcCreateStringTable.UserDataFixedSize) |
| 39 | writer.TempAppendLine("\t\tUser Data Size: %d", svcCreateStringTable.UserDataSize) | 39 | demo.Writer.TempAppendLine("\t\tUser Data Size: %d", svcCreateStringTable.UserDataSize) |
| 40 | writer.TempAppendLine("\t\tUser Data Size In Bits: %d", svcCreateStringTable.UserDataSizeBits) | 40 | demo.Writer.TempAppendLine("\t\tUser Data Size In Bits: %d", svcCreateStringTable.UserDataSizeBits) |
| 41 | writer.TempAppendLine("\t\tFlags: %d", svcCreateStringTable.Flags) | 41 | demo.Writer.TempAppendLine("\t\tFlags: %d", svcCreateStringTable.Flags) |
| 42 | reader.SkipBits(uint64(svcCreateStringTable.Length)) // TODO: StringTable parsing | 42 | reader.SkipBits(uint64(svcCreateStringTable.Length)) // TODO: StringTable parsing |
| 43 | return svcCreateStringTable | 43 | return svcCreateStringTable |
| 44 | } | 44 | } |
diff --git a/pkg/messages/types/svcCrosshairAngle.go b/pkg/messages/types/svcCrosshairAngle.go index dd57f79..31da616 100644 --- a/pkg/messages/types/svcCrosshairAngle.go +++ b/pkg/messages/types/svcCrosshairAngle.go | |||
| @@ -2,20 +2,20 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcCrosshairAngle struct { | 8 | type SvcCrosshairAngle struct { |
| 9 | Angle crosshairAngles | 9 | Angle crosshairAngles `json:"angle"` |
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | type crosshairAngles struct { | 12 | type crosshairAngles struct { |
| 13 | X float32 | 13 | X float32 `json:"x"` |
| 14 | Y float32 | 14 | Y float32 `json:"y"` |
| 15 | Z float32 | 15 | Z float32 `json:"z"` |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | func ParseSvcCrosshairAngle(reader *bitreader.Reader) SvcCrosshairAngle { | 18 | func ParseSvcCrosshairAngle(reader *bitreader.Reader, demo *types.Demo) SvcCrosshairAngle { |
| 19 | svcCrosshairAngle := SvcCrosshairAngle{ | 19 | svcCrosshairAngle := SvcCrosshairAngle{ |
| 20 | Angle: crosshairAngles{ | 20 | Angle: crosshairAngles{ |
| 21 | X: float32(reader.TryReadBits(16)), | 21 | X: float32(reader.TryReadBits(16)), |
| @@ -23,8 +23,8 @@ func ParseSvcCrosshairAngle(reader *bitreader.Reader) SvcCrosshairAngle { | |||
| 23 | Z: float32(reader.TryReadBits(16)), | 23 | Z: float32(reader.TryReadBits(16)), |
| 24 | }, | 24 | }, |
| 25 | } | 25 | } |
| 26 | writer.TempAppendLine("\t\tX: %f", svcCrosshairAngle.Angle.X) | 26 | demo.Writer.TempAppendLine("\t\tX: %f", svcCrosshairAngle.Angle.X) |
| 27 | writer.TempAppendLine("\t\tY: %f", svcCrosshairAngle.Angle.Y) | 27 | demo.Writer.TempAppendLine("\t\tY: %f", svcCrosshairAngle.Angle.Y) |
| 28 | writer.TempAppendLine("\t\tZ: %f", svcCrosshairAngle.Angle.Z) | 28 | demo.Writer.TempAppendLine("\t\tZ: %f", svcCrosshairAngle.Angle.Z) |
| 29 | return svcCrosshairAngle | 29 | return svcCrosshairAngle |
| 30 | } | 30 | } |
diff --git a/pkg/messages/types/svcEntityMessage.go b/pkg/messages/types/svcEntityMessage.go index b955da5..87d7e1b 100644 --- a/pkg/messages/types/svcEntityMessage.go +++ b/pkg/messages/types/svcEntityMessage.go | |||
| @@ -2,25 +2,25 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcEntityMessage struct { | 8 | type SvcEntityMessage struct { |
| 9 | EntityIndex uint16 | 9 | EntityIndex uint16 `json:"entity_index"` |
| 10 | ClassId uint16 | 10 | ClassId uint16 `json:"class_id"` |
| 11 | Length uint16 | 11 | Length uint16 `json:"length"` |
| 12 | Data []byte | 12 | Data []byte `json:"data"` |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | func ParseSvcEntityMessage(reader *bitreader.Reader) SvcEntityMessage { | 15 | func ParseSvcEntityMessage(reader *bitreader.Reader, demo *types.Demo) SvcEntityMessage { |
| 16 | svcEntityMessage := SvcEntityMessage{ | 16 | svcEntityMessage := SvcEntityMessage{ |
| 17 | EntityIndex: uint16(reader.TryReadBits(11)), | 17 | EntityIndex: uint16(reader.TryReadBits(11)), |
| 18 | ClassId: uint16(reader.TryReadBits(9)), | 18 | ClassId: uint16(reader.TryReadBits(9)), |
| 19 | Length: uint16(reader.TryReadBits(11)), | 19 | Length: uint16(reader.TryReadBits(11)), |
| 20 | } | 20 | } |
| 21 | svcEntityMessage.Data = reader.TryReadBitsToSlice(uint64(svcEntityMessage.Length)) | 21 | svcEntityMessage.Data = reader.TryReadBitsToSlice(uint64(svcEntityMessage.Length)) |
| 22 | writer.TempAppendLine("\t\tEntity Index: %d", svcEntityMessage.EntityIndex) | 22 | demo.Writer.TempAppendLine("\t\tEntity Index: %d", svcEntityMessage.EntityIndex) |
| 23 | writer.TempAppendLine("\t\tClass ID: %d", svcEntityMessage.ClassId) | 23 | demo.Writer.TempAppendLine("\t\tClass ID: %d", svcEntityMessage.ClassId) |
| 24 | writer.TempAppendLine("\t\tData: %v", svcEntityMessage.Data) | 24 | demo.Writer.TempAppendLine("\t\tData: %v", svcEntityMessage.Data) |
| 25 | return svcEntityMessage | 25 | return svcEntityMessage |
| 26 | } | 26 | } |
diff --git a/pkg/messages/types/svcFixAngle.go b/pkg/messages/types/svcFixAngle.go index d5e7b0f..924bba2 100644 --- a/pkg/messages/types/svcFixAngle.go +++ b/pkg/messages/types/svcFixAngle.go | |||
| @@ -2,21 +2,21 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcFixAngle struct { | 8 | type SvcFixAngle struct { |
| 9 | Relative bool | 9 | Relative bool `json:"relative"` |
| 10 | Angle fixAngles | 10 | Angle fixAngles `json:"angle"` |
| 11 | } | 11 | } |
| 12 | 12 | ||
| 13 | type fixAngles struct { | 13 | type fixAngles struct { |
| 14 | X float32 | 14 | X float32 `json:"x"` |
| 15 | Y float32 | 15 | Y float32 `json:"y"` |
| 16 | Z float32 | 16 | Z float32 `json:"z"` |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | func ParseSvcFixAngle(reader *bitreader.Reader) SvcFixAngle { | 19 | func ParseSvcFixAngle(reader *bitreader.Reader, demo *types.Demo) SvcFixAngle { |
| 20 | svcFixAngle := SvcFixAngle{ | 20 | svcFixAngle := SvcFixAngle{ |
| 21 | Relative: reader.TryReadBool(), | 21 | Relative: reader.TryReadBool(), |
| 22 | Angle: fixAngles{ | 22 | Angle: fixAngles{ |
| @@ -25,9 +25,9 @@ func ParseSvcFixAngle(reader *bitreader.Reader) SvcFixAngle { | |||
| 25 | Z: float32(reader.TryReadBits(16)), | 25 | Z: float32(reader.TryReadBits(16)), |
| 26 | }, | 26 | }, |
| 27 | } | 27 | } |
| 28 | writer.TempAppendLine("\t\tRelative: %t", svcFixAngle.Relative) | 28 | demo.Writer.TempAppendLine("\t\tRelative: %t", svcFixAngle.Relative) |
| 29 | writer.TempAppendLine("\t\tX: %f", svcFixAngle.Angle.X) | 29 | demo.Writer.TempAppendLine("\t\tX: %f", svcFixAngle.Angle.X) |
| 30 | writer.TempAppendLine("\t\tY: %f", svcFixAngle.Angle.Y) | 30 | demo.Writer.TempAppendLine("\t\tY: %f", svcFixAngle.Angle.Y) |
| 31 | writer.TempAppendLine("\t\tZ: %f", svcFixAngle.Angle.Z) | 31 | demo.Writer.TempAppendLine("\t\tZ: %f", svcFixAngle.Angle.Z) |
| 32 | return svcFixAngle | 32 | return svcFixAngle |
| 33 | } | 33 | } |
diff --git a/pkg/messages/types/svcGameEvent.go b/pkg/messages/types/svcGameEvent.go index b325472..cb1e91d 100644 --- a/pkg/messages/types/svcGameEvent.go +++ b/pkg/messages/types/svcGameEvent.go | |||
| @@ -2,56 +2,56 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcGameEvent struct { | 8 | type SvcGameEvent struct { |
| 9 | Length uint16 | 9 | Length uint16 `json:"length"` |
| 10 | EventID uint32 | 10 | EventID uint32 `json:"event_id"` |
| 11 | EventDescription GameEventDescriptor | 11 | EventDescription types.GameEventDescriptor `json:"event_description"` |
| 12 | EventDescriptors []EventDescriptorKey | 12 | EventDescriptors []EventDescriptorKey `json:"event_descriptors"` |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | type EventDescriptorKey struct { | 15 | type EventDescriptorKey struct { |
| 16 | Name string | 16 | Name string `json:"name"` |
| 17 | Descriptor any | 17 | Descriptor any `json:"descriptor"` |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | func ParseSvcGameEvent(reader *bitreader.Reader) SvcGameEvent { | 20 | func ParseSvcGameEvent(reader *bitreader.Reader, demo *types.Demo) SvcGameEvent { |
| 21 | svcGameEvent := SvcGameEvent{ | 21 | svcGameEvent := SvcGameEvent{ |
| 22 | Length: uint16(reader.TryReadBits(11)), | 22 | Length: uint16(reader.TryReadBits(11)), |
| 23 | } | 23 | } |
| 24 | gameEventReader := bitreader.NewReaderFromBytes(reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)), true) | 24 | gameEventReader := bitreader.NewReaderFromBytes(reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)), true) |
| 25 | svcGameEvent.parseGameEvent(gameEventReader) | 25 | svcGameEvent.parseGameEvent(gameEventReader, demo) |
| 26 | return svcGameEvent | 26 | return svcGameEvent |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | func (svcGameEvent *SvcGameEvent) parseGameEvent(reader *bitreader.Reader) { | 29 | func (svcGameEvent *SvcGameEvent) parseGameEvent(reader *bitreader.Reader, demo *types.Demo) { |
| 30 | svcGameEvent.EventID = uint32(reader.TryReadBits(9)) | 30 | svcGameEvent.EventID = uint32(reader.TryReadBits(9)) |
| 31 | svcGameEvent.EventDescription = GameEventList.GameEventDescriptor[svcGameEvent.EventID] | 31 | svcGameEvent.EventDescription = demo.GameEventList.GameEventDescriptor[svcGameEvent.EventID] |
| 32 | writer.TempAppendLine("\t\t%s (%d):", svcGameEvent.EventDescription.Name, svcGameEvent.EventID) | 32 | demo.Writer.TempAppendLine("\t\t%s (%d):", svcGameEvent.EventDescription.Name, svcGameEvent.EventID) |
| 33 | for _, descriptor := range svcGameEvent.EventDescription.Keys { | 33 | for _, descriptor := range svcGameEvent.EventDescription.Keys { |
| 34 | var value any | 34 | var value any |
| 35 | switch descriptor.Type { | 35 | switch descriptor.Type { |
| 36 | case EventDescriptorString: | 36 | case types.EventDescriptorString: |
| 37 | value = reader.TryReadString() | 37 | value = reader.TryReadString() |
| 38 | case EventDescriptorFloat: | 38 | case types.EventDescriptorFloat: |
| 39 | value = reader.TryReadFloat32() | 39 | value = reader.TryReadFloat32() |
| 40 | case EventDescriptorInt32: | 40 | case types.EventDescriptorInt32: |
| 41 | value = reader.TryReadSInt32() | 41 | value = reader.TryReadSInt32() |
| 42 | case EventDescriptorInt16: | 42 | case types.EventDescriptorInt16: |
| 43 | value = reader.TryReadSInt16() | 43 | value = reader.TryReadSInt16() |
| 44 | case EventDescriptorInt8: | 44 | case types.EventDescriptorInt8: |
| 45 | value = reader.TryReadUInt8() | 45 | value = reader.TryReadUInt8() |
| 46 | case EventDescriptorBool: | 46 | case types.EventDescriptorBool: |
| 47 | value = reader.TryReadBool() | 47 | value = reader.TryReadBool() |
| 48 | case EventDescriptorUInt64: | 48 | case types.EventDescriptorUInt64: |
| 49 | value = reader.TryReadUInt64() | 49 | value = reader.TryReadUInt64() |
| 50 | } | 50 | } |
| 51 | svcGameEvent.EventDescriptors = append(svcGameEvent.EventDescriptors, EventDescriptorKey{ | 51 | svcGameEvent.EventDescriptors = append(svcGameEvent.EventDescriptors, EventDescriptorKey{ |
| 52 | Name: descriptor.Name, | 52 | Name: descriptor.Name, |
| 53 | Descriptor: value, | 53 | Descriptor: value, |
| 54 | }) | 54 | }) |
| 55 | writer.TempAppendLine("\t\t\t%s: %v", descriptor.Name, value) | 55 | demo.Writer.TempAppendLine("\t\t\t%s: %v", descriptor.Name, value) |
| 56 | } | 56 | } |
| 57 | } | 57 | } |
diff --git a/pkg/messages/types/svcGameEventList.go b/pkg/messages/types/svcGameEventList.go index 9a194fd..dafe9b7 100644 --- a/pkg/messages/types/svcGameEventList.go +++ b/pkg/messages/types/svcGameEventList.go | |||
| @@ -1,95 +1,18 @@ | |||
| 1 | package messages | 1 | package messages |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | ||
| 5 | |||
| 6 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 8 | ) | 6 | ) |
| 9 | 7 | ||
| 10 | var GameEventList *SvcGameEventList | 8 | func ParseSvcGameEventList(reader *bitreader.Reader, demo *types.Demo) types.SvcGameEventList { |
| 11 | 9 | svcGameEventList := types.SvcGameEventList{ | |
| 12 | type SvcGameEventList struct { | ||
| 13 | Events int16 | ||
| 14 | Length int32 | ||
| 15 | GameEventDescriptor []GameEventDescriptor | ||
| 16 | } | ||
| 17 | |||
| 18 | type GameEventDescriptor struct { | ||
| 19 | EventID uint32 | ||
| 20 | Name string | ||
| 21 | Keys []GameEventDescriptorKey | ||
| 22 | } | ||
| 23 | |||
| 24 | type GameEventDescriptorKey struct { | ||
| 25 | Name string | ||
| 26 | Type EventDescriptor | ||
| 27 | } | ||
| 28 | |||
| 29 | type EventDescriptor uint8 | ||
| 30 | |||
| 31 | func ParseSvcGameEventList(reader *bitreader.Reader) SvcGameEventList { | ||
| 32 | svcGameEventList := SvcGameEventList{ | ||
| 33 | Events: int16(reader.TryReadBits(9)), | 10 | Events: int16(reader.TryReadBits(9)), |
| 34 | Length: int32(reader.TryReadBits(20)), | 11 | Length: int32(reader.TryReadBits(20)), |
| 35 | } | 12 | } |
| 36 | gameEventListReader := bitreader.NewReaderFromBytes(reader.TryReadBitsToSlice(uint64(svcGameEventList.Length)), true) | 13 | gameEventListReader := bitreader.NewReaderFromBytes(reader.TryReadBitsToSlice(uint64(svcGameEventList.Length)), true) |
| 37 | writer.TempAppendLine("\t\t%d Events:", svcGameEventList.Events) | 14 | demo.Writer.TempAppendLine("\t\t%d Events:", svcGameEventList.Events) |
| 38 | svcGameEventList.parseGameEventDescriptor(gameEventListReader) | 15 | svcGameEventList.ParseGameEventDescriptor(gameEventListReader, demo) |
| 39 | GameEventList = &svcGameEventList | 16 | demo.GameEventList = &svcGameEventList |
| 40 | return svcGameEventList | 17 | return svcGameEventList |
| 41 | } | 18 | } |
| 42 | |||
| 43 | func (svcGameEventList *SvcGameEventList) parseGameEventDescriptor(reader *bitreader.Reader) { | ||
| 44 | svcGameEventList.GameEventDescriptor = make([]GameEventDescriptor, svcGameEventList.Events) | ||
| 45 | for event := 0; event < int(svcGameEventList.Events); event++ { | ||
| 46 | svcGameEventList.GameEventDescriptor[event] = GameEventDescriptor{ | ||
| 47 | EventID: uint32(reader.TryReadBits(9)), | ||
| 48 | Name: reader.TryReadString(), | ||
| 49 | } | ||
| 50 | writer.TempAppendLine("\t\t\t%d: %s", svcGameEventList.GameEventDescriptor[event].EventID, svcGameEventList.GameEventDescriptor[event].Name) | ||
| 51 | for { | ||
| 52 | descriptorType := reader.TryReadBits(3) | ||
| 53 | if descriptorType == 0 { | ||
| 54 | break | ||
| 55 | } | ||
| 56 | KeyName := reader.TryReadString() | ||
| 57 | svcGameEventList.GameEventDescriptor[event].Keys = append(svcGameEventList.GameEventDescriptor[event].Keys, GameEventDescriptorKey{ | ||
| 58 | Name: KeyName, | ||
| 59 | Type: EventDescriptor(descriptorType), | ||
| 60 | }) | ||
| 61 | } | ||
| 62 | writer.TempAppendLine("\t\t\t\tKeys: %v", svcGameEventList.GameEventDescriptor[event].Keys) | ||
| 63 | } | ||
| 64 | } | ||
| 65 | |||
| 66 | const ( | ||
| 67 | EventDescriptorString EventDescriptor = iota + 1 | ||
| 68 | EventDescriptorFloat | ||
| 69 | EventDescriptorInt32 | ||
| 70 | EventDescriptorInt16 | ||
| 71 | EventDescriptorInt8 | ||
| 72 | EventDescriptorBool | ||
| 73 | EventDescriptorUInt64 | ||
| 74 | ) | ||
| 75 | |||
| 76 | func (eventDescriptor EventDescriptor) String() string { | ||
| 77 | switch eventDescriptor { | ||
| 78 | case EventDescriptorString: | ||
| 79 | return "String" | ||
| 80 | case EventDescriptorFloat: | ||
| 81 | return "Float" | ||
| 82 | case EventDescriptorInt32: | ||
| 83 | return "Int32" | ||
| 84 | case EventDescriptorInt16: | ||
| 85 | return "Int16" | ||
| 86 | case EventDescriptorInt8: | ||
| 87 | return "Int8" | ||
| 88 | case EventDescriptorBool: | ||
| 89 | return "Bool" | ||
| 90 | case EventDescriptorUInt64: | ||
| 91 | return "UInt64" | ||
| 92 | default: | ||
| 93 | return fmt.Sprintf("%d", eventDescriptor) | ||
| 94 | } | ||
| 95 | } | ||
diff --git a/pkg/messages/types/svcGetCvarValue.go b/pkg/messages/types/svcGetCvarValue.go index 5deb9ef..1c3e54c 100644 --- a/pkg/messages/types/svcGetCvarValue.go +++ b/pkg/messages/types/svcGetCvarValue.go | |||
| @@ -2,20 +2,20 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcGetCvarValue struct { | 8 | type SvcGetCvarValue struct { |
| 9 | Cookie int32 | 9 | Cookie int32 `json:"cookie"` |
| 10 | CvarName string | 10 | CvarName string `json:"cvar_name"` |
| 11 | } | 11 | } |
| 12 | 12 | ||
| 13 | func ParseSvcGetCvarValue(reader *bitreader.Reader) SvcGetCvarValue { | 13 | func ParseSvcGetCvarValue(reader *bitreader.Reader, demo *types.Demo) SvcGetCvarValue { |
| 14 | svcGetCvarValue := SvcGetCvarValue{ | 14 | svcGetCvarValue := SvcGetCvarValue{ |
| 15 | Cookie: reader.TryReadSInt32(), | 15 | Cookie: reader.TryReadSInt32(), |
| 16 | CvarName: reader.TryReadString(), | 16 | CvarName: reader.TryReadString(), |
| 17 | } | 17 | } |
| 18 | writer.TempAppendLine("\t\tCookie: %d", svcGetCvarValue.Cookie) | 18 | demo.Writer.TempAppendLine("\t\tCookie: %d", svcGetCvarValue.Cookie) |
| 19 | writer.TempAppendLine("\t\tCvar: \"%s\"", svcGetCvarValue.CvarName) | 19 | demo.Writer.TempAppendLine("\t\tCvar: \"%s\"", svcGetCvarValue.CvarName) |
| 20 | return svcGetCvarValue | 20 | return svcGetCvarValue |
| 21 | } | 21 | } |
diff --git a/pkg/messages/types/svcMenu.go b/pkg/messages/types/svcMenu.go index ffbb86b..b1da594 100644 --- a/pkg/messages/types/svcMenu.go +++ b/pkg/messages/types/svcMenu.go | |||
| @@ -2,22 +2,22 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcMenu struct { | 8 | type SvcMenu struct { |
| 9 | Type uint16 | 9 | Type uint16 `json:"type"` |
| 10 | Length uint32 | 10 | Length uint32 `json:"length"` |
| 11 | Data []byte | 11 | Data []byte `json:"data"` |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | func ParseSvcMenu(reader *bitreader.Reader) SvcMenu { | 14 | func ParseSvcMenu(reader *bitreader.Reader, demo *types.Demo) SvcMenu { |
| 15 | svcMenu := SvcMenu{ | 15 | svcMenu := SvcMenu{ |
| 16 | Type: reader.TryReadUInt16(), | 16 | Type: reader.TryReadUInt16(), |
| 17 | Length: reader.TryReadUInt32(), | 17 | Length: reader.TryReadUInt32(), |
| 18 | } | 18 | } |
| 19 | svcMenu.Data = reader.TryReadBitsToSlice(uint64(svcMenu.Length)) | 19 | svcMenu.Data = reader.TryReadBitsToSlice(uint64(svcMenu.Length)) |
| 20 | writer.TempAppendLine("\t\tType: %d", svcMenu.Type) | 20 | demo.Writer.TempAppendLine("\t\tType: %d", svcMenu.Type) |
| 21 | writer.TempAppendLine("\t\tData: %v", svcMenu.Data) | 21 | demo.Writer.TempAppendLine("\t\tData: %v", svcMenu.Data) |
| 22 | return svcMenu | 22 | return svcMenu |
| 23 | } | 23 | } |
diff --git a/pkg/messages/types/svcPacketEntities.go b/pkg/messages/types/svcPacketEntities.go index 188f827..abef83d 100644 --- a/pkg/messages/types/svcPacketEntities.go +++ b/pkg/messages/types/svcPacketEntities.go | |||
| @@ -2,21 +2,21 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcPacketEntities struct { | 8 | type SvcPacketEntities struct { |
| 9 | MaxEntries uint16 | 9 | MaxEntries uint16 `json:"max_entries"` |
| 10 | IsDelta bool | 10 | IsDelta bool `json:"is_delta"` |
| 11 | DeltaFrom int32 | 11 | DeltaFrom int32 `json:"delta_from"` |
| 12 | BaseLine bool | 12 | BaseLine bool `json:"base_line"` |
| 13 | UpdatedEntries uint16 | 13 | UpdatedEntries uint16 `json:"updated_entries"` |
| 14 | Length uint32 | 14 | Length uint32 `json:"length"` |
| 15 | UpdatedBaseline bool | 15 | UpdatedBaseline bool `json:"updated_baseline"` |
| 16 | Data []byte | 16 | Data []byte `json:"data"` |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | func ParseSvcPacketEntities(reader *bitreader.Reader) SvcPacketEntities { | 19 | func ParseSvcPacketEntities(reader *bitreader.Reader, demo *types.Demo) SvcPacketEntities { |
| 20 | svcPacketEntities := SvcPacketEntities{ | 20 | svcPacketEntities := SvcPacketEntities{ |
| 21 | MaxEntries: uint16(reader.TryReadBits(11)), | 21 | MaxEntries: uint16(reader.TryReadBits(11)), |
| 22 | IsDelta: reader.TryReadBool(), | 22 | IsDelta: reader.TryReadBool(), |
| @@ -31,12 +31,12 @@ func ParseSvcPacketEntities(reader *bitreader.Reader) SvcPacketEntities { | |||
| 31 | svcPacketEntities.Length = uint32(reader.TryReadBits(20)) | 31 | svcPacketEntities.Length = uint32(reader.TryReadBits(20)) |
| 32 | svcPacketEntities.UpdatedBaseline = reader.TryReadBool() | 32 | svcPacketEntities.UpdatedBaseline = reader.TryReadBool() |
| 33 | svcPacketEntities.Data = reader.TryReadBitsToSlice(uint64(svcPacketEntities.Length)) | 33 | svcPacketEntities.Data = reader.TryReadBitsToSlice(uint64(svcPacketEntities.Length)) |
| 34 | writer.TempAppendLine("\t\tMax Entries: %d", svcPacketEntities.MaxEntries) | 34 | demo.Writer.TempAppendLine("\t\tMax Entries: %d", svcPacketEntities.MaxEntries) |
| 35 | writer.TempAppendLine("\t\tIs Delta: %t", svcPacketEntities.IsDelta) | 35 | demo.Writer.TempAppendLine("\t\tIs Delta: %t", svcPacketEntities.IsDelta) |
| 36 | writer.TempAppendLine("\t\tDelta From: %d", svcPacketEntities.DeltaFrom) | 36 | demo.Writer.TempAppendLine("\t\tDelta From: %d", svcPacketEntities.DeltaFrom) |
| 37 | writer.TempAppendLine("\t\tBaseline: %t", svcPacketEntities.BaseLine) | 37 | demo.Writer.TempAppendLine("\t\tBaseline: %t", svcPacketEntities.BaseLine) |
| 38 | writer.TempAppendLine("\t\tUpdated Baseline: %t", svcPacketEntities.UpdatedBaseline) | 38 | demo.Writer.TempAppendLine("\t\tUpdated Baseline: %t", svcPacketEntities.UpdatedBaseline) |
| 39 | writer.TempAppendLine("\t\t%d Updated Entries:", svcPacketEntities.UpdatedEntries) | 39 | demo.Writer.TempAppendLine("\t\t%d Updated Entries:", svcPacketEntities.UpdatedEntries) |
| 40 | writer.TempAppendLine("\t\tData: %v", svcPacketEntities.Data) | 40 | demo.Writer.TempAppendLine("\t\tData: %v", svcPacketEntities.Data) |
| 41 | return svcPacketEntities | 41 | return svcPacketEntities |
| 42 | } | 42 | } |
diff --git a/pkg/messages/types/svcPaintmapData.go b/pkg/messages/types/svcPaintmapData.go index 10f8031..2455f83 100644 --- a/pkg/messages/types/svcPaintmapData.go +++ b/pkg/messages/types/svcPaintmapData.go | |||
| @@ -2,19 +2,19 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcPaintmapData struct { | 8 | type SvcPaintmapData struct { |
| 9 | Length uint32 | 9 | Length uint32 `json:"length"` |
| 10 | Data []byte | 10 | Data []byte `json:"data"` |
| 11 | } | 11 | } |
| 12 | 12 | ||
| 13 | func ParseSvcPaintmapData(reader *bitreader.Reader) SvcPaintmapData { | 13 | func ParseSvcPaintmapData(reader *bitreader.Reader, demo *types.Demo) SvcPaintmapData { |
| 14 | svcPaintmapData := SvcPaintmapData{ | 14 | svcPaintmapData := SvcPaintmapData{ |
| 15 | Length: reader.TryReadUInt32(), | 15 | Length: reader.TryReadUInt32(), |
| 16 | } | 16 | } |
| 17 | svcPaintmapData.Data = reader.TryReadBitsToSlice(uint64(svcPaintmapData.Length)) | 17 | svcPaintmapData.Data = reader.TryReadBitsToSlice(uint64(svcPaintmapData.Length)) |
| 18 | writer.TempAppendLine("\t\tData: %v", svcPaintmapData.Data) | 18 | demo.Writer.TempAppendLine("\t\tData: %v", svcPaintmapData.Data) |
| 19 | return svcPaintmapData | 19 | return svcPaintmapData |
| 20 | } | 20 | } |
diff --git a/pkg/messages/types/svcPrefetch.go b/pkg/messages/types/svcPrefetch.go index 6aa39aa..55b6713 100644 --- a/pkg/messages/types/svcPrefetch.go +++ b/pkg/messages/types/svcPrefetch.go | |||
| @@ -2,17 +2,17 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcPrefetch struct { | 8 | type SvcPrefetch struct { |
| 9 | SoundIndex int16 | 9 | SoundIndex int16 `json:"sound_index"` |
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | func ParseSvcPrefetch(reader *bitreader.Reader) SvcPrefetch { | 12 | func ParseSvcPrefetch(reader *bitreader.Reader, demo *types.Demo) SvcPrefetch { |
| 13 | svcPrefetch := SvcPrefetch{ | 13 | svcPrefetch := SvcPrefetch{ |
| 14 | SoundIndex: int16(reader.TryReadBits(13)), | 14 | SoundIndex: int16(reader.TryReadBits(13)), |
| 15 | } | 15 | } |
| 16 | writer.TempAppendLine("\t\tSound Index: %d", svcPrefetch.SoundIndex) | 16 | demo.Writer.TempAppendLine("\t\tSound Index: %d", svcPrefetch.SoundIndex) |
| 17 | return svcPrefetch | 17 | return svcPrefetch |
| 18 | } | 18 | } |
diff --git a/pkg/messages/types/svcPrint.go b/pkg/messages/types/svcPrint.go index 56f0d08..0db7ffd 100644 --- a/pkg/messages/types/svcPrint.go +++ b/pkg/messages/types/svcPrint.go | |||
| @@ -4,18 +4,18 @@ import ( | |||
| 4 | "strings" | 4 | "strings" |
| 5 | 5 | ||
| 6 | "github.com/pektezol/bitreader" | 6 | "github.com/pektezol/bitreader" |
| 7 | "github.com/pektezol/sdp.go/pkg/writer" | 7 | "github.com/pektezol/sdp.go/pkg/types" |
| 8 | ) | 8 | ) |
| 9 | 9 | ||
| 10 | type SvcPrint struct { | 10 | type SvcPrint struct { |
| 11 | Message string | 11 | Message string `json:"message"` |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | func ParseSvcPrint(reader *bitreader.Reader) SvcPrint { | 14 | func ParseSvcPrint(reader *bitreader.Reader, demo *types.Demo) SvcPrint { |
| 15 | svcPrint := SvcPrint{ | 15 | svcPrint := SvcPrint{ |
| 16 | Message: reader.TryReadString(), | 16 | Message: reader.TryReadString(), |
| 17 | } | 17 | } |
| 18 | // common psycopath behaviour | 18 | // common psycopath behaviour |
| 19 | writer.TempAppendLine("\t\t%s", strings.Replace(strings.ReplaceAll(strings.ReplaceAll(svcPrint.Message, "\n", "\n\t\t"), "\n\t\t\n\t\t", ""), "\n\t\t", "", 1)) | 19 | demo.Writer.TempAppendLine("\t\t%s", strings.Replace(strings.ReplaceAll(strings.ReplaceAll(svcPrint.Message, "\n", "\n\t\t"), "\n\t\t\n\t\t", ""), "\n\t\t", "", 1)) |
| 20 | return svcPrint | 20 | return svcPrint |
| 21 | } | 21 | } |
diff --git a/pkg/messages/types/svcSendTable.go b/pkg/messages/types/svcSendTable.go index d0def36..fc98eb6 100644 --- a/pkg/messages/types/svcSendTable.go +++ b/pkg/messages/types/svcSendTable.go | |||
| @@ -2,23 +2,23 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcSendTable struct { | 8 | type SvcSendTable struct { |
| 9 | NeedsDecoder bool | 9 | NeedsDecoder bool `json:"needs_decoder"` |
| 10 | Length uint8 | 10 | Length uint8 `json:"length"` |
| 11 | Props uint32 | 11 | Props uint32 `json:"props"` |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | func ParseSvcSendTable(reader *bitreader.Reader) SvcSendTable { | 14 | func ParseSvcSendTable(reader *bitreader.Reader, demo *types.Demo) SvcSendTable { |
| 15 | svcSendTable := SvcSendTable{ | 15 | svcSendTable := SvcSendTable{ |
| 16 | NeedsDecoder: reader.TryReadBool(), | 16 | NeedsDecoder: reader.TryReadBool(), |
| 17 | Length: reader.TryReadUInt8(), | 17 | Length: reader.TryReadUInt8(), |
| 18 | } | 18 | } |
| 19 | svcSendTable.Props = uint32(reader.TryReadBits(uint64(svcSendTable.Length))) | 19 | svcSendTable.Props = uint32(reader.TryReadBits(uint64(svcSendTable.Length))) |
| 20 | writer.TempAppendLine("\t\tNeeds Decoder: %t", svcSendTable.NeedsDecoder) | 20 | demo.Writer.TempAppendLine("\t\tNeeds Decoder: %t", svcSendTable.NeedsDecoder) |
| 21 | writer.TempAppendLine("\t\tLength: %d", svcSendTable.Length) | 21 | demo.Writer.TempAppendLine("\t\tLength: %d", svcSendTable.Length) |
| 22 | writer.TempAppendLine("\t\tProps: %d", svcSendTable.Props) | 22 | demo.Writer.TempAppendLine("\t\tProps: %d", svcSendTable.Props) |
| 23 | return svcSendTable | 23 | return svcSendTable |
| 24 | } | 24 | } |
diff --git a/pkg/messages/types/svcServerInfo.go b/pkg/messages/types/svcServerInfo.go index 9e3113c..2aabccd 100644 --- a/pkg/messages/types/svcServerInfo.go +++ b/pkg/messages/types/svcServerInfo.go | |||
| @@ -2,29 +2,29 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcServerInfo struct { | 8 | type SvcServerInfo struct { |
| 9 | Protocol uint16 | 9 | Protocol uint16 `json:"protocol"` |
| 10 | ServerCount uint32 | 10 | ServerCount uint32 `json:"server_count"` |
| 11 | IsHltv bool | 11 | IsHltv bool `json:"is_hltv"` |
| 12 | IsDedicated bool | 12 | IsDedicated bool `json:"is_dedicated"` |
| 13 | ClientCrc int32 | 13 | ClientCrc int32 `json:"client_crc"` |
| 14 | StringTableCrc uint32 | 14 | StringTableCrc uint32 `json:"string_table_crc"` |
| 15 | MaxServerClasses uint16 | 15 | MaxServerClasses uint16 `json:"max_server_classes"` |
| 16 | MapCrc uint32 | 16 | MapCrc uint32 `json:"map_crc"` |
| 17 | PlayerCount uint8 | 17 | PlayerCount uint8 `json:"player_count"` |
| 18 | MaxClients uint8 | 18 | MaxClients uint8 `json:"max_clients"` |
| 19 | TickInterval float32 | 19 | TickInterval float32 `json:"tick_interval"` |
| 20 | Platform string | 20 | Platform string `json:"platform"` |
| 21 | GameDir string | 21 | GameDir string `json:"game_dir"` |
| 22 | MapName string | 22 | MapName string `json:"map_name"` |
| 23 | SkyName string | 23 | SkyName string `json:"sky_name"` |
| 24 | HostName string | 24 | HostName string `json:"host_name"` |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | func ParseSvcServerInfo(reader *bitreader.Reader) SvcServerInfo { | 27 | func ParseSvcServerInfo(reader *bitreader.Reader, demo *types.Demo) SvcServerInfo { |
| 28 | svcServerInfo := SvcServerInfo{ | 28 | svcServerInfo := SvcServerInfo{ |
| 29 | Protocol: reader.TryReadUInt16(), | 29 | Protocol: reader.TryReadUInt16(), |
| 30 | ServerCount: reader.TryReadUInt32(), | 30 | ServerCount: reader.TryReadUInt32(), |
| @@ -43,21 +43,21 @@ func ParseSvcServerInfo(reader *bitreader.Reader) SvcServerInfo { | |||
| 43 | SkyName: reader.TryReadString(), | 43 | SkyName: reader.TryReadString(), |
| 44 | HostName: reader.TryReadString(), | 44 | HostName: reader.TryReadString(), |
| 45 | } | 45 | } |
| 46 | writer.TempAppendLine("\t\tNetwork Protocol: %d", svcServerInfo.Protocol) | 46 | demo.Writer.TempAppendLine("\t\tNetwork Protocol: %d", svcServerInfo.Protocol) |
| 47 | writer.TempAppendLine("\t\tServer Count: %d", svcServerInfo.ServerCount) | 47 | demo.Writer.TempAppendLine("\t\tServer Count: %d", svcServerInfo.ServerCount) |
| 48 | writer.TempAppendLine("\t\tIs Hltv: %t", svcServerInfo.IsHltv) | 48 | demo.Writer.TempAppendLine("\t\tIs Hltv: %t", svcServerInfo.IsHltv) |
| 49 | writer.TempAppendLine("\t\tIs Dedicated: %t", svcServerInfo.IsDedicated) | 49 | demo.Writer.TempAppendLine("\t\tIs Dedicated: %t", svcServerInfo.IsDedicated) |
| 50 | writer.TempAppendLine("\t\tServer Client CRC: %d", svcServerInfo.ClientCrc) | 50 | demo.Writer.TempAppendLine("\t\tServer Client CRC: %d", svcServerInfo.ClientCrc) |
| 51 | writer.TempAppendLine("\t\tString Table CRC: %d", svcServerInfo.StringTableCrc) | 51 | demo.Writer.TempAppendLine("\t\tString Table CRC: %d", svcServerInfo.StringTableCrc) |
| 52 | writer.TempAppendLine("\t\tMax Server Classes: %d", svcServerInfo.MaxServerClasses) | 52 | demo.Writer.TempAppendLine("\t\tMax Server Classes: %d", svcServerInfo.MaxServerClasses) |
| 53 | writer.TempAppendLine("\t\tServer Map CRC: %d", svcServerInfo.MapCrc) | 53 | demo.Writer.TempAppendLine("\t\tServer Map CRC: %d", svcServerInfo.MapCrc) |
| 54 | writer.TempAppendLine("\t\tCurrent Player Count: %d", svcServerInfo.PlayerCount) | 54 | demo.Writer.TempAppendLine("\t\tCurrent Player Count: %d", svcServerInfo.PlayerCount) |
| 55 | writer.TempAppendLine("\t\tMax Player Count: %d", svcServerInfo.MaxClients) | 55 | demo.Writer.TempAppendLine("\t\tMax Player Count: %d", svcServerInfo.MaxClients) |
| 56 | writer.TempAppendLine("\t\tInterval Per Tick: %f", svcServerInfo.TickInterval) | 56 | demo.Writer.TempAppendLine("\t\tInterval Per Tick: %f", svcServerInfo.TickInterval) |
| 57 | writer.TempAppendLine("\t\tPlatform: %s", svcServerInfo.Platform) | 57 | demo.Writer.TempAppendLine("\t\tPlatform: %s", svcServerInfo.Platform) |
| 58 | writer.TempAppendLine("\t\tGame Directory: %s", svcServerInfo.GameDir) | 58 | demo.Writer.TempAppendLine("\t\tGame Directory: %s", svcServerInfo.GameDir) |
| 59 | writer.TempAppendLine("\t\tMap Name: %s", svcServerInfo.MapName) | 59 | demo.Writer.TempAppendLine("\t\tMap Name: %s", svcServerInfo.MapName) |
| 60 | writer.TempAppendLine("\t\tSky Name: %s", svcServerInfo.SkyName) | 60 | demo.Writer.TempAppendLine("\t\tSky Name: %s", svcServerInfo.SkyName) |
| 61 | writer.TempAppendLine("\t\tHost Name: %s", svcServerInfo.HostName) | 61 | demo.Writer.TempAppendLine("\t\tHost Name: %s", svcServerInfo.HostName) |
| 62 | return svcServerInfo | 62 | return svcServerInfo |
| 63 | } | 63 | } |
diff --git a/pkg/messages/types/svcSetPause.go b/pkg/messages/types/svcSetPause.go index b69779f..ad9f2d5 100644 --- a/pkg/messages/types/svcSetPause.go +++ b/pkg/messages/types/svcSetPause.go | |||
| @@ -2,17 +2,17 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcSetPause struct { | 8 | type SvcSetPause struct { |
| 9 | Paused bool | 9 | Paused bool `json:"paused"` |
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | func ParseSvcSetPause(reader *bitreader.Reader) SvcSetPause { | 12 | func ParseSvcSetPause(reader *bitreader.Reader, demo *types.Demo) SvcSetPause { |
| 13 | svcSetPause := SvcSetPause{ | 13 | svcSetPause := SvcSetPause{ |
| 14 | Paused: reader.TryReadBool(), | 14 | Paused: reader.TryReadBool(), |
| 15 | } | 15 | } |
| 16 | writer.TempAppendLine("\t\tPaused: %t", svcSetPause.Paused) | 16 | demo.Writer.TempAppendLine("\t\tPaused: %t", svcSetPause.Paused) |
| 17 | return svcSetPause | 17 | return svcSetPause |
| 18 | } | 18 | } |
diff --git a/pkg/messages/types/svcSetView.go b/pkg/messages/types/svcSetView.go index a392d36..55b2065 100644 --- a/pkg/messages/types/svcSetView.go +++ b/pkg/messages/types/svcSetView.go | |||
| @@ -2,17 +2,17 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcSetView struct { | 8 | type SvcSetView struct { |
| 9 | EntityIndex uint16 | 9 | EntityIndex uint16 `json:"entity_index"` |
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | func ParseSvcSetView(reader *bitreader.Reader) SvcSetView { | 12 | func ParseSvcSetView(reader *bitreader.Reader, demo *types.Demo) SvcSetView { |
| 13 | svcSetView := SvcSetView{ | 13 | svcSetView := SvcSetView{ |
| 14 | EntityIndex: uint16(reader.TryReadBits(11)), | 14 | EntityIndex: uint16(reader.TryReadBits(11)), |
| 15 | } | 15 | } |
| 16 | writer.TempAppendLine("\t\tEntity Index: %d", svcSetView.EntityIndex) | 16 | demo.Writer.TempAppendLine("\t\tEntity Index: %d", svcSetView.EntityIndex) |
| 17 | return svcSetView | 17 | return svcSetView |
| 18 | } | 18 | } |
diff --git a/pkg/messages/types/svcSounds.go b/pkg/messages/types/svcSounds.go index 5391af1..cc155e5 100644 --- a/pkg/messages/types/svcSounds.go +++ b/pkg/messages/types/svcSounds.go | |||
| @@ -2,17 +2,17 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcSounds struct { | 8 | type SvcSounds struct { |
| 9 | ReliableSound bool | 9 | ReliableSound bool `json:"reliable_sound"` |
| 10 | SoundCount uint8 | 10 | SoundCount uint8 `json:"sound_count"` |
| 11 | Length uint16 | 11 | Length uint16 `json:"length"` |
| 12 | Data []byte | 12 | Data []byte `json:"data"` |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | func ParseSvcSounds(reader *bitreader.Reader) SvcSounds { | 15 | func ParseSvcSounds(reader *bitreader.Reader, demo *types.Demo) SvcSounds { |
| 16 | svcSounds := SvcSounds{ | 16 | svcSounds := SvcSounds{ |
| 17 | ReliableSound: reader.TryReadBool(), | 17 | ReliableSound: reader.TryReadBool(), |
| 18 | } | 18 | } |
| @@ -24,8 +24,8 @@ func ParseSvcSounds(reader *bitreader.Reader) SvcSounds { | |||
| 24 | svcSounds.Length = reader.TryReadUInt16() | 24 | svcSounds.Length = reader.TryReadUInt16() |
| 25 | } | 25 | } |
| 26 | svcSounds.Data = reader.TryReadBitsToSlice(uint64(svcSounds.Length)) | 26 | svcSounds.Data = reader.TryReadBitsToSlice(uint64(svcSounds.Length)) |
| 27 | writer.TempAppendLine("\t\tReliable Sound: %t", svcSounds.ReliableSound) | 27 | demo.Writer.TempAppendLine("\t\tReliable Sound: %t", svcSounds.ReliableSound) |
| 28 | writer.TempAppendLine("\t\tSound Count: %d", svcSounds.SoundCount) | 28 | demo.Writer.TempAppendLine("\t\tSound Count: %d", svcSounds.SoundCount) |
| 29 | writer.TempAppendLine("\t\tData: %v", svcSounds.Data) | 29 | demo.Writer.TempAppendLine("\t\tData: %v", svcSounds.Data) |
| 30 | return svcSounds | 30 | return svcSounds |
| 31 | } | 31 | } |
diff --git a/pkg/messages/types/svcSplitScreen.go b/pkg/messages/types/svcSplitScreen.go index e7f77c0..a4d4e48 100644 --- a/pkg/messages/types/svcSplitScreen.go +++ b/pkg/messages/types/svcSplitScreen.go | |||
| @@ -2,22 +2,22 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcSplitScreen struct { | 8 | type SvcSplitScreen struct { |
| 9 | RemoveUser bool | 9 | RemoveUser bool `json:"remove_user"` |
| 10 | Length uint16 | 10 | Length uint16 `json:"length"` |
| 11 | Data []byte | 11 | Data []byte `json:"data"` |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | func ParseSvcSplitScreen(reader *bitreader.Reader) SvcSplitScreen { | 14 | func ParseSvcSplitScreen(reader *bitreader.Reader, demo *types.Demo) SvcSplitScreen { |
| 15 | svcSplitScreen := SvcSplitScreen{ | 15 | svcSplitScreen := SvcSplitScreen{ |
| 16 | RemoveUser: reader.TryReadBool(), | 16 | RemoveUser: reader.TryReadBool(), |
| 17 | Length: uint16(reader.TryReadBits(11)), | 17 | Length: uint16(reader.TryReadBits(11)), |
| 18 | } | 18 | } |
| 19 | svcSplitScreen.Data = reader.TryReadBitsToSlice(uint64(svcSplitScreen.Length)) | 19 | svcSplitScreen.Data = reader.TryReadBitsToSlice(uint64(svcSplitScreen.Length)) |
| 20 | writer.TempAppendLine("\t\tRemove User: %t", svcSplitScreen.RemoveUser) | 20 | demo.Writer.TempAppendLine("\t\tRemove User: %t", svcSplitScreen.RemoveUser) |
| 21 | writer.TempAppendLine("\t\tData: %v", svcSplitScreen.Data) | 21 | demo.Writer.TempAppendLine("\t\tData: %v", svcSplitScreen.Data) |
| 22 | return svcSplitScreen | 22 | return svcSplitScreen |
| 23 | } | 23 | } |
diff --git a/pkg/messages/types/svcTempEntities.go b/pkg/messages/types/svcTempEntities.go index 08c0af4..452e712 100644 --- a/pkg/messages/types/svcTempEntities.go +++ b/pkg/messages/types/svcTempEntities.go | |||
| @@ -2,22 +2,22 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcTempEntities struct { | 8 | type SvcTempEntities struct { |
| 9 | NumEntries uint8 | 9 | NumEntries uint8 `json:"num_entries"` |
| 10 | Length uint32 | 10 | Length uint32 `json:"length"` |
| 11 | Data []byte | 11 | Data []byte `json:"data"` |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | func ParseSvcTempEntities(reader *bitreader.Reader) SvcTempEntities { | 14 | func ParseSvcTempEntities(reader *bitreader.Reader, demo *types.Demo) SvcTempEntities { |
| 15 | svcTempEntities := SvcTempEntities{ | 15 | svcTempEntities := SvcTempEntities{ |
| 16 | NumEntries: reader.TryReadUInt8(), | 16 | NumEntries: reader.TryReadUInt8(), |
| 17 | Length: uint32(reader.TryReadBits(17)), | 17 | Length: uint32(reader.TryReadBits(17)), |
| 18 | } | 18 | } |
| 19 | svcTempEntities.Data = reader.TryReadBitsToSlice(uint64(svcTempEntities.Length)) | 19 | svcTempEntities.Data = reader.TryReadBitsToSlice(uint64(svcTempEntities.Length)) |
| 20 | writer.TempAppendLine("\t\tNumber Of Entries: %d", svcTempEntities.NumEntries) | 20 | demo.Writer.TempAppendLine("\t\tNumber Of Entries: %d", svcTempEntities.NumEntries) |
| 21 | writer.TempAppendLine("\t\tData: %v", svcTempEntities.Data) | 21 | demo.Writer.TempAppendLine("\t\tData: %v", svcTempEntities.Data) |
| 22 | return svcTempEntities | 22 | return svcTempEntities |
| 23 | } | 23 | } |
diff --git a/pkg/messages/types/svcUpdateStringTable.go b/pkg/messages/types/svcUpdateStringTable.go index 11e63d4..7e15cd2 100644 --- a/pkg/messages/types/svcUpdateStringTable.go +++ b/pkg/messages/types/svcUpdateStringTable.go | |||
| @@ -2,17 +2,17 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcUpdateStringTable struct { | 8 | type SvcUpdateStringTable struct { |
| 9 | TableId uint8 | 9 | TableId uint8 `json:"table_id"` |
| 10 | NumChangedEntries uint16 | 10 | NumChangedEntries uint16 `json:"num_changed_entries"` |
| 11 | Length int32 | 11 | Length int32 `json:"length"` |
| 12 | Data []byte | 12 | Data []byte `json:"data"` |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | func ParseSvcUpdateStringTable(reader *bitreader.Reader) SvcUpdateStringTable { | 15 | func ParseSvcUpdateStringTable(reader *bitreader.Reader, demo *types.Demo) SvcUpdateStringTable { |
| 16 | svcUpdateStringTable := SvcUpdateStringTable{ | 16 | svcUpdateStringTable := SvcUpdateStringTable{ |
| 17 | TableId: uint8(reader.TryReadBits(5)), | 17 | TableId: uint8(reader.TryReadBits(5)), |
| 18 | } | 18 | } |
| @@ -21,7 +21,7 @@ func ParseSvcUpdateStringTable(reader *bitreader.Reader) SvcUpdateStringTable { | |||
| 21 | } | 21 | } |
| 22 | svcUpdateStringTable.Length = int32(reader.TryReadBits(20)) | 22 | svcUpdateStringTable.Length = int32(reader.TryReadBits(20)) |
| 23 | svcUpdateStringTable.Data = reader.TryReadBitsToSlice(uint64(svcUpdateStringTable.Length)) | 23 | svcUpdateStringTable.Data = reader.TryReadBitsToSlice(uint64(svcUpdateStringTable.Length)) |
| 24 | writer.TempAppendLine("\t\tTable ID: %d", svcUpdateStringTable.TableId) | 24 | demo.Writer.TempAppendLine("\t\tTable ID: %d", svcUpdateStringTable.TableId) |
| 25 | writer.TempAppendLine("\t\tNumber Of Changed Entries: %d", svcUpdateStringTable.NumChangedEntries) | 25 | demo.Writer.TempAppendLine("\t\tNumber Of Changed Entries: %d", svcUpdateStringTable.NumChangedEntries) |
| 26 | return svcUpdateStringTable | 26 | return svcUpdateStringTable |
| 27 | } | 27 | } |
diff --git a/pkg/messages/types/svcUserMessage.go b/pkg/messages/types/svcUserMessage.go index 138f8d3..1bb0e0e 100644 --- a/pkg/messages/types/svcUserMessage.go +++ b/pkg/messages/types/svcUserMessage.go | |||
| @@ -5,134 +5,134 @@ import ( | |||
| 5 | "math" | 5 | "math" |
| 6 | 6 | ||
| 7 | "github.com/pektezol/bitreader" | 7 | "github.com/pektezol/bitreader" |
| 8 | "github.com/pektezol/sdp.go/pkg/writer" | 8 | "github.com/pektezol/sdp.go/pkg/types" |
| 9 | ) | 9 | ) |
| 10 | 10 | ||
| 11 | type SvcUserMessage struct { | 11 | type SvcUserMessage struct { |
| 12 | Type int8 | 12 | Type int8 `json:"type"` |
| 13 | Length int16 | 13 | Length int16 `json:"length"` |
| 14 | Data any | 14 | Data any `json:"data"` |
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | func ParseSvcUserMessage(reader *bitreader.Reader) SvcUserMessage { | 17 | func ParseSvcUserMessage(reader *bitreader.Reader, demo *types.Demo) SvcUserMessage { |
| 18 | svcUserMessage := SvcUserMessage{ | 18 | svcUserMessage := SvcUserMessage{ |
| 19 | Type: int8(reader.TryReadBits(8)), | 19 | Type: int8(reader.TryReadBits(8)), |
| 20 | Length: int16(reader.TryReadBits(12)), | 20 | Length: int16(reader.TryReadBits(12)), |
| 21 | } | 21 | } |
| 22 | svcUserMessage.Data = reader.TryReadBitsToSlice(uint64(svcUserMessage.Length)) | 22 | svcUserMessage.Data = reader.TryReadBitsToSlice(uint64(svcUserMessage.Length)) |
| 23 | userMessageReader := bitreader.NewReaderFromBytes(svcUserMessage.Data.([]byte), true) | 23 | userMessageReader := bitreader.NewReaderFromBytes(svcUserMessage.Data.([]byte), true) |
| 24 | writer.TempAppendLine("\t\t%s (%d):", UserMessageType(svcUserMessage.Type).String(), svcUserMessage.Type) | 24 | demo.Writer.TempAppendLine("\t\t%s (%d):", UserMessageType(svcUserMessage.Type).String(), svcUserMessage.Type) |
| 25 | switch UserMessageType(svcUserMessage.Type) { | 25 | switch UserMessageType(svcUserMessage.Type) { |
| 26 | case EUserMessageTypeGeiger: | 26 | case EUserMessageTypeGeiger: |
| 27 | svcUserMessage.parseGeiger(userMessageReader) | 27 | svcUserMessage.parseGeiger(userMessageReader, demo) |
| 28 | case EUserMessageTypeTrain: | 28 | case EUserMessageTypeTrain: |
| 29 | svcUserMessage.parseTrain(userMessageReader) | 29 | svcUserMessage.parseTrain(userMessageReader, demo) |
| 30 | case EUserMessageTypeHudText: | 30 | case EUserMessageTypeHudText: |
| 31 | svcUserMessage.parseHUDText(userMessageReader) | 31 | svcUserMessage.parseHUDText(userMessageReader, demo) |
| 32 | case EUserMessageTypeSayText: | 32 | case EUserMessageTypeSayText: |
| 33 | svcUserMessage.parseSayText(userMessageReader) | 33 | svcUserMessage.parseSayText(userMessageReader, demo) |
| 34 | case EUserMessageTypeSayText2: | 34 | case EUserMessageTypeSayText2: |
| 35 | svcUserMessage.parseSayText2(userMessageReader) | 35 | svcUserMessage.parseSayText2(userMessageReader, demo) |
| 36 | case EUserMessageTypeTextMsg: | 36 | case EUserMessageTypeTextMsg: |
| 37 | svcUserMessage.parseTextMsg(userMessageReader) | 37 | svcUserMessage.parseTextMsg(userMessageReader, demo) |
| 38 | case EUserMessageTypeHUDMsg: | 38 | case EUserMessageTypeHUDMsg: |
| 39 | svcUserMessage.parseHUDMsg(userMessageReader) | 39 | svcUserMessage.parseHUDMsg(userMessageReader, demo) |
| 40 | case EUserMessageTypeResetHUD: | 40 | case EUserMessageTypeResetHUD: |
| 41 | svcUserMessage.parseResetHUD(userMessageReader) | 41 | svcUserMessage.parseResetHUD(userMessageReader, demo) |
| 42 | case EUserMessageTypeShake: | 42 | case EUserMessageTypeShake: |
| 43 | svcUserMessage.parseShake(userMessageReader) | 43 | svcUserMessage.parseShake(userMessageReader, demo) |
| 44 | case EUserMessageTypeFade: | 44 | case EUserMessageTypeFade: |
| 45 | svcUserMessage.parseFade(userMessageReader) | 45 | svcUserMessage.parseFade(userMessageReader, demo) |
| 46 | case EUserMessageTypeVGUIMenu: | 46 | case EUserMessageTypeVGUIMenu: |
| 47 | svcUserMessage.parseVguiMenu(userMessageReader) | 47 | svcUserMessage.parseVguiMenu(userMessageReader, demo) |
| 48 | case EUserMessageTypeRumble: | 48 | case EUserMessageTypeRumble: |
| 49 | svcUserMessage.parseRumble(userMessageReader) | 49 | svcUserMessage.parseRumble(userMessageReader, demo) |
| 50 | case EUserMessageTypeBattery: | 50 | case EUserMessageTypeBattery: |
| 51 | svcUserMessage.parseBattery(userMessageReader) | 51 | svcUserMessage.parseBattery(userMessageReader, demo) |
| 52 | case EUserMessageTypeDamage: | 52 | case EUserMessageTypeDamage: |
| 53 | svcUserMessage.parseDamage(userMessageReader) | 53 | svcUserMessage.parseDamage(userMessageReader, demo) |
| 54 | case EUserMessageTypeVoiceMask: | 54 | case EUserMessageTypeVoiceMask: |
| 55 | svcUserMessage.parseVoiceMask(userMessageReader) | 55 | svcUserMessage.parseVoiceMask(userMessageReader, demo) |
| 56 | case EUserMessageTypeCloseCaption: | 56 | case EUserMessageTypeCloseCaption: |
| 57 | svcUserMessage.parseCloseCaption(userMessageReader) | 57 | svcUserMessage.parseCloseCaption(userMessageReader, demo) |
| 58 | case EUserMessageTypeKeyHintText: | 58 | case EUserMessageTypeKeyHintText: |
| 59 | svcUserMessage.parseKeyHintText(userMessageReader) | 59 | svcUserMessage.parseKeyHintText(userMessageReader, demo) |
| 60 | case EUserMessageTypeLogoTimeMsg: | 60 | case EUserMessageTypeLogoTimeMsg: |
| 61 | svcUserMessage.parseLogoTimeMsg(userMessageReader) | 61 | svcUserMessage.parseLogoTimeMsg(userMessageReader, demo) |
| 62 | case EUserMessageTypeAchievementEvent: | 62 | case EUserMessageTypeAchievementEvent: |
| 63 | svcUserMessage.parseAchivementEvent(userMessageReader) | 63 | svcUserMessage.parseAchivementEvent(userMessageReader, demo) |
| 64 | case EUserMessageTypeCurrentTimescale: | 64 | case EUserMessageTypeCurrentTimescale: |
| 65 | svcUserMessage.parseCurrentTimescale(userMessageReader) | 65 | svcUserMessage.parseCurrentTimescale(userMessageReader, demo) |
| 66 | case EUserMessageTypeDesiredTimescale: | 66 | case EUserMessageTypeDesiredTimescale: |
| 67 | svcUserMessage.parseDesiredTimescale(userMessageReader) | 67 | svcUserMessage.parseDesiredTimescale(userMessageReader, demo) |
| 68 | case EUserMessageTypeMPMapCompleted: | 68 | case EUserMessageTypeMPMapCompleted: |
| 69 | svcUserMessage.parseMpMapCompleted(userMessageReader) | 69 | svcUserMessage.parseMpMapCompleted(userMessageReader, demo) |
| 70 | case EUserMessageTypeMPMapIncomplete: | 70 | case EUserMessageTypeMPMapIncomplete: |
| 71 | svcUserMessage.parseMpMapIncomplete(userMessageReader) | 71 | svcUserMessage.parseMpMapIncomplete(userMessageReader, demo) |
| 72 | case EUserMessageTypeMPTauntEarned: | 72 | case EUserMessageTypeMPTauntEarned: |
| 73 | svcUserMessage.parseMpTauntEarned(userMessageReader) | 73 | svcUserMessage.parseMpTauntEarned(userMessageReader, demo) |
| 74 | case EUserMessageTypeMPTauntLocked: | 74 | case EUserMessageTypeMPTauntLocked: |
| 75 | svcUserMessage.parseMpTauntLocked(userMessageReader) | 75 | svcUserMessage.parseMpTauntLocked(userMessageReader, demo) |
| 76 | case EUserMessageTypePortalFX_Surface: | 76 | case EUserMessageTypePortalFX_Surface: |
| 77 | svcUserMessage.parsePortalFxSurface(userMessageReader) | 77 | svcUserMessage.parsePortalFxSurface(userMessageReader, demo) |
| 78 | case EUserMessageTypePaintWorld: | 78 | case EUserMessageTypePaintWorld: |
| 79 | svcUserMessage.parsePaintWorld(userMessageReader) | 79 | svcUserMessage.parsePaintWorld(userMessageReader, demo) |
| 80 | case EUserMessageTypeTransitionFade: | 80 | case EUserMessageTypeTransitionFade: |
| 81 | svcUserMessage.parseTransitionFade(userMessageReader) | 81 | svcUserMessage.parseTransitionFade(userMessageReader, demo) |
| 82 | case EUserMessageTypeScoreboardTempUpdate: | 82 | case EUserMessageTypeScoreboardTempUpdate: |
| 83 | svcUserMessage.parseScoreboardTempUpdate(userMessageReader) | 83 | svcUserMessage.parseScoreboardTempUpdate(userMessageReader, demo) |
| 84 | default: | 84 | default: |
| 85 | writer.TempAppendLine("\t\t\tData: %v", svcUserMessage.Data) | 85 | demo.Writer.TempAppendLine("\t\t\tData: %v", svcUserMessage.Data) |
| 86 | } | 86 | } |
| 87 | return svcUserMessage | 87 | return svcUserMessage |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | func (svcUserMessage *SvcUserMessage) parseGeiger(reader *bitreader.Reader) { | 90 | func (svcUserMessage *SvcUserMessage) parseGeiger(reader *bitreader.Reader, demo *types.Demo) { |
| 91 | geiger := struct{ Range uint8 }{ | 91 | geiger := struct{ Range uint8 }{ |
| 92 | Range: reader.TryReadUInt8(), | 92 | Range: reader.TryReadUInt8(), |
| 93 | } | 93 | } |
| 94 | svcUserMessage.Data = geiger | 94 | svcUserMessage.Data = geiger |
| 95 | writer.TempAppendLine("\t\t\tGeiger Range: %d", geiger.Range) | 95 | demo.Writer.TempAppendLine("\t\t\tGeiger Range: %d", geiger.Range) |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | func (svcUserMessage *SvcUserMessage) parseTrain(reader *bitreader.Reader) { | 98 | func (svcUserMessage *SvcUserMessage) parseTrain(reader *bitreader.Reader, demo *types.Demo) { |
| 99 | train := struct{ Pos uint8 }{ | 99 | train := struct{ Pos uint8 }{ |
| 100 | Pos: reader.TryReadUInt8(), | 100 | Pos: reader.TryReadUInt8(), |
| 101 | } | 101 | } |
| 102 | svcUserMessage.Data = train | 102 | svcUserMessage.Data = train |
| 103 | writer.TempAppendLine("\t\t\tPos: %d", train.Pos) | 103 | demo.Writer.TempAppendLine("\t\t\tPos: %d", train.Pos) |
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | func (svcUserMessage *SvcUserMessage) parseHUDText(reader *bitreader.Reader) { | 106 | func (svcUserMessage *SvcUserMessage) parseHUDText(reader *bitreader.Reader, demo *types.Demo) { |
| 107 | hudText := struct{ Text string }{ | 107 | hudText := struct{ Text string }{ |
| 108 | Text: reader.TryReadString(), | 108 | Text: reader.TryReadString(), |
| 109 | } | 109 | } |
| 110 | svcUserMessage.Data = hudText | 110 | svcUserMessage.Data = hudText |
| 111 | writer.TempAppendLine("\t\t\tText: %s", hudText.Text) | 111 | demo.Writer.TempAppendLine("\t\t\tText: %s", hudText.Text) |
| 112 | } | 112 | } |
| 113 | 113 | ||
| 114 | func (svcUserMessage *SvcUserMessage) parseSayText(reader *bitreader.Reader) { | 114 | func (svcUserMessage *SvcUserMessage) parseSayText(reader *bitreader.Reader, demo *types.Demo) { |
| 115 | sayText := struct { | 115 | sayText := struct { |
| 116 | Client uint8 | 116 | Client uint8 `json:"client"` |
| 117 | Message string | 117 | Message string `json:"message"` |
| 118 | WantsToChat bool | 118 | WantsToChat bool `json:"wants_to_chat"` |
| 119 | }{ | 119 | }{ |
| 120 | Client: reader.TryReadUInt8(), | 120 | Client: reader.TryReadUInt8(), |
| 121 | Message: reader.TryReadString(), | 121 | Message: reader.TryReadString(), |
| 122 | WantsToChat: reader.TryReadUInt8() != 0, | 122 | WantsToChat: reader.TryReadUInt8() != 0, |
| 123 | } | 123 | } |
| 124 | svcUserMessage.Data = sayText | 124 | svcUserMessage.Data = sayText |
| 125 | writer.TempAppendLine("\t\t\tClient: %d", sayText.Client) | 125 | demo.Writer.TempAppendLine("\t\t\tClient: %d", sayText.Client) |
| 126 | writer.TempAppendLine("\t\t\tMessage: %s", sayText.Message) | 126 | demo.Writer.TempAppendLine("\t\t\tMessage: %s", sayText.Message) |
| 127 | writer.TempAppendLine("\t\t\tWants To Chat: %t", sayText.WantsToChat) | 127 | demo.Writer.TempAppendLine("\t\t\tWants To Chat: %t", sayText.WantsToChat) |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | func (svcUserMessage *SvcUserMessage) parseSayText2(reader *bitreader.Reader) { | 130 | func (svcUserMessage *SvcUserMessage) parseSayText2(reader *bitreader.Reader, demo *types.Demo) { |
| 131 | sayText2 := struct { | 131 | sayText2 := struct { |
| 132 | Client uint8 | 132 | Client uint8 `json:"client"` |
| 133 | WantsToChat bool | 133 | WantsToChat bool `json:"wants_to_chat"` |
| 134 | MessageName string | 134 | MessageName string `json:"message_name"` |
| 135 | Messages []string | 135 | Messages []string `json:"messages"` |
| 136 | }{ | 136 | }{ |
| 137 | Client: reader.TryReadUInt8(), | 137 | Client: reader.TryReadUInt8(), |
| 138 | WantsToChat: reader.TryReadUInt8() != 0, | 138 | WantsToChat: reader.TryReadUInt8() != 0, |
| @@ -140,15 +140,15 @@ func (svcUserMessage *SvcUserMessage) parseSayText2(reader *bitreader.Reader) { | |||
| 140 | Messages: []string{reader.TryReadString(), reader.TryReadString(), reader.TryReadString()}, | 140 | Messages: []string{reader.TryReadString(), reader.TryReadString(), reader.TryReadString()}, |
| 141 | } | 141 | } |
| 142 | svcUserMessage.Data = sayText2 | 142 | svcUserMessage.Data = sayText2 |
| 143 | writer.TempAppendLine("\t\t\tClient: %d", sayText2.Client) | 143 | demo.Writer.TempAppendLine("\t\t\tClient: %d", sayText2.Client) |
| 144 | writer.TempAppendLine("\t\t\tWants To Chat: %t", sayText2.WantsToChat) | 144 | demo.Writer.TempAppendLine("\t\t\tWants To Chat: %t", sayText2.WantsToChat) |
| 145 | writer.TempAppendLine("\t\t\tName: %s", sayText2.MessageName) | 145 | demo.Writer.TempAppendLine("\t\t\tName: %s", sayText2.MessageName) |
| 146 | for index, message := range sayText2.Messages { | 146 | for index, message := range sayText2.Messages { |
| 147 | writer.TempAppendLine("\t\t\tMessage %d: %s", index, message) | 147 | demo.Writer.TempAppendLine("\t\t\tMessage %d: %s", index, message) |
| 148 | } | 148 | } |
| 149 | } | 149 | } |
| 150 | 150 | ||
| 151 | func (svcUserMessage *SvcUserMessage) parseTextMsg(reader *bitreader.Reader) { | 151 | func (svcUserMessage *SvcUserMessage) parseTextMsg(reader *bitreader.Reader, demo *types.Demo) { |
| 152 | const MessageCount int = 5 | 152 | const MessageCount int = 5 |
| 153 | textMsg := struct { | 153 | textMsg := struct { |
| 154 | Destination uint8 | 154 | Destination uint8 |
| @@ -161,47 +161,57 @@ func (svcUserMessage *SvcUserMessage) parseTextMsg(reader *bitreader.Reader) { | |||
| 161 | textMsg.Messages[i] = reader.TryReadString() | 161 | textMsg.Messages[i] = reader.TryReadString() |
| 162 | } | 162 | } |
| 163 | svcUserMessage.Data = textMsg | 163 | svcUserMessage.Data = textMsg |
| 164 | writer.TempAppendLine("\t\t\tDestination: %d", textMsg.Destination) | 164 | demo.Writer.TempAppendLine("\t\t\tDestination: %d", textMsg.Destination) |
| 165 | for i := 0; i < MessageCount; i++ { | 165 | for i := 0; i < MessageCount; i++ { |
| 166 | writer.TempAppendLine("\t\t\tMessage %d: %s", i+1, textMsg.Messages) | 166 | demo.Writer.TempAppendLine("\t\t\tMessage %d: %s", i+1, textMsg.Messages) |
| 167 | } | 167 | } |
| 168 | } | 168 | } |
| 169 | 169 | ||
| 170 | func (svcUserMessage *SvcUserMessage) parseHUDMsg(reader *bitreader.Reader) { | 170 | func (svcUserMessage *SvcUserMessage) parseHUDMsg(reader *bitreader.Reader, demo *types.Demo) { |
| 171 | const MaxNetMessage uint8 = 6 | 171 | const MaxNetMessage uint8 = 6 |
| 172 | hudMsg := struct { | 172 | hudMsg := struct { |
| 173 | Channel uint8 | 173 | Channel uint8 `json:"channel"` |
| 174 | Info struct { | 174 | Info struct { |
| 175 | X, Y float32 // 0-1 & resolution independent, -1 means center in each dimension | 175 | X float32 `json:"x"` // 0-1 & resolution independent, -1 means center in each dimension |
| 176 | R1, G1, B1, A1 uint8 | 176 | Y float32 `json:"y"` |
| 177 | R2, G2, B2, A2 uint8 | 177 | R1 uint8 `json:"r_1"` |
| 178 | Effect uint8 | 178 | G1 uint8 `json:"g_1"` |
| 179 | FadeIn, FadeOut, HoldTime, FxTime float32 // the fade times seem to be per character | 179 | B1 uint8 `json:"b_1"` |
| 180 | Message string | 180 | A1 uint8 `json:"a_1"` |
| 181 | } | 181 | R2 uint8 `json:"r_2"` |
| 182 | G2 uint8 `json:"g_2"` | ||
| 183 | B2 uint8 `json:"b_2"` | ||
| 184 | A2 uint8 `json:"a_2"` | ||
| 185 | Effect uint8 `json:"effect"` | ||
| 186 | FadeIn float32 `json:"fade_in"` // the fade times seem to be per character | ||
| 187 | FadeOut float32 `json:"fade_out"` | ||
| 188 | HoldTime float32 `json:"hold_time"` | ||
| 189 | FxTime float32 `json:"fx_time"` | ||
| 190 | Message string `json:"message"` | ||
| 191 | } `json:"info"` | ||
| 182 | }{ | 192 | }{ |
| 183 | Channel: reader.TryReadUInt8() % MaxNetMessage, | 193 | Channel: reader.TryReadUInt8() % MaxNetMessage, |
| 184 | } | 194 | } |
| 185 | svcUserMessage.Data = hudMsg | 195 | svcUserMessage.Data = hudMsg |
| 186 | writer.TempAppendLine("\t\t\tChannel: %d", hudMsg.Channel) | 196 | demo.Writer.TempAppendLine("\t\t\tChannel: %d", hudMsg.Channel) |
| 187 | if reader.TryReadRemainingBits() >= 148 { | 197 | if reader.TryReadRemainingBits() >= 148 { |
| 188 | hudMsg.Info = struct { | 198 | hudMsg.Info = struct { |
| 189 | X float32 | 199 | X float32 `json:"x"` |
| 190 | Y float32 | 200 | Y float32 `json:"y"` |
| 191 | R1 uint8 | 201 | R1 uint8 `json:"r_1"` |
| 192 | G1 uint8 | 202 | G1 uint8 `json:"g_1"` |
| 193 | B1 uint8 | 203 | B1 uint8 `json:"b_1"` |
| 194 | A1 uint8 | 204 | A1 uint8 `json:"a_1"` |
| 195 | R2 uint8 | 205 | R2 uint8 `json:"r_2"` |
| 196 | G2 uint8 | 206 | G2 uint8 `json:"g_2"` |
| 197 | B2 uint8 | 207 | B2 uint8 `json:"b_2"` |
| 198 | A2 uint8 | 208 | A2 uint8 `json:"a_2"` |
| 199 | Effect uint8 | 209 | Effect uint8 `json:"effect"` |
| 200 | FadeIn float32 | 210 | FadeIn float32 `json:"fade_in"` |
| 201 | FadeOut float32 | 211 | FadeOut float32 `json:"fade_out"` |
| 202 | HoldTime float32 | 212 | HoldTime float32 `json:"hold_time"` |
| 203 | FxTime float32 | 213 | FxTime float32 `json:"fx_time"` |
| 204 | Message string | 214 | Message string `json:"message"` |
| 205 | }{ | 215 | }{ |
| 206 | X: reader.TryReadFloat32(), | 216 | X: reader.TryReadFloat32(), |
| 207 | Y: reader.TryReadFloat32(), | 217 | Y: reader.TryReadFloat32(), |
| @@ -221,27 +231,27 @@ func (svcUserMessage *SvcUserMessage) parseHUDMsg(reader *bitreader.Reader) { | |||
| 221 | Message: reader.TryReadString(), | 231 | Message: reader.TryReadString(), |
| 222 | } | 232 | } |
| 223 | svcUserMessage.Data = hudMsg | 233 | svcUserMessage.Data = hudMsg |
| 224 | writer.TempAppendLine("\t\t\tX: %f, Y: %f", hudMsg.Info.X, hudMsg.Info.Y) | 234 | demo.Writer.TempAppendLine("\t\t\tX: %f, Y: %f", hudMsg.Info.X, hudMsg.Info.Y) |
| 225 | writer.TempAppendLine("\t\t\tRGBA1: %3d %3d %3d %3d", hudMsg.Info.R1, hudMsg.Info.G1, hudMsg.Info.B1, hudMsg.Info.A1) | 235 | demo.Writer.TempAppendLine("\t\t\tRGBA1: %3d %3d %3d %3d", hudMsg.Info.R1, hudMsg.Info.G1, hudMsg.Info.B1, hudMsg.Info.A1) |
| 226 | writer.TempAppendLine("\t\t\tRGBA2: %3d %3d %3d %3d", hudMsg.Info.R2, hudMsg.Info.G2, hudMsg.Info.B2, hudMsg.Info.A2) | 236 | demo.Writer.TempAppendLine("\t\t\tRGBA2: %3d %3d %3d %3d", hudMsg.Info.R2, hudMsg.Info.G2, hudMsg.Info.B2, hudMsg.Info.A2) |
| 227 | writer.TempAppendLine("\t\t\tEffect: %d", hudMsg.Info.Effect) | 237 | demo.Writer.TempAppendLine("\t\t\tEffect: %d", hudMsg.Info.Effect) |
| 228 | writer.TempAppendLine("\t\t\tFade In: %f", hudMsg.Info.FadeIn) | 238 | demo.Writer.TempAppendLine("\t\t\tFade In: %f", hudMsg.Info.FadeIn) |
| 229 | writer.TempAppendLine("\t\t\tFade Out: %f", hudMsg.Info.FadeOut) | 239 | demo.Writer.TempAppendLine("\t\t\tFade Out: %f", hudMsg.Info.FadeOut) |
| 230 | writer.TempAppendLine("\t\t\tHold Time: %f", hudMsg.Info.HoldTime) | 240 | demo.Writer.TempAppendLine("\t\t\tHold Time: %f", hudMsg.Info.HoldTime) |
| 231 | writer.TempAppendLine("\t\t\tFX Time: %f", hudMsg.Info.FxTime) | 241 | demo.Writer.TempAppendLine("\t\t\tFX Time: %f", hudMsg.Info.FxTime) |
| 232 | writer.TempAppendLine("\t\t\tMessage: %s", hudMsg.Info.Message) | 242 | demo.Writer.TempAppendLine("\t\t\tMessage: %s", hudMsg.Info.Message) |
| 233 | } | 243 | } |
| 234 | } | 244 | } |
| 235 | 245 | ||
| 236 | func (svcUserMessage *SvcUserMessage) parseResetHUD(reader *bitreader.Reader) { | 246 | func (svcUserMessage *SvcUserMessage) parseResetHUD(reader *bitreader.Reader, demo *types.Demo) { |
| 237 | resetHUD := struct{ Unknown uint8 }{ | 247 | resetHUD := struct{ Unknown uint8 }{ |
| 238 | Unknown: reader.TryReadUInt8(), | 248 | Unknown: reader.TryReadUInt8(), |
| 239 | } | 249 | } |
| 240 | svcUserMessage.Data = resetHUD | 250 | svcUserMessage.Data = resetHUD |
| 241 | writer.TempAppendLine("\t\t\tUnknown: %d", resetHUD.Unknown) | 251 | demo.Writer.TempAppendLine("\t\t\tUnknown: %d", resetHUD.Unknown) |
| 242 | } | 252 | } |
| 243 | 253 | ||
| 244 | func (svcUserMessage *SvcUserMessage) parseShake(reader *bitreader.Reader) { | 254 | func (svcUserMessage *SvcUserMessage) parseShake(reader *bitreader.Reader, demo *types.Demo) { |
| 245 | type ShakeCommand uint8 | 255 | type ShakeCommand uint8 |
| 246 | const ( | 256 | const ( |
| 247 | Start ShakeCommand = iota // Starts the screen shake for all players within the radius. | 257 | Start ShakeCommand = iota // Starts the screen shake for all players within the radius. |
| @@ -252,10 +262,10 @@ func (svcUserMessage *SvcUserMessage) parseShake(reader *bitreader.Reader) { | |||
| 252 | NoRumble // Starts a shake that does NOT rumble the controller. | 262 | NoRumble // Starts a shake that does NOT rumble the controller. |
| 253 | ) | 263 | ) |
| 254 | shake := struct { | 264 | shake := struct { |
| 255 | Command uint8 | 265 | Command uint8 `json:"command"` |
| 256 | Amplitude float32 | 266 | Amplitude float32 `json:"amplitude"` |
| 257 | Frequency float32 | 267 | Frequency float32 `json:"frequency"` |
| 258 | Duration float32 | 268 | Duration float32 `json:"duration"` |
| 259 | }{ | 269 | }{ |
| 260 | Command: reader.TryReadUInt8(), | 270 | Command: reader.TryReadUInt8(), |
| 261 | Amplitude: reader.TryReadFloat32(), | 271 | Amplitude: reader.TryReadFloat32(), |
| @@ -281,13 +291,13 @@ func (svcUserMessage *SvcUserMessage) parseShake(reader *bitreader.Reader) { | |||
| 281 | } | 291 | } |
| 282 | } | 292 | } |
| 283 | svcUserMessage.Data = shake | 293 | svcUserMessage.Data = shake |
| 284 | writer.TempAppendLine("\t\t\tCommand: %s", shakeCommandToString(ShakeCommand(shake.Command))) | 294 | demo.Writer.TempAppendLine("\t\t\tCommand: %s", shakeCommandToString(ShakeCommand(shake.Command))) |
| 285 | writer.TempAppendLine("\t\t\tAmplitude: %f", shake.Amplitude) | 295 | demo.Writer.TempAppendLine("\t\t\tAmplitude: %f", shake.Amplitude) |
| 286 | writer.TempAppendLine("\t\t\tFrequency: %f", shake.Frequency) | 296 | demo.Writer.TempAppendLine("\t\t\tFrequency: %f", shake.Frequency) |
| 287 | writer.TempAppendLine("\t\t\tDuration: %f", shake.Duration) | 297 | demo.Writer.TempAppendLine("\t\t\tDuration: %f", shake.Duration) |
| 288 | } | 298 | } |
| 289 | 299 | ||
| 290 | func (svcUserMessage *SvcUserMessage) parseFade(reader *bitreader.Reader) { | 300 | func (svcUserMessage *SvcUserMessage) parseFade(reader *bitreader.Reader, demo *types.Demo) { |
| 291 | type FadeFlag uint16 | 301 | type FadeFlag uint16 |
| 292 | const ( | 302 | const ( |
| 293 | None FadeFlag = 0 | 303 | None FadeFlag = 0 |
| @@ -298,13 +308,13 @@ func (svcUserMessage *SvcUserMessage) parseFade(reader *bitreader.Reader) { | |||
| 298 | Purge FadeFlag = 1 << 4 // Purges all other fades, replacing them with this one | 308 | Purge FadeFlag = 1 << 4 // Purges all other fades, replacing them with this one |
| 299 | ) | 309 | ) |
| 300 | fade := struct { | 310 | fade := struct { |
| 301 | Duration float32 | 311 | Duration float32 `json:"duration"` |
| 302 | HoldTime uint16 | 312 | HoldTime uint16 `json:"hold_time"` |
| 303 | Flags uint16 | 313 | Flags uint16 `json:"flags"` |
| 304 | R uint8 | 314 | R uint8 `json:"r"` |
| 305 | G uint8 | 315 | G uint8 `json:"g"` |
| 306 | B uint8 | 316 | B uint8 `json:"b"` |
| 307 | A uint8 | 317 | A uint8 `json:"a"` |
| 308 | }{ | 318 | }{ |
| 309 | Duration: float32(reader.TryReadUInt16()) / float32(1<<9), // might be useful: #define SCREENFADE_FRACBITS 9 | 319 | Duration: float32(reader.TryReadUInt16()) / float32(1<<9), // might be useful: #define SCREENFADE_FRACBITS 9 |
| 310 | HoldTime: reader.TryReadUInt16(), | 320 | HoldTime: reader.TryReadUInt16(), |
| @@ -334,17 +344,17 @@ func (svcUserMessage *SvcUserMessage) parseFade(reader *bitreader.Reader) { | |||
| 334 | return flagStrings | 344 | return flagStrings |
| 335 | } | 345 | } |
| 336 | svcUserMessage.Data = fade | 346 | svcUserMessage.Data = fade |
| 337 | writer.TempAppendLine("\t\t\tDuration: %f", fade.Duration) | 347 | demo.Writer.TempAppendLine("\t\t\tDuration: %f", fade.Duration) |
| 338 | writer.TempAppendLine("\t\t\tHold Time: %d", fade.HoldTime) | 348 | demo.Writer.TempAppendLine("\t\t\tHold Time: %d", fade.HoldTime) |
| 339 | writer.TempAppendLine("\t\t\tFlags: %v", getFlags(FadeFlag(fade.Flags))) | 349 | demo.Writer.TempAppendLine("\t\t\tFlags: %v", getFlags(FadeFlag(fade.Flags))) |
| 340 | writer.TempAppendLine("\t\t\tRGBA: %3d %3d %3d %3d", fade.R, fade.G, fade.B, fade.A) | 350 | demo.Writer.TempAppendLine("\t\t\tRGBA: %3d %3d %3d %3d", fade.R, fade.G, fade.B, fade.A) |
| 341 | } | 351 | } |
| 342 | 352 | ||
| 343 | func (svcUserMessage *SvcUserMessage) parseVguiMenu(reader *bitreader.Reader) { | 353 | func (svcUserMessage *SvcUserMessage) parseVguiMenu(reader *bitreader.Reader, demo *types.Demo) { |
| 344 | vguiMenu := struct { | 354 | vguiMenu := struct { |
| 345 | Message string | 355 | Message string `json:"message"` |
| 346 | Show bool | 356 | Show bool `json:"show"` |
| 347 | KeyValues []map[string]string | 357 | KeyValues []map[string]string `json:"key_values"` |
| 348 | }{ | 358 | }{ |
| 349 | Message: reader.TryReadString(), | 359 | Message: reader.TryReadString(), |
| 350 | Show: reader.TryReadUInt8() != 0, | 360 | Show: reader.TryReadUInt8() != 0, |
| @@ -354,19 +364,19 @@ func (svcUserMessage *SvcUserMessage) parseVguiMenu(reader *bitreader.Reader) { | |||
| 354 | vguiMenu.KeyValues = append(vguiMenu.KeyValues, map[string]string{"Key": reader.TryReadString(), "Value": reader.TryReadString()}) | 364 | vguiMenu.KeyValues = append(vguiMenu.KeyValues, map[string]string{"Key": reader.TryReadString(), "Value": reader.TryReadString()}) |
| 355 | } | 365 | } |
| 356 | svcUserMessage.Data = vguiMenu | 366 | svcUserMessage.Data = vguiMenu |
| 357 | writer.TempAppendLine("\t\t\tMessage: %s", vguiMenu.Message) | 367 | demo.Writer.TempAppendLine("\t\t\tMessage: %s", vguiMenu.Message) |
| 358 | writer.TempAppendLine("\t\t\tShow: %t", vguiMenu.Show) | 368 | demo.Writer.TempAppendLine("\t\t\tShow: %t", vguiMenu.Show) |
| 359 | if len(vguiMenu.KeyValues) > 0 { | 369 | if len(vguiMenu.KeyValues) > 0 { |
| 360 | writer.TempAppendLine("\t\t\t%d Key Value Pairs:", len(vguiMenu.KeyValues)) | 370 | demo.Writer.TempAppendLine("\t\t\t%d Key Value Pairs:", len(vguiMenu.KeyValues)) |
| 361 | for _, kv := range vguiMenu.KeyValues { | 371 | for _, kv := range vguiMenu.KeyValues { |
| 362 | writer.TempAppendLine("\t\t\t\t%s: %s", kv["Key"], kv["Value"]) | 372 | demo.Writer.TempAppendLine("\t\t\t\t%s: %s", kv["Key"], kv["Value"]) |
| 363 | } | 373 | } |
| 364 | } else { | 374 | } else { |
| 365 | writer.TempAppendLine("\t\t\tNo Key Value Pairs") | 375 | demo.Writer.TempAppendLine("\t\t\tNo Key Value Pairs") |
| 366 | } | 376 | } |
| 367 | } | 377 | } |
| 368 | 378 | ||
| 369 | func (svcUserMessage *SvcUserMessage) parseRumble(reader *bitreader.Reader) { | 379 | func (svcUserMessage *SvcUserMessage) parseRumble(reader *bitreader.Reader, demo *types.Demo) { |
| 370 | type RumbleLookup int8 | 380 | type RumbleLookup int8 |
| 371 | const ( | 381 | const ( |
| 372 | RumbleInvalid RumbleLookup = -1 | 382 | RumbleInvalid RumbleLookup = -1 |
| @@ -418,9 +428,9 @@ func (svcUserMessage *SvcUserMessage) parseRumble(reader *bitreader.Reader) { | |||
| 418 | InitialScale RumbleFlag = 1 << 4 // Data is the initial scale to start this effect ( * 100 ) | 428 | InitialScale RumbleFlag = 1 << 4 // Data is the initial scale to start this effect ( * 100 ) |
| 419 | ) | 429 | ) |
| 420 | rumble := struct { | 430 | rumble := struct { |
| 421 | Type int8 | 431 | Type int8 `json:"type"` |
| 422 | Scale float32 | 432 | Scale float32 `json:"scale"` |
| 423 | Flags uint8 | 433 | Flags uint8 `json:"flags"` |
| 424 | }{ | 434 | }{ |
| 425 | Type: reader.TryReadSInt8(), | 435 | Type: reader.TryReadSInt8(), |
| 426 | Scale: float32(reader.TryReadUInt8()) / 100, | 436 | Scale: float32(reader.TryReadUInt8()) / 100, |
| @@ -452,25 +462,25 @@ func (svcUserMessage *SvcUserMessage) parseRumble(reader *bitreader.Reader) { | |||
| 452 | return flagStrings | 462 | return flagStrings |
| 453 | } | 463 | } |
| 454 | svcUserMessage.Data = rumble | 464 | svcUserMessage.Data = rumble |
| 455 | writer.TempAppendLine("\t\t\tType: %s", getRumbleLookup(RumbleLookup(rumble.Type))) | 465 | demo.Writer.TempAppendLine("\t\t\tType: %s", getRumbleLookup(RumbleLookup(rumble.Type))) |
| 456 | writer.TempAppendLine("\t\t\tScale: %f", rumble.Scale) | 466 | demo.Writer.TempAppendLine("\t\t\tScale: %f", rumble.Scale) |
| 457 | writer.TempAppendLine("\t\t\tFlags: %v", getFlags(RumbleFlag(rumble.Flags))) | 467 | demo.Writer.TempAppendLine("\t\t\tFlags: %v", getFlags(RumbleFlag(rumble.Flags))) |
| 458 | } | 468 | } |
| 459 | 469 | ||
| 460 | func (svcUserMessage *SvcUserMessage) parseBattery(reader *bitreader.Reader) { | 470 | func (svcUserMessage *SvcUserMessage) parseBattery(reader *bitreader.Reader, demo *types.Demo) { |
| 461 | battery := struct{ BatteryVal uint16 }{ | 471 | battery := struct{ BatteryVal uint16 }{ |
| 462 | BatteryVal: reader.TryReadUInt16(), | 472 | BatteryVal: reader.TryReadUInt16(), |
| 463 | } | 473 | } |
| 464 | svcUserMessage.Data = battery | 474 | svcUserMessage.Data = battery |
| 465 | writer.TempAppendLine("\t\t\tBattery: %d", battery.BatteryVal) | 475 | demo.Writer.TempAppendLine("\t\t\tBattery: %d", battery.BatteryVal) |
| 466 | } | 476 | } |
| 467 | 477 | ||
| 468 | func (svcUserMessage *SvcUserMessage) parseDamage(reader *bitreader.Reader) { | 478 | func (svcUserMessage *SvcUserMessage) parseDamage(reader *bitreader.Reader, demo *types.Demo) { |
| 469 | damage := struct { | 479 | damage := struct { |
| 470 | Armor uint8 | 480 | Armor uint8 `json:"armor"` |
| 471 | DamageTaken uint8 | 481 | DamageTaken uint8 `json:"damage_taken"` |
| 472 | BitsDamage int32 | 482 | BitsDamage int32 `json:"bits_damage"` |
| 473 | VecFrom []float32 | 483 | VecFrom []float32 `json:"vec_from"` |
| 474 | }{ | 484 | }{ |
| 475 | Armor: reader.TryReadUInt8(), | 485 | Armor: reader.TryReadUInt8(), |
| 476 | DamageTaken: reader.TryReadUInt8(), | 486 | DamageTaken: reader.TryReadUInt8(), |
| @@ -478,24 +488,24 @@ func (svcUserMessage *SvcUserMessage) parseDamage(reader *bitreader.Reader) { | |||
| 478 | VecFrom: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, | 488 | VecFrom: []float32{reader.TryReadFloat32(), reader.TryReadFloat32(), reader.TryReadFloat32()}, |
| 479 | } | 489 | } |
| 480 | svcUserMessage.Data = damage | 490 | svcUserMessage.Data = damage |
| 481 | writer.TempAppendLine("\t\t\tArmor: %d", damage.Armor) | 491 | demo.Writer.TempAppendLine("\t\t\tArmor: %d", damage.Armor) |
| 482 | writer.TempAppendLine("\t\t\tDamage Taken: %d", damage.DamageTaken) | 492 | demo.Writer.TempAppendLine("\t\t\tDamage Taken: %d", damage.DamageTaken) |
| 483 | writer.TempAppendLine("\t\t\tBits Damage: %d", damage.BitsDamage) | 493 | demo.Writer.TempAppendLine("\t\t\tBits Damage: %d", damage.BitsDamage) |
| 484 | writer.TempAppendLine("\t\t\tVecFrom: %v", damage.VecFrom) | 494 | demo.Writer.TempAppendLine("\t\t\tVecFrom: %v", damage.VecFrom) |
| 485 | } | 495 | } |
| 486 | 496 | ||
| 487 | func (svcUserMessage *SvcUserMessage) parseVoiceMask(reader *bitreader.Reader) { | 497 | func (svcUserMessage *SvcUserMessage) parseVoiceMask(reader *bitreader.Reader, demo *types.Demo) { |
| 488 | // const VoiceMaxPlayers = 2 | 498 | // const VoiceMaxPlayers = 2 |
| 489 | voiceMask := struct { | 499 | voiceMask := struct { |
| 490 | PlayerMasks []struct { | 500 | PlayerMasks []struct { |
| 491 | GameRulesMask int32 | 501 | GameRulesMask int32 `json:"game_rules_mask"` |
| 492 | BanMask int32 | 502 | BanMask int32 `json:"ban_mask"` |
| 493 | } | 503 | } `json:"player_masks"` |
| 494 | PlayerModEnable bool | 504 | PlayerModEnable bool `json:"player_mod_enable"` |
| 495 | }{ | 505 | }{ |
| 496 | PlayerMasks: []struct { | 506 | PlayerMasks: []struct { |
| 497 | GameRulesMask int32 | 507 | GameRulesMask int32 `json:"game_rules_mask"` |
| 498 | BanMask int32 | 508 | BanMask int32 `json:"ban_mask"` |
| 499 | }{ | 509 | }{ |
| 500 | { | 510 | { |
| 501 | GameRulesMask: reader.TryReadSInt32(), | 511 | GameRulesMask: reader.TryReadSInt32(), |
| @@ -509,15 +519,15 @@ func (svcUserMessage *SvcUserMessage) parseVoiceMask(reader *bitreader.Reader) { | |||
| 509 | PlayerModEnable: reader.TryReadUInt8() != 0, | 519 | PlayerModEnable: reader.TryReadUInt8() != 0, |
| 510 | } | 520 | } |
| 511 | svcUserMessage.Data = voiceMask | 521 | svcUserMessage.Data = voiceMask |
| 512 | writer.TempAppendLine("\t\t\tPlayer Masks:") | 522 | demo.Writer.TempAppendLine("\t\t\tPlayer Masks:") |
| 513 | writer.TempAppendLine("\t\t\t\t[0] Game Rules Mask: %d", voiceMask.PlayerMasks[0].GameRulesMask) | 523 | demo.Writer.TempAppendLine("\t\t\t\t[0] Game Rules Mask: %d", voiceMask.PlayerMasks[0].GameRulesMask) |
| 514 | writer.TempAppendLine("\t\t\t\t[0] Ban Mask: %d", voiceMask.PlayerMasks[0].BanMask) | 524 | demo.Writer.TempAppendLine("\t\t\t\t[0] Ban Mask: %d", voiceMask.PlayerMasks[0].BanMask) |
| 515 | writer.TempAppendLine("\t\t\t\t[1] Game Rules Mask: %d", voiceMask.PlayerMasks[1].GameRulesMask) | 525 | demo.Writer.TempAppendLine("\t\t\t\t[1] Game Rules Mask: %d", voiceMask.PlayerMasks[1].GameRulesMask) |
| 516 | writer.TempAppendLine("\t\t\t\t[1] Ban Mask: %d", voiceMask.PlayerMasks[1].BanMask) | 526 | demo.Writer.TempAppendLine("\t\t\t\t[1] Ban Mask: %d", voiceMask.PlayerMasks[1].BanMask) |
| 517 | writer.TempAppendLine("\t\t\t\tPlayer Mod Enable: %t", voiceMask.PlayerModEnable) | 527 | demo.Writer.TempAppendLine("\t\t\t\tPlayer Mod Enable: %t", voiceMask.PlayerModEnable) |
| 518 | } | 528 | } |
| 519 | 529 | ||
| 520 | func (svcUserMessage *SvcUserMessage) parseCloseCaption(reader *bitreader.Reader) { | 530 | func (svcUserMessage *SvcUserMessage) parseCloseCaption(reader *bitreader.Reader, demo *types.Demo) { |
| 521 | type CloseCaptionFlag uint8 | 531 | type CloseCaptionFlag uint8 |
| 522 | const ( | 532 | const ( |
| 523 | None CloseCaptionFlag = 0 | 533 | None CloseCaptionFlag = 0 |
| @@ -527,9 +537,9 @@ func (svcUserMessage *SvcUserMessage) parseCloseCaption(reader *bitreader.Reader | |||
| 527 | GenderFemale CloseCaptionFlag = 1 << 3 | 537 | GenderFemale CloseCaptionFlag = 1 << 3 |
| 528 | ) | 538 | ) |
| 529 | closeCaption := struct { | 539 | closeCaption := struct { |
| 530 | TokenName string | 540 | TokenName string `json:"token_name"` |
| 531 | Duration float32 | 541 | Duration float32 `json:"duration"` |
| 532 | Flags uint8 | 542 | Flags uint8 `json:"flags"` |
| 533 | }{ | 543 | }{ |
| 534 | TokenName: reader.TryReadString(), | 544 | TokenName: reader.TryReadString(), |
| 535 | Duration: float32(reader.TryReadSInt16()) * 0.1, | 545 | Duration: float32(reader.TryReadSInt16()) * 0.1, |
| @@ -552,54 +562,58 @@ func (svcUserMessage *SvcUserMessage) parseCloseCaption(reader *bitreader.Reader | |||
| 552 | return flagStrings | 562 | return flagStrings |
| 553 | } | 563 | } |
| 554 | svcUserMessage.Data = closeCaption | 564 | svcUserMessage.Data = closeCaption |
| 555 | writer.TempAppendLine("\t\t\tToken Name: %s", closeCaption.TokenName) | 565 | demo.Writer.TempAppendLine("\t\t\tToken Name: %s", closeCaption.TokenName) |
| 556 | writer.TempAppendLine("\t\t\tDuration: %f", closeCaption.Duration) | 566 | demo.Writer.TempAppendLine("\t\t\tDuration: %f", closeCaption.Duration) |
| 557 | writer.TempAppendLine("\t\t\tFlags: %v", getFlags(CloseCaptionFlag(closeCaption.Flags))) | 567 | demo.Writer.TempAppendLine("\t\t\tFlags: %v", getFlags(CloseCaptionFlag(closeCaption.Flags))) |
| 558 | } | 568 | } |
| 559 | 569 | ||
| 560 | func (svcUserMessage *SvcUserMessage) parseKeyHintText(reader *bitreader.Reader) { | 570 | func (svcUserMessage *SvcUserMessage) parseKeyHintText(reader *bitreader.Reader, demo *types.Demo) { |
| 561 | keyHintText := struct { | 571 | keyHintText := struct { |
| 562 | Count uint8 | 572 | Count uint8 `json:"count"` |
| 563 | KeyString string | 573 | KeyString string `json:"key_string"` |
| 564 | }{ | 574 | }{ |
| 565 | Count: reader.TryReadUInt8(), | 575 | Count: reader.TryReadUInt8(), |
| 566 | KeyString: reader.TryReadString(), | 576 | KeyString: reader.TryReadString(), |
| 567 | } | 577 | } |
| 568 | svcUserMessage.Data = keyHintText | 578 | svcUserMessage.Data = keyHintText |
| 569 | writer.TempAppendLine("\t\t\tCount: %d", keyHintText.Count) | 579 | demo.Writer.TempAppendLine("\t\t\tCount: %d", keyHintText.Count) |
| 570 | writer.TempAppendLine("\t\t\tString: %s", keyHintText.KeyString) | 580 | demo.Writer.TempAppendLine("\t\t\tString: %s", keyHintText.KeyString) |
| 571 | } | 581 | } |
| 572 | 582 | ||
| 573 | func (svcUserMessage *SvcUserMessage) parseLogoTimeMsg(reader *bitreader.Reader) { | 583 | func (svcUserMessage *SvcUserMessage) parseLogoTimeMsg(reader *bitreader.Reader, demo *types.Demo) { |
| 574 | logoTimeMsg := struct{ Time float32 }{ | 584 | logoTimeMsg := struct { |
| 585 | Time float32 `json:"time"` | ||
| 586 | }{ | ||
| 575 | Time: reader.TryReadFloat32(), | 587 | Time: reader.TryReadFloat32(), |
| 576 | } | 588 | } |
| 577 | svcUserMessage.Data = logoTimeMsg | 589 | svcUserMessage.Data = logoTimeMsg |
| 578 | writer.TempAppendLine("\t\t\tTime: %f", logoTimeMsg.Time) | 590 | demo.Writer.TempAppendLine("\t\t\tTime: %f", logoTimeMsg.Time) |
| 579 | } | 591 | } |
| 580 | 592 | ||
| 581 | func (svcUserMessage *SvcUserMessage) parseAchivementEvent(reader *bitreader.Reader) { | 593 | func (svcUserMessage *SvcUserMessage) parseAchivementEvent(reader *bitreader.Reader, demo *types.Demo) { |
| 582 | achivementEvent := struct{ AchivementID int32 }{ | 594 | achivementEvent := struct{ AchivementID int32 }{ |
| 583 | AchivementID: reader.TryReadSInt32(), | 595 | AchivementID: reader.TryReadSInt32(), |
| 584 | } | 596 | } |
| 585 | svcUserMessage.Data = achivementEvent | 597 | svcUserMessage.Data = achivementEvent |
| 586 | writer.TempAppendLine("\t\t\tAchivement ID: %d", achivementEvent.AchivementID) | 598 | demo.Writer.TempAppendLine("\t\t\tAchivement ID: %d", achivementEvent.AchivementID) |
| 587 | } | 599 | } |
| 588 | 600 | ||
| 589 | func (svcUserMessage *SvcUserMessage) parseCurrentTimescale(reader *bitreader.Reader) { | 601 | func (svcUserMessage *SvcUserMessage) parseCurrentTimescale(reader *bitreader.Reader, demo *types.Demo) { |
| 590 | currentTimescale := struct{ Timescale float32 }{ | 602 | currentTimescale := struct { |
| 603 | Timescale float32 `json:"timescale"` | ||
| 604 | }{ | ||
| 591 | Timescale: reader.TryReadFloat32(), | 605 | Timescale: reader.TryReadFloat32(), |
| 592 | } | 606 | } |
| 593 | svcUserMessage.Data = currentTimescale | 607 | svcUserMessage.Data = currentTimescale |
| 594 | writer.TempAppendLine("\t\t\tTimescale: %f", currentTimescale.Timescale) | 608 | demo.Writer.TempAppendLine("\t\t\tTimescale: %f", currentTimescale.Timescale) |
| 595 | } | 609 | } |
| 596 | 610 | ||
| 597 | func (svcUserMessage *SvcUserMessage) parseDesiredTimescale(reader *bitreader.Reader) { | 611 | func (svcUserMessage *SvcUserMessage) parseDesiredTimescale(reader *bitreader.Reader, demo *types.Demo) { |
| 598 | desiredTimescale := struct { | 612 | desiredTimescale := struct { |
| 599 | Unk1 float32 | 613 | Unk1 float32 `json:"unk_1"` |
| 600 | Unk2 float32 | 614 | Unk2 float32 `json:"unk_2"` |
| 601 | Unk3 uint8 | 615 | Unk3 uint8 `json:"unk_3"` |
| 602 | Unk4 float32 | 616 | Unk4 float32 `json:"unk_4"` |
| 603 | }{ | 617 | }{ |
| 604 | Unk1: reader.TryReadFloat32(), | 618 | Unk1: reader.TryReadFloat32(), |
| 605 | Unk2: reader.TryReadFloat32(), | 619 | Unk2: reader.TryReadFloat32(), |
| @@ -607,49 +621,52 @@ func (svcUserMessage *SvcUserMessage) parseDesiredTimescale(reader *bitreader.Re | |||
| 607 | Unk4: reader.TryReadFloat32(), | 621 | Unk4: reader.TryReadFloat32(), |
| 608 | } | 622 | } |
| 609 | svcUserMessage.Data = desiredTimescale | 623 | svcUserMessage.Data = desiredTimescale |
| 610 | writer.TempAppendLine("\t\t\tUnk1: %f", desiredTimescale.Unk1) | 624 | demo.Writer.TempAppendLine("\t\t\tUnk1: %f", desiredTimescale.Unk1) |
| 611 | writer.TempAppendLine("\t\t\tUnk2: %f", desiredTimescale.Unk2) | 625 | demo.Writer.TempAppendLine("\t\t\tUnk2: %f", desiredTimescale.Unk2) |
| 612 | writer.TempAppendLine("\t\t\tUnk3: %d", desiredTimescale.Unk3) | 626 | demo.Writer.TempAppendLine("\t\t\tUnk3: %d", desiredTimescale.Unk3) |
| 613 | writer.TempAppendLine("\t\t\tUnk4: %f", desiredTimescale.Unk4) | 627 | demo.Writer.TempAppendLine("\t\t\tUnk4: %f", desiredTimescale.Unk4) |
| 614 | } | 628 | } |
| 615 | 629 | ||
| 616 | func (svcUserMessage *SvcUserMessage) parseMpMapCompleted(reader *bitreader.Reader) { | 630 | func (svcUserMessage *SvcUserMessage) parseMpMapCompleted(reader *bitreader.Reader, demo *types.Demo) { |
| 617 | mpMapCompleted := struct { | 631 | mpMapCompleted := struct { |
| 618 | Branch uint8 | 632 | Branch uint8 `json:"branch"` |
| 619 | Level uint8 | 633 | Level uint8 `json:"level"` |
| 620 | }{ | 634 | }{ |
| 621 | Branch: reader.TryReadUInt8(), | 635 | Branch: reader.TryReadUInt8(), |
| 622 | Level: reader.TryReadUInt8(), | 636 | Level: reader.TryReadUInt8(), |
| 623 | } | 637 | } |
| 624 | svcUserMessage.Data = mpMapCompleted | 638 | svcUserMessage.Data = mpMapCompleted |
| 625 | writer.TempAppendLine("\t\t\tBranch: %d", mpMapCompleted.Branch) | 639 | demo.Writer.TempAppendLine("\t\t\tBranch: %d", mpMapCompleted.Branch) |
| 626 | writer.TempAppendLine("\t\t\tLevel: %d", mpMapCompleted.Level) | 640 | demo.Writer.TempAppendLine("\t\t\tLevel: %d", mpMapCompleted.Level) |
| 627 | } | 641 | } |
| 628 | 642 | ||
| 629 | func (svcUserMessage *SvcUserMessage) parseMpMapIncomplete(reader *bitreader.Reader) {} | 643 | func (svcUserMessage *SvcUserMessage) parseMpMapIncomplete(reader *bitreader.Reader, demo *types.Demo) { |
| 644 | } | ||
| 630 | 645 | ||
| 631 | func (svcUserMessage *SvcUserMessage) parseMpTauntEarned(reader *bitreader.Reader) { | 646 | func (svcUserMessage *SvcUserMessage) parseMpTauntEarned(reader *bitreader.Reader, demo *types.Demo) { |
| 632 | mpTauntEarned := struct { | 647 | mpTauntEarned := struct { |
| 633 | TauntName string | 648 | TauntName string `json:"taunt_name"` |
| 634 | AwardSilently bool | 649 | AwardSilently bool `json:"award_silently"` |
| 635 | }{ | 650 | }{ |
| 636 | TauntName: reader.TryReadString(), | 651 | TauntName: reader.TryReadString(), |
| 637 | AwardSilently: reader.TryReadBool(), | 652 | AwardSilently: reader.TryReadBool(), |
| 638 | } | 653 | } |
| 639 | svcUserMessage.Data = mpTauntEarned | 654 | svcUserMessage.Data = mpTauntEarned |
| 640 | writer.TempAppendLine("\t\t\tTaunt Name: %s", mpTauntEarned.TauntName) | 655 | demo.Writer.TempAppendLine("\t\t\tTaunt Name: %s", mpTauntEarned.TauntName) |
| 641 | writer.TempAppendLine("\t\t\tAward Silently: %t", mpTauntEarned.AwardSilently) | 656 | demo.Writer.TempAppendLine("\t\t\tAward Silently: %t", mpTauntEarned.AwardSilently) |
| 642 | } | 657 | } |
| 643 | 658 | ||
| 644 | func (svcUserMessage *SvcUserMessage) parseMpTauntLocked(reader *bitreader.Reader) { | 659 | func (svcUserMessage *SvcUserMessage) parseMpTauntLocked(reader *bitreader.Reader, demo *types.Demo) { |
| 645 | mpTauntLocked := struct{ TauntName string }{ | 660 | mpTauntLocked := struct { |
| 661 | TauntName string `json:"taunt_name"` | ||
| 662 | }{ | ||
| 646 | TauntName: reader.TryReadString(), | 663 | TauntName: reader.TryReadString(), |
| 647 | } | 664 | } |
| 648 | svcUserMessage.Data = mpTauntLocked | 665 | svcUserMessage.Data = mpTauntLocked |
| 649 | writer.TempAppendLine("\t\t\tTaunt Name: %s", mpTauntLocked.TauntName) | 666 | demo.Writer.TempAppendLine("\t\t\tTaunt Name: %s", mpTauntLocked.TauntName) |
| 650 | } | 667 | } |
| 651 | 668 | ||
| 652 | func (svcUserMessage *SvcUserMessage) parsePortalFxSurface(reader *bitreader.Reader) { | 669 | func (svcUserMessage *SvcUserMessage) parsePortalFxSurface(reader *bitreader.Reader, demo *types.Demo) { |
| 653 | type PortalFizzleType int8 | 670 | type PortalFizzleType int8 |
| 654 | const ( | 671 | const ( |
| 655 | PortalFizzleSuccess PortalFizzleType = iota // Placed fine (no fizzle) | 672 | PortalFizzleSuccess PortalFizzleType = iota // Placed fine (no fizzle) |
| @@ -693,13 +710,13 @@ func (svcUserMessage *SvcUserMessage) parsePortalFxSurface(reader *bitreader.Rea | |||
| 693 | } | 710 | } |
| 694 | } | 711 | } |
| 695 | portalFxSurface := struct { | 712 | portalFxSurface := struct { |
| 696 | PortalEnt uint16 | 713 | PortalEnt uint16 `json:"portal_ent"` |
| 697 | OwnerEnt uint16 | 714 | OwnerEnt uint16 `json:"owner_ent"` |
| 698 | Team uint8 | 715 | Team uint8 `json:"team"` |
| 699 | PortalNum uint8 | 716 | PortalNum uint8 `json:"portal_num"` |
| 700 | Effect uint8 | 717 | Effect uint8 `json:"effect"` |
| 701 | Origin []float32 | 718 | Origin []float32 `json:"origin"` |
| 702 | Angles []float32 | 719 | Angles []float32 `json:"angles"` |
| 703 | }{ | 720 | }{ |
| 704 | PortalEnt: reader.TryReadUInt16(), | 721 | PortalEnt: reader.TryReadUInt16(), |
| 705 | OwnerEnt: reader.TryReadUInt16(), | 722 | OwnerEnt: reader.TryReadUInt16(), |
| @@ -743,23 +760,23 @@ func (svcUserMessage *SvcUserMessage) parsePortalFxSurface(reader *bitreader.Rea | |||
| 743 | } | 760 | } |
| 744 | svcUserMessage.Data = portalFxSurface | 761 | svcUserMessage.Data = portalFxSurface |
| 745 | _ = getPortalFizzleType(PortalFizzleType(2)) | 762 | _ = getPortalFizzleType(PortalFizzleType(2)) |
| 746 | writer.TempAppendLine("\t\t\tPortal Entity: %d", portalFxSurface.PortalEnt) | 763 | demo.Writer.TempAppendLine("\t\t\tPortal Entity: %d", portalFxSurface.PortalEnt) |
| 747 | writer.TempAppendLine("\t\t\tOwner Entity: %d", portalFxSurface.OwnerEnt) | 764 | demo.Writer.TempAppendLine("\t\t\tOwner Entity: %d", portalFxSurface.OwnerEnt) |
| 748 | writer.TempAppendLine("\t\t\tTeam: %d", portalFxSurface.Team) | 765 | demo.Writer.TempAppendLine("\t\t\tTeam: %d", portalFxSurface.Team) |
| 749 | writer.TempAppendLine("\t\t\tPortal Number: %d", portalFxSurface.PortalNum) | 766 | demo.Writer.TempAppendLine("\t\t\tPortal Number: %d", portalFxSurface.PortalNum) |
| 750 | writer.TempAppendLine("\t\t\tEffect: %s", getPortalFizzleType(PortalFizzleType(portalFxSurface.Effect))) | 767 | demo.Writer.TempAppendLine("\t\t\tEffect: %s", getPortalFizzleType(PortalFizzleType(portalFxSurface.Effect))) |
| 751 | writer.TempAppendLine("\t\t\tOrigin: %v", portalFxSurface.Origin) | 768 | demo.Writer.TempAppendLine("\t\t\tOrigin: %v", portalFxSurface.Origin) |
| 752 | writer.TempAppendLine("\t\t\tAngles: %v", portalFxSurface.Angles) | 769 | demo.Writer.TempAppendLine("\t\t\tAngles: %v", portalFxSurface.Angles) |
| 753 | } | 770 | } |
| 754 | 771 | ||
| 755 | func (svcUserMessage *SvcUserMessage) parsePaintWorld(reader *bitreader.Reader) { | 772 | func (svcUserMessage *SvcUserMessage) parsePaintWorld(reader *bitreader.Reader, demo *types.Demo) { |
| 756 | paintWorld := struct { | 773 | paintWorld := struct { |
| 757 | Type uint8 | 774 | Type uint8 `json:"type"` |
| 758 | EHandle uint32 | 775 | EHandle uint32 `json:"e_handle"` |
| 759 | UnkHf1 float32 | 776 | UnkHf1 float32 `json:"unk_hf_1"` |
| 760 | UnkHf2 float32 | 777 | UnkHf2 float32 `json:"unk_hf_2"` |
| 761 | Center []float32 | 778 | Center []float32 `json:"center"` |
| 762 | Positions [][]float32 | 779 | Positions [][]float32 `json:"positions"` |
| 763 | }{ | 780 | }{ |
| 764 | Type: reader.TryReadUInt8(), | 781 | Type: reader.TryReadUInt8(), |
| 765 | EHandle: reader.TryReadUInt32(), | 782 | EHandle: reader.TryReadUInt32(), |
| @@ -775,37 +792,37 @@ func (svcUserMessage *SvcUserMessage) parsePaintWorld(reader *bitreader.Reader) | |||
| 775 | paintWorld.Positions[i] = []float32{paintWorld.Center[0] + float32(reader.TryReadSInt16()), paintWorld.Center[1] + float32(reader.TryReadSInt16()), paintWorld.Center[2] + float32(reader.TryReadSInt16())} | 792 | paintWorld.Positions[i] = []float32{paintWorld.Center[0] + float32(reader.TryReadSInt16()), paintWorld.Center[1] + float32(reader.TryReadSInt16()), paintWorld.Center[2] + float32(reader.TryReadSInt16())} |
| 776 | } | 793 | } |
| 777 | svcUserMessage.Data = paintWorld | 794 | svcUserMessage.Data = paintWorld |
| 778 | writer.TempAppendLine("\t\t\tType: %d", paintWorld.Type) | 795 | demo.Writer.TempAppendLine("\t\t\tType: %d", paintWorld.Type) |
| 779 | writer.TempAppendLine("\t\t\tEHandle: %d", paintWorld.EHandle) | 796 | demo.Writer.TempAppendLine("\t\t\tEHandle: %d", paintWorld.EHandle) |
| 780 | writer.TempAppendLine("\t\t\tUnkHf1: %f", paintWorld.UnkHf1) | 797 | demo.Writer.TempAppendLine("\t\t\tUnkHf1: %f", paintWorld.UnkHf1) |
| 781 | writer.TempAppendLine("\t\t\tUnkHf2: %f", paintWorld.UnkHf2) | 798 | demo.Writer.TempAppendLine("\t\t\tUnkHf2: %f", paintWorld.UnkHf2) |
| 782 | writer.TempAppendLine("\t\t\tCenter: %v", paintWorld.Center) | 799 | demo.Writer.TempAppendLine("\t\t\tCenter: %v", paintWorld.Center) |
| 783 | writer.TempAppendLine("\t\t\tPositions: %v", paintWorld.Positions) | 800 | demo.Writer.TempAppendLine("\t\t\tPositions: %v", paintWorld.Positions) |
| 784 | } | 801 | } |
| 785 | 802 | ||
| 786 | func (svcUserMessage *SvcUserMessage) parseTransitionFade(reader *bitreader.Reader) { | 803 | func (svcUserMessage *SvcUserMessage) parseTransitionFade(reader *bitreader.Reader, demo *types.Demo) { |
| 787 | transitionFade := struct { | 804 | transitionFade := struct { |
| 788 | Seconds float32 | 805 | Seconds float32 `json:"seconds"` |
| 789 | }{ | 806 | }{ |
| 790 | Seconds: reader.TryReadFloat32(), | 807 | Seconds: reader.TryReadFloat32(), |
| 791 | } | 808 | } |
| 792 | svcUserMessage.Data = transitionFade | 809 | svcUserMessage.Data = transitionFade |
| 793 | writer.TempAppendLine("\t\t\tSeconds: %f", transitionFade.Seconds) | 810 | demo.Writer.TempAppendLine("\t\t\tSeconds: %f", transitionFade.Seconds) |
| 794 | } | 811 | } |
| 795 | 812 | ||
| 796 | func (svcUserMessage *SvcUserMessage) parseScoreboardTempUpdate(reader *bitreader.Reader) { | 813 | func (svcUserMessage *SvcUserMessage) parseScoreboardTempUpdate(reader *bitreader.Reader, demo *types.Demo) { |
| 797 | scoreboardTempUpdate := struct { | 814 | scoreboardTempUpdate := struct { |
| 798 | NumPortals int32 | 815 | NumPortals int32 `json:"num_portals"` |
| 799 | TimeTaken int32 | 816 | TimeTaken int32 `json:"time_taken"` |
| 800 | }{ | 817 | }{ |
| 801 | NumPortals: reader.TryReadSInt32(), | 818 | NumPortals: reader.TryReadSInt32(), |
| 802 | TimeTaken: reader.TryReadSInt32(), | 819 | TimeTaken: reader.TryReadSInt32(), |
| 803 | } | 820 | } |
| 804 | svcUserMessage.Data = scoreboardTempUpdate | 821 | svcUserMessage.Data = scoreboardTempUpdate |
| 805 | writer.TempAppendLine("\t\t\tPortal Count: %d", scoreboardTempUpdate.NumPortals) | 822 | demo.Writer.TempAppendLine("\t\t\tPortal Count: %d", scoreboardTempUpdate.NumPortals) |
| 806 | writer.TempAppendLine("\t\t\tTime Taken: %.2f", float32(scoreboardTempUpdate.TimeTaken)/100.0) | 823 | demo.Writer.TempAppendLine("\t\t\tTime Taken: %.2f", float32(scoreboardTempUpdate.TimeTaken)/100.0) |
| 807 | 824 | ||
| 808 | writer.TempAppendLine("\t\t\tTicks Taken: %d", int(math.Round(float64((float32(scoreboardTempUpdate.TimeTaken)/100.0)/float32(1.0/60.0))))) | 825 | demo.Writer.TempAppendLine("\t\t\tTicks Taken: %d", int(math.Round(float64((float32(scoreboardTempUpdate.TimeTaken)/100.0)/float32(1.0/60.0))))) |
| 809 | } | 826 | } |
| 810 | 827 | ||
| 811 | type UserMessageType uint8 | 828 | type UserMessageType uint8 |
diff --git a/pkg/messages/types/svcVoiceData.go b/pkg/messages/types/svcVoiceData.go index 30436eb..dbc07a6 100644 --- a/pkg/messages/types/svcVoiceData.go +++ b/pkg/messages/types/svcVoiceData.go | |||
| @@ -2,17 +2,17 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcVoiceData struct { | 8 | type SvcVoiceData struct { |
| 9 | FromClient uint8 | 9 | FromClient uint8 `json:"from_client"` |
| 10 | Proximity bool | 10 | Proximity bool `json:"proximity"` |
| 11 | Length int16 | 11 | Length int16 `json:"length"` |
| 12 | Data []byte | 12 | Data []byte `json:"data"` |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | func ParseSvcVoiceData(reader *bitreader.Reader) SvcVoiceData { | 15 | func ParseSvcVoiceData(reader *bitreader.Reader, demo *types.Demo) SvcVoiceData { |
| 16 | svcVoiceData := SvcVoiceData{ | 16 | svcVoiceData := SvcVoiceData{ |
| 17 | FromClient: reader.TryReadUInt8(), | 17 | FromClient: reader.TryReadUInt8(), |
| 18 | } | 18 | } |
| @@ -21,8 +21,8 @@ func ParseSvcVoiceData(reader *bitreader.Reader) SvcVoiceData { | |||
| 21 | svcVoiceData.Proximity = true | 21 | svcVoiceData.Proximity = true |
| 22 | } | 22 | } |
| 23 | svcVoiceData.Data = reader.TryReadBitsToSlice(uint64(svcVoiceData.Length)) | 23 | svcVoiceData.Data = reader.TryReadBitsToSlice(uint64(svcVoiceData.Length)) |
| 24 | writer.TempAppendLine("\t\tFrom Client: %d", svcVoiceData.FromClient) | 24 | demo.Writer.TempAppendLine("\t\tFrom Client: %d", svcVoiceData.FromClient) |
| 25 | writer.TempAppendLine("\t\tProximity: %t", svcVoiceData.Proximity) | 25 | demo.Writer.TempAppendLine("\t\tProximity: %t", svcVoiceData.Proximity) |
| 26 | writer.TempAppendLine("\t\tData: %v", svcVoiceData.Data) | 26 | demo.Writer.TempAppendLine("\t\tData: %v", svcVoiceData.Data) |
| 27 | return svcVoiceData | 27 | return svcVoiceData |
| 28 | } | 28 | } |
diff --git a/pkg/messages/types/svcVoiceInit.go b/pkg/messages/types/svcVoiceInit.go index bdab51a..1baa971 100644 --- a/pkg/messages/types/svcVoiceInit.go +++ b/pkg/messages/types/svcVoiceInit.go | |||
| @@ -2,16 +2,16 @@ package messages | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/sdp.go/pkg/writer" | 5 | "github.com/pektezol/sdp.go/pkg/types" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | type SvcVoiceInit struct { | 8 | type SvcVoiceInit struct { |
| 9 | Codec string | 9 | Codec string `json:"codec"` |
| 10 | Quality uint8 | 10 | Quality uint8 `json:"quality"` |
| 11 | SampleRate int32 | 11 | SampleRate int32 `json:"sample_rate"` |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | func ParseSvcVoiceInit(reader *bitreader.Reader) SvcVoiceInit { | 14 | func ParseSvcVoiceInit(reader *bitreader.Reader, demo *types.Demo) SvcVoiceInit { |
| 15 | svcVoiceInit := SvcVoiceInit{ | 15 | svcVoiceInit := SvcVoiceInit{ |
| 16 | Codec: reader.TryReadString(), | 16 | Codec: reader.TryReadString(), |
| 17 | Quality: reader.TryReadUInt8(), | 17 | Quality: reader.TryReadUInt8(), |
| @@ -25,8 +25,8 @@ func ParseSvcVoiceInit(reader *bitreader.Reader) SvcVoiceInit { | |||
| 25 | svcVoiceInit.SampleRate = 11025 | 25 | svcVoiceInit.SampleRate = 11025 |
| 26 | } | 26 | } |
| 27 | } | 27 | } |
| 28 | writer.TempAppendLine("\t\tCodec: %s", svcVoiceInit.Codec) | 28 | demo.Writer.TempAppendLine("\t\tCodec: %s", svcVoiceInit.Codec) |
| 29 | writer.TempAppendLine("\t\tQuality: %d", svcVoiceInit.Quality) | 29 | demo.Writer.TempAppendLine("\t\tQuality: %d", svcVoiceInit.Quality) |
| 30 | writer.TempAppendLine("\t\tSample Rate: %d", svcVoiceInit.SampleRate) | 30 | demo.Writer.TempAppendLine("\t\tSample Rate: %d", svcVoiceInit.SampleRate) |
| 31 | return svcVoiceInit | 31 | return svcVoiceInit |
| 32 | } | 32 | } |