mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Comments for db.py and game.py
This commit is contained in:
parent
18bb8e91f0
commit
dbebb6022f
91
game/db.py
91
game/db.py
@ -8,6 +8,31 @@ from dcs.helicopters import *
|
|||||||
from dcs.task import *
|
from dcs.task import *
|
||||||
from dcs.unittype import *
|
from dcs.unittype import *
|
||||||
|
|
||||||
|
"""
|
||||||
|
---------- BEGINNING OF CONFIGURATION SECTION
|
||||||
|
"""
|
||||||
|
|
||||||
|
"""
|
||||||
|
All aircraft names in this file should correspond with naming provided in following files:
|
||||||
|
|
||||||
|
* https://github.com/pydcs/dcs/blob/master/dcs/planes.py - for planes
|
||||||
|
* https://github.com/pydcs/dcs/blob/master/dcs/helicopters.py - for helicopters
|
||||||
|
* https://github.com/pydcs/dcs/blob/master/dcs/vehicles.py - for vehicles (this include all of the ground vehicles)
|
||||||
|
|
||||||
|
You can find names at the bottom of the file in following format:
|
||||||
|
|
||||||
|
x_map = {
|
||||||
|
"Name of the unit in game": Identifier,
|
||||||
|
}
|
||||||
|
|
||||||
|
from this example `Identifier` should be used (which may or may not include category of the unit and dot + underscore characters).
|
||||||
|
For example, player accessible Hornet is called `FA_18C_hornet`, and MANPAD Igla is called `AirDefence.SAM_SA_18_Igla_MANPADS`
|
||||||
|
"""
|
||||||
|
|
||||||
|
"""
|
||||||
|
Prices for the aircraft.
|
||||||
|
This defines both price for the player and prioritization for the enemy (i.e. less important bases will receive units with lower price)
|
||||||
|
"""
|
||||||
PRICES = {
|
PRICES = {
|
||||||
# fighter
|
# fighter
|
||||||
C_101CC: 8,
|
C_101CC: 8,
|
||||||
@ -86,6 +111,22 @@ PRICES = {
|
|||||||
Tanker_Elnya_160: 10,
|
Tanker_Elnya_160: 10,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
Units separated by tasks. This will include units for both countries. Be advised that unit could only belong to single task!
|
||||||
|
|
||||||
|
Following tasks are present:
|
||||||
|
* CAP - figther aircraft for CAP/Escort/Intercept
|
||||||
|
* CAS - CAS aircraft
|
||||||
|
* Transport - transport aircraft (used as targets in intercept operations)
|
||||||
|
* AWACS - awacs
|
||||||
|
* PinpointStrike - armor that will engage in ground war
|
||||||
|
* AirDefense - AA units
|
||||||
|
* Reconnaissance - units that will be used as targets in destroy insurgents operations
|
||||||
|
* Nothing - troops that will be used for helicopter transport operations
|
||||||
|
* Embarking - helicopters that will be used for helicopter transport operations
|
||||||
|
* Carriage - aircraft carriers
|
||||||
|
* CargoTransportation - ships that will be used as targets for ship intercept operations
|
||||||
|
"""
|
||||||
UNIT_BY_TASK = {
|
UNIT_BY_TASK = {
|
||||||
CAP: [
|
CAP: [
|
||||||
C_101CC,
|
C_101CC,
|
||||||
@ -148,6 +189,9 @@ UNIT_BY_TASK = {
|
|||||||
CargoTransportation: [Dry_cargo_ship_Ivanov, Bulk_cargo_ship_Yakushev, Tanker_Elnya_160, LHA_1_Tarawa],
|
CargoTransportation: [Dry_cargo_ship_Ivanov, Bulk_cargo_ship_Yakushev, Tanker_Elnya_160, LHA_1_Tarawa],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
Units from AirDefense category of UNIT_BY_TASK that will be removed from use if "No SAM" option is checked at the start of the game
|
||||||
|
"""
|
||||||
SAM_BAN = [
|
SAM_BAN = [
|
||||||
AirDefence.SAM_Avenger_M1097,
|
AirDefence.SAM_Avenger_M1097,
|
||||||
AirDefence.SAM_Patriot_ICC,
|
AirDefence.SAM_Patriot_ICC,
|
||||||
@ -156,19 +200,32 @@ SAM_BAN = [
|
|||||||
AirDefence.SAM_SA_8_Osa_9A33,
|
AirDefence.SAM_SA_8_Osa_9A33,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
"""
|
||||||
|
Units that will always be spawned in the air
|
||||||
|
"""
|
||||||
TAKEOFF_BAN = [
|
TAKEOFF_BAN = [
|
||||||
AV8BNA,
|
AV8BNA, # AI takeoff currently bugged attempting VTOL with no regards for the total weight
|
||||||
]
|
]
|
||||||
|
|
||||||
|
"""
|
||||||
|
Units that will be always spawned in the air if launched from the carrier
|
||||||
|
"""
|
||||||
CARRIER_TAKEOFF_BAN = [
|
CARRIER_TAKEOFF_BAN = [
|
||||||
Su_33,
|
Su_33, # Kuznecow is bugged in a way that only 2 aircraft could be spawned
|
||||||
]
|
]
|
||||||
|
|
||||||
|
"""
|
||||||
|
AirDefense units that will be spawned at control points not related to the current operation
|
||||||
|
"""
|
||||||
EXTRA_AA = {
|
EXTRA_AA = {
|
||||||
"Russia": AirDefence.SAM_SA_9_Strela_1_9P31,
|
"Russia": AirDefence.SAM_SA_9_Strela_1_9P31,
|
||||||
"USA": AirDefence.SAM_Patriot_EPP_III,
|
"USA": AirDefence.SAM_Patriot_EPP_III,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
Units separated by country. Currently only Russia and USA are supported.
|
||||||
|
Be advised that putting unit to the country that have not access to the unit in the game itself will result in incorrect missions generated!
|
||||||
|
"""
|
||||||
UNIT_BY_COUNTRY = {
|
UNIT_BY_COUNTRY = {
|
||||||
"Russia": [
|
"Russia": [
|
||||||
C_101CC,
|
C_101CC,
|
||||||
@ -251,6 +308,22 @@ UNIT_BY_COUNTRY = {
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
Aircraft payload overrides. Usually default loadout for the task is loaded during the mission generation.
|
||||||
|
Syntax goes as follows:
|
||||||
|
|
||||||
|
`AircraftIdentifier`: {
|
||||||
|
"Category": "PayloadName",
|
||||||
|
},
|
||||||
|
|
||||||
|
where:
|
||||||
|
* `AircraftIdentifier`: identifier of aircraft (the same that is used troughout the file)
|
||||||
|
* "Category": (in double quotes) is one of the tasks: CAS, CAP, Intercept, Escort or "*"
|
||||||
|
* "PayloadName": payload as found in resources/payloads/UNIT_TYPE.lua file. Sometimes this will match payload names
|
||||||
|
in the mission editor, sometimes it doesn't
|
||||||
|
|
||||||
|
Payload will be used for operation of following type, "*" category will be used always, no matter the operation.
|
||||||
|
"""
|
||||||
PLANE_PAYLOAD_OVERRIDES = {
|
PLANE_PAYLOAD_OVERRIDES = {
|
||||||
FA_18C_hornet: {
|
FA_18C_hornet: {
|
||||||
"*": "AIM-9M*6, AIM-7M*2, FUEL*3",
|
"*": "AIM-9M*6, AIM-7M*2, FUEL*3",
|
||||||
@ -277,10 +350,22 @@ PLANE_PAYLOAD_OVERRIDES = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
Aircraft livery overrides. Syntax as follows:
|
||||||
|
|
||||||
|
`Identifier`: "LiveryName",
|
||||||
|
|
||||||
|
`Identifier` is aircraft identifier (as used troughout the file) and "LiveryName" (with double quotes)
|
||||||
|
is livery name as found in mission editor.
|
||||||
|
"""
|
||||||
PLANE_LIVERY_OVERRIDES = {
|
PLANE_LIVERY_OVERRIDES = {
|
||||||
FA_18C_hornet: "VFA-34",
|
FA_18C_hornet: "VFA-34", # default livery for the hornet is blue angels one
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
---------- END OF CONFIGURATION SECTION
|
||||||
|
"""
|
||||||
|
|
||||||
UnitsDict = typing.Dict[UnitType, int]
|
UnitsDict = typing.Dict[UnitType, int]
|
||||||
PlaneDict = typing.Dict[FlyingType, int]
|
PlaneDict = typing.Dict[FlyingType, int]
|
||||||
HeliDict = typing.Dict[HelicopterType, int]
|
HeliDict = typing.Dict[HelicopterType, int]
|
||||||
|
|||||||
@ -10,7 +10,6 @@ from userdata.debriefing import Debriefing
|
|||||||
|
|
||||||
|
|
||||||
class AntiAAStrikeEvent(Event):
|
class AntiAAStrikeEvent(Event):
|
||||||
BONUS_BASE = 3
|
|
||||||
TARGET_AMOUNT_MAX = 2
|
TARGET_AMOUNT_MAX = 2
|
||||||
STRENGTH_INFLUENCE = 0.3
|
STRENGTH_INFLUENCE = 0.3
|
||||||
SUCCESS_TARGETS_HIT_PERCENTAGE = 0.5
|
SUCCESS_TARGETS_HIT_PERCENTAGE = 0.5
|
||||||
|
|||||||
@ -10,7 +10,6 @@ from userdata.debriefing import Debriefing
|
|||||||
|
|
||||||
|
|
||||||
class GroundInterceptEvent(Event):
|
class GroundInterceptEvent(Event):
|
||||||
BONUS_BASE = 3
|
|
||||||
TARGET_AMOUNT_FACTOR = 2
|
TARGET_AMOUNT_FACTOR = 2
|
||||||
TARGET_VARIETY = 2
|
TARGET_VARIETY = 2
|
||||||
STRENGTH_INFLUENCE = 0.3
|
STRENGTH_INFLUENCE = 0.3
|
||||||
|
|||||||
33
game/game.py
33
game/game.py
@ -12,6 +12,7 @@ from . import db
|
|||||||
from .settings import Settings
|
from .settings import Settings
|
||||||
from .event import *
|
from .event import *
|
||||||
|
|
||||||
|
COMMISION_UNIT_VARIETY = 4
|
||||||
COMMISION_LIMITS_SCALE = 1.5
|
COMMISION_LIMITS_SCALE = 1.5
|
||||||
COMMISION_LIMITS_FACTORS = {
|
COMMISION_LIMITS_FACTORS = {
|
||||||
PinpointStrike: 10,
|
PinpointStrike: 10,
|
||||||
@ -21,7 +22,6 @@ COMMISION_LIMITS_FACTORS = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
COMMISION_AMOUNTS_SCALE = 1.5
|
COMMISION_AMOUNTS_SCALE = 1.5
|
||||||
COMMISION_UNIT_VARIETY = 4
|
|
||||||
COMMISION_AMOUNTS_FACTORS = {
|
COMMISION_AMOUNTS_FACTORS = {
|
||||||
PinpointStrike: 2,
|
PinpointStrike: 2,
|
||||||
CAS: 1,
|
CAS: 1,
|
||||||
@ -31,6 +31,20 @@ COMMISION_AMOUNTS_FACTORS = {
|
|||||||
|
|
||||||
PLAYER_INTERCEPT_GLOBAL_PROBABILITY_BASE = 25
|
PLAYER_INTERCEPT_GLOBAL_PROBABILITY_BASE = 25
|
||||||
PLAYER_INTERCEPT_GLOBAL_PROBABILITY_LOG = 2
|
PLAYER_INTERCEPT_GLOBAL_PROBABILITY_LOG = 2
|
||||||
|
|
||||||
|
"""
|
||||||
|
Various events probabilities. First key is player probabilty, second is enemy probability.
|
||||||
|
For the enemy events, only 1 event of each type could be generated for a turn.
|
||||||
|
|
||||||
|
Events:
|
||||||
|
* CaptureEvent - capture base
|
||||||
|
* InterceptEvent - air intercept
|
||||||
|
* GroundInterceptEvent - frontline CAS
|
||||||
|
* GroundAttackEvent - destroy insurgents
|
||||||
|
* NavalInterceptEvent - naval intercept
|
||||||
|
* AntiAAStrikeEvent - anti-AA strike
|
||||||
|
* InfantryTransportEvent - helicopter infantry transport
|
||||||
|
"""
|
||||||
EVENT_PROBABILITIES = {
|
EVENT_PROBABILITIES = {
|
||||||
CaptureEvent: [100, 4],
|
CaptureEvent: [100, 4],
|
||||||
InterceptEvent: [25, 5],
|
InterceptEvent: [25, 5],
|
||||||
@ -41,13 +55,19 @@ EVENT_PROBABILITIES = {
|
|||||||
InfantryTransportEvent: [25, 0],
|
InfantryTransportEvent: [25, 0],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# amount of strength captures bases recover for the turn
|
||||||
PLAYER_BASE_STRENGTH_RECOVERY = 0.2
|
PLAYER_BASE_STRENGTH_RECOVERY = 0.2
|
||||||
PLAYER_BUDGET_INITIAL = 120
|
|
||||||
PLAYER_BUDGET_BASE = 30
|
|
||||||
PLAYER_BUDGET_IMPORTANCE_LOG = 2
|
|
||||||
|
|
||||||
|
# cost of AWACS for single operation
|
||||||
AWACS_BUDGET_COST = 4
|
AWACS_BUDGET_COST = 4
|
||||||
|
|
||||||
|
# Initial budget value
|
||||||
|
PLAYER_BUDGET_INITIAL = 120
|
||||||
|
# Base post-turn bonus value
|
||||||
|
PLAYER_BUDGET_BASE = 30
|
||||||
|
# Bonus multiplier logarithm base
|
||||||
|
PLAYER_BUDGET_IMPORTANCE_LOG = 2
|
||||||
|
|
||||||
|
|
||||||
class Game:
|
class Game:
|
||||||
settings = None # type: Settings
|
settings = None # type: Settings
|
||||||
@ -143,9 +163,8 @@ class Game:
|
|||||||
@property
|
@property
|
||||||
def budget_reward_amount(self):
|
def budget_reward_amount(self):
|
||||||
if len(self.theater.player_points()) > 0:
|
if len(self.theater.player_points()) > 0:
|
||||||
total_importance = sum([x.importance for x in self.theater.player_points()])
|
total_importance = sum([x.importance * x.base.strength for x in self.theater.player_points()])
|
||||||
total_strength = sum([x.base.strength for x in self.theater.player_points()]) / len(self.theater.player_points())
|
return math.ceil(math.log(total_importance + 1, PLAYER_BUDGET_IMPORTANCE_LOG) * PLAYER_BUDGET_BASE * self.settings.multiplier)
|
||||||
return math.ceil(math.log(total_importance * total_strength + 1, PLAYER_BUDGET_IMPORTANCE_LOG) * PLAYER_BUDGET_BASE * self.settings.multiplier)
|
|
||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user