usher = {} usher.version = "1.0.0" usher.requiredLibs = { "dcsCommon", -- always "cfxZones", -- Zones, of course } usher.players = {} -- dicts by name, holds a number usher.types = {} usher.units = {} usher.groups = {} usher.coas = {} usher.lastPNum = 0 function usher.incFlag(name) cfxZones.pollFlag(name, "inc", usher) -- support multiple flags and local local v = trigger.misc.getUserFlag(name) if usher.verbose then trigger.action.outText("+++Ush: banged <" .. name .. "> with <" .. v .. ">", 30) end end -- wildcard proccing function usher.processStringWildcardsForUnit(inMsg, theUnit) return dcsCommon.processStringWildcards(inMsg, theUnit) --[[-- local msg = dcsCommon.processStringWildcards(inMsg) local uName = theUnit:getName() msg = msg:gsub("", uName) pName = "!AI!" if dcsCommon.isPlayerUnit(theUnit) then pName = theUnit:getPlayerName() else return end msg = msg:gsub("
", pName)
msg = msg:gsub(" , your !")
usher.playerSound = theZone:getStringFromZoneProperty("playerSound", "none")
usher.playerCommand = theZone:getStringFromZoneProperty("player!", "cfxNone")
usher.unitEvent = theZone:getBoolFromZoneProperty("unitEvent", false)
usher.unitMsg = theZone:getStringFromZoneProperty("unitMsg", "Welcome , you are , part of , you are part of !")
usher.prefix = theZone:getStringFromZoneProperty("prefix", "u:")
usher.redNum = theZone:getStringFromZoneProperty("red#", "cfxNone")
usher.blueNum = theZone:getStringFromZoneProperty("blue#", "cfxNone")
usher.neuNum = theZone:getStringFromZoneProperty("neutral#", "cfxNone")
usher.pNum = theZone:getStringFromZoneProperty("pNum#", "cfxNone")
usher.pJoin = theZone:getStringFromZoneProperty("join!", "cfxNone")
usher.pLeave = theZone:getStringFromZoneProperty("leave!", "cfxNone")
usher.ups = theZone:getNumberFromZoneProperty("ups", 0.1) -- every 10 secs
usher.method = theZone:getStringFromZoneProperty("method", "inc")
usher.verbose = theZone.verbose
usher.name = "usherConfig"
end
-- update
function usher.update()
timer.scheduleFunction(usher.update, nil, timer.getTime() + 1/usher.ups)
-- count players per side and set # outputs
local numPlayers = coalition.getPlayers(2)
local total = #numPlayers
cfxZones.setFlagValue(usher.blueNum, #numPlayers, usher)
numPlayers = coalition.getPlayers(1)
total = total + #numPlayers
cfxZones.setFlagValue(usher.redNum, #numPlayers, usher)
numPlayers = coalition.getPlayers(0)
cfxZones.setFlagValue(usher.neuNum, #numPlayers, usher)
total = total + #numPlayers
cfxZones.setFlagValue(usher.pNum, total, usher)
if total < usher.lastPNum then
cfxZones.pollFlag(usher.pLeave, usher.method, usher)
elseif total > usher.lastPNum then
cfxZones.pollFlag(usher.pJoin, usher.method, usher)
end
usher.lastPNum = total
end
-- load/save
function usher.saveData()
local theData = {}
theData.players = usher.players
theData.types = usher.types
thaData.units = usher.units
theData.groups = usher.groups
theData.coas = usher.coas
return theData
end
function usher.loadData()
if not persistence then return end
local theData = persistence.getSavedDataForModule("usher")
if not theData then
if usher.verbose then
trigger.action.outText("+++ush Persistence: no save data received, skipping.", 30)
end
return
end
usher.players = theData.players -- dicts by name, holds a number
usher.types = theData.types
usher.units = theData.units
usher.groups = theData.groups
usher.coas = theData.coas
end
-- go go go
function usher.start()
-- lib check
if not dcsCommon.libCheck then
trigger.action.outText("usher requires dcsCommon", 30)
return false
end
if not dcsCommon.libCheck("usher", usher.requiredLibs) then
return false
end
-- read config
usher.readConfigZone()
-- load any saved data
if persistence then
-- sign up for persistence
callbacks = {}
callbacks.persistData = usher.saveData
persistence.registerModule("usher", callbacks)
-- now load my data
usher.loadData()
end
-- connect event handler
world.addEventHandler(usher)
-- invoke update
usher.update()
trigger.action.outText("Usher v" .. usher.version .. " started.", 30)
return true
end
-- let's go!
if not usher.start() then
trigger.action.outText("usher aborted: error on start", 30)
usher = nil
end