@@ -73,6 +73,35 @@ fn readCsString(ref auto data, s32 len, s32 bitindex){
73
73
}
74
74
return test;
75
75
};
76
+ fn measureCsString(ref auto data, s32 len, s32 bitindex){
77
+ s32 value = 0;
78
+ u64 ret = 0;
79
+
80
+ while(true){
81
+ ret = readbits(data,len,8,bitindex);DECODERET
82
+ if(value != 3){
83
+ break;
84
+ }
85
+ // configstring
86
+ ret = readbits(data,len,16,bitindex);DECODERET
87
+ u16 csNum = value;
88
+
89
+ while(true){
90
+ ret = readbits(data,len,8,bitindex);DECODERET
91
+ s8 val = value;
92
+ if(val <= 0){
93
+ break;
94
+ }
95
+ }
96
+ return bitindex;
97
+ }
98
+ return bitindex;
99
+ };
100
+
101
+ struct ConfigStrings {
102
+ str CS_SERVERINFO = "" [[export]];
103
+ str CS_SYSTEMINFO = "" [[export]];
104
+ };
76
105
77
106
struct Message {
78
107
le s32 messageNum;
@@ -99,7 +128,13 @@ struct Message {
99
128
} else if(firstCmd == 2){
100
129
ret = readbits(data,len,32,bitindex);DECODERET
101
130
s32 serverTime = value [[export]];
102
- str CS_SERVERINFO = readCsString(data,len,bitindex) [[export]];
131
+ ConfigStrings configStrings = null [[export]];
132
+
133
+ s32 nextBitindex = measureCsString(data,len,bitindex); // silly to do the calc twice but sadly we can't return both a string and an integer, rip
134
+ configStrings.CS_SERVERINFO = readCsString(data,len,bitindex) ;
135
+ bitindex = nextBitindex;
136
+ configStrings.CS_SYSTEMINFO = readCsString(data,len,bitindex) ;
137
+
103
138
}
104
139
105
140
} else{
0 commit comments