55using System . Drawing ;
66using System . IO ;
77using System . Linq ;
8+ using System . Net ;
89using System . Threading . Tasks ;
910using System . Windows . Forms ;
1011
@@ -180,11 +181,15 @@ private void refreshFlags()
180181
181182 private async void InitializeEditor ( )
182183 {
183- string localAppData = Environment . GetEnvironmentVariable ( "LocalAppData" ) ;
184+ var flagNames = new HashSet < string > ( ) ;
185+
186+ var studioPath = StudioBootstrapper . GetStudioPath ( ) ;
187+ FlagScanner . PerformScan ( studioPath , flagNames ) ;
184188
189+ string localAppData = Environment . GetEnvironmentVariable ( "LocalAppData" ) ;
185190 string settingsDir = Path . Combine ( localAppData , "Roblox" , "ClientSettings" ) ;
186- string settingsPath = Path . Combine ( settingsDir , "StudioAppSettings.json" ) ;
187191
192+ string settingsPath = Path . Combine ( settingsDir , "StudioAppSettings.json" ) ;
188193 string lastExecVersion = versionRegistry . LastExecutedVersion ;
189194 string versionGuid = versionRegistry . VersionGuid ;
190195
@@ -228,7 +233,6 @@ private async void InitializeEditor()
228233 }
229234
230235 // Initialize flag browser
231- string [ ] flagNames = flagRegistry . Keys . ToArray ( ) ;
232236 string [ ] flagNameStrings = Array . Empty < string > ( ) ;
233237
234238 string settings = File . ReadAllText ( settingsPath ) ;
@@ -241,6 +245,56 @@ private async void InitializeEditor()
241245 json = data . ToObject < Dictionary < string , string > > ( ) ;
242246 }
243247
248+ /*
249+ Dictionary<string, string> webJson;
250+
251+ using (WebClient http = new WebClient())
252+ {
253+ http.Headers.Set("UserAgent", "RobloxStudioModManager");
254+ var rawData = await http.DownloadStringTaskAsync($"https://clientsettingscdn.roblox.com/v2/settings/application/PCStudioApp");
255+
256+ using (var reader = new StringReader(rawData))
257+ using (var jsonReader = new JsonTextReader(reader))
258+ {
259+ var data = JObject.Load(jsonReader);
260+ var appSettings = data["applicationSettings"];
261+ webJson = appSettings.ToObject<Dictionary<string, string>>();
262+ }
263+ }*/
264+
265+ foreach ( var key in flagNames )
266+ {
267+ if ( ! json . ContainsKey ( key ) )
268+ {
269+ string flagClass = "" ;
270+
271+ if ( key . StartsWith ( "SF" ) )
272+ flagClass = "SF" ;
273+ else if ( key . StartsWith ( "DF" ) )
274+ flagClass = "DF" ;
275+ else if ( key . StartsWith ( "F" ) )
276+ flagClass = "F" ;
277+
278+ if ( flagClass != "" )
279+ {
280+ var prefix = key . Substring ( flagClass . Length ) ;
281+
282+ foreach ( var pair in flagTypes )
283+ {
284+ if ( prefix . StartsWith ( pair . Key ) )
285+ {
286+ json . Add ( key , pair . Value ) ;
287+ break ;
288+ }
289+ }
290+ }
291+ else
292+ {
293+ json . Add ( key , "??" ) ;
294+ }
295+ }
296+ }
297+
244298 int numFlags = json . Count ;
245299 var flagSetup = new List < FVariable > ( numFlags ) ;
246300 var autoComplete = new AutoCompleteStringCollection ( ) ;
@@ -267,14 +321,17 @@ private async void InitializeEditor()
267321 if ( ! flagRegistry . TryGetValue ( key , out var flag ) )
268322 flag = new FVariable ( key , value ) ;
269323
270- autoComplete . Add ( flag . Name ) ;
324+ if ( flag . Type == "" )
325+ continue ;
326+
327+ autoComplete . Add ( flag . Key ) ;
271328 flagSetup . Add ( flag ) ;
272329 }
273330
274331 flagSearchFilter . AutoCompleteCustomSource = autoComplete ;
275332
276333 allFlags = flagSetup
277- . OrderBy ( flag => flag . Name )
334+ . OrderBy ( flag => flag . Key )
278335 . ToList ( ) ;
279336
280337 refreshFlags ( ) ;
@@ -468,10 +525,6 @@ private void overrideDataGridView_CellEndEdit(object sender, DataGridViewCellEve
468525 {
469526 badInput = ! int . TryParse ( value , out int _ ) ;
470527 }
471- else if ( flagType . EndsWith ( "Log" , format ) )
472- {
473- badInput = ! byte . TryParse ( value , out byte _ ) ;
474- }
475528
476529 if ( flagLookup . ContainsKey ( flagKey ) )
477530 {
0 commit comments