Skip to content

Commit 2d460d1

Browse files
committed
fix upgrade building timeout
1 parent 9c712c9 commit 2d460d1

File tree

1 file changed

+33
-17
lines changed

1 file changed

+33
-17
lines changed

TbsCore/Tasks/LowLevel/UpgradeBuilding.cs

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ namespace TbsCore.Tasks.LowLevel
1616
public class UpgradeBuilding : BotTask
1717
{
1818
private BuildingTask _buildingTask;
19+
private readonly Random rand = new Random();
1920

2021
public override async Task<TaskRes> Execute(Account acc)
2122
{
@@ -137,16 +138,32 @@ public override async Task<TaskRes> Execute(Account acc)
137138
}
138139
}
139140

141+
bool result;
140142
if (construct)
141143
{
142-
await Construct(acc, contractNode);
144+
result = await Construct(acc, contractNode);
143145
}
144146
else
145147
{
146-
await Upgrade(acc, contractNode);
148+
result = await Upgrade(acc, contractNode);
147149
}
148-
149-
await PostTaskCheckDorf(acc);
150+
if (!result)
151+
{
152+
var chanceDorf2 = rand.Next(1, 100);
153+
if (chanceDorf2 >= 50)
154+
{
155+
await NavigationHelper.ToDorf2(acc);
156+
}
157+
else
158+
{
159+
await NavigationHelper.ToDorf1(acc);
160+
}
161+
}
162+
else
163+
{
164+
await DriverHelper.WaitPageChange(acc, "dorf");
165+
}
166+
PostTaskCheckDorf(acc);
150167
}
151168
while (true);
152169
}
@@ -156,14 +173,14 @@ public override async Task<TaskRes> Execute(Account acc)
156173
/// </summary>
157174
/// <param name="acc">Account</param>
158175
/// <returns>TaskResult</returnss>
159-
private async Task Construct(Account acc, HtmlNode node)
176+
private async Task<bool> Construct(Account acc, HtmlNode node)
160177
{
161178
var button = node.Descendants("button").FirstOrDefault(x => x.HasClass("new"));
162179

163180
// Check for prerequisites
164181
if (button == null)
165182
{
166-
return;
183+
return false;
167184
}
168185

169186
await DriverHelper.ClickById(acc, button.Id);
@@ -176,23 +193,23 @@ private async Task Construct(Account acc, HtmlNode node)
176193
RemoveCurrentTask();
177194
}
178195

179-
return;
196+
return true;
180197
}
181198

182199
/// <summary>
183200
/// Building is already constructed, upgrade it
184201
/// </summary>
185202
/// <param name="acc">Account</param>
186203
/// <returns>TaskResult</returns>
187-
private async Task Upgrade(Account acc, HtmlNode node)
204+
private async Task<bool> Upgrade(Account acc, HtmlNode node)
188205
{
189206
(var buildingEnum, var lvl) = InfrastructureParser.UpgradeBuildingGetInfo(node);
190207

191208
if (buildingEnum == BuildingEnum.Site || lvl == -1)
192209
{
193210
acc.Logger.Warning($"Can't upgrade building {_buildingTask.Building} in village {Vill.Name}. Will be removed from the queue.");
194211
RemoveCurrentTask();
195-
return;
212+
return false;
196213
}
197214

198215
// Basic task already on/above desired level, don't upgrade further
@@ -210,15 +227,15 @@ private async Task Upgrade(Account acc, HtmlNode node)
210227
{
211228
acc.Logger.Information($"{_buildingTask.Building} is already level {lvl} in village {Vill.Name}. Will be removed from the queue.");
212229
RemoveCurrentTask();
213-
return;
230+
return false;
214231
}
215232

216233
var container = acc.Wb.Html.DocumentNode.Descendants("div").FirstOrDefault(x => x.HasClass("upgradeButtonsContainer"));
217234
var buttons = container?.Descendants("button");
218235
if (buttons == null)
219236
{
220237
acc.Logger.Warning($"We wanted to upgrade {_buildingTask.Building}, but no 'upgrade' button was found! Url={acc.Wb.CurrentUrl}");
221-
return;
238+
return false;
222239
}
223240

224241
var errorMessage = acc.Wb.Html.GetElementbyId("build")
@@ -231,14 +248,14 @@ private async Task Upgrade(Account acc, HtmlNode node)
231248
if (upgradeButton == null)
232249
{
233250
acc.Logger.Warning($"We wanted to upgrade {_buildingTask.Building}, but no 'upgrade' button was found!");
234-
return;
251+
return false;
235252
}
236253

237254
// Not enough resources?
238255
if (acc.AccInfo.ServerVersion == ServerVersionEnum.T4_5 && errorMessage != null)
239256
{
240257
acc.Logger.Warning($"We wanted to upgrade {_buildingTask.Building}, but there was an error message:\n{errorMessage.InnerText}");
241-
return;
258+
return false;
242259
}
243260

244261
var buildDuration = InfrastructureParser.GetBuildDuration(container, acc.AccInfo.ServerVersion);
@@ -261,14 +278,13 @@ private async Task Upgrade(Account acc, HtmlNode node)
261278
{
262279
RemoveCurrentTask();
263280
}
281+
return true;
264282
}
265283

266284
private void RemoveCurrentTask() => Vill.Build.Tasks.Remove(this._buildingTask);
267285

268-
private async Task PostTaskCheckDorf(Account acc)
286+
private void PostTaskCheckDorf(Account acc)
269287
{
270-
await DriverHelper.WaitPageChange(acc, "dorf");
271-
272288
// Check if residence is getting upgraded to level 10 => train settlers
273289
var cbResidence = Vill.Build
274290
.CurrentlyBuilding
@@ -377,7 +393,7 @@ private async Task<bool> TTWarsTryFastUpgrade(Account acc, string url)
377393

378394
var build = acc.Wb.Html.GetElementbyId("build");
379395
if (build != null) RemoveCurrentTask(); // Already on max lvl
380-
else await PostTaskCheckDorf(acc);
396+
else PostTaskCheckDorf(acc);
381397
return true;
382398
}
383399

0 commit comments

Comments
 (0)