コード例 #1
0
 private void UpgradeUnit(PartyCharacterVM troop, bool path1)
 {
     PartyScreenLogic.PartyCommand command = new PartyScreenLogic.PartyCommand();
     command.FillForUpgradeTroop(PartyScreenLogic.PartyRosterSide.Right, troop.Type, troop.Character,
                                 path1 ? troop.NumOfTarget1UpgradesAvailable : troop.NumOfTarget2UpgradesAvailable,
                                 path1 ? PartyScreenLogic.PartyCommand.UpgradeTargetType.UpgradeTarget1 : PartyScreenLogic.PartyCommand.UpgradeTargetType.UpgradeTarget2);
     PartyScreenLogic.AddCommand(command);
 }
コード例 #2
0
        private void SendCommand(PartyCharacterVM character, int amount,
                                 int target)
        {
            var partyCommand = new PartyScreenLogic.PartyCommand();

            partyCommand.FillForUpgradeTroop(character.Side, character.Type, character.Character, amount, target);
            _partyVM.CurrentCharacter = character;
            _partyLogic.AddCommand(partyCommand);
        }
        // Something wrong with upgrade
        private static List <Tuple <PartyCharacterVM, PartyScreenLogic.PartyCommand> > PrepareUpgradeCommands(IEnumerable <PartyCharacterVM> upgradableTroops, PartyScreenLogic partyScreenLogic, ref UpgradeResults upgradeResults)
        {
            List <Tuple <PartyCharacterVM, PartyScreenLogic.PartyCommand> > commands = new List <Tuple <PartyCharacterVM, PartyScreenLogic.PartyCommand> >();

            AvailableResources availableResources = new AvailableResources();

            foreach (PartyCharacterVM troops in upgradableTroops)
            {
                List <(int, PartyScreenLogic.PartyCommand.UpgradeTargetType)> upgradesPerTypes =
                    new List <(int maxUpgradableTroops, PartyScreenLogic.PartyCommand.UpgradeTargetType upgradeTargetType)> {
                    (int.MaxValue, PartyScreenLogic.PartyCommand.UpgradeTargetType.UpgradeTarget1)
                };

                if (HasTwoUpgradePaths(troops) && !YapoSettings.Instance.PlayerDecision && !MultipathUpgradeLogic.TryGetUpgradePaths(troops, out upgradesPerTypes))
                {
                    upgradeResults.MultiPathSkipped++;
                    continue;
                }

                foreach ((int maxUpgradableTroops, PartyScreenLogic.PartyCommand.UpgradeTargetType upgradeTargetType)upgradesPerType in upgradesPerTypes)
                {
                    int troopsToUpgrade = CalculateCountOfTroopsThatCanBeUpgraded(availableResources, troops, partyScreenLogic, upgradesPerType);
                    if (troopsToUpgrade == 0)
                    {
                        continue;
                    }

                    upgradeResults.UpgradedTypes++;
                    upgradeResults.UpgradedTotal += troopsToUpgrade;

                    PartyScreenLogic.PartyCommand upgradeCommand = new PartyScreenLogic.PartyCommand();
                    upgradeCommand.FillForUpgradeTroop(troops.Side, troops.Type, troops.Character, troopsToUpgrade, upgradesPerType.upgradeTargetType);
                    commands.Add(new Tuple <PartyCharacterVM, PartyScreenLogic.PartyCommand>(troops, upgradeCommand));

                    availableResources.UpdateAvailableResources(troops, troopsToUpgrade, (int)upgradesPerType.upgradeTargetType);
                }
            }

            return(commands);
        }
