mirror of
https://github.com/weyne85/DML.git
synced 2025-10-29 16:57:49 +00:00
Version 0.98
messenger module bottled messages demo frog men training demo
This commit is contained in:
parent
eeeb4c0567
commit
d69ce05d80
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
cfxOwnedZones = {}
|
||||
cfxOwnedZones.version = "1.1.1"
|
||||
cfxOwnedZones.version = "1.1.2"
|
||||
cfxOwnedZones.verbose = false
|
||||
cfxOwnedZones.announcer = true
|
||||
--[[-- VERSION HISTORY
|
||||
@ -40,6 +40,7 @@ cfxOwnedZones.announcer = true
|
||||
shocked state
|
||||
- announcer
|
||||
1.1.1 - conq+1 flag
|
||||
1.1.2 - corrected type bug in zoneConquered
|
||||
|
||||
--]]--
|
||||
cfxOwnedZones.requiredLibs = {
|
||||
@ -497,7 +498,7 @@ function cfxOwnedZones.zoneConquered(aZone, theSide, formerOwner) -- 0 = neutral
|
||||
-- increase conq flag
|
||||
if aZone.conqueredFlag then
|
||||
local lastVal = trigger.misc.getUserFlag(aZone.conqueredFlag)
|
||||
trigger.action.setUserFlag)aZone.conqueredFlag, lastVal + 1)
|
||||
trigger.action.setUserFlag(aZone.conqueredFlag, lastVal + 1)
|
||||
end
|
||||
-- invoke callbacks now
|
||||
cfxOwnedZones.invokeConqueredCallbacks(aZone, theSide, formerOwner)
|
||||
|
||||
@ -35,6 +35,7 @@ Version History
|
||||
and interator
|
||||
- reUseAfter option for single-use
|
||||
- dcsCommon, cfxZones import
|
||||
2.0.1 - stricter verbosity: moved more comments to verbose only
|
||||
|
||||
WHAT IT IS
|
||||
SSB Client is a small script that forms the client-side counterpart to
|
||||
@ -124,37 +125,7 @@ function cfxSSBClient.bindGroupToAirfield(groupName, airfieldName)
|
||||
if not airfieldName then airfieldName = "<NIL>" end
|
||||
trigger.action.outText("+++SSB: Binding Group " .. groupName .. " to " .. airfieldName .. " failed.", 30)
|
||||
end
|
||||
--[[--
|
||||
function cfxSSBClient.dist(point1, point2) -- returns distance between two points
|
||||
local x = point1.x - point2.x
|
||||
local y = point1.y - point2.y
|
||||
local z = point1.z - point2.z
|
||||
|
||||
return (x*x + y*y + z*z)^0.5
|
||||
end
|
||||
--]]--
|
||||
|
||||
-- see if instring conatins what, defaults to case insensitive
|
||||
--[[--
|
||||
function cfxSSBClient.containsString(inString, what, caseSensitive)
|
||||
if (not caseSensitive) then
|
||||
inString = string.upper(inString)
|
||||
what = string.upper(what)
|
||||
end
|
||||
return string.find(inString, what)
|
||||
end
|
||||
--]]--
|
||||
--[[--
|
||||
function cfxSSBClient.arrayContainsString(theArray, theString)
|
||||
-- warning: case sensitive!
|
||||
if not theArray then return false end
|
||||
if not theString then return false end
|
||||
for i = 1, #theArray do
|
||||
if theArray[i] == theString then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
--]]--
|
||||
|
||||
function cfxSSBClient.getClosestAirbaseTo(thePoint)
|
||||
local delta = math.huge
|
||||
@ -256,7 +227,9 @@ function cfxSSBClient.openSlotForCrashedGroupNamed(gName)
|
||||
if not pGroup then return end
|
||||
cfxSSBClient.crashedGroups[gName] = nil -- set to nil to forget this happened
|
||||
cfxSSBClient.setSlotAccessForGroup(pGroup) -- set by current occupation status
|
||||
trigger.action.outText("+++SSBC:SU: re-opened slot for group <" .. gName .. ">", 30)
|
||||
if cfxSSBClient.verbose then
|
||||
trigger.action.outText("+++SSBC:SU: re-opened slot for group <" .. gName .. ">", 30)
|
||||
end
|
||||
end
|
||||
|
||||
function cfxSSBClient:onEvent(event)
|
||||
@ -282,7 +255,9 @@ function cfxSSBClient:onEvent(event)
|
||||
-- remember this unit as player controlled plane
|
||||
-- because player and plane can easily disconnect
|
||||
cfxSSBClient.playerPlanes[uName] = playerName
|
||||
trigger.action.outText("+++SSBC:SU: noted " .. playerName .. " piloting player unit " .. uName, 30)
|
||||
if cfxSSBClient.verbose then
|
||||
trigger.action.outText("+++SSBC:SU: noted " .. playerName .. " piloting player unit " .. uName, 30)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
@ -298,7 +273,9 @@ function cfxSSBClient:onEvent(event)
|
||||
local thePilot = cfxSSBClient.playerPlanes[uName]
|
||||
if not thePilot then
|
||||
-- ignore. not a player plane
|
||||
trigger.action.outText("+++SSBC:SU: ignored crash for NPC unit <" .. uName .. ">", 30)
|
||||
if cfxSSBClient.verbose then
|
||||
trigger.action.outText("+++SSBC:SU: ignored crash for NPC unit <" .. uName .. ">", 30)
|
||||
end
|
||||
return
|
||||
end
|
||||
-- if we get here, a player-owned plane has crashed
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
cloneZones = {}
|
||||
cloneZones.version = "1.1.0"
|
||||
cloneZones.version = "1.1.1"
|
||||
cloneZones.verbose = false
|
||||
cloneZones.requiredLibs = {
|
||||
"dcsCommon", -- always
|
||||
@ -17,6 +17,7 @@ cloneZones.cloners = {}
|
||||
1.0.1 - preWipe attribute
|
||||
1.1.0 - support for static objects
|
||||
- despawn? attribute
|
||||
1.1.1 - despawnAll: isExist guard
|
||||
|
||||
--]]--
|
||||
|
||||
@ -100,6 +101,11 @@ function cloneZones.createClonerWithZone(theZone) -- has "Cloner"
|
||||
theZone.lastSpawnValue = trigger.misc.getUserFlag(theZone.spawnFlag) -- save last value
|
||||
end
|
||||
|
||||
if cfxZones.hasProperty(theZone, "in?") then
|
||||
theZone.spawnFlag = cfxZones.getStringFromZoneProperty(theZone, "in?", "none")
|
||||
theZone.lastSpawnValue = trigger.misc.getUserFlag(theZone.spawnFlag) -- save last value
|
||||
end
|
||||
|
||||
if cfxZones.hasProperty(theZone, "spawn?") then
|
||||
theZone.spawnFlag = cfxZones.getStringFromZoneProperty(theZone, "spawn?", "none")
|
||||
theZone.lastSpawnValue = trigger.misc.getUserFlag(theZone.spawnFlag) -- save last value
|
||||
@ -142,13 +148,17 @@ function cloneZones.despawnAll(theZone)
|
||||
trigger.action.outText("wiping <" .. theZone.name .. ">", 30)
|
||||
end
|
||||
for idx, aGroup in pairs(theZone.mySpawns) do
|
||||
Group.destroy(aGroup)
|
||||
if aGroup:isExist() then
|
||||
Group.destroy(aGroup)
|
||||
end
|
||||
end
|
||||
for idx, aStatic in pairs(theZone.myStatics) do
|
||||
-- warning! may be mismatch because we are looking at groups
|
||||
-- not objects. let's see
|
||||
trigger.action.outText("Destroying static <" .. aStatic:getName() .. ">", 30)
|
||||
Object.destroy(aStatic) -- we don't aStatio:destroy() to find out what it is
|
||||
if aStatic:isExist() then
|
||||
trigger.action.outText("Destroying static <" .. aStatic:getName() .. ">", 30)
|
||||
Object.destroy(aStatic) -- we don't aStatio:destroy() to find out what it is
|
||||
end
|
||||
end
|
||||
theZone.mySpawns = {}
|
||||
theZone.myStatics = {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
countDown = {}
|
||||
countDown.version = "1.0.0"
|
||||
countDown.version = "1.1.0"
|
||||
countDown.verbose = true
|
||||
countDown.requiredLibs = {
|
||||
"dcsCommon", -- always
|
||||
@ -12,11 +12,14 @@ countDown.requiredLibs = {
|
||||
|
||||
Version History
|
||||
1.0.0 - initial version
|
||||
1.1.0 - Lua interface: callbacks
|
||||
- corrected verbose (erroneously always suppressed)
|
||||
- triggerFlag --> triggerCountFlag
|
||||
|
||||
--]]--
|
||||
|
||||
countDown.counters = {}
|
||||
|
||||
countDown.callbacks = {}
|
||||
|
||||
--
|
||||
-- add/remove zones
|
||||
@ -36,6 +39,27 @@ function countDown.getCountDownZoneByName(aName)
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- callbacks
|
||||
--
|
||||
function countDown.addCallback(theCallback)
|
||||
if not theCallback then return end
|
||||
table.insert(countDown.callbacks, theCallback)
|
||||
end
|
||||
|
||||
function countDown.invokeCallbacks(theZone, val, tminus, zero, belowZero, looping)
|
||||
if not val then val = 1 end
|
||||
if not tminus then tminus = false end
|
||||
if not zero then zero = false end
|
||||
if not belowZero then belowZero = false end
|
||||
|
||||
-- invoke anyone who wants to know that a group
|
||||
-- of people was rescued.
|
||||
for idx, cb in pairs(csarManager.csarCompleteCB) do
|
||||
cb(theZone, val, tminus, zero, belowZero, looping)
|
||||
end
|
||||
end
|
||||
--
|
||||
-- read attributes
|
||||
--
|
||||
@ -60,17 +84,17 @@ function countDown.createCountDownWithZone(theZone)
|
||||
|
||||
-- trigger flag "count" / "start?"
|
||||
if cfxZones.hasProperty(theZone, "count?") then
|
||||
theZone.triggerFlag = cfxZones.getStringFromZoneProperty(theZone, "count?", "none")
|
||||
theZone.triggerCountFlag = cfxZones.getStringFromZoneProperty(theZone, "count?", "none")
|
||||
end
|
||||
|
||||
|
||||
-- can also use in? for counting. we always use triggerflag
|
||||
-- can also use in? for counting. we always use triggerCountFlag
|
||||
if cfxZones.hasProperty(theZone, "in?") then
|
||||
theZone.triggerFlag = cfxZones.getStringFromZoneProperty(theZone, "in?", "none")
|
||||
theZone.triggerCountFlag = cfxZones.getStringFromZoneProperty(theZone, "in?", "none")
|
||||
end
|
||||
|
||||
if theZone.triggerFlag then
|
||||
theZone.lastTriggerValue = trigger.misc.getUserFlag(theZone.triggerFlag) -- save last value
|
||||
if theZone.triggerCountFlag then
|
||||
theZone.lastTriggerValue = trigger.misc.getUserFlag(theZone.triggerCountFlag) -- save last value
|
||||
end
|
||||
|
||||
-- zero! bang
|
||||
@ -95,14 +119,19 @@ end
|
||||
function countDown.isTriggered(theZone)
|
||||
-- this module has triggered
|
||||
local val = theZone.currVal - 1 -- decrease counter
|
||||
if theZone.verbose then
|
||||
if countDown.verbose then
|
||||
trigger.action.outText("+++cntD: enter triggered: val now: " .. val, 30)
|
||||
end
|
||||
if val > 0 then
|
||||
local tMinus = false
|
||||
local zero = false
|
||||
local belowZero = false
|
||||
local looping = false
|
||||
|
||||
if val > 0 then
|
||||
tMinus = true
|
||||
-- see if we need to bang Tminus
|
||||
if theZone.tMinusFlag then
|
||||
if theZone.verbose then
|
||||
if countDown.verbose then
|
||||
trigger.action.outText("+++cntD: TMINUTS", 30)
|
||||
end
|
||||
cfxZones.pollFlag(theZone.tMinusFlag, theZone.method)
|
||||
@ -110,8 +139,9 @@ function countDown.isTriggered(theZone)
|
||||
|
||||
elseif val == 0 then
|
||||
-- reached zero
|
||||
zero = true
|
||||
if theZone.zeroFlag then
|
||||
if theZone.verbose then
|
||||
if countDown.verbose then
|
||||
trigger.action.outText("+++cntD: ZERO", 30)
|
||||
end
|
||||
cfxZones.pollFlag(theZone.zeroFlag, theZone.method)
|
||||
@ -119,7 +149,8 @@ function countDown.isTriggered(theZone)
|
||||
|
||||
if theZone.loop then
|
||||
-- restart time
|
||||
if theZone.verbose then
|
||||
looping = true
|
||||
if countDown.verbose then
|
||||
trigger.action.outText("+++cntD: Looping", 30)
|
||||
end
|
||||
val = dcsCommon.randomBetween(theZone.startMinVal, theZone.startMaxVal)
|
||||
@ -127,8 +158,9 @@ function countDown.isTriggered(theZone)
|
||||
|
||||
else
|
||||
-- below zero
|
||||
belowZero = true
|
||||
if theZone.belowZero and theZone.zeroFlag then
|
||||
if theZone.verbose then
|
||||
if countDown.verbose then
|
||||
trigger.action.outText("+++cntD: Below Zero", 30)
|
||||
end
|
||||
cfxZones.pollFlag(theZone.zeroFlag, theZone.method)
|
||||
@ -136,6 +168,10 @@ function countDown.isTriggered(theZone)
|
||||
|
||||
end
|
||||
|
||||
-- callbacks
|
||||
countDown.invokeCallbacks(theZone, val, tMinus, zero, belowZero, looping)
|
||||
|
||||
-- update & return
|
||||
theZone.currVal = val
|
||||
|
||||
end
|
||||
@ -146,15 +182,15 @@ function countDown.update()
|
||||
|
||||
for idx, aZone in pairs(countDown.counters) do
|
||||
-- make sure to re-start before reading time limit
|
||||
if aZone.triggerFlag then
|
||||
local currTriggerVal = trigger.misc.getUserFlag(aZone.triggerFlag)
|
||||
if aZone.triggerCountFlag then
|
||||
local currTriggerVal = trigger.misc.getUserFlag(aZone.triggerCountFlag)
|
||||
if currTriggerVal ~= aZone.lastTriggerValue
|
||||
then
|
||||
if aZone.verbose then
|
||||
if countDown.verbose then
|
||||
trigger.action.outText("+++cntD: triggered on in?", 30)
|
||||
end
|
||||
countDown.isTriggered(aZone)
|
||||
aZone.lastTriggerValue = trigger.misc.getUserFlag(aZone.triggerFlag) -- save last value
|
||||
aZone.lastTriggerValue = trigger.misc.getUserFlag(aZone.triggerCountFlag) -- save last value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
delayFlag = {}
|
||||
delayFlag.version = "1.0.0"
|
||||
delayFlag.version = "1.0.2"
|
||||
delayFlag.verbose = false
|
||||
delayFlag.requiredLibs = {
|
||||
"dcsCommon", -- always
|
||||
@ -19,6 +19,8 @@ delayFlag.flags = {}
|
||||
1.0.2 - slight spelling correction
|
||||
- using cfxZones for polling
|
||||
- removed pollFlag
|
||||
1.0.3 - bug fix for config zone name
|
||||
- removed message attribute, moved to own module
|
||||
|
||||
--]]--
|
||||
|
||||
@ -89,47 +91,6 @@ function delayFlag.createTimerWithZone(theZone)
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- do the pulling
|
||||
--
|
||||
--[[--
|
||||
function delayFlag.pollFlag(theFlag, method)
|
||||
if delayFlag.verbose then
|
||||
trigger.action.outText("+++dlyF: polling flag " .. theFlag .. " with " .. method, 30)
|
||||
end
|
||||
|
||||
method = method:lower()
|
||||
local currVal = trigger.misc.getUserFlag(theFlag)
|
||||
if method == "inc" or method == "f+1" then
|
||||
trigger.action.setUserFlag(theFlag, currVal + 1)
|
||||
|
||||
elseif method == "dec" or method == "f-1" then
|
||||
trigger.action.setUserFlag(theFlag, currVal - 1)
|
||||
|
||||
elseif method == "off" or method == "f=0" then
|
||||
trigger.action.setUserFlag(theFlag, 0)
|
||||
|
||||
elseif method == "flip" or method == "xor" then
|
||||
if currVal ~= 0 then
|
||||
trigger.action.setUserFlag(theFlag, 0)
|
||||
else
|
||||
trigger.action.setUserFlag(theFlag, 1)
|
||||
end
|
||||
|
||||
else
|
||||
if method ~= "on" and method ~= "f=1" then
|
||||
trigger.action.outText("+++dlyF: unknown method <" .. method .. "> - using 'on'", 30)
|
||||
end
|
||||
-- default: on.
|
||||
trigger.action.setUserFlag(theFlag, 1)
|
||||
end
|
||||
|
||||
local newVal = trigger.misc.getUserFlag(theFlag)
|
||||
if delayFlag.verbose then
|
||||
trigger.action.outText("+++dlyF flag <" .. theFlag .. "> changed from " .. currVal .. " to " .. newVal, 30)
|
||||
end
|
||||
end
|
||||
--]]--
|
||||
--
|
||||
-- update
|
||||
--
|
||||
@ -204,7 +165,7 @@ end
|
||||
-- START
|
||||
--
|
||||
function delayFlag.readConfigZone()
|
||||
local theZone = cfxZones.getZoneByName("cloneZonesConfig")
|
||||
local theZone = cfxZones.getZoneByName("delayZonesConfig")
|
||||
if not theZone then
|
||||
if delayFlag.verbose then
|
||||
trigger.action.outText("+++dlyF: NO config zone!", 30)
|
||||
|
||||
156
modules/messenger.lua
Normal file
156
modules/messenger.lua
Normal file
@ -0,0 +1,156 @@
|
||||
messenger = {}
|
||||
messenger.version = "1.0.0"
|
||||
messenger.verbose = false
|
||||
messenger.requiredLibs = {
|
||||
"dcsCommon", -- always
|
||||
"cfxZones", -- Zones, of course
|
||||
}
|
||||
messenger.messengers = {}
|
||||
--[[--
|
||||
Version History
|
||||
1.0.0 - initial version
|
||||
|
||||
--]]--
|
||||
|
||||
function messenger.addMessenger(theZone)
|
||||
table.insert(messenger.messengers, theZone)
|
||||
end
|
||||
|
||||
function messenger.getMessengerByName(aName)
|
||||
for idx, aZone in pairs(messenger.messengers) do
|
||||
if aName == aZone.name then return aZone end
|
||||
end
|
||||
if messenger.verbose then
|
||||
trigger.action.outText("+++msgr: no messenger with name <" .. aName ..">", 30)
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
--
|
||||
-- read attributes
|
||||
--
|
||||
function messenger.createMessengerDownWithZone(theZone)
|
||||
-- start val - a range
|
||||
theZone.message = cfxZones.getStringFromZoneProperty(theZone, "message", "")
|
||||
|
||||
theZone.spaceBefore = cfxZones.getBoolFromZoneProperty(theZone, "spaceBefore", false)
|
||||
theZone.spaceAfter = cfxZones.getBoolFromZoneProperty(theZone, "spaceAfter", false)
|
||||
|
||||
theZone.soundFile = cfxZones.getStringFromZoneProperty(theZone, "soundFile", "<none>")
|
||||
|
||||
-- alternate version: messages: list of messages, need string parser first
|
||||
|
||||
theZone.duration = cfxZones.getNumberFromZoneProperty(theZone, "duration", 30)
|
||||
|
||||
-- trigger flag "count" / "start?"
|
||||
if cfxZones.hasProperty(theZone, "f?") then
|
||||
theZone.triggerMessagerFlag = cfxZones.getStringFromZoneProperty(theZone, "f?", "none")
|
||||
end
|
||||
|
||||
-- can also use in? for counting. we always use triggerMessagerFlag
|
||||
if cfxZones.hasProperty(theZone, "in?") then
|
||||
theZone.triggerMessagerFlag = cfxZones.getStringFromZoneProperty(theZone, "in?", "none")
|
||||
end
|
||||
|
||||
if theZone.triggerMessagerFlag then
|
||||
theZone.lastMessageTriggerValue = trigger.misc.getUserFlag(theZone.triggerMessagerFlag) -- save last value
|
||||
end
|
||||
|
||||
if cfxZones.hasProperty(theZone, "coalition") then
|
||||
theZone.coalition = cfxZones.getCoalitionFromZoneProperty(theZone, "coalition", 0)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Update
|
||||
--
|
||||
function messenger.isTriggered(theZone)
|
||||
-- this module has triggered
|
||||
local fileName = "l10n/DEFAULT/" .. theZone.soundFile
|
||||
local msg = theZone.message
|
||||
if theZone.spaceBefore then msg = "\n"..msg end
|
||||
if theZone.spaceAfter then msg = msg .. "\n" end
|
||||
|
||||
if theZone.coalition then
|
||||
trigger.action.outTextForCoalition(theZone.coalition, msg, theZone.duration)
|
||||
trigger.action.outSoundForCoalition(theZone.coalition, fileName)
|
||||
else
|
||||
-- out to all
|
||||
trigger.action.outText(msg, theZone.duration)
|
||||
trigger.action.outSound(fileName)
|
||||
end
|
||||
end
|
||||
|
||||
function messenger.update()
|
||||
-- call me in a second to poll triggers
|
||||
timer.scheduleFunction(messenger.update, {}, timer.getTime() + 1)
|
||||
|
||||
for idx, aZone in pairs(messenger.messengers) do
|
||||
-- make sure to re-start before reading time limit
|
||||
if aZone.triggerMessagerFlag then
|
||||
local currTriggerVal = trigger.misc.getUserFlag(aZone.triggerMessagerFlag)
|
||||
if currTriggerVal ~= aZone.lastMessageTriggerValue
|
||||
then
|
||||
if messenger.verbose then
|
||||
trigger.action.outText("+++msgr: triggered on in?", 30)
|
||||
end
|
||||
messenger.isTriggered(aZone)
|
||||
aZone.lastMessageTriggerValue = trigger.misc.getUserFlag(aZone.triggerMessagerFlag) -- save last value
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
-- Config & Start
|
||||
--
|
||||
function messenger.readConfigZone()
|
||||
local theZone = cfxZones.getZoneByName("messengerConfig")
|
||||
if not theZone then
|
||||
if messenger.verbose then
|
||||
trigger.action.outText("+++msgr: NO config zone!", 30)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
messenger.verbose = cfxZones.getBoolFromZoneProperty(theZone, "verbose", false)
|
||||
|
||||
if messenger.verbose then
|
||||
trigger.action.outText("+++msgr: read config", 30)
|
||||
end
|
||||
end
|
||||
|
||||
function messenger.start()
|
||||
-- lib check
|
||||
if not dcsCommon.libCheck then
|
||||
trigger.action.outText("cfx Count Down requires dcsCommon", 30)
|
||||
return false
|
||||
end
|
||||
if not dcsCommon.libCheck("cfx Count Down", messenger.requiredLibs) then
|
||||
return false
|
||||
end
|
||||
|
||||
-- read config
|
||||
messenger.readConfigZone()
|
||||
|
||||
-- process cloner Zones
|
||||
local attrZones = cfxZones.getZonesWithAttributeNamed("messenger")
|
||||
for k, aZone in pairs(attrZones) do
|
||||
messenger.createMessengerDownWithZone(aZone) -- process attributes
|
||||
messenger.addMessenger(aZone) -- add to list
|
||||
end
|
||||
|
||||
-- start update
|
||||
messenger.update()
|
||||
|
||||
trigger.action.outText("cfx Messenger v" .. messenger.version .. " started.", 30)
|
||||
return true
|
||||
end
|
||||
|
||||
-- let's go!
|
||||
if not messenger.start() then
|
||||
trigger.action.outText("cfx Messenger aborted: missing libraries", 30)
|
||||
messenger = nil
|
||||
end
|
||||
@ -1,5 +1,5 @@
|
||||
nameStats = {}
|
||||
nameStats.version = "1.1.0"
|
||||
nameStats.version = "1.1.1"
|
||||
--[[--
|
||||
package that allows generic and global access to data, stored by
|
||||
name and path. Can be used to manage score, cargo, statistics etc.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
pulseFlags = {}
|
||||
pulseFlags.version = "1.0.1"
|
||||
pulseFlags.version = "1.0.2"
|
||||
pulseFlags.verbose = false
|
||||
pulseFlags.requiredLibs = {
|
||||
"dcsCommon", -- always
|
||||
@ -13,6 +13,7 @@ pulseFlags.requiredLibs = {
|
||||
Version History
|
||||
- 1.0.0 Initial version
|
||||
- 1.0.1 pause behavior debugged
|
||||
- 1.0.2 zero pulse optional initial pulse suppress
|
||||
|
||||
--]]--
|
||||
|
||||
@ -60,7 +61,8 @@ function pulseFlags.createPulseWithZone(theZone)
|
||||
end
|
||||
|
||||
theZone.pulsing = false -- not running
|
||||
|
||||
theZone.hasPulsed = false
|
||||
theZone.zeroPulse = cfxZones.getBoolFromZoneProperty(theZone, "zeroPulse", true)
|
||||
end
|
||||
|
||||
--
|
||||
@ -114,31 +116,39 @@ function pulseFlags.doPulse(args)
|
||||
end
|
||||
|
||||
-- do a poll on flags
|
||||
pulseFlags.pollFlag(theZone.flag, theZone.method)
|
||||
-- first, we only do an initial pulse if zeroPulse is set
|
||||
if theZone.hasPulsed or theZone.zeroPulse then
|
||||
pulseFlags.pollFlag(theZone.flag, theZone.method)
|
||||
|
||||
-- decrease count
|
||||
if theZone.pulses > 0 then
|
||||
-- only do this if ending
|
||||
theZone.pulsesLeft = theZone.pulsesLeft - 1
|
||||
-- decrease count
|
||||
if theZone.pulses > 0 then
|
||||
-- only do this if ending
|
||||
theZone.pulsesLeft = theZone.pulsesLeft - 1
|
||||
|
||||
-- see if we are done
|
||||
if theZone.pulsesLeft < 1 then
|
||||
-- increment done flag if set
|
||||
if theZone.doneFlag then
|
||||
local currVal = trigger.misc.getUserFlag(theZone.doneFlag)
|
||||
trigger.action.setUserFlag(theZone.doneFlag, currVal + 1)
|
||||
-- see if we are done
|
||||
if theZone.pulsesLeft < 1 then
|
||||
-- increment done flag if set
|
||||
if theZone.doneFlag then
|
||||
local currVal = trigger.misc.getUserFlag(theZone.doneFlag)
|
||||
trigger.action.setUserFlag(theZone.doneFlag, currVal + 1)
|
||||
end
|
||||
if pulseFlags.verbose then
|
||||
trigger.action.outText("***PulF: pulse <" .. theZone.name .. "> ended!", 30)
|
||||
end
|
||||
theZone.pulsing = false
|
||||
theZone.paused = true
|
||||
return
|
||||
end
|
||||
if pulseFlags.verbose then
|
||||
trigger.action.outText("***PulF: pulse <" .. theZone.name .. "> ended!", 30)
|
||||
end
|
||||
theZone.pulsing = false
|
||||
theZone.paused = true
|
||||
return
|
||||
end
|
||||
else
|
||||
if pulseFlags.verbose then
|
||||
trigger.action.outText("***PulF: pulse <" .. theZone.name .. "> delaying zero pulse!", 30)
|
||||
end
|
||||
end
|
||||
|
||||
-- if we get here, we'll do another one soon
|
||||
-- refresh pulse
|
||||
theZone.hasPulsed = true -- we are past initial pulse
|
||||
|
||||
-- if we get here, schedule next pulse
|
||||
local delay = theZone.time
|
||||
if theZone.minTime > 0 and theZone.minTime < delay then
|
||||
-- we want a randomized from time from minTime .. delay
|
||||
|
||||
BIN
tutorial & demo missions/demo - bottled messages.miz
Normal file
BIN
tutorial & demo missions/demo - bottled messages.miz
Normal file
Binary file not shown.
BIN
tutorial & demo missions/full - frog men combat training.miz
Normal file
BIN
tutorial & demo missions/full - frog men combat training.miz
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user