20 Commits
Author SHA1 Message Date
dutchie031 428fe75a12 wip 2026-08-29 16:12:43 +02:00
dutchie031 2e5a31faef Custom briefings for BlueSam and FARPS 2026-08-29 15:57:29 +02:00
dutchie031 5601091b8f Merge branch 'main' into develop 2026-08-22 15:02:35 +02:00
dutchie031 18eff4b85a merged main 2026-08-20 18:50:24 +02:00
dutchie031 952daa2897 Cutting a release
Publish Release / build (push) Canceled after 22s
2026-08-20 16:58:43 +02:00
dutchie031 7c0c5e4a85 updated briefings to be shown during spawn (#31)
Publish Release / build (push) Successful in 22s
fixes #26

Reviewed-on: #31
Co-authored-by: dutchie031 <timrorije@gmail.com>
2026-08-20 14:06:42 +00:00
dutchie031 970f049440 Updated max distance to be configurable (#29)
Publish Release / build (push) Successful in 12s
Partly addresses #24

Does not fully fix thoughReviewed-on: #29

Co-authored-by: dutchie031 <timrorije@gmail.com>
2026-08-18 18:23:07 +00:00
dutchie031 63a1ea44db Fix/ pre activation (#28)
Publish Release / build (push) Successful in 39s
fixes: #8Reviewed-on: #28

Co-authored-by: dutchie031 <timrorije@gmail.com>
2026-08-18 12:50:12 +00:00
dutchie031 c8329108dd added link to the release
Publish Release / build (push) Successful in 14s
2026-08-17 12:31:25 +02:00
dutchie031 a88520a413 trigger beta branch
Publish Release / build (push) Successful in 14s
2026-08-17 12:14:32 +02:00
dutchie031 d8764c6824 Fix/briefing warnings (#20)
Reviewed-on: #20
Co-authored-by: dutchie031 <timrorije@gmail.com>
2026-08-17 10:13:25 +00:00
dutchie031 d0e7f2aae4 fixed briefings faulty giving warnings (#19)
Publish Release / build (push) Successful in 15s
Changed order of checking for mission briefings

fixes #9Reviewed-on: #19

Co-authored-by: dutchie031 <timrorije@gmail.com>
2026-08-17 10:12:24 +00:00
dutchie031 8c75ba5027 Fix/custom drawings (#18)
Publish Release / build (push) Successful in 13s
Reviewed-on: #18
Co-authored-by: dutchie031 <timrorije@gmail.com>
2026-08-17 09:32:01 +00:00
dutchie031 52f97f7c92 webhook embed in release action
Publish Release / build (push) Successful in 13s
2026-08-16 14:45:14 +02:00
dutchie031 e5abfe19d6 webhook embed in release action 2026-08-16 14:44:55 +02:00
dutchie031 b34918ff28 webhook embed in release action
Publish Release / build (push) Successful in 56s
2026-08-16 14:40:49 +02:00
dutchie031 ab910b8faf webhook embed in release action 2026-08-16 14:38:46 +02:00
dutchie031 f677a83c8e Crate spawning update (#17)
Publish Release / build (push) Successful in 42s
Reviewed-on: #16
Co-authored-by: dutchie031 <timrorije@gmail.com>

Issue: #11

-[ ] Tested
-[ ] Reviewed
-[ ] Release notes updatedReviewed-on: #17
2026-08-16 11:55:34 +00:00
dutchie031 a1e36aa5d7 supplyHub Commands wiring and event triggers wired for more real time updates (#15)
Publish Release / build (push) Successful in 16s
Issue: #10

- [x] Tested
- [x] Reviewed
- [x] ReleaseNotes UpdatedReviewed-on: #15

Co-authored-by: dutchie031 <timrorije@gmail.com>
2026-08-15 15:06:32 +00:00
dutchie031 bb9144e3a0 updating develop branch now automatically creates beta release (#16)
Reviewed-on: #16
Co-authored-by: dutchie031 <timrorije@gmail.com>
2026-08-14 18:57:33 +00:00
6 changed files with 86 additions and 10 deletions
+7
View File
@@ -253,6 +253,13 @@
To make an airbase buildable add a text box inside of the trigger zone and name it: <code-inline>buildable_[freeform]</code-inline> <br/>
Then in the text box type amount of kilo's you want to be transfered before the logistisc mission is complete. <br/>
<br>
To add a custom briefing for a buildable zone, include a text box inside the trigger zone and name it: <code-inline>supplybriefing_[freeform]</code-inline>.
<code-inline>{{coords}}</code-inline> is highly recommended for the players.<br>
Additionally, the amount of kilos required and delivered are always shown on the bottom, as well as a note to not land in the construction zone.
<br/>
<br>
The base or zone will slowly build up with each crate giving both a nice view of it happening AND it's good for performance as there's not a big addition of objects at once. <br/>
Right now a crate takes 15 seconds to unpack per 500kg. Meaning 2 crates of 1000kg will be faster than 1 crate of 2000kg. <br/>
+47
View File
@@ -58,6 +58,7 @@ local CustomDrawing = require("classes.stageClasses.drawings.CustomDrawing")
---@class BlueSamData
---@field groups Array<string>
---@field buildingKilos number?
---@field briefing string?
---@class MissionZoneData
---@field ZoneName string
@@ -74,6 +75,7 @@ local CustomDrawing = require("classes.stageClasses.drawings.CustomDrawing")
---@field padNames Array<string>
---@field buildingKilos number?
---@field supplyHubNames Array<string>
---@field briefing string?
---@class Database
---@field private _tables DatabaseTables
@@ -614,6 +616,27 @@ function Database:loadBlueSamUnits()
local number = tonumber(kvPair.value)
if number and number > 0 then
samData.buildingKilos = number
if env.mission.drawings and env.mission.drawings.layers then
for i, layer in pairs(env.mission.drawings.layers) do
if string.lower(layer.name) == "author" then
for key, layer_object in pairs(layer.objects) do
local vec2 = { x = layer_object.mapX, y = layer_object.mapY }
if triggerZone and Util.is2dPointInZone(vec2, triggerZone) then
if layer_object.name and Util.startswith(layer_object.name, "supplybriefing_", true) then
local description = layer_object.text
if description and description ~= "" then
samData.briefing = description
end
end
end
end
end
end
end
else
MissionEditorWarnings.Add("Buildable number for " .. blueSamZone .. " is invalid")
end
end
end
@@ -748,7 +771,31 @@ function Database:loadFarpData()
local number = tonumber(kvPair.value)
if number and number > 0 then
farpzoneData.buildingKilos = number
-- check briefings
if env.mission.drawings and env.mission.drawings.layers then
for i, layer in pairs(env.mission.drawings.layers) do
if string.lower(layer.name) == "author" then
for key, layer_object in pairs(layer.objects) do
local vec2 = { x = layer_object.mapX, y = layer_object.mapY }
if triggerZone and Util.is2dPointInZone(vec2, triggerZone) then
if layer_object.name and Util.startswith(layer_object.name, "supplybriefing_", true) then
local description = layer_object.text
if description and description ~= "" then
farpzoneData.briefing = description
end
end
end
end
end
end
end
else
MissionEditorWarnings.Add("Buildable number for " .. farpZone .. " is invalid.")
end
end
end
end
@@ -89,7 +89,7 @@ function BlueSam.New(database, logger, zoneName, spawnManager)
local zone = DcsUtil.getZoneByName(zoneName)
if zone then
BuildableZone.New(self, zone, self._buildableCrateKilos or 0, "SAM_CRATE", self._blueGroups, logger, database)
BuildableZone.New(self, zone, self._buildableCrateKilos or 0, "SAM_CRATE", self._blueGroups, logger, database, blueSamData.briefing)
end
return self
@@ -64,7 +64,7 @@ function FarpZone.New(database, logger, zoneName, spawnManager)
local zone = DcsUtil.getZoneByName(zoneName)
if zone then
self._logger:debug("Creating Buildable zone: " .. zoneName .. " with " .. (farpData.buildingKilos or "nil") .. " kilos")
BuildableZone.New(self, zone, farpData.buildingKilos or 0, "FARP_CRATE", self._groups, logger, database)
BuildableZone.New(self, zone, farpData.buildingKilos or 0, "FARP_CRATE", self._groups, logger, database, farpData.briefing)
end
end
self:Deactivate()
@@ -20,7 +20,8 @@ BuildableZone.__index = BuildableZone
---@param database Database
---@param crateType SupplyType
---@param logger Logger
function BuildableZone:New(targetZone, kilosRequired, crateType, buildableGroups, logger, database)
---@param briefing string?
function BuildableZone:New(targetZone, kilosRequired, crateType, buildableGroups, logger, database, briefing)
self._targetZone = targetZone
self._requiredKilos = kilosRequired or 0
self._buildableGroups = buildableGroups or {}
@@ -69,7 +70,7 @@ function BuildableZone:New(targetZone, kilosRequired, crateType, buildableGroup
local noLandingZone = self:GetNoLandingZone()
if kilosRequired and kilosRequired > 0 then
self._buildableMission = BuildableMission.new(database, logger, targetZone, noLandingZone, kilosRequired, crateType)
self._buildableMission = BuildableMission.new(database, logger, targetZone, noLandingZone, kilosRequired, crateType, briefing)
self._buildableMission:AddOnCrateDroppedOfListener(self)
else
self._buildableMission = nil
@@ -21,9 +21,18 @@ local DrawingHelper = require("classes.stageClasses.drawings.helper.DrawingHelpe
---@field private _dropOffZone SpearheadTriggerZone?
---@field private _noLandingZoneDrawing CustomDrawing?
---@field private _dropOffZoneDrawing CustomDrawing?
---@field private _briefing string?
local BuildableMission = {}
BuildableMission.__index = BuildableMission
local function getDefaultBriefing(siteType, coords)
return "We've dispatched forward units to find a proper spot for a new " .. siteType .. "." ..
"\nYou will need to drop off supplies so they can start building." ..
"\nThe coords are: " .. coords ..
"\n\n"
end
---@class OnCrateDroppedListener
---@field OnCrateDroppedOff fun(self:OnCrateDroppedListener, mission:BuildableMission, kilos:number)
@@ -33,7 +42,8 @@ BuildableMission.__index = BuildableMission
---@param requiredCrateType SupplyType
---@param noLandingZone SpearheadTriggerZone?
---@param logger Logger
function BuildableMission.new(database, logger, targetZone, noLandingZone, requiredKilos, requiredCrateType)
---@param briefing string?
function BuildableMission.new(database, logger, targetZone, noLandingZone, requiredKilos, requiredCrateType, briefing)
setmetatable(BuildableMission, Mission)
@@ -43,6 +53,7 @@ function BuildableMission.new(database, logger, targetZone, noLandingZone, requi
self._database = database
self._requiredKilos = requiredKilos
self._droppedKilos = 0
self._briefing = briefing
self._noLandingZone = noLandingZone
@@ -64,7 +75,13 @@ function BuildableMission.new(database, logger, targetZone, noLandingZone, requi
end
self.code = tostring(database:GetNewMissionCode())
self.name = "Resupply"
local splitTargetZoneName = Util.split_string(targetZone.name, "_")
if splitTargetZoneName and #splitTargetZoneName[3] then
self.name = splitTargetZoneName[3]
else
self.name = "Resupply"
end
local type = "site"
if requiredCrateType == "SAM_CRATE" then
@@ -81,7 +98,6 @@ function BuildableMission.new(database, logger, targetZone, noLandingZone, requi
self._supplyUnitsTracker = SupplyUnitsTracker.getOrCreate()
self._state = "NEW"
self.location = targetZone.location
self.missionType = "LOGISTICS"
@@ -116,11 +132,16 @@ function BuildableMission:ShowBriefing(groupID)
siteType = "airbase"
end
local briefingPart = self._briefing
if briefingPart then
briefingPart = Util.replaceString(briefingPart, "{{coords}}", coords)
else
briefingPart = getDefaultBriefing(siteType, coords)
end
local briefing = "Mission [" .. self.code .. "] " .. self.name ..
"\n \n" ..
"We've dispatched forward units to find a proper spot for a new " .. siteType .. "." ..
"\nYou will need to drop off supplies so they can start building." ..
"\nThe coords are: " .. coords ..
briefingPart ..
"\n\n" ..
"\nKilos still required: " .. self._requiredKilos - self._droppedKilos ..
"\n\n" ..