private static void Postfix(SPScoreboardPartyVM __instance) { ConfigureSettings(); if (__instance.BattleCombatant is CustomBattleCombatant customBattleCombatant) { if (customBattleCombatant == playerCombatant) { __instance.Members.Sort(new MultiComparer(PlayerOrderedPropertyInfos)); } else { __instance.Members.Sort(new MultiComparer(EnemyOrderedPropertyInfos)); } } else if (__instance.BattleCombatant is PartyBase partyBase) { if (partyBase.LeaderHero == null || !Clan.PlayerClan.WarParties.Contains(partyBase.MobileParty)) { __instance.Members.Sort(new MultiComparer(EnemyOrderedPropertyInfos)); } else { __instance.Members.Sort(new MultiComparer(PlayerOrderedPropertyInfos)); } } }
private static IEnumerable <SPScoreboardUnitVM> GetScoreboardUnits(SPScoreboardPartyVM party) { foreach (var formationClass in new[] { FormationClass.Infantry, FormationClass.Ranged, FormationClass.Cavalry, FormationClass.HorseArcher, FormationClass.Skirmisher, FormationClass.HeavyInfantry, FormationClass.LightCavalry, FormationClass.HeavyCavalry, FormationClass.General }) { var entry = CreateScoreEntry(party, formationClass); if (entry != null) { yield return(entry); } } }
private static SPScoreboardUnitVM CreateScoreEntry(SPScoreboardPartyVM party, FormationClass formationClass) { BasicCharacterObject character = new BasicCharacterObject { Name = new TextObject(formationClass.ToString()) }; int kills = party.Members.Where(vm => vm.Character.CurrentFormationClass == formationClass) .Sum(vm => vm.Score.Kill); int deaths = party.Members.Where(vm => vm.Character.CurrentFormationClass == formationClass) .Sum(vm => vm.Score.Dead); int wounded = party.Members.Where(vm => vm.Character.CurrentFormationClass == formationClass) .Sum(vm => vm.Score.Wounded); int routed = party.Members.Where(vm => vm.Character.CurrentFormationClass == formationClass) .Sum(vm => vm.Score.Routed); int readyToUpgrade = party.Members.Where(vm => vm.Character.CurrentFormationClass == formationClass) .Sum(vm => vm.Score.ReadyToUpgrade); int remaining = party.Members.Where(vm => vm.Character.CurrentFormationClass == formationClass) .Sum(vm => vm.Score.Remaining); if (remaining + routed + wounded + deaths == 0) { return(null); } SPScoreboardUnitVM score = new SPScoreboardUnitVM(character) { Score = new SPScoreboardStatsVM(character.Name) { Kill = kills, Dead = deaths, Wounded = wounded, Routed = routed, ReadyToUpgrade = readyToUpgrade, Remaining = remaining + routed + wounded + deaths, } }; return(score); }
public static MBBindingList <SPScoreboardUnitVM> GetOrderedScoreList(SPScoreboardPartyVM party) { List <SPScoreboardUnitVM> list = party.Members.OrderByDescending(vm => vm.IsHero) .ThenByDescending(vm => vm.Score.Kill) .ToList(); MBBindingList <SPScoreboardUnitVM> mbList = new MBBindingList <SPScoreboardUnitVM>(); foreach (var item in GetScoreboardUnits(party)) { mbList.Add(item); } mbList.Add(new SPScoreboardUnitVM(new BasicCharacterObject { Name = TextObject.Empty })); foreach (SPScoreboardUnitVM member in list) { mbList.Add(member); } return(mbList); }