コード例 #4
0
        public static void ExecuteUpgradeAll(this PartyVM partyVM)
        {
            var hasTwoUpgrade = new List <PartyCharacterVM>();

            PartyScreenLogic partyScreenLogic = GetPartyScreenLogic(partyVM);
            int troopNum      = 0;
            int troopNumTotal = 0;

            var party = partyVM.MainPartyTroops.OrderByDescending((PartyCharacterVM o) => o.Character.Tier).ToList();

            foreach (PartyCharacterVM partyCharacterVM in party)
            {
                if (!partyCharacterVM.IsHero && partyCharacterVM.IsUpgrade1Available && !partyCharacterVM.IsUpgrade2Exists && partyCharacterVM.NumOfTarget1UpgradesAvailable > 0 && !partyCharacterVM.IsUpgrade1Insufficient)
                {
                    int numOfTarget1UpgradesAvailable = partyCharacterVM.NumOfTarget1UpgradesAvailable;
                    troopNum++;
                    troopNumTotal += numOfTarget1UpgradesAvailable;
                    PartyScreenLogic.PartyCommand partyCommand = new PartyScreenLogic.PartyCommand();
                    partyCommand.FillForUpgradeTroop(partyCharacterVM.Side, partyCharacterVM.Type, partyCharacterVM.Character, numOfTarget1UpgradesAvailable, PartyScreenLogic.PartyCommand.UpgradeTargetType.UpgradeTarget1);
                    partyVM.CurrentCharacter = partyCharacterVM;
                    ProcessCommand(partyScreenLogic, partyCommand);
                }

                if (!partyCharacterVM.IsHero && partyCharacterVM.IsUpgrade1Exists && partyCharacterVM.IsUpgrade1Available && partyCharacterVM.IsUpgrade2Exists && partyCharacterVM.IsUpgrade2Available)
                {
                    hasTwoUpgrade.Add(partyCharacterVM);
                }
            }

            foreach (var partyCharacterVM in hasTwoUpgrade)
            {
                if (UpgradeSetting.Instance.IsEnabled && partyCharacterVM.IsUpgrade1Exists && partyCharacterVM.IsUpgrade2Exists && partyCharacterVM.IsUpgrade1Available && partyCharacterVM.IsUpgrade2Available && !partyCharacterVM.IsUpgrade1Insufficient && !partyCharacterVM.IsUpgrade2Insufficient)
                {
                    var upgradeSide = UpgradeSetting.Instance.FindUpgradeTopInSetting(partyCharacterVM.Character);
                    if (upgradeSide > -1 && upgradeSide < 2)
                    {
                        var upgradeNum = upgradeSide == 0 ? partyCharacterVM.NumOfTarget1UpgradesAvailable : partyCharacterVM.NumOfTarget2UpgradesAvailable;
                        troopNum++;
                        troopNumTotal += upgradeNum;

                        PartyScreenLogic.PartyCommand partyCommand = new PartyScreenLogic.PartyCommand();
                        partyCommand.FillForUpgradeTroop(partyCharacterVM.Side, partyCharacterVM.Type, partyCharacterVM.Character, upgradeNum, (PartyScreenLogic.PartyCommand.UpgradeTargetType)upgradeSide);

                        partyVM.CurrentCharacter = partyCharacterVM;
                        ProcessCommand(partyScreenLogic, partyCommand);
                        continue;
                    }
                }

                partyVM.MainPartyTroops.Remove(partyCharacterVM);
                partyVM.MainPartyTroops.Insert(1, partyCharacterVM);
            }



            RefreshPartyScreen(partyVM);
            if (troopNum > 0)
            {
                InformationManager.DisplayMessage(new InformationMessage($"升级 {troopNumTotal} 部队 ({troopNum})"));
            }
        }
