fixed start.bat for usernames w/ spaces; fixed triggers for player defending; minor fixes

This commit is contained in:
Vasyl Horbachenko
2018-07-19 00:57:15 +03:00
parent e8098e795c
commit e266698e68
9 changed files with 60 additions and 39 deletions

View File

@@ -30,7 +30,7 @@ class FrontlineAttackEvent(Event):
def is_successfull(self, debriefing: Debriefing):
alive_attackers = sum([v for k, v in debriefing.alive_units[self.attacker_name].items() if db.unit_task(k) == PinpointStrike])
alive_defenders = sum([v for k, v in debriefing.alive_units[self.defender_name].items() if db.unit_task(k) == PinpointStrike])
attackers_success = (float(alive_attackers) / alive_defenders) > self.SUCCESS_FACTOR
attackers_success = (float(alive_attackers) / alive_defenders + 0.01) > self.SUCCESS_FACTOR
if self.from_cp.captured:
return attackers_success
else:

View File

@@ -42,7 +42,7 @@ class FrontlinePatrolEvent(Event):
def is_successfull(self, debriefing: Debriefing):
alive_attackers = sum([v for k, v in debriefing.alive_units[self.attacker_name].items() if db.unit_task(k) == PinpointStrike])
alive_defenders = sum([v for k, v in debriefing.alive_units[self.defender_name].items() if db.unit_task(k) == PinpointStrike])
attackers_success = (float(alive_attackers) / alive_defenders) >= self.SUCCESS_FACTOR
attackers_success = (float(alive_attackers) / alive_defenders + 0.01) >= self.SUCCESS_FACTOR
if self.from_cp.captured:
return attackers_success
else:

View File

@@ -9,14 +9,27 @@ from game.event.frontlineattack import FrontlineAttackEvent
from game.operation.insurgentattack import InsurgentAttackOperation
class InsurgentAttackEvent(FrontlineAttackEvent):
def __str__(self):
return "Destroy insurgents at {}".format(self.to_cp)
class InsurgentAttackEvent(Event):
SUCCESS_FACTOR = 0.7
TARGET_VARIETY = 2
TARGET_AMOUNT_FACTOR = 0.5
@property
def threat_description(self):
return ""
def __str__(self):
return "Destroy insurgents at {}".format(self.to_cp)
def is_successfull(self, debriefing: Debriefing):
killed_units = sum([v for k, v in debriefing.destroyed_units[self.attacker_name].items() if db.unit_task(k) == PinpointStrike])
all_units = sum(self.targets.values())
attackers_success = (float(killed_units) / all_units + 0.01) > self.SUCCESS_FACTOR
if self.from_cp.captured:
return attackers_success
else:
return not attackers_success
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

@@ -50,7 +50,7 @@ Events:
EVENT_PROBABILITIES = {
BaseAttackEvent: [100, 10],
FrontlineAttackEvent: [100, 0],
FrontlinePatrolEvent: [1000, 0],
FrontlinePatrolEvent: [100, 0],
InterceptEvent: [25, 10],
InsurgentAttackEvent: [0, 10],
NavalInterceptEvent: [25, 10],
@@ -217,13 +217,15 @@ class Game:
else:
print("finish_event: event not in the events!")
def is_player_attack(self, event: Event):
return event.attacker_name == self.player
def is_player_attack(self, event):
if isinstance(event, Event):
return event.attacker_name == self.player
else:
return event.name == self.player
def pass_turn(self, no_action=False, ignored_cps: typing.Collection[ControlPoint]=None):
for event in self.events:
if isinstance(event, UnitsDeliveryEvent):
event.skip()
event.skip()
if not no_action:
self._budget_player()

View File

@@ -81,7 +81,13 @@ class Operation:
self.awacsgen.generate(self.is_awacs_enabled)
self.extra_aagen.generate()
self.triggersgen.generate(self.is_quick, self.trigger_radius)
if self.game.is_player_attack(self.conflict.attackers_side):
cp = self.conflict.from_cp
else:
cp = self.conflict.to_cp
self.triggersgen.generate(cp, self.is_quick, self.trigger_radius)
if self.environment_settings is None:
self.environment_settings = self.envgen.generate()