Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 37 additions & 9 deletions TBot/Includes/CalculationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -568,20 +568,48 @@ public decimal CalcOptimalFarmSpeed(Celestial origin, Coordinate destination, Sh
return CalcOptimalFarmSpeed(origin.Coordinate, destination, ships, loot, ratio, maxFlightTime, researches, serverData, lfBonuses, playerClass, allyClass);
}

public Resources CalcMaxTransportableResources(Ships ships, Resources resources, int hyperspaceTech, ServerData serverData, LFBonuses lfBonuses = null, CharacterClass playerClass = CharacterClass.NoClass, long deutToLeave = 0, int probeCargo = 0) {
public Resources CalcMaxTransportableResources(Ships ships, Resources resources, int hyperspaceTech, ServerData serverData, LFBonuses lfBonuses = null, CharacterClass playerClass = CharacterClass.NoClass, long deutToLeave = 0, int probeCargo = 0, (int Metal, int Crystal, int Deut) rankRess = default) {
var capacity = CalcFleetCapacity(ships, serverData, hyperspaceTech, lfBonuses, playerClass, probeCargo);
Resources result = new();
if (rankRess == default) rankRess = (3, 2, 1);
if (resources.TotalResources <= capacity) {
return new Resources { Deuterium = resources.Deuterium - deutToLeave, Crystal = resources.Crystal, Metal = resources.Metal };
} else {
if (resources.Deuterium - deutToLeave > capacity) {
return new Resources { Deuterium = capacity };
} else if (capacity >= resources.Deuterium - deutToLeave && capacity < (resources.Deuterium - deutToLeave + resources.Crystal)) {
return new Resources { Deuterium = resources.Deuterium - deutToLeave, Crystal = (capacity - resources.Deuterium + deutToLeave) };
} else if (capacity >= (resources.Deuterium - deutToLeave + resources.Crystal) && capacity < resources.TotalResources) {
return new Resources { Deuterium = resources.Deuterium - deutToLeave, Crystal = resources.Crystal, Metal = (capacity - resources.Deuterium + deutToLeave - resources.Crystal) };
} else
return resources;
resources.Deuterium -= deutToLeave;
if (rankRess.Metal == 1) {
if (resources.Metal > capacity) return new Resources { Metal = capacity };
else result.Metal = resources.Metal;
} else if (rankRess.Crystal == 1) {
if (resources.Crystal > capacity) return new Resources { Crystal = capacity };
else result.Crystal = resources.Crystal;
} else if (rankRess.Deut == 1) {
if (resources.Deuterium > capacity) return new Resources { Deuterium = capacity };
else result.Deuterium = resources.Deuterium;
}

if (rankRess.Metal == 2) {
if (resources.Metal + result.TotalResources > capacity) return new Resources { Metal = capacity - result.TotalResources, Crystal = result.Crystal, Deuterium = result.Deuterium };
else result.Metal = resources.Metal;
} else if (rankRess.Crystal == 2) {
if (resources.Crystal + result.TotalResources > capacity) return new Resources { Metal = result.Metal, Crystal = capacity - result.TotalResources, Deuterium = result.Deuterium };
else result.Crystal = resources.Crystal;
} else if (rankRess.Deut == 2) {
if (resources.Deuterium + result.TotalResources > capacity) return new Resources { Metal = result.Metal, Crystal = result.Crystal, Deuterium = capacity - result.TotalResources };
else result.Deuterium = resources.Deuterium;
}

if (rankRess.Metal == 3) {
if (resources.Metal + result.TotalResources > capacity) return new Resources { Metal = capacity - result.TotalResources, Crystal = result.Crystal, Deuterium = result.Deuterium };
else result.Metal = resources.Metal;
} else if (rankRess.Crystal == 3) {
if (resources.Crystal + result.TotalResources > capacity) return new Resources { Metal = result.Metal, Crystal = capacity - result.TotalResources, Deuterium = result.Deuterium };
else result.Crystal = resources.Crystal;
} else if (rankRess.Deut == 3) {
if (resources.Deuterium + result.TotalResources > capacity) return new Resources { Metal = result.Metal, Crystal = result.Crystal, Deuterium = capacity - result.TotalResources };
else result.Deuterium = resources.Deuterium;
}
}
return result;
}

public long CalcShipNumberForPayload(Resources payload, Buildables buildable, int hyperspaceTech, ServerData serverData, float cargoBonus = 0, CharacterClass playerClass = CharacterClass.NoClass, int probeCapacity = 0) {
Expand Down
2 changes: 1 addition & 1 deletion TBot/Includes/ICalculationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public interface ICalculationService {
int CalcMaxPlanets(int astrophysics);
int CalcMaxPlanets(Researches researches);
bool IsAstrophysicsPositionValid(int pos, int astrophysics);
Resources CalcMaxTransportableResources(Ships ships, Resources resources, int hyperspaceTech, ServerData serverData, LFBonuses lfBonuses = null, CharacterClass playerClass = CharacterClass.NoClass, long deutToLeave = 0, int probeCargo = 0);
Resources CalcMaxTransportableResources(Ships ships, Resources resources, int hyperspaceTech, ServerData serverData, LFBonuses lfBonuses = null, CharacterClass playerClass = CharacterClass.NoClass, long deutToLeave = 0, int probeCargo = 0, (int Metal, int Crystal, int Deut) rankRess = default);
long CalcMetalProduction(Buildings buildings, int position, int speedFactor, float ratio = 1, Researches researches = null, LFBonuses lfBonuses = null, CharacterClass playerClass = CharacterClass.NoClass, bool hasGeologist = false, bool hasStaff = false, int crawlers = 0, float crawlerRatio = 1);
long CalcMetalProduction(int level, int position, int speedFactor, float ratio = 1, int plasma = 0, float metalLFBonus = 0, CharacterClass playerClass = CharacterClass.NoClass, bool hasGeologist = false, bool hasStaff = false, int crawlers = 0, float crawlerRatio = 1);
long CalcMetalProduction(Planet planet, int speedFactor, float ratio = 1, Researches researches = null, CharacterClass playerClass = CharacterClass.NoClass, bool hasGeologist = false, bool hasStaff = false, int crawlers = 0, float crawlerRatio = 1);
Expand Down
7 changes: 6 additions & 1 deletion TBot/Workers/FleetScheduler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1330,7 +1330,12 @@ public async Task<RepatriateCode> CollectImpl(bool fromTelegram, bool noLimit =
} else {
ships.Add(preferredShip, tempCelestial.Ships.GetAmount(preferredShip));
}
payload = _calcService.CalcMaxTransportableResources(ships, payload, _tbotInstance.UserData.researches.HyperspaceTechnology, _tbotInstance.UserData.serverData, tempCelestial.LFBonuses, _tbotInstance.UserData.userInfo.Class, _tbotInstance.UserData.serverData.ProbeCargo);
var rankRess = ( Metal: ((int) _tbotInstance.InstanceSettings.Brain.AutoRepatriate.ResourcesRankPriority.Metal <= 0 || (int) _tbotInstance.InstanceSettings.Brain.AutoRepatriate.ResourcesRankPriority.Metal > 3) ? 3 : (int) _tbotInstance.InstanceSettings.Brain.AutoRepatriate.ResourcesRankPriority.Metal,
Crystal: ((int) _tbotInstance.InstanceSettings.Brain.AutoRepatriate.ResourcesRankPriority.Crystal <= 0 || (int) _tbotInstance.InstanceSettings.Brain.AutoRepatriate.ResourcesRankPriority.Crystal > 3) ? 2 : (int) _tbotInstance.InstanceSettings.Brain.AutoRepatriate.ResourcesRankPriority.Crystal,
Deut: ((int) _tbotInstance.InstanceSettings.Brain.AutoRepatriate.ResourcesRankPriority.Deuterium <= 0 || (int) _tbotInstance.InstanceSettings.Brain.AutoRepatriate.ResourcesRankPriority.Deuterium > 3) ? 1 : (int) _tbotInstance.InstanceSettings.Brain.AutoRepatriate.ResourcesRankPriority.Deuterium );
if (rankRess.Metal == rankRess.Crystal || rankRess.Metal == rankRess.Deut || rankRess.Crystal == rankRess.Deut)
rankRess = ( Metal: 3, Crystal: 2, Deut: 1 );
payload = _calcService.CalcMaxTransportableResources(ships, payload, _tbotInstance.UserData.researches.HyperspaceTechnology, _tbotInstance.UserData.serverData, tempCelestial.LFBonuses, _tbotInstance.UserData.userInfo.Class, 0, _tbotInstance.UserData.serverData.ProbeCargo, rankRess);

if (payload.TotalResources > 0) {
var fleetId = await SendFleet(tempCelestial, ships, destinationCoordinate, Missions.Transport, Speeds.HundredPercent, payload);
Expand Down
7 changes: 6 additions & 1 deletion TBot/instance_settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"Height": 1080,
"Timezone": "Europe/London",
"Lang": "en"
}
}
},
"General": {
"Host": "localhost",
Expand Down Expand Up @@ -343,6 +343,11 @@
"Type": "Moon"
}
],
"ResourcesRankPriority": {
"Metal": 3,
"Crystal": 2,
"Deuterium": 1
},
"TargetAssociateMoon": false,
"CargoType": "LargeCargo",
"RandomOrder": false,
Expand Down