コード例 #5
0
        public void UpgradeAllTroops(bool customOnly = false)
        {
            var currentlyUpgradingUnit = "";

            try
            {
                var upgrades = PartyVM?.MainPartyTroops?
                               .Where(x => !x.IsHero &&
                                      ((x.IsUpgrade1Available && !x.IsUpgrade1Insufficient) || (x.IsUpgrade2Available && !x.IsUpgrade2Insufficient))).ToList();

                var upgradesCount = 0;

                if (!PartyManagerSettings.Settings.DisableCustomUpgradePaths)

                {
                    var splitTroops    = PartyManagerSettings.Settings.SavedTroopUpgradePaths.Where(x => x.EvenSplit).Select(x => x.UnitName).ToList();
                    var customTroops   = PartyManagerSettings.Settings.SavedTroopUpgradePaths.Where(x => !x.EvenSplit).Select(x => x.UnitName).ToList();
                    var splitUpgrades  = upgrades.Where(x => splitTroops.Contains(x.Name.ToString())).ToList();
                    var customUpgrades = upgrades.Where(x => customTroops.Contains(x.Name.ToString())).ToList();
                    upgrades = upgrades.Where(x => !splitTroops.Contains(x.Name.ToString()) && !customTroops.Contains(x.Name.ToString())).ToList();

                    foreach (var troop in splitUpgrades)
                    {
                        currentlyUpgradingUnit = troop?.Character?.Name?.ToString();
                        var unitUpgrades = Math.Min(troop.NumOfTarget1UpgradesAvailable,
                                                    troop.NumOfTarget2UpgradesAvailable) / 2;
                        GenericHelpers.LogDebug("UpgradeAllTroops", $"Split {troop.Name.ToString()}: {unitUpgrades}");

                        var unitsUpgraded = false;

                        for (int i = 0; i < unitUpgrades; i++)
                        {
                            if (troop.IsUpgrade1Insufficient || troop.IsUpgrade2Insufficient || !troop.IsUpgrade1Available || !troop.IsUpgrade2Available)
                            {
                                break;
                            }

                            PartyScreenLogic.PartyCommand command1 = new PartyScreenLogic.PartyCommand();
                            PartyScreenLogic.PartyCommand command2 = new PartyScreenLogic.PartyCommand();
                            command1.FillForUpgradeTroop(PartyScreenLogic.PartyRosterSide.Right, troop.Type, troop.Character, 1,
                                                         PartyScreenLogic.PartyCommand.UpgradeTargetType.UpgradeTarget1);
                            var c1Valid = PartyScreenLogic.ValidateCommand(command1);
                            PartyScreenLogic.AddCommand(command1);


                            if (troop.IsUpgrade2Insufficient)
                            {
                                GenericHelpers.LogDebug("UpgradeAllTroops", $"Upgrade2 Insufficient");
                                break;
                            }

                            command2.FillForUpgradeTroop(PartyScreenLogic.PartyRosterSide.Right, troop.Type, troop.Character, 1,
                                                         PartyScreenLogic.PartyCommand.UpgradeTargetType.UpgradeTarget2);
                            var c2Valid = PartyScreenLogic.ValidateCommand(command1);
                            PartyScreenLogic.AddCommand(command2);
                            unitsUpgraded = true;
                        }



                        if (unitsUpgraded)
                        {
                            upgradesCount++;
                        }
                    }

                    foreach (var troop in customUpgrades)
                    {
                        currentlyUpgradingUnit = troop?.Character?.Name?.ToString();
                        var upgradePath = PartyManagerSettings.Settings.SavedTroopUpgradePaths
                                          .Where(x => x.UnitName == troop.Name.ToString())?.Select(x => x.TargetUpgrade).FirstOrDefault();

                        if (upgradePath == 0 && !troop.IsUpgrade1Insufficient)
                        {
                            UpgradeUnit(troop, true);
                            upgradesCount++;
                        }
                        else if (upgradePath == 1 && !troop.IsUpgrade2Insufficient)
                        {
                            UpgradeUnit(troop, false);
                            upgradesCount++;
                        }
                    }
                }

                if (!customOnly)
                {
                    //single upgrade units
                    var singleUpgrades = upgrades.Where(x => !(x.IsUpgrade1Exists && x.IsUpgrade2Exists)).ToList();

                    if (PartyManagerSettings.Settings.UpgradeTroopsUseWhitelist)
                    {
                        singleUpgrades = singleUpgrades.Where(x =>
                                                              PartyManagerSettings.Settings.UpgradeTroopsBlackWhiteList.Contains(x.Name)).ToList();
                    }
                    else
                    {
                        singleUpgrades = singleUpgrades.Where(x =>
                                                              !PartyManagerSettings.Settings.UpgradeTroopsBlackWhiteList.Contains(x.Name)).ToList();
                    }


                    foreach (var troop in singleUpgrades)
                    {
                        currentlyUpgradingUnit = troop?.Character?.Name?.ToString();
                        PartyScreenLogic.PartyCommand command = new PartyScreenLogic.PartyCommand();
                        if (troop.NumOfTarget1UpgradesAvailable > 0)
                        {
                            UpgradeUnit(troop, true);
                        }
                        else
                        {
                            UpgradeUnit(troop, false);
                        }

                        upgradesCount++;
                    }
                }

                if (upgradesCount > 0)
                {
                    GenericHelpers.LogDebug("UpgradeAllTroops", $"{upgradesCount} troops upgraded");
                    ButtonClickRefresh(true, false);
                }
                else
                {
                    GenericHelpers.LogMessage("No troops found to upgrade");
                }
            }
            catch (Exception ex)
            {
                GenericHelpers.LogException($"UpgradeAllTroops unittype({currentlyUpgradingUnit})", ex);
            }
        }
