public override async Task <TaskRes> Execute(Account acc) { VersionHelper.Navigate(acc, "/options.php", "/options"); if (ContextualHelp != null) { await DriverHelper.CheckById(acc, "v13", ContextualHelp ?? true); } if (TroopsPerPage != null) { await DriverHelper.WriteById(acc, "troopMovementsPerPage", TroopsPerPage ?? 10); } var acceptButton = acc.Wb.Html.DocumentNode .Descendants("div") .First(x => x.HasClass("submitButtonContainer")) .Descendants("button") .First(); await DriverHelper.ClickById(acc, acceptButton.Id); return(TaskRes.Executed); }
public override async Task <TaskRes> Execute(Account acc) { var wb = acc.Wb.Driver; await acc.Wb.Navigate($"{acc.AccInfo.ServerUrl}/build.php?tt=99&id=39"); var flNode = GetFlNode(acc.Wb.Html, acc.AccInfo.ServerVersion); // If there is no rally point, switch to different village if (flNode == null) { var mainVill = AccountHelper.GetMainVillage(acc); if (mainVill == this.Vill) { return(TaskRes.Executed); // No gold account? } await VillageHelper.SwitchVillage(acc, mainVill.Id); flNode = GetFlNode(acc.Wb.Html, acc.AccInfo.ServerVersion); if (flNode == null) { return(TaskRes.Retry); } } if (acc.Farming.TrainTroopsAfterFL) // For TTWars servers { TaskExecutor.AddTask(acc, new TrainTroops() { ExecuteAt = DateTime.Now.AddSeconds(2), Troop = Vill.Troops.TroopToTrain ?? Classificator.TroopsEnum.Hero, Vill = this.Vill, HighSpeedServer = true }); } // If FL is collapsed, expand it if (acc.AccInfo.ServerVersion == ServerVersionEnum.T4_4 || flNode.Descendants("div").Any(x => x.HasClass("expandCollapse") && x.HasClass("collapsed"))) { await DriverHelper.ExecuteScript(acc, $"Travian.Game.RaidList.toggleList({this.FL.Id});"); // Update flNode! flNode = GetFlNode(acc.Wb.Html, acc.AccInfo.ServerVersion); } foreach (var farm in flNode.Descendants("tr").Where(x => x.HasClass("slotRow"))) { //iReport2 = yellow swords, iReport3 = red swords, iReport1 = successful raid var img = farm.ChildNodes.FirstOrDefault(x => x.HasClass("lastRaid"))?.Descendants("img"); //there has to be an image (we already have a report) and wrong raid style to not check this farmlist: if (img.Count() != 0 && ( //no image -> no recent attack (img.FirstOrDefault(x => x.HasClass("iReport3")) != null && this.FL.RaidStyle != RaidStyle.RaidLost) || //raid was lost and we don't have RaidLost raidstyle (img.FirstOrDefault(x => x.HasClass("iReport2")) != null && (this.FL.RaidStyle == RaidStyle.RaidSuccessful)) //some casualities, but we only attack on successful )) { continue; } var checkbox = farm.Descendants("input").FirstOrDefault(x => x.HasClass("markSlot")); await DriverHelper.CheckById(acc, checkbox.Id, true, update : false); } await Task.Delay(AccountHelper.Delay() * 2); switch (acc.AccInfo.ServerVersion) { case ServerVersionEnum.T4_4: var sendFlScript = $"document.getElementById('{flNode.Id}').childNodes[1].submit()"; wb.ExecuteScript(sendFlScript); break; case ServerVersionEnum.T4_5: var startRaid = flNode.Descendants("button").FirstOrDefault(x => x.HasClass("startButton")); acc.Wb.Driver.FindElementById(startRaid.Id).Click(); break; } acc.Wb.Log($"FarmList '{this.FL.Name}' was sent"); return(TaskRes.Executed); }