diff options
Diffstat (limited to 'pkg/classes/dataTables.go')
| -rw-r--r-- | pkg/classes/dataTables.go | 74 |
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 | ||
| 10 | type DataTables struct { | 10 | type 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 | ||
| 16 | type SendTable struct { | 16 | type 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 | ||
| 23 | type ServerClassInfo struct { | 23 | type 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 | ||
| 29 | type SendTableProp struct { | 29 | type 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 | ||
| 41 | func (dataTables *DataTables) ParseDataTables(reader *bitreader.Reader) { | 41 | func (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 | ||
| 59 | func ParseSendTable(reader *bitreader.Reader) SendTable { | 59 | func 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 | ||
| 105 | func ParseServerClassInfo(reader *bitreader.Reader, count int, numOfClasses int) ServerClassInfo { | 105 | func 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 | ||