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); }
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); }
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})")); } }
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); } }
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.")); }