non-linear importance; balance updates

This commit is contained in:
Vasyl Horbachenko
2018-07-04 01:33:52 +03:00
parent c6098eb9c2
commit 187ce4a2c5
7 changed files with 55 additions and 46 deletions

View File

@@ -101,8 +101,8 @@ PRICES = {
AirDefence.AAA_ZU_23_on_Ural_375: 5,
AirDefence.SAM_SA_18_Igla_S_MANPADS: 8,
AirDefence.SAM_SA_19_Tunguska_2S6: 10,
AirDefence.SAM_SA_8_Osa_9A33: 15,
AirDefence.SAM_SA_19_Tunguska_2S6: 15,
AirDefence.SAM_SA_8_Osa_9A33: 13,
# ship
CV_1143_5_Admiral_Kuznetsov: 100,
@@ -174,13 +174,15 @@ UNIT_BY_TASK = {
AirDefence.AAA_Vulcan_M163,
AirDefence.SAM_Avenger_M1097,
AirDefence.SAM_Avenger_M1097,
AirDefence.SAM_Avenger_M1097,
AirDefence.SAM_Patriot_ICC,
AirDefence.AAA_ZU_23_on_Ural_375,
AirDefence.AAA_ZU_23_on_Ural_375,
AirDefence.SAM_SA_19_Tunguska_2S6,
AirDefence.SAM_SA_19_Tunguska_2S6,
AirDefence.AAA_ZU_23_on_Ural_375,
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_19_Tunguska_2S6,
],
Reconnaissance: [Unarmed.Transport_M818, Unarmed.Transport_Ural_375, Unarmed.Transport_UAZ_469],
@@ -240,7 +242,6 @@ UNIT_BY_COUNTRY = {
MiG_29A,
MiG_29S,
M_2000C,
AV8BNA,
Su_25T,
Su_34,
@@ -258,8 +259,8 @@ UNIT_BY_COUNTRY = {
AirDefence.AAA_ZU_23_on_Ural_375,
AirDefence.SAM_SA_18_Igla_S_MANPADS,
AirDefence.SAM_SA_19_Tunguska_2S6,
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_19_Tunguska_2S6,
Armor.APC_BTR_80,
Armor.MBT_T_90,
@@ -415,7 +416,7 @@ def choose_units(for_task: Task, factor: float, count: int, country: str) -> typ
index_start = min(idx, len(suitable_unittypes) - variety)
index_end = min(idx + variety, len(suitable_unittypes))
return suitable_unittypes[index_start:index_end]
return set(suitable_unittypes[index_start:index_end])
def _validate_db():

View File

@@ -13,6 +13,10 @@ class GroundAttackEvent(GroundInterceptEvent):
def __str__(self):
return "Destroy insurgents at {}".format(self.to_cp)
@property
def threat_description(self):
return ""
def player_defending(self, strikegroup: db.PlaneDict, clients: db.PlaneDict):
suitable_unittypes = db.find_unittype(Reconnaissance, self.attacker_name)
random.shuffle(suitable_unittypes)

View File

@@ -18,7 +18,7 @@ COMMISION_LIMITS_FACTORS = {
PinpointStrike: 10,
CAS: 5,
CAP: 8,
AirDefence: 2,
AirDefence: 1,
}
COMMISION_AMOUNTS_SCALE = 1.5
@@ -46,18 +46,21 @@ Events:
* InfantryTransportEvent - helicopter infantry transport
"""
EVENT_PROBABILITIES = {
CaptureEvent: [100, 8],
InterceptEvent: [25, 12],
GroundInterceptEvent: [25, 12],
GroundAttackEvent: [0, 12],
NavalInterceptEvent: [25, 12],
AntiAAStrikeEvent: [25, 12],
CaptureEvent: [100, 10],
InterceptEvent: [25, 10],
GroundInterceptEvent: [25, 10],
GroundAttackEvent: [0, 10],
NavalInterceptEvent: [25, 10],
AntiAAStrikeEvent: [25, 10],
InfantryTransportEvent: [25, 0],
}
# amount of strength captures bases recover for the turn
# amount of strength player bases recover for the turn
PLAYER_BASE_STRENGTH_RECOVERY = 0.2
# amount of strength enemy bases recover for the turn
ENEMY_BASE_STRENGTH_RECOVERY = 0.05
# cost of AWACS for single operation
AWACS_BUDGET_COST = 4
@@ -110,11 +113,10 @@ class Game:
for event_class, (player_probability, enemy_probability) in EVENT_PROBABILITIES.items():
if self._roll(player_probability, player_cp.base.strength):
if event_class == NavalInterceptEvent:
if enemy_cp.radials == LAND:
continue
self.events.append(event_class(self.player, self.enemy, player_cp, enemy_cp, self))
if event_class == NavalInterceptEvent and enemy_cp.radials == LAND:
pass
else:
self.events.append(event_class(self.player, self.enemy, player_cp, enemy_cp, self))
elif self._roll(enemy_probability, enemy_cp.base.strength):
if event_class in enemy_generated_types:
continue
@@ -214,8 +216,10 @@ class Game:
if not no_action:
self._budget_player()
for cp in self.theater.enemy_points():
self._commision_units(cp)
for cp in self.theater.player_points():
cp.base.affect_strength(+PLAYER_BASE_STRENGTH_RECOVERY)