コード例 #6
0
        protected override void OnClick()
        {
            MobileParty mainParty    = MobileParty.MainParty;
            TroopRoster memberRoster = mainParty.MemberRoster;
            Hero        playerHero   = mainParty.Party.LeaderHero;
            Random      r            = new Random();
            int         num          = 0;

            bool upgrade1LastTime = false;

            for (int index = 0; index < _mainPartyList.Count; index++)
            {
                PartyCharacterVM partyCharacter = _mainPartyList[index];
                int numOfUpgradableTroops       = partyCharacter.NumOfUpgradeableTroops;
                if (numOfUpgradableTroops > 0)
                {
                    for (int i = 0; i < numOfUpgradableTroops; i++)
                    {
                        if (Settings.Instance.DontUpgradeMultipath && partyCharacter.IsUpgrade2Exists)
                        {
                            continue;
                        }

                        bool[] availableUpgrade = new bool[2];
                        availableUpgrade[0] = partyCharacter.IsUpgrade1Available && !partyCharacter.IsUpgrade1Insufficient;
                        availableUpgrade[1] = partyCharacter.IsUpgrade2Available && !partyCharacter.IsUpgrade2Insufficient;

                        if (!availableUpgrade[0] && !availableUpgrade[1])
                        {
                            continue;
                        }

                        int onlyPossibleIndex = -1;
                        if (availableUpgrade[0] && !availableUpgrade[1])
                        {
                            onlyPossibleIndex = 0;
                        }
                        if (!availableUpgrade[0] && availableUpgrade[1])
                        {
                            onlyPossibleIndex = 1;
                        }


                        int upgradePath;
                        if (onlyPossibleIndex == -1)
                        {
                            if (upgrade1LastTime)
                            {
                                upgradePath = 1;
                            }
                            else
                            {
                                upgradePath = 0;
                            }
                            upgrade1LastTime = !upgrade1LastTime;
                        }
                        else
                        {
                            upgradePath = onlyPossibleIndex;
                        }

                        PartyScreenLogic.PartyCommand partyCommand = new PartyScreenLogic.PartyCommand();
                        if (partyCharacter.Number == 1)
                        {
                            index--;
                        }
                        partyCommand.FillForUpgradeTroop(PartyScreenLogic.PartyRosterSide.Right, PartyScreenLogic.TroopType.Member, partyCharacter.Character, 1, (PartyScreenLogic.PartyCommand.UpgradeTargetType)upgradePath);
                        this._partyVM.CurrentCharacter = partyCharacter;
                        this._partyLogic.AddCommand(partyCommand);
                        num++;
                    }
                }
            }
            InformationManager.DisplayMessage(new InformationMessage("Upgraded " + num.ToString() + " soldiers."));
        }