mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Merge pull request #44 from calvinmorrow/bugfix_37
Add initiatorMissionID key to multiplayer debriefing table
This commit is contained in:
commit
b3e729af0d
33
README.md
33
README.md
@ -1,8 +1,33 @@
|
||||
[DCS World](https://www.digitalcombatsimulator.com/en/products/world/) single-player liberation dynamic campaign.
|
||||

|
||||
|
||||
[Installation instructions/Manual](https://github.com/shdwp/dcs_liberation/wiki)
|
||||
|
||||
Inspired by *ARMA Liberation* mission.
|
||||
[DCS World](https://www.digitalcombatsimulator.com/en/products/world/) single-player dynamic campaign.
|
||||
|
||||
Uses [pydcs](http://github.com/pydcs/dcs) for mission generation.
|
||||
|
||||
## Installation
|
||||
1. Download and install **Python 3.6.0** package from https://www.python.org/downloads/release/python-360/ (look at the bottom under *Files*; any option will do if it matches your architecture) with default set of options (you need to have *Install launcher for all users (recommended)* checked)
|
||||
1. Download archived release (https://github.com/shdwp/dcs_liberation/releases; **not source code zip**, file should be named **dcs_liberation_xx.zip**)
|
||||
1. Unzip the archive somewhere. Path does not matter. **Application will not work** if you start it without extracting
|
||||
1. Run **start.bat**
|
||||
1. If **"Windows protected your PC"** popup appears on your computer (windows blocks any application unknown to it), you can click on **"More info"** and **"Run anyway"**
|
||||
|
||||
## Tutorials
|
||||
* [Manual](https://github.com/shdwp/dcs_liberation/wiki/Manual)
|
||||
|
||||
You should start with the manual, it covers everything you need to know before playing the campaign.
|
||||
|
||||
* [Strike objectives reference images](https://imgur.com/a/vCSHa9f)
|
||||
|
||||
If you can't find the strike objective you can see here how it's supposed to look.
|
||||
|
||||
* [Troubleshooting](https://github.com/shdwp/dcs_liberation/wiki/Troubleshooting)
|
||||
|
||||
You could also briefly check the troubleshooting page to get familiar with the known issues that you could probably fix by yourself.
|
||||
|
||||
* [Modding tutorial](https://github.com/shdwp/dcs_liberation/wiki/Modding-tutorial)
|
||||
|
||||
Modding tutorial will cover how to change default loadouts, configure which planes are present in the campaign (or add new altogether) and more. Check this out if you find that something is not going for your liking, there could be a tutorial for changing that. Although be aware that it would require changing source files and could easily result in non functioning application.
|
||||
|
||||
* [Development guide](https://github.com/shdwp/dcs_liberation/wiki/Development-guide)
|
||||
|
||||
If you want to contribute to the project, this will give you a brief overview and on how to actually run it from source files.
|
||||
|
||||
34
game/db.py
34
game/db.py
@ -85,15 +85,14 @@ PRICES = {
|
||||
C_130: 8,
|
||||
|
||||
# armor
|
||||
Armor.MBT_T_55: 4,
|
||||
Armor.MBT_T_80U: 8,
|
||||
Armor.MBT_T_90: 10,
|
||||
Armor.APC_BTR_80: 12,
|
||||
Armor.MBT_T_55: 14,
|
||||
Armor.MBT_T_80U: 18,
|
||||
Armor.MBT_T_90: 20,
|
||||
|
||||
Armor.MBT_M60A3_Patton: 6,
|
||||
Armor.MBT_M1A2_Abrams: 9,
|
||||
|
||||
Armor.ATGM_M1134_Stryker: 6,
|
||||
Armor.APC_BTR_80: 6,
|
||||
Armor.ATGM_M1134_Stryker: 12,
|
||||
Armor.MBT_M60A3_Patton: 14,
|
||||
Armor.MBT_M1A2_Abrams: 18,
|
||||
|
||||
Unarmed.Transport_UAZ_469: 3,
|
||||
Unarmed.Transport_Ural_375: 3,
|
||||
@ -181,7 +180,24 @@ UNIT_BY_TASK = {
|
||||
|
||||
AWACS: [E_3A, A_50, ],
|
||||
|
||||
PinpointStrike: [Armor.MBT_T_90, Armor.MBT_T_80U, Armor.MBT_T_55, Armor.MBT_M1A2_Abrams, Armor.MBT_M60A3_Patton, Armor.ATGM_M1134_Stryker, Armor.APC_BTR_80, ],
|
||||
PinpointStrike: [
|
||||
Armor.APC_BTR_80,
|
||||
Armor.APC_BTR_80,
|
||||
Armor.APC_BTR_80,
|
||||
Armor.MBT_T_55,
|
||||
Armor.MBT_T_55,
|
||||
Armor.MBT_T_55,
|
||||
Armor.MBT_T_80U,
|
||||
Armor.MBT_T_80U,
|
||||
Armor.MBT_T_90,
|
||||
|
||||
Armor.ATGM_M1134_Stryker,
|
||||
Armor.ATGM_M1134_Stryker,
|
||||
Armor.MBT_M60A3_Patton,
|
||||
Armor.MBT_M60A3_Patton,
|
||||
Armor.MBT_M60A3_Patton,
|
||||
Armor.MBT_M1A2_Abrams,
|
||||
],
|
||||
AirDefence: [
|
||||
# those are listed multiple times here to balance prioritization more into lower tier AAs
|
||||
AirDefence.AAA_Vulcan_M163,
|
||||
|
||||
@ -20,7 +20,7 @@ FRONTLINE_CAS_FIGHTS_COUNT = 4, 8
|
||||
FRONTLINE_CAS_GROUP_MIN = 1, 2
|
||||
FRONTLINE_CAS_PADDING = 12000
|
||||
|
||||
FIGHT_DISTANCE = 1500
|
||||
FIGHT_DISTANCE = 3500
|
||||
|
||||
|
||||
class ArmorConflictGenerator:
|
||||
|
||||
@ -27,9 +27,10 @@ class GroundObjectsGenerator:
|
||||
center, heading = self.conflict.frontline_position(self.conflict.theater, self.conflict.from_cp, self.conflict.to_cp)
|
||||
heading -= 90
|
||||
|
||||
position = self.conflict.find_ground_position(center.point_from_heading(heading, FARP_FRONTLINE_DISTANCE), heading)
|
||||
initial_position = center.point_from_heading(heading, FARP_FRONTLINE_DISTANCE)
|
||||
position = self.conflict.find_ground_position(initial_position, heading)
|
||||
if not position:
|
||||
return
|
||||
position = initial_position
|
||||
|
||||
for i, _ in enumerate(range(0, number_of_units, self.FARP_CAPACITY)):
|
||||
position = position.point_from_heading(0, i * 275)
|
||||
|
||||
@ -81,9 +81,6 @@ class TriggersGenerator:
|
||||
if group.task == AWACS.name or group.task == Refueling.name:
|
||||
continue
|
||||
|
||||
if player_cp.position.distance_to_point(group.position) > PUSH_TRIGGER_SIZE * 3:
|
||||
continue
|
||||
|
||||
push_by_trigger.append(group)
|
||||
|
||||
if not group.units[0].is_human():
|
||||
|
||||
@ -64,10 +64,9 @@ class CaucasusTheater(ConflictTheater):
|
||||
self.add_controlpoint(self.gudauta, connected_to=[self.sochi, self.sukhumi])
|
||||
self.add_controlpoint(self.sochi, connected_to=[self.gudauta, self.gelendzhik])
|
||||
|
||||
self.add_controlpoint(self.gelendzhik, connected_to=[self.sochi, self.novorossiysk])
|
||||
self.add_controlpoint(self.novorossiysk, connected_to=[self.gelendzhik, self.anapa])
|
||||
self.add_controlpoint(self.krymsk, connected_to=[self.novorossiysk, self.anapa, self.krasnodar])
|
||||
self.add_controlpoint(self.anapa, connected_to=[self.novorossiysk, self.krymsk])
|
||||
self.add_controlpoint(self.gelendzhik, connected_to=[self.sochi, ])
|
||||
self.add_controlpoint(self.krymsk, connected_to=[self.anapa, self.krasnodar])
|
||||
self.add_controlpoint(self.anapa, connected_to=[self.krymsk])
|
||||
self.add_controlpoint(self.krasnodar, connected_to=[self.krymsk, self.maykop])
|
||||
|
||||
self.add_controlpoint(self.carrier_1)
|
||||
|
||||
@ -42,6 +42,10 @@ def parse_mutliplayer_debriefing(contents: str):
|
||||
key = "initiator"
|
||||
if element is None:
|
||||
element = {}
|
||||
elif line.startswith("initiatorMissionID\t"):
|
||||
key = "initiatorMissionID"
|
||||
if element is None:
|
||||
element = {}
|
||||
elif line.startswith("type\t"):
|
||||
key = "type"
|
||||
if element is None:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user