private void RemoveTroops() { MobileParty heroParty = MobileParty.MainParty; TroopRoster troops = heroParty.MemberRoster; TroopRosterElement troopElement; CharacterObject troop; int troopTypeCount; int numOfTroopsToTake; TroopRoster tempTroopRoster; for (int i = 0; i < troops.Count; i++) { tempTroopRoster = new TroopRoster(); troop = troops.GetCharacterAtIndex(i); troopElement = troops.GetElementCopyAtIndex(i); Debug.WriteLine("troopElement " + i + ": " + troopElement.Character.Name); troopTypeCount = troops.GetTroopCount(troop); Debug.WriteLine("cons2 Troop " + i + ": " + troop.Name + ", count:" + troopTypeCount); if (numOfTroopNeeded > 0) { numOfTroopsToTake = getNumTroopNeeded(troop, troopTypeCount); int numOfTroopsToRemove = troopTypeCount - numOfTroopsToTake; Debug.WriteLine("take Troop " + troop.Name + ", num to take: " + numOfTroopsToTake + ", num to remove: " + numOfTroopsToRemove); numOfTroopNeeded -= numOfTroopsToTake; if (numOfTroopsToRemove > 0) { Debug.WriteLine("remove Troop1 " + troop.Name + ", num: " + numOfTroopsToRemove); CharacterObject tempTroop = troopElement.Character; tempTroopRoster.FillMembersOfRoster(numOfTroopsToTake, troop); troopRosterRemovedTroops.Add(tempTroopRoster); Debug.WriteLine("troopRoosterRemovedTroops count" + troopRosterRemovedTroops.Count()); troops.RemoveTroop(troop, numOfTroopsToRemove); i--; } } else { Debug.WriteLine("remove Troop2 " + troop.Name + ", num: " + troopTypeCount + ", troopCound: " + troopTypeCount); CharacterObject tempTroop = troopElement.Character; tempTroopRoster.FillMembersOfRoster(troopTypeCount, troop); Debug.WriteLine("output temp roster: "); outputRoster(troopRosterRemovedTroops); troopRosterRemovedTroops.Add(tempTroopRoster); Debug.WriteLine("output roster: "); outputRoster(troopRosterRemovedTroops); Debug.WriteLine("troopRoosterRemovedTroops count" + troopRosterRemovedTroops.Count() + ", troopRoster tootalCount: " + troopRosterRemovedTroops.TotalManCount); troops.RemoveTroop(troop, troopTypeCount); i--; } } Debug.WriteLine("end of remove troops"); }
public static void SortUnits(TroopRoster input, SortType sortType, MBBindingList <PartyCharacterVM> partyVmUnits = null, bool useStickySlots = false) { if (input == null || input.Count == 0) { return; } int sticky = 0; if (useStickySlots) { sticky = PartyManagerSettings.Settings.StickySlots; } var stickyUnits = input.Where(x => !x.Character.IsHero).Select(x => x.Character.Name.ToString()).Take(sticky).ToList(); var inputList = input.ToList(); var flattenedOrder = CreateFlattenedRoster(input, sortType, partyVmUnits); flattenedOrder = flattenedOrder.Where(x => !stickyUnits.Contains(x.Troop.Name.ToString())).ToList(); for (int i = 0; i < inputList.Count; i++) { if (!inputList[i].Character.IsHero && !stickyUnits.Contains(inputList[i].Character.Name.ToString())) { input.RemoveTroop(inputList[i].Character, inputList[i].Number); } } input.Add(flattenedOrder); }
internal void MakeFreedHeroesEscape(TroopRoster freedTroops) { for (int i = freedTroops.Count <TroopRosterElement>() - 1; i >= 0; i--) { CharacterObject characterAtIndex = freedTroops.GetCharacterAtIndex(i); if (characterAtIndex.IsHero) { if (!characterAtIndex.IsPlayerCharacter) { EndCaptivityAction.ApplyByReleasedAfterBattle(characterAtIndex.HeroObject, null, null); } freedTroops.RemoveTroop(characterAtIndex, 1, new UniqueTroopDescriptor(), 0); } } }
public static void SortUnits(TroopRoster input) { if (SortPartyConfig.SortOrder == TroopSortType.None) { return; } List <TroopRosterElement> list = input.ToList(); List <FlattenedTroopRosterElement> elementList = CreateFlattenedRoster(input); for (int i = 0; i < list.Count; i++) { if (!list[i].Character.IsHero) { input.RemoveTroop(list[i].Character, list[i].Number); } } input.Add(elementList); }
bool cleanseRoster(TroopRoster roster) { bool removed = false; // search for corrupted troops in the internal member "data" of TroopRoster TroopRosterElement[] troops = (TroopRosterElement[])roster.GetType().GetField("data", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(roster); var characterObjects = troops.Where(t => t.Number > 0 && t.Character?.Age == 0f).Select(t => t.Character).ToList(); if (characterObjects.Any()) { // delete them foreach (CharacterObject troop in characterObjects) { roster.RemoveTroop(troop, roster.GetTroopCount(troop)); removed = true; } } return(removed); }
public static void SortUnits(TroopRoster input, SortType sortType, MBBindingList <PartyCharacterVM> partyVmUnits = null) { if (input == null || input.Count == 0) { return; } var inputList = input.ToList(); var flattenedOrder = CreateFlattenedRoster(input, sortType, partyVmUnits); for (int i = 0; i < inputList.Count; i++) { if (!inputList[i].Character.IsHero) { input.RemoveTroop(inputList[i].Character, inputList[i].Number); } } input.Add(flattenedOrder); }