|
|
@@ -47,7 +47,8 @@ def calc_profit(recipe: Recipe, buildings: typing.Mapping[str, Building], materi
|
|
|
for bm in building['BuildingCosts'])
|
|
|
profit_per_run = revenue - cost
|
|
|
runs_per_day = 24 * 60 * 60 * 1000 / recipe['TimeMs']
|
|
|
- cost_per_day = cost * runs_per_day
|
|
|
+ worker_consumable_daily_cost = building_daily_cost(building, prices)
|
|
|
+ cost_per_day = cost * runs_per_day + worker_consumable_daily_cost
|
|
|
output_per_day = output['Amount'] * runs_per_day
|
|
|
logistics_per_day = max(
|
|
|
sum(materials[input['Ticker']]['Weight'] * input['Amount'] for input in recipe['Inputs']),
|
|
|
@@ -57,12 +58,27 @@ def calc_profit(recipe: Recipe, buildings: typing.Mapping[str, Building], materi
|
|
|
) * runs_per_day
|
|
|
return Profit(output['Ticker'], recipe['RecipeName'],
|
|
|
expertise=building['Expertise'].replace('_', ' ').lower(),
|
|
|
- profit_per_area=profit_per_run * runs_per_day / building['AreaCost'],
|
|
|
+ profit_per_area=(profit_per_run * runs_per_day - worker_consumable_daily_cost) / building['AreaCost'],
|
|
|
capex=capex,
|
|
|
cost_per_day=cost_per_day,
|
|
|
low_volume=output_price.average_traded < output_per_day * 20,
|
|
|
heavy_logistics=logistics_per_day > 100)
|
|
|
|
|
|
+def building_daily_cost(building: Building, prices: typing.Mapping[str, Price]) -> float:
|
|
|
+ consumption = {
|
|
|
+ 'Pioneers': [('COF', 0.5), ('DW', 4), ('RAT', 4), ('OVE', 0.5), ('PWO', 0.2)],
|
|
|
+ 'Settlers': [('DW', 5), ('RAT', 6), ('KOM', 1), ('EXO', 0.5), ('REP', 0.2), ('PT', 0.5)],
|
|
|
+ 'Technicians': [('DW', 7.5), ('RAT', 7), ('ALE', 1), ('MED', 0.5), ('SC', 0.1), ('HMS', 0.5), ('SCN', 0.1)],
|
|
|
+ 'Engineers': [('DW', 10), ('MED', 0.5), ('GIN', 1), ('FIM', 7), ('VG', 0.2), ('HSS', 0.2), ('PDA', 0.1)],
|
|
|
+ 'Scientists': [('DW', 10), ('MED', 0.5), ('WIN', 1), ('MEA', 7), ('NST', 0.1), ('LC', 0.2), ('WS', 0.1)],
|
|
|
+ }
|
|
|
+ cost = 0
|
|
|
+ for worker, mats in consumption.items():
|
|
|
+ workers = building[worker]
|
|
|
+ for mat, per_100 in mats:
|
|
|
+ cost += prices[mat].vwap * workers * per_100 / 100
|
|
|
+ return cost
|
|
|
+
|
|
|
class Recipe(typing.TypedDict):
|
|
|
RecipeName: str
|
|
|
BuildingTicker: str
|
|
|
@@ -79,6 +95,11 @@ class Building(typing.TypedDict):
|
|
|
Expertise: str
|
|
|
AreaCost: int
|
|
|
BuildingCosts: list[BuildingMat]
|
|
|
+ Pioneers: int
|
|
|
+ Settlers: int
|
|
|
+ Technicians: int
|
|
|
+ Engineers: int
|
|
|
+ Scientists: int
|
|
|
|
|
|
class BuildingMat(typing.TypedDict):
|
|
|
CommodityTicker: str
|