2020using KKManager . Data . Cards . RG ;
2121using KKManager . Data . Cards . SVS ;
2222using KKManager . Data . Plugins ;
23- using KKManager . Data . Sardines ;
2423using KKManager . Data . Zipmods ;
2524using KKManager . Util ;
25+ using Sideloader . AutoResolver ;
2626
2727namespace KKManager . Data . Cards
2828{
@@ -78,9 +78,20 @@ void ReadCardsFromDir()
7878 try
7979 {
8080 var allPlugins = PluginLoader . Plugins . ToEnumerable ( ) . ToList ( ) ;
81+ var existingPluginGuids = allPlugins . Select ( p => p . Guid ) . ToHashSet ( ) ;
82+
8183 var allZipmods = SideloaderModLoader . Zipmods . ToEnumerable ( ) . ToList ( ) ;
84+ var existingZipmodGuids = allZipmods . Select ( z => z . Guid ) . ToHashSet ( ) ;
85+ // Also consider migrated GUIDs as existing (but only if zipmod with the target GUID is actually present).
86+ // No easy way to check StripAll so just assume the required zipmod is present
87+ var migratedGuids = allZipmods . SelectMany ( x => x . Manifest . MigrationList )
88+ . Where ( x => ! string . IsNullOrEmpty ( x . GUIDOld ) && ( x . MigrationType == MigrationType . StripAll || existingZipmodGuids . Contains ( x . GUIDNew ) ) )
89+ . Select ( x => x . GUIDOld ) ;
90+ foreach ( var migratedGuid in migratedGuids )
91+ existingZipmodGuids . Add ( migratedGuid ) ;
92+
8293 foreach ( var card in s . ToEnumerable ( ) )
83- CheckIfRequiredModsExist ( card , allPlugins , allZipmods ) ;
94+ CheckIfRequiredModsExist ( card , allPlugins , allZipmods , existingPluginGuids , existingZipmodGuids ) ;
8495 }
8596 catch ( TargetInvocationException ex )
8697 {
@@ -99,30 +110,35 @@ void ReadCardsFromDir()
99110 return s ;
100111 }
101112
102- private static void CheckIfRequiredModsExist ( Card card , List < PluginInfo > allPlugins , List < SideloaderModInfo > allZipmods )
113+ private static void CheckIfRequiredModsExist ( Card card , List < PluginInfo > allPlugins , List < SideloaderModInfo > allZipmods , HashSet < string > existingPluginGuids , HashSet < string > existingZipmodGuids )
103114 {
104115 if ( card . Extended == null ) return ;
105116
106117 var cardExtDatas = card . Extended . Where ( x => x . Value != null ) . ToList ( ) ;
107118
108- var extGroups = cardExtDatas . ToLookup ( x => x . Value . RequiredPluginGUIDs . Count > 0 ) ;
119+ var cardExtDatasPlugins = cardExtDatas . ToLookup ( x => x . Value . RequiredPluginGUIDs . Count > 0 ) ;
120+ var definiteRequirements = cardExtDatasPlugins [ true ] . SelectMany ( x => x . Value . RequiredPluginGUIDs ) . Distinct ( ) . OrderBy ( x => x ) . ToArray ( ) ;
121+ card . UsedPlugins = definiteRequirements ;
109122
110- var missingPlugs = extGroups [ true ] . SelectMany ( x => x . Value . RequiredPluginGUIDs ) . Where ( x => allPlugins . All ( p => x != p . Guid ) ) . Distinct ( ) . ToArray ( ) ;
123+ var missingPlugs = definiteRequirements . Where ( x => ! existingPluginGuids . Contains ( x ) ) . ToArray ( ) ;
111124 if ( missingPlugs . Length > 0 )
112125 {
113126 card . MissingPlugins = missingPlugs ;
114127 //Console.WriteLine(card.Location.Name + " requires plugins that are missing: " + string.Join("; ", missingPlugs));
115128 }
116129
117130 var allExtCandidates = allPlugins . SelectMany ( z => z . ExtDataGuidCandidates ?? Enumerable . Empty < string > ( ) ) . ToHashSet ( ) ;
118- var missingPlugsMaybe = extGroups [ false ] . Where ( x => ! allExtCandidates . Contains ( x . Key ) ) . Select ( x => x . Key ) . Distinct ( ) . ToArray ( ) ;
131+ var possibleRequirements = cardExtDatasPlugins [ false ] ;
132+ var missingPlugsMaybe = possibleRequirements . Where ( x => ! allExtCandidates . Contains ( x . Key ) ) . Select ( x => x . Key ) . Distinct ( ) . ToArray ( ) ;
119133 if ( missingPlugsMaybe . Length > 0 )
120134 {
121135 card . MissingPluginsMaybe = missingPlugsMaybe ;
122136 }
123137
124- var zipmodGuids = cardExtDatas . SelectMany ( x => x . Value . RequiredZipmodGUIDs ) ;
125- var missingZipmods = zipmodGuids . Where ( x => allZipmods . All ( p => x != p . Guid ) ) . Distinct ( ) . ToArray ( ) ;
138+ var cardZipmodGuids = cardExtDatas . SelectMany ( x => x . Value . RequiredZipmodGUIDs ) . Distinct ( ) . OrderBy ( x => x ) . ToArray ( ) ;
139+ card . UsedZipmods = cardZipmodGuids ;
140+
141+ var missingZipmods = cardZipmodGuids . Where ( x => ! existingZipmodGuids . Contains ( x ) ) . ToArray ( ) ;
126142 if ( missingZipmods . Length > 0 )
127143 {
128144 card . MissingZipmods = missingZipmods ;
0 commit comments