aboutsummaryrefslogtreecommitdiff
path: root/pkg/classes/dataTables.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/classes/dataTables.go')
-rw-r--r--pkg/classes/dataTables.go74
1 files changed, 37 insertions, 37 deletions
diff --git a/pkg/classes/dataTables.go b/pkg/classes/dataTables.go
index 50be8fe..cf3762a 100644
--- a/pkg/classes/dataTables.go
+++ b/pkg/classes/dataTables.go
@@ -4,59 +4,59 @@ 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
10type DataTables struct { 10type DataTables struct {
11 Size int32 11 Size int32 `json:"size"`
12 SendTable []SendTable 12 SendTable []SendTable `json:"send_table"`
13 ServerClassInfo []ServerClassInfo 13 ServerClassInfo []ServerClassInfo `json:"server_class_info"`
14} 14}
15 15
16type SendTable struct { 16type SendTable struct {
17 NeedsDecoder bool 17 NeedsDecoder bool `json:"needs_decoder"`
18 NetTableName string 18 NetTableName string `json:"net_table_name"`
19 NumOfProps int16 19 NumOfProps int16 `json:"num_of_props"`
20 Props []SendTableProp 20 Props []SendTableProp `json:"props"`
21} 21}
22 22
23type ServerClassInfo struct { 23type ServerClassInfo struct {
24 DataTableID uint16 24 DataTableID uint16 `json:"data_table_id"`
25 ClassName string 25 ClassName string `json:"class_name"`
26 DataTableName string 26 DataTableName string `json:"data_table_name"`
27} 27}
28 28
29type SendTableProp struct { 29type SendTableProp struct {
30 SendPropType SendPropType 30 SendPropType SendPropType `json:"send_prop_type"`
31 SendPropName string 31 SendPropName string `json:"send_prop_name"`
32 SendPropFlags uint32 32 SendPropFlags uint32 `json:"send_prop_flags"`
33 Priority uint8 33 Priority uint8 `json:"priority"`
34 ExcludeDtName string 34 ExcludeDtName string `json:"exclude_dt_name"`
35 LowValue float32 35 LowValue float32 `json:"low_value"`
36 HighValue float32 36 HighValue float32 `json:"high_value"`
37 NumBits int32 37 NumBits int32 `json:"num_bits"`
38 NumElements int32 38 NumElements int32 `json:"num_elements"`
39} 39}
40 40
41func (dataTables *DataTables) ParseDataTables(reader *bitreader.Reader) { 41func (dataTables *DataTables) ParseDataTables(reader *bitreader.Reader, demo *types.Demo) {
42 dataTables.Size = int32(reader.TryReadSInt32()) 42 dataTables.Size = int32(reader.TryReadSInt32())
43 dataTableReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(dataTables.Size)), true) 43 dataTableReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(dataTables.Size)), true)
44 count := 0 44 count := 0
45 for dataTableReader.TryReadBool() { 45 for dataTableReader.TryReadBool() {
46 count++ 46 count++
47 dataTables.SendTable = append(dataTables.SendTable, ParseSendTable(dataTableReader)) 47 dataTables.SendTable = append(dataTables.SendTable, ParseSendTable(dataTableReader, demo))
48 } 48 }
49 writer.AppendLine("\t%d Send Tables:", count) 49 demo.Writer.AppendLine("\t%d Send Tables:", count)
50 writer.AppendOutputFromTemp() 50 demo.Writer.AppendOutputFromTemp()
51 numOfClasses := dataTableReader.TryReadBits(16) 51 numOfClasses := dataTableReader.TryReadBits(16)
52 for count = 0; count < int(numOfClasses); count++ { 52 for count = 0; count < int(numOfClasses); count++ {
53 dataTables.ServerClassInfo = append(dataTables.ServerClassInfo, ParseServerClassInfo(dataTableReader, count, int(numOfClasses))) 53 dataTables.ServerClassInfo = append(dataTables.ServerClassInfo, ParseServerClassInfo(dataTableReader, count, int(numOfClasses), demo))
54 } 54 }
55 writer.AppendLine("\t%d Classes:", count) 55 demo.Writer.AppendLine("\t%d Classes:", count)
56 writer.AppendOutputFromTemp() 56 demo.Writer.AppendOutputFromTemp()
57} 57}
58 58
59func ParseSendTable(reader *bitreader.Reader) SendTable { 59func ParseSendTable(reader *bitreader.Reader, demo *types.Demo) SendTable {
60 sendTable := SendTable{ 60 sendTable := SendTable{
61 NeedsDecoder: reader.TryReadBool(), 61 NeedsDecoder: reader.TryReadBool(),
62 NetTableName: reader.TryReadString(), 62 NetTableName: reader.TryReadString(),
@@ -65,7 +65,7 @@ func ParseSendTable(reader *bitreader.Reader) SendTable {
65 if sendTable.NumOfProps < 0 { 65 if sendTable.NumOfProps < 0 {
66 return sendTable 66 return sendTable
67 } 67 }
68 writer.TempAppendLine("\t\t%s (%d Props):", sendTable.NetTableName, sendTable.NumOfProps) 68 demo.Writer.TempAppendLine("\t\t%s (%d Props):", sendTable.NetTableName, sendTable.NumOfProps)
69 for count := 0; count < int(sendTable.NumOfProps); count++ { 69 for count := 0; count < int(sendTable.NumOfProps); count++ {
70 propType := int8(reader.TryReadBits(5)) 70 propType := int8(reader.TryReadBits(5))
71 if propType >= int8(7) { 71 if propType >= int8(7) {
@@ -77,38 +77,38 @@ func ParseSendTable(reader *bitreader.Reader) SendTable {
77 SendPropFlags: uint32(reader.TryReadBits(19)), 77 SendPropFlags: uint32(reader.TryReadBits(19)),
78 Priority: reader.TryReadUInt8(), 78 Priority: reader.TryReadUInt8(),
79 } 79 }
80 writer.TempAppend("\t\t\t%s\t", prop.SendPropType) 80 demo.Writer.TempAppend("\t\t\t%s\t", prop.SendPropType)
81 if propType == int8(ESendPropTypeDataTable) || checkBit(prop.SendPropFlags, 6) { 81 if propType == int8(ESendPropTypeDataTable) || checkBit(prop.SendPropFlags, 6) {
82 prop.ExcludeDtName = reader.TryReadString() 82 prop.ExcludeDtName = reader.TryReadString()
83 writer.TempAppend(":\t%s\t", prop.ExcludeDtName) 83 demo.Writer.TempAppend(":\t%s\t", prop.ExcludeDtName)
84 } else { 84 } else {
85 switch propType { 85 switch propType {
86 case int8(ESendPropTypeString), int8(ESendPropTypeInt), int8(ESendPropTypeFloat), int8(ESendPropTypeVector3), int8(ESendPropTypeVector2): 86 case int8(ESendPropTypeString), int8(ESendPropTypeInt), int8(ESendPropTypeFloat), int8(ESendPropTypeVector3), int8(ESendPropTypeVector2):
87 prop.LowValue = reader.TryReadFloat32() 87 prop.LowValue = reader.TryReadFloat32()
88 prop.HighValue = reader.TryReadFloat32() 88 prop.HighValue = reader.TryReadFloat32()
89 prop.NumBits = int32(reader.TryReadBits(7)) 89 prop.NumBits = int32(reader.TryReadBits(7))
90 writer.TempAppend("Low: %f\tHigh: %f\t%d bits\t", prop.LowValue, prop.HighValue, prop.NumBits) 90 demo.Writer.TempAppend("Low: %f\tHigh: %f\t%d bits\t", prop.LowValue, prop.HighValue, prop.NumBits)
91 case int8(ESendPropTypeArray): 91 case int8(ESendPropTypeArray):
92 prop.NumElements = int32(reader.TryReadBits(10)) 92 prop.NumElements = int32(reader.TryReadBits(10))
93 writer.TempAppend("Elements: %d\t", prop.NumElements) 93 demo.Writer.TempAppend("Elements: %d\t", prop.NumElements)
94 default: 94 default:
95 writer.TempAppend("Unknown Prop Type: %v\t", propType) 95 demo.Writer.TempAppend("Unknown Prop Type: %v\t", propType)
96 return sendTable 96 return sendTable
97 } 97 }
98 } 98 }
99 writer.TempAppend("Flags: %v\tPriority: %d\n", prop.GetFlags(), prop.Priority) 99 demo.Writer.TempAppend("Flags: %v\tPriority: %d\n", prop.GetFlags(), prop.Priority)
100 sendTable.Props = append(sendTable.Props, prop) 100 sendTable.Props = append(sendTable.Props, prop)
101 } 101 }
102 return sendTable 102 return sendTable
103} 103}
104 104
105func ParseServerClassInfo(reader *bitreader.Reader, count int, numOfClasses int) ServerClassInfo { 105func ParseServerClassInfo(reader *bitreader.Reader, count int, numOfClasses int, demo *types.Demo) ServerClassInfo {
106 serverClassInfo := ServerClassInfo{ 106 serverClassInfo := ServerClassInfo{
107 DataTableID: reader.TryReadUInt16(), 107 DataTableID: reader.TryReadUInt16(),
108 ClassName: reader.TryReadString(), 108 ClassName: reader.TryReadString(),
109 DataTableName: reader.TryReadString(), 109 DataTableName: reader.TryReadString(),
110 } 110 }
111 writer.TempAppendLine("\t\t\t[%d] %s (%s)", serverClassInfo.DataTableID, serverClassInfo.ClassName, serverClassInfo.DataTableName) 111 demo.Writer.TempAppendLine("\t\t\t[%d] %s (%s)", serverClassInfo.DataTableID, serverClassInfo.ClassName, serverClassInfo.DataTableName)
112 return serverClassInfo 112 return serverClassInfo
113} 113}
114 114