Skip to content

Commit a7b9c34

Browse files
authored
Merge pull request #105 from Erol444/fix-23-04-2022
Fix 23 04 2022
2 parents 7401a84 + ab982de commit a7b9c34

File tree

4 files changed

+90
-27
lines changed

4 files changed

+90
-27
lines changed

TbsCore/Helpers/ResourcesHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ private static void UpgradeStorage(Account acc, Village vill, BuildingEnum build
140140
var task = new BuildingTask()
141141
{
142142
Building = building,
143-
TaskType = Classificator.BuildingType.General
143+
TaskType = BuildingType.General
144144
};
145145

146146
var current = vill.Build.Buildings.FirstOrDefault(x =>

TbsCore/Tasks/LowLevel/HeroEquip.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
using System;
1+
using OpenQA.Selenium;
2+
using System;
23
using System.Collections.Generic;
4+
using System.Linq;
35
using System.Threading.Tasks;
46
using TbsCore.Helpers;
57
using TbsCore.Models.AccModels;
@@ -56,9 +58,19 @@ public override async Task<TaskRes> Execute(Account acc)
5658
// No amount specified, meaning we have already equipt the item
5759
if (amount == 0) continue;
5860
await Task.Delay(900);
59-
await DriverHelper.WriteById(acc, "amount", amount);
61+
acc.Wb.UpdateHtml();
62+
var amountNode = acc.Wb.Html.GetElementbyId("amount");
63+
if (amountNode == null) continue;
64+
var amountElement = acc.Wb.Driver.FindElement(By.XPath(amountNode.XPath));
65+
amountElement.SendKeys(Keys.Home);
66+
amountElement.SendKeys(Keys.Shift + Keys.End);
67+
amountElement.SendKeys($"{ amount}");
6068

61-
await DriverHelper.ClickByClassName(acc, "ok");
69+
var okNode = acc.Wb.Html.DocumentNode.Descendants("button").FirstOrDefault(x => x.HasClass("ok"));
70+
if (okNode == null) continue;
71+
var okElement = acc.Wb.Driver.FindElement(By.XPath(okNode.XPath));
72+
okElement.Click();
73+
await Task.Delay(900);
6274
HeroHelper.ParseHeroPage(acc);
6375
}
6476

TbsCore/Tasks/LowLevel/TrainSettlers.cs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,13 +180,33 @@ private bool EnoughSettlers(Account acc)
180180

181181
private bool UpdateSettlersAmount(Account acc)
182182
{
183-
var troopBox = acc.Wb.Html.DocumentNode.Descendants("div").FirstOrDefault(x => x.HasClass($"troop{(int)settlerId}") && x.HasClass("innerTroopWrapper"));
184-
if (troopBox == null)
183+
HtmlAgilityPack.HtmlNode nodeSettler = null;
184+
switch (acc.AccInfo.ServerVersion)
185185
{
186-
Retry(acc, "Cannot find settler box");
187-
return false;
186+
case ServerVersionEnum.TTwars:
187+
{
188+
var troopNode = acc.Wb.Html.DocumentNode.Descendants("img").FirstOrDefault(x => x.HasClass("u" + (int)settlerId));
189+
while (!troopNode.HasClass("details")) troopNode = troopNode.ParentNode;
190+
nodeSettler = troopNode;
191+
}
192+
break;
193+
194+
case ServerVersionEnum.T4_5:
195+
{
196+
var troopBox = acc.Wb.Html.DocumentNode.Descendants("div").FirstOrDefault(x => x.HasClass($"troop{(int)settlerId}") && x.HasClass("innerTroopWrapper"));
197+
if (troopBox == null)
198+
{
199+
Retry(acc, "Cannot find settler box");
200+
return false;
201+
}
202+
nodeSettler = troopBox;
203+
}
204+
break;
205+
206+
default:
207+
break;
188208
}
189-
var divTit = troopBox.Descendants("div").FirstOrDefault(x => x.HasClass("tit"));
209+
var divTit = nodeSettler.Descendants("div").FirstOrDefault(x => x.HasClass("tit"));
190210
if (divTit == null)
191211
{
192212
Retry(acc, "Cannot find Settler title");
@@ -198,6 +218,7 @@ private bool UpdateSettlersAmount(Account acc)
198218
Retry(acc, "Cannot find Settler present number");
199219
return false;
200220
}
221+
201222
Vill.Troops.Settlers = (int)Parser.RemoveNonNumeric(spanPresent.InnerText);
202223
acc.Logger.Information($"Update Settler present number: {Vill.Troops.Settlers}");
203224

TbsCore/Tasks/LowLevel/UpgradeBuilding.cs

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ private async Task<bool> TryFastUpgrade(Account acc)
341341
}
342342

343343
// click to play video
344-
acc.Logger.Information("Waiting ads video load before clicking play button");
344+
acc.Logger.Information("Waiting ads video play button show");
345345

346346
{
347347
var result = await Update(acc);
@@ -358,29 +358,49 @@ private async Task<bool> TryFastUpgrade(Account acc)
358358

359359
var elementIframe = acc.Wb.Driver.FindElement(By.XPath(nodeIframe.XPath));
360360
Actions act = new Actions(acc.Wb.Driver);
361-
act.MoveToElement(elementIframe).Click().Build().Perform();
361+
var action = act.MoveToElement(elementIframe).Click().Build();
362+
action.Perform();
363+
364+
await Task.Delay(rand.Next(10000, 15000));
365+
366+
do
367+
{
368+
var handles = acc.Wb.Driver.WindowHandles;
369+
if (handles.Count == 1) break;
370+
371+
acc.Logger.Information("Detect auto play ads, bot maybe pause ads. Great work Travian Devs");
372+
var current = acc.Wb.Driver.CurrentWindowHandle;
373+
var other = acc.Wb.Driver.WindowHandles.FirstOrDefault(x => !x.Equals(current));
374+
acc.Wb.Driver.SwitchTo().Window(other);
375+
acc.Wb.Driver.Close();
376+
acc.Wb.Driver.SwitchTo().Window(current);
377+
action.Perform();
378+
}
379+
while (true);
362380
}
363381

382+
acc.Wb.Driver.SwitchTo().DefaultContent();
383+
364384
acc.Logger.Information("Clicked play button, if ads doesn't play please click to help bot");
365385
acc.Logger.Information("Cooldown 3 mins. If building cannot upgrade will use normal button");
366386

367-
try
368387
{
369-
await DriverHelper.WaitPageChange(acc, "dorf", 3);
370-
}
371-
catch
372-
{
373-
acc.Wb.UpdateHtml();
374-
if (acc.Wb.Html.GetElementbyId("dontShowThisAgain") != null)
388+
var result = await DriverHelper.WaitPageChange(acc, "dorf", 3);
389+
if (!result)
375390
{
376-
await DriverHelper.ClickById(acc, "dontShowThisAgain");
377-
await Task.Delay(800);
378-
await DriverHelper.ClickByClassName(acc, "dialogButtonOk ok");
379-
}
380-
else
381-
{
382-
await acc.Wb.Refresh();
383-
return false;
391+
acc.Wb.UpdateHtml();
392+
if (acc.Wb.Html.GetElementbyId("dontShowThisAgain") != null)
393+
{
394+
await DriverHelper.ClickById(acc, "dontShowThisAgain");
395+
await Task.Delay(800);
396+
await DriverHelper.ClickByClassName(acc, "dialogButtonOk ok");
397+
return true;
398+
}
399+
else
400+
{
401+
await acc.Wb.Refresh();
402+
return false;
403+
}
384404
}
385405
}
386406

@@ -564,7 +584,17 @@ private async Task<bool> IsEnoughRes(Account acc)
564584
{
565585
if (ResourcesHelper.IsStorageTooLow(acc, Vill, cost))
566586
{
567-
acc.Logger.Warning($"Storage is too low. Added storage upgrade.");
587+
var building = Vill.Build.CurrentlyBuilding.FirstOrDefault(x => x.Building == BuildingEnum.Warehouse || x.Building == BuildingEnum.Granary);
588+
if (building == null)
589+
{
590+
acc.Logger.Warning($"Storage is too low. Added storage upgrade.");
591+
}
592+
else
593+
{
594+
acc.Logger.Warning($"Storage is too low. Next building will be contructed after {building.Building} - level {building.Level} complete. ({NextExecute})");
595+
NextExecute = TimeHelper.RanDelay(acc, building.Duration);
596+
StopFlag = true;
597+
}
568598
return false;
569599
}
570600

0 commit comments

Comments
 (0)