Missions taking place in enemy territory now award 25% more XP

This commit is contained in:
Ambroise Garel 2025-07-29 15:51:18 +02:00
parent 1bc1fbca96
commit 117f5502ab
4 changed files with 20 additions and 9 deletions

View File

@ -82,7 +82,11 @@ The exact content of the menu will depend on the current phase of the mission.
- **Interception**: Shoot down strategic airplanes (bombers, transports...) and enemy attack planes on interdiction missions.
- **SEAD**: Destroy enemy SAM sites.
- **Strike**: Destroy enemy structures and civilian buildings occupied by enemy forces.
- **Target location**: Where on the map will the targets be spawned? Approximate distance to possible regions is displayed in the menu. You can also. Make sure to pick a region not too far away from your starting location if you don't like long ingresses. Picking a region very close to your starting location (for instance, the one where your airbase is located in) can also be a bad idea, as you might takeoff in range of an enemy SAM. Be aware that targets of antiship strikes will always be spawned in open seas, which can be quite far if you picked a landlocked target zone.
- **Target location**: Where on the map will the targets be spawned? Approximate distance to possible regions is displayed in the menu.
- Missions taking place in enemy territory now award 25% more XP to account for increased SAM threat and proximity of enemy airbases.
- Make sure to pick a region not too far away from your starting location if you don't like long ingresses.
- Picking a region very close to your starting location (for instance, the one where your airbase is located in) can also be a bad idea, as you might takeoff in range of an enemy SAM.
- Be aware that targets of antiship strikes will always be spawned in open seas, which can be quite far if you picked a landlocked target zone.
- **Target count**: How many objectives will be spawned. More objectives means potentially more xp in a single sortie, so better medals, but also more work and more risk. Be aware that you can RTB to rearm/refuel at any time between objectives, but you won't accumulate as many single-sortie XP as if you complete objectives without going back to base, because XP is awarded to your profile and reset each time you land.
- **Enemy air defense**: Amount, quality and skill of enemy surface-to-air units (AAA, MANPADS and SAM). A higher setting awards more XP.
- **Enemy air force**: Amount, quality and skill of enemy combat air patrols. A higher setting awards more XP.
@ -246,6 +250,7 @@ The core script is quite simple and small, I probably won't need too much help w
- Increased minimum aircraft spawn altitude to avoir crashes in nearby hills
- Infantry escaping from destroyed vehicles is now hidden on F10 map, as it should be
- Interception objectives are now marked as complete when target is shot down
- Missions taking place in enemy territory now award 25% more XP to account for increased SAM threat and proximity of enemy airbases
- Moved "Request objective coordinates" radio commands to new "Navigation" submenu, which will include additional navigational assist in future versions
- Lowered MANPADS count and skill (MANPADS are overpowered in DCS, especially SA-18)
- "New friendly/enemy aircraft taking off" radio messages now mention their BRAA relative to the player, number of bandits taking off now displayed as a word instead of digits

View File

@ -31,8 +31,8 @@ do
trigger.action.outText("Generating mission and loading assets, this can take some time...", 5)
-- Add a little delay for the "Generating mission..." message be printed out. Once generation begins, the main DCS thread will be to busy to output anything.
timer.scheduleFunction(TUM.mission.beginMission, false, timer.getTime() + 1)
-- TUM.mission.beginMission()
end
local function setSetting(args)

View File

@ -263,7 +263,7 @@ do
-- @param settingValue The setting value, or nil to use the current value
-- @return A number in the -1.0 to +1.0 range, or nil if this setting has no effect on XP gains
-------------------------------------
function TUM.playerScore.getScoreMultiplierMod(settingID, settingValue)
function TUM.playerScore.getScoreMultiplier(settingID, settingValue)
if not DCSEx.io.canReadAndWrite() then return 0 end -- IO disabled, career and scoring disabled
if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return 0 end -- No scoring in multiplayer
@ -273,10 +273,14 @@ do
return ENEMY_DEFENSE_MULTIPLIER_BONUS[settingValue]
elseif settingID == TUM.settings.id.WINGMEN then
return 0 - 0.10 * (settingValue - 1)
elseif settingID == TUM.settings.id.TARGET_LOCATION then
local zoneName = TUM.settings.getValue(TUM.settings.id.TARGET_LOCATION, true)
local tgtZone = DCSEx.zones.getByName(zoneName)
if not tgtZone then return 0 end
if TUM.territories.getPointOwner(tgtZone) == TUM.settings.getEnemyCoalition() then return 0.25 end
return 0
elseif settingID == TUM.settings.id.AI_CAP then
if settingValue == 2 and TUM.settings.getValue(TUM.settings.id.ENEMY_AIR_FORCE) > 1 then
return 0.15
end
if settingValue == 2 and TUM.settings.getValue(TUM.settings.id.ENEMY_AIR_FORCE) > 1 then return 0.15 end
return 0
end
@ -293,7 +297,7 @@ do
local scoreMultiplier = 1.0
for _,v in pairs(TUM.settings.id) do
scoreMultiplier = scoreMultiplier + (TUM.playerScore.getScoreMultiplierMod(v) or 0.0)
scoreMultiplier = scoreMultiplier + (TUM.playerScore.getScoreMultiplier(v) or 0.0)
end
return math.max(0.0, scoreMultiplier)

View File

@ -57,6 +57,8 @@ do
[TUM.settings.id.WINGMEN] = { "None", "1", "2", "3" }
}
local targetLocation
local function getFaction(side)
if side == coalition.side.BLUE then
return TUM.settings.getValue(TUM.settings.id.COALITION_BLUE, true)
@ -180,11 +182,11 @@ do
end
if showScoreMultiplier then
local settingMultiplier = TUM.playerScore.getScoreMultiplierMod(v, settings[v])
local settingMultiplier = TUM.playerScore.getScoreMultiplier(v, settings[v])
if settingMultiplier ~= nil then -- Must add "~= nil" because can be 0
summary = summary.." ("
if settingMultiplier >= 0.0 then summary = summary.."+" end
if settingMultiplier >= 0 then summary = summary.."+" end
summary = summary..tostring(math.ceil(settingMultiplier * 100)).."% xp)"
end
end