77
88namespace TownOfUs
99{
10- [ HarmonyPatch ( typeof ( EndGameManager ) , nameof ( EndGameManager . Start ) ) ]
11- public class EndGameManager_SetEverythingUp
10+ [ HarmonyPatch ( typeof ( AmongUsClient ) , nameof ( AmongUsClient . OnGameEnd ) ) ]
11+ public class AmongUsClientGameEnd
1212 {
13- public static void Prefix ( )
13+ public static void Postfix ( )
1414 {
1515 List < int > losers = new List < int > ( ) ;
1616 foreach ( var role in Role . GetRoles ( RoleEnum . Amnesiac ) )
@@ -48,6 +48,11 @@ public static void Prefix()
4848 var phan = ( Phantom ) role ;
4949 losers . Add ( phan . Player . GetDefaultOutfit ( ) . ColorId ) ;
5050 }
51+ foreach ( var role in Role . GetRoles ( RoleEnum . SoulCollector ) )
52+ {
53+ var sc = ( SoulCollector ) role ;
54+ losers . Add ( sc . Player . GetDefaultOutfit ( ) . ColorId ) ;
55+ }
5156 foreach ( var role in Role . GetRoles ( RoleEnum . Arsonist ) )
5257 {
5358 var arso = ( Arsonist ) role ;
@@ -84,25 +89,25 @@ public static void Prefix()
8489 losers . Add ( ww . Player . GetDefaultOutfit ( ) . ColorId ) ;
8590 }
8691
87- var toRemoveWinners = TempData . winners . ToArray ( ) . Where ( o => losers . Contains ( o . ColorId ) ) . ToArray ( ) ;
88- for ( int i = 0 ; i < toRemoveWinners . Count ( ) ; i ++ ) TempData . winners . Remove ( toRemoveWinners [ i ] ) ;
92+ var toRemoveWinners = EndGameResult . CachedWinners . ToArray ( ) . Where ( o => losers . Contains ( o . ColorId ) ) . ToArray ( ) ;
93+ for ( int i = 0 ; i < toRemoveWinners . Count ( ) ; i ++ ) EndGameResult . CachedWinners . Remove ( toRemoveWinners [ i ] ) ;
8994
9095 if ( Role . NobodyWins )
9196 {
92- TempData . winners = new List < WinningPlayerData > ( ) ;
97+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
9398 return ;
9499 }
95100 if ( Role . SurvOnlyWins )
96101 {
97- TempData . winners = new List < WinningPlayerData > ( ) ;
102+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
98103 foreach ( var role in Role . GetRoles ( RoleEnum . Survivor ) )
99104 {
100105 var surv = ( Survivor ) role ;
101106 if ( ! surv . Player . Data . IsDead && ! surv . Player . Data . Disconnected )
102107 {
103- var survData = new WinningPlayerData ( surv . Player . Data ) ;
108+ var survData = new CachedPlayerData ( surv . Player . Data ) ;
104109 if ( PlayerControl . LocalPlayer != surv . Player ) survData . IsYou = false ;
105- TempData . winners . Add ( new WinningPlayerData ( surv . Player . Data ) ) ;
110+ EndGameResult . CachedWinners . Add ( survData ) ;
106111 }
107112 }
108113
@@ -120,11 +125,11 @@ public static void Prefix()
120125 var jester = ( Jester ) role ;
121126 if ( jester . VotedOut )
122127 {
123- TempData . winners = new List < WinningPlayerData > ( ) ;
124- var jestData = new WinningPlayerData ( jester . Player . Data ) ;
128+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
129+ var jestData = new CachedPlayerData ( jester . Player . Data ) ;
125130 jestData . IsDead = false ;
126131 if ( PlayerControl . LocalPlayer != jester . Player ) jestData . IsYou = false ;
127- TempData . winners . Add ( jestData ) ;
132+ EndGameResult . CachedWinners . Add ( jestData ) ;
128133 return ;
129134 }
130135 }
@@ -133,10 +138,10 @@ public static void Prefix()
133138 var executioner = ( Executioner ) role ;
134139 if ( executioner . TargetVotedOut )
135140 {
136- TempData . winners = new List < WinningPlayerData > ( ) ;
137- var exeData = new WinningPlayerData ( executioner . Player . Data ) ;
141+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
142+ var exeData = new CachedPlayerData ( executioner . Player . Data ) ;
138143 if ( PlayerControl . LocalPlayer != executioner . Player ) exeData . IsYou = false ;
139- TempData . winners . Add ( exeData ) ;
144+ EndGameResult . CachedWinners . Add ( exeData ) ;
140145 return ;
141146 }
142147 }
@@ -145,10 +150,22 @@ public static void Prefix()
145150 var doom = ( Doomsayer ) role ;
146151 if ( doom . WonByGuessing )
147152 {
148- TempData . winners = new List < WinningPlayerData > ( ) ;
149- var doomData = new WinningPlayerData ( doom . Player . Data ) ;
153+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
154+ var doomData = new CachedPlayerData ( doom . Player . Data ) ;
150155 if ( PlayerControl . LocalPlayer != doom . Player ) doomData . IsYou = false ;
151- TempData . winners . Add ( doomData ) ;
156+ EndGameResult . CachedWinners . Add ( doomData ) ;
157+ return ;
158+ }
159+ }
160+ else if ( type == RoleEnum . SoulCollector )
161+ {
162+ var sc = ( SoulCollector ) role ;
163+ if ( sc . CollectedSouls )
164+ {
165+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
166+ var scData = new CachedPlayerData ( sc . Player . Data ) ;
167+ if ( PlayerControl . LocalPlayer != sc . Player ) scData . IsYou = false ;
168+ EndGameResult . CachedWinners . Add ( scData ) ;
152169 return ;
153170 }
154171 }
@@ -157,10 +174,10 @@ public static void Prefix()
157174 var phantom = ( Phantom ) role ;
158175 if ( phantom . CompletedTasks )
159176 {
160- TempData . winners = new List < WinningPlayerData > ( ) ;
161- var phantomData = new WinningPlayerData ( phantom . Player . Data ) ;
177+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
178+ var phantomData = new CachedPlayerData ( phantom . Player . Data ) ;
162179 if ( PlayerControl . LocalPlayer != phantom . Player ) phantomData . IsYou = false ;
163- TempData . winners . Add ( phantomData ) ;
180+ EndGameResult . CachedWinners . Add ( phantomData ) ;
164181 return ;
165182 }
166183 }
@@ -177,27 +194,27 @@ public static void Prefix()
177194 if ( lover . LoveCoupleWins )
178195 {
179196 var otherLover = lover . OtherLover ;
180- TempData . winners = new List < WinningPlayerData > ( ) ;
181- var loverOneData = new WinningPlayerData ( lover . Player . Data ) ;
182- var loverTwoData = new WinningPlayerData ( otherLover . Player . Data ) ;
197+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
198+ var loverOneData = new CachedPlayerData ( lover . Player . Data ) ;
199+ var loverTwoData = new CachedPlayerData ( otherLover . Player . Data ) ;
183200 if ( PlayerControl . LocalPlayer != lover . Player ) loverOneData . IsYou = false ;
184201 if ( PlayerControl . LocalPlayer != otherLover . Player ) loverTwoData . IsYou = false ;
185- TempData . winners . Add ( loverOneData ) ;
186- TempData . winners . Add ( loverTwoData ) ;
202+ EndGameResult . CachedWinners . Add ( loverOneData ) ;
203+ EndGameResult . CachedWinners . Add ( loverTwoData ) ;
187204 return ;
188205 }
189206 }
190207 }
191208
192209 if ( Role . VampireWins )
193210 {
194- TempData . winners = new List < WinningPlayerData > ( ) ;
211+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
195212 foreach ( var role in Role . GetRoles ( RoleEnum . Vampire ) )
196213 {
197214 var vamp = ( Vampire ) role ;
198- var vampData = new WinningPlayerData ( vamp . Player . Data ) ;
215+ var vampData = new CachedPlayerData ( vamp . Player . Data ) ;
199216 if ( PlayerControl . LocalPlayer != vamp . Player ) vampData . IsYou = false ;
200- TempData . winners . Add ( vampData ) ;
217+ EndGameResult . CachedWinners . Add ( vampData ) ;
201218 }
202219 }
203220
@@ -210,65 +227,65 @@ public static void Prefix()
210227 var glitch = ( Glitch ) role ;
211228 if ( glitch . GlitchWins )
212229 {
213- TempData . winners = new List < WinningPlayerData > ( ) ;
214- var glitchData = new WinningPlayerData ( glitch . Player . Data ) ;
230+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
231+ var glitchData = new CachedPlayerData ( glitch . Player . Data ) ;
215232 if ( PlayerControl . LocalPlayer != glitch . Player ) glitchData . IsYou = false ;
216- TempData . winners . Add ( glitchData ) ;
233+ EndGameResult . CachedWinners . Add ( glitchData ) ;
217234 }
218235 }
219236 else if ( type == RoleEnum . Juggernaut )
220237 {
221238 var juggernaut = ( Juggernaut ) role ;
222239 if ( juggernaut . JuggernautWins )
223240 {
224- TempData . winners = new List < WinningPlayerData > ( ) ;
225- var juggData = new WinningPlayerData ( juggernaut . Player . Data ) ;
241+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
242+ var juggData = new CachedPlayerData ( juggernaut . Player . Data ) ;
226243 if ( PlayerControl . LocalPlayer != juggernaut . Player ) juggData . IsYou = false ;
227- TempData . winners . Add ( juggData ) ;
244+ EndGameResult . CachedWinners . Add ( juggData ) ;
228245 }
229246 }
230247 else if ( type == RoleEnum . Arsonist )
231248 {
232249 var arsonist = ( Arsonist ) role ;
233250 if ( arsonist . ArsonistWins )
234251 {
235- TempData . winners = new List < WinningPlayerData > ( ) ;
236- var arsonistData = new WinningPlayerData ( arsonist . Player . Data ) ;
252+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
253+ var arsonistData = new CachedPlayerData ( arsonist . Player . Data ) ;
237254 if ( PlayerControl . LocalPlayer != arsonist . Player ) arsonistData . IsYou = false ;
238- TempData . winners . Add ( arsonistData ) ;
255+ EndGameResult . CachedWinners . Add ( arsonistData ) ;
239256 }
240257 }
241258 else if ( type == RoleEnum . Plaguebearer )
242259 {
243260 var plaguebearer = ( Plaguebearer ) role ;
244261 if ( plaguebearer . PlaguebearerWins )
245262 {
246- TempData . winners = new List < WinningPlayerData > ( ) ;
247- var pbData = new WinningPlayerData ( plaguebearer . Player . Data ) ;
263+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
264+ var pbData = new CachedPlayerData ( plaguebearer . Player . Data ) ;
248265 if ( PlayerControl . LocalPlayer != plaguebearer . Player ) pbData . IsYou = false ;
249- TempData . winners . Add ( pbData ) ;
266+ EndGameResult . CachedWinners . Add ( pbData ) ;
250267 }
251268 }
252269 else if ( type == RoleEnum . Pestilence )
253270 {
254271 var pestilence = ( Pestilence ) role ;
255272 if ( pestilence . PestilenceWins )
256273 {
257- TempData . winners = new List < WinningPlayerData > ( ) ;
258- var pestilenceData = new WinningPlayerData ( pestilence . Player . Data ) ;
274+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
275+ var pestilenceData = new CachedPlayerData ( pestilence . Player . Data ) ;
259276 if ( PlayerControl . LocalPlayer != pestilence . Player ) pestilenceData . IsYou = false ;
260- TempData . winners . Add ( pestilenceData ) ;
277+ EndGameResult . CachedWinners . Add ( pestilenceData ) ;
261278 }
262279 }
263280 else if ( type == RoleEnum . Werewolf )
264281 {
265282 var werewolf = ( Werewolf ) role ;
266283 if ( werewolf . WerewolfWins )
267284 {
268- TempData . winners = new List < WinningPlayerData > ( ) ;
269- var werewolfData = new WinningPlayerData ( werewolf . Player . Data ) ;
285+ EndGameResult . CachedWinners = new List < CachedPlayerData > ( ) ;
286+ var werewolfData = new CachedPlayerData ( werewolf . Player . Data ) ;
270287 if ( PlayerControl . LocalPlayer != werewolf . Player ) werewolfData . IsYou = false ;
271- TempData . winners . Add ( werewolfData ) ;
288+ EndGameResult . CachedWinners . Add ( werewolfData ) ;
272289 }
273290 }
274291 }
@@ -278,26 +295,26 @@ public static void Prefix()
278295 var surv = ( Survivor ) role ;
279296 if ( ! surv . Player . Data . IsDead && ! surv . Player . Data . Disconnected )
280297 {
281- var isImp = TempData . winners . Count != 0 && TempData . winners [ 0 ] . IsImpostor ;
282- var survWinData = new WinningPlayerData ( surv . Player . Data ) ;
298+ var isImp = EndGameResult . CachedWinners . Count != 0 && EndGameResult . CachedWinners [ 0 ] . IsImpostor ;
299+ var survWinData = new CachedPlayerData ( surv . Player . Data ) ;
283300 if ( isImp ) survWinData . IsImpostor = true ;
284301 if ( PlayerControl . LocalPlayer != surv . Player ) survWinData . IsYou = false ;
285- TempData . winners . Add ( survWinData ) ;
302+ EndGameResult . CachedWinners . Add ( survWinData ) ;
286303 }
287304 }
288305 foreach ( var role in Role . GetRoles ( RoleEnum . GuardianAngel ) )
289306 {
290307 var ga = ( GuardianAngel ) role ;
291- var gaTargetData = new WinningPlayerData ( ga . target . Data ) ;
292- foreach ( WinningPlayerData winner in TempData . winners . ToArray ( ) )
308+ var gaTargetData = new CachedPlayerData ( ga . target . Data ) ;
309+ foreach ( CachedPlayerData winner in EndGameResult . CachedWinners . ToArray ( ) )
293310 {
294311 if ( gaTargetData . ColorId == winner . ColorId )
295312 {
296- var isImp = TempData . winners [ 0 ] . IsImpostor ;
297- var gaWinData = new WinningPlayerData ( ga . Player . Data ) ;
313+ var isImp = EndGameResult . CachedWinners [ 0 ] . IsImpostor ;
314+ var gaWinData = new CachedPlayerData ( ga . Player . Data ) ;
298315 if ( isImp ) gaWinData . IsImpostor = true ;
299316 if ( PlayerControl . LocalPlayer != ga . Player ) gaWinData . IsYou = false ;
300- TempData . winners . Add ( gaWinData ) ;
317+ EndGameResult . CachedWinners . Add ( gaWinData ) ;
301318 }
302319 }
303320 }
0 commit comments