Esempio n. 1
0
        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");
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 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);
         }
     }
 }
Esempio n. 4
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);
        }
Esempio n. 6
0
        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);
        }