mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Sell off incomplete opfor squadrons.
Short term fix for https://github.com/Khopa/dcs_liberation/issues/41.
This commit is contained in:
parent
b5f8e6925b
commit
c7f9bfbb43
@ -8,6 +8,7 @@ Saves from 2.3 are not compatible with 2.4.
|
|||||||
* **[Flight Planner]** Non-custom flight plans will now navigate around threat areas en route to the target area when practical.
|
* **[Flight Planner]** Non-custom flight plans will now navigate around threat areas en route to the target area when practical.
|
||||||
* **[Campaign AI]** Auto-purchase now prefers airfields that are not within range of the enemy.
|
* **[Campaign AI]** Auto-purchase now prefers airfields that are not within range of the enemy.
|
||||||
* **[Campaign AI]** Auto-purchase now prefers the best aircraft for the task, but will attempt to maintain some variety.
|
* **[Campaign AI]** Auto-purchase now prefers the best aircraft for the task, but will attempt to maintain some variety.
|
||||||
|
* **[Campaign AI]** Opfor now sells off odd aircraft since they're unlikely to be used.
|
||||||
* **[Mission Generator]** Multiple groups are created for complex SAM sites (SAMs with additional point defense or SHORADS), improving Skynet behavior.
|
* **[Mission Generator]** Multiple groups are created for complex SAM sites (SAMs with additional point defense or SHORADS), improving Skynet behavior.
|
||||||
* **[Skynet]** Point defenses are now configured to remain on to protect the site they accompany.
|
* **[Skynet]** Point defenses are now configured to remain on to protect the site they accompany.
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import random
|
|||||||
import sys
|
import sys
|
||||||
from datetime import date, datetime, timedelta
|
from datetime import date, datetime, timedelta
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Any, Dict, Iterator, List, Tuple
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
from dcs.action import Coalition
|
from dcs.action import Coalition
|
||||||
from dcs.mapping import Point
|
from dcs.mapping import Point
|
||||||
@ -12,7 +12,6 @@ from dcs.task import CAP, CAS, PinpointStrike
|
|||||||
from dcs.vehicles import AirDefence
|
from dcs.vehicles import AirDefence
|
||||||
|
|
||||||
from game import db
|
from game import db
|
||||||
from game.db import PLAYER_BUDGET_BASE, REWARDS
|
|
||||||
from game.inventory import GlobalAircraftInventory
|
from game.inventory import GlobalAircraftInventory
|
||||||
from game.models.game_stats import GameStats
|
from game.models.game_stats import GameStats
|
||||||
from game.plugins import LuaPluginManager
|
from game.plugins import LuaPluginManager
|
||||||
|
|||||||
@ -56,10 +56,38 @@ class ProcurementAi:
|
|||||||
armor_budget = math.ceil(budget / 2)
|
armor_budget = math.ceil(budget / 2)
|
||||||
budget -= armor_budget
|
budget -= armor_budget
|
||||||
budget += self.reinforce_front_line(armor_budget)
|
budget += self.reinforce_front_line(armor_budget)
|
||||||
|
|
||||||
|
# Don't sell overstock aircraft until after we've bought runways and
|
||||||
|
# front lines. Any budget we free up should be earmarked for aircraft.
|
||||||
|
if not self.is_player:
|
||||||
|
budget += self.sell_incomplete_squadrons()
|
||||||
if self.manage_aircraft:
|
if self.manage_aircraft:
|
||||||
budget = self.purchase_aircraft(budget, aircraft_requests)
|
budget = self.purchase_aircraft(budget, aircraft_requests)
|
||||||
return budget
|
return budget
|
||||||
|
|
||||||
|
def sell_incomplete_squadrons(self) -> int:
|
||||||
|
# Selling incomplete squadrons gives us more money to spend on the next
|
||||||
|
# turn. This serves as a short term fix for
|
||||||
|
# https://github.com/Khopa/dcs_liberation/issues/41.
|
||||||
|
#
|
||||||
|
# Only incomplete squadrons which are unlikely to get used will be sold
|
||||||
|
# rather than all unused aircraft because the unused aircraft are what
|
||||||
|
# make OCA strikes worthwhile.
|
||||||
|
#
|
||||||
|
# This option is only used by the AI since players cannot cancel sales
|
||||||
|
# (https://github.com/Khopa/dcs_liberation/issues/365).
|
||||||
|
total = 0
|
||||||
|
for cp in self.game.theater.control_points_for(self.is_player):
|
||||||
|
inventory = self.game.aircraft_inventory.for_control_point(cp)
|
||||||
|
for aircraft, available in inventory.all_aircraft:
|
||||||
|
# We only ever plan even groups, so the odd aircraft is unlikely
|
||||||
|
# to get used.
|
||||||
|
if available % 2 == 0:
|
||||||
|
continue
|
||||||
|
inventory.remove_aircraft(aircraft, 1)
|
||||||
|
total += db.PRICES[aircraft]
|
||||||
|
return total
|
||||||
|
|
||||||
def repair_runways(self, budget: int) -> int:
|
def repair_runways(self, budget: int) -> int:
|
||||||
for control_point in self.owned_points:
|
for control_point in self.owned_points:
|
||||||
if budget < db.RUNWAY_REPAIR_COST:
|
if budget < db.RUNWAY_REPAIR_COST:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user