11using System ;
2+ using System . Threading ;
23using PKHeX . Core ;
34using PKHeX . Core . AutoMod ;
45namespace CoreAPI . Helpers
@@ -8,77 +9,131 @@ public class AutoLegality
89 {
910 private static PKM legalpk ;
1011 private static LegalityAnalysis la ;
12+ private static bool Initialized ;
1113 public bool Successful = true ;
1214 public bool Ran = true ;
1315 public string Report ;
1416
15- public AutoLegality ( PKM pk , string ver )
17+ public static void EnsureInitialized ( )
1618 {
19+ if ( Initialized )
20+ {
21+ return ;
22+ }
23+ Initialized = true ;
24+ Initalize ( ) ;
25+ }
26+
27+ public static void Initalize ( )
28+ {
29+ //InitializeCoreStrings();
30+ Legalizer . AllowBruteForce = true ;
31+ }
32+
33+ public AutoLegality ( PKM pk , string ver )
34+ {
35+ EnsureInitialized ( ) ;
1736 bool valid = Enum . TryParse < GameVersion > ( ver , true , out var game ) ;
1837 if ( valid )
1938 ProcessALM ( pk , game ) ;
2039 return ;
2140 }
2241
23- private void ProcessALM ( PKM pkm , GameVersion ver = GameVersion . GP )
42+ private static void InitializeCoreStrings ( )
2443 {
44+ var lang = Thread . CurrentThread . CurrentCulture . TwoLetterISOLanguageName . Substring ( 0 , 2 ) ;
45+ Util . SetLocalization ( typeof ( LegalityCheckStrings ) , lang ) ;
46+ Util . SetLocalization ( typeof ( MessageStrings ) , lang ) ;
47+ RibbonStrings . ResetDictionary ( GameInfo . Strings . ribbons ) ;
48+
49+ // Update Legality Analysis strings
50+ LegalityAnalysis . MoveStrings = GameInfo . Strings . movelist ;
51+ LegalityAnalysis . SpeciesStrings = GameInfo . Strings . specieslist ;
52+ }
53+
54+ private void ProcessALM ( PKM pkm , GameVersion ver = GameVersion . GP )
55+ {
2556 la = new LegalityAnalysis ( pkm ) ;
2657 if ( la . Valid )
2758 {
2859 legalpk = pkm ;
2960 Ran = false ;
3061 Report = la . Report ( ) ;
62+ return ;
63+ }
64+ if ( la . Report ( ) . ToLower ( ) . Contains ( "invalid move" ) ) {
65+ Ran = true ; // because piepie62 and griffin wanted to make my program a liar. GG guys GG.
66+ Successful = false ;
67+ Report = la . Report ( ) ;
68+ return ;
3169 }
32- else
33- Legalizer . AllowBruteForce = false ;
34- legalpk = Legalize ( pkm , ver ) ;
70+ legalpk = Legalize ( pkm , ver ) ;
71+ }
72+
73+ private SimpleTrainerInfo getInfo ( PKM pk , GameVersion ver )
74+ {
75+ SimpleTrainerInfo info = new SimpleTrainerInfo ( ver ) ;
76+ info . OT = pk . OT_Name ;
77+ info . SID = pk . SID ;
78+ info . TID = pk . TID ;
79+ info . Language = pk . Language ;
80+ info . SubRegion = pk . Region ;
81+ info . Country = pk . Country ;
82+ info . ConsoleRegion = pk . ConsoleRegion ;
83+ info . Gender = pk . OT_Gender ;
84+ return info ;
3585 }
3686
3787 private PKM Legalize ( PKM pk , GameVersion ver )
3888 {
39- var OriginlTrainer = pk . OT_Name ;
40- var HandlingTrainer = pk . HT_Name ;
4189 var KeepOriginalData = true ;
90+ var HT_Info = pk . HT_Name ;
4291 Successful = false ;
92+ SimpleTrainerInfo info = getInfo ( pk , ver ) ;
93+
4394 if ( la . Report ( ) . ToLower ( ) . Contains ( "wordfilter" ) || la . Report ( ) . Contains ( "SID" ) || la . Report ( ) . Contains ( "TID" ) )
4495 {
4596 KeepOriginalData = false ;
46- HandlingTrainer = "PKHeX" ;
4797 }
48- var updated = Legalizer . Legalize ( pk ) ;
49- // These are the data that PKHEX AutoMod sets by itself
50- var NewSID = updated . SID ;
51- var NewOT = updated . OT_Name ;
52- var NewTID = updated . TID ;
53-
54- if ( KeepOriginalData )
55- {
56- updated . TID = pk . TID ;
57- updated . SID = pk . SID ;
58- updated . OT_Name = OriginlTrainer ;
59- }
60- if ( new LegalityAnalysis ( updated ) . Valid )
61- {
62- legalpk = updated ;
63- Successful = true ;
64- Report = la . Report ( ) ;
65- } else
66- {
67- // Let's try reverting to the old name data
98+ Legalizer . AllowBruteForce = true ;
99+ Legalizer . AllowAPI = true ;
100+ var timeout = TimeSpan . FromSeconds ( 5 ) ;
101+ var started = DateTime . UtcNow ;
102+ PKM updated ;
103+ var thread = new Thread ( ( ) => {
68104 if ( KeepOriginalData )
69105 {
70- updated . TID = NewTID ;
71- updated . OT_Name = NewOT ;
72- updated . SID = NewSID ;
73- // Let's trying running the LegalityAnalysis again
74- if ( new LegalityAnalysis ( updated ) . Valid )
75- {
76- legalpk = updated ;
77- Successful = true ;
78- Report = la . Report ( ) ;
79- }
106+ updated = Legalizer . Legalize ( pk ) ;
107+ info . ApplyToPKM ( updated ) ;
108+ updated . HT_Affection = pk . HT_Affection ;
109+ updated . HT_Feeling = pk . HT_Feeling ;
110+ updated . HT_Friendship = pk . HT_Friendship ;
111+ updated . HT_Gender = pk . HT_Gender ;
112+ updated . HT_Intensity = pk . HT_Intensity ;
113+ updated . HT_Memory = pk . HT_Memory ;
114+ updated . HT_Name = pk . HT_Name ;
115+ updated . HT_TextVar = pk . HT_TextVar ;
116+ updated . HT_Trash = pk . HT_Trash ;
117+ Console . WriteLine ( pk . HT_Name ) ;
118+ } else
119+ {
120+ updated = Legalizer . Legalize ( pk ) ;
80121 }
122+ if ( new LegalityAnalysis ( updated ) . Valid )
123+ {
124+ legalpk = updated ;
125+ Successful = true ;
126+ Report = la . Report ( ) ;
127+ }
128+ } ) ;
129+ thread . Start ( ) ;
130+ while ( thread . IsAlive && DateTime . UtcNow - started < timeout )
131+ {
132+ Thread . Sleep ( 100 ) ;
81133 }
134+ if ( thread . IsAlive )
135+ thread . Abort ( ) ;
136+
82137 if ( Successful )
83138 {
84139 return legalpk ;
0 commit comments