Skip to content
3 changes: 2 additions & 1 deletion luarules/gadgets/api_missions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ function gadget:Initialize()
--scriptPath = 'mission-api-tests/sound_test.lua'
--scriptPath = 'mission-api-tests/issue_orders_test.lua'
--scriptPath = 'mission-api-tests/unit_triggers_test.lua'
scriptPath = 'mission-api-tests/feature_triggers_test.lua'
--scriptPath = 'mission-api-tests/feature_triggers_test.lua'
scriptPath = 'mission-api-tests/resource_test.lua'

if not scriptPath then
gadgetHandler:RemoveGadget()
Expand Down
36 changes: 34 additions & 2 deletions luarules/gadgets/api_missions_triggers.lua
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,27 @@ local function checkFeatureDestroyed(trigger, featureID, featureDefID, attackerA
activateTrigger(trigger)
end

local resourceConsecutiveFrames = {}
local function checkResources(trigger, triggerID, index)
local conditionMet = true
if trigger.parameters.metal and select(index, Spring.GetTeamResources(trigger.parameters.teamID, "metal")) < trigger.parameters.metal then
conditionMet = false
end
if trigger.parameters.energy and select(index, Spring.GetTeamResources(trigger.parameters.teamID, "energy")) < trigger.parameters.energy then
conditionMet = false
end

local requiredConsecutiveFrames = trigger.parameters.stableFrames or 0
if conditionMet then
resourceConsecutiveFrames[triggerID] = (resourceConsecutiveFrames[triggerID] or 0) + gameFrameTriggersCheckInterval
if resourceConsecutiveFrames[triggerID] >= requiredConsecutiveFrames then
activateTrigger(trigger)
end
else
resourceConsecutiveFrames[triggerID] = 0
end
end


----------------------------------------------------------------
--- Call-ins:
Expand Down Expand Up @@ -372,14 +393,25 @@ function gadget:GameFrame(frameNumber)
processTriggersOfType(types.UnitEnteredLocation, function(trigger, triggerID)
checkUnitEnteredLocation(trigger, triggerID)
end)

processTriggersOfType(types.UnitLeftLocation, function(trigger, triggerID)
checkUnitLeftLocation(trigger, triggerID)
end)

processTriggersOfType(types.UnitDwellLocation, function(trigger, triggerID)
checkUnitDwellLocation(trigger, triggerID)
end)

processTriggersOfType(types.ResourceStored, function(trigger, triggerID)
checkResources(trigger, triggerID, 1)
end)
processTriggersOfType(types.ResourceIncome, function(trigger, triggerID)
checkResources(trigger, triggerID, 4)
end)
processTriggersOfType(types.ResourceExpense, function(trigger, triggerID)
checkResources(trigger, triggerID, 5)
end)
processTriggersOfType(types.ResourcePull, function(trigger, triggerID)
checkResources(trigger, triggerID, 3)
end)
end

function gadget:MetaUnitAdded(_, unitDefID, unitTeam)
Expand Down
12 changes: 12 additions & 0 deletions luarules/mission_api/actions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,15 @@ local function custom(func)
func()
end

local function addResources(teamID, metal, energy)
if metal then
Spring.AddTeamResource(teamID, 'metal', metal)
end
if energy then
Spring.AddTeamResource(teamID, 'energy', energy)
end
end

return {
-- Triggers
EnableTrigger = enableTrigger,
Expand Down Expand Up @@ -340,4 +349,7 @@ return {

-- Custom
Custom = custom,

-- Other
AddResources = addResources,
}
1 change: 1 addition & 0 deletions luarules/mission_api/actions_dispatcher.lua
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ local typeMapping = {
[types.ClearAllMarkers] = actionFunctions.ClearAllMarkers,
[types.Victory] = actionFunctions.Victory,
[types.Defeat] = actionFunctions.Defeat,
[types.AddResources] = actionFunctions.AddResources,
}

-- unpack() does not handle optional parameters, as it cannot pass a value as nil
Expand Down
23 changes: 23 additions & 0 deletions luarules/mission_api/actions_schema.lua
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ local actionTypes = {

-- Custom
Custom = 900,

-- Other
AddResources = 1000,
}

--============================================================--
Expand Down Expand Up @@ -354,6 +357,26 @@ local parameters = {
type = Types.Function,
},
},

-- Other
[actionTypes.AddResources] = {
[1] = {
name = 'teamID',
required = true,
type = Types.TeamID,
},
[2] = {
name = 'metal',
required = false,
type = Types.Number,
},
[3] = {
name = 'energy',
required = false,
type = Types.Number,
},
requiresOneOf = { 'metal', 'energy', },
},
}

--============================================================--
Expand Down
93 changes: 90 additions & 3 deletions luarules/mission_api/triggers_schema.lua
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ local triggerTypes = {

-- Resources
ResourceStored = 400,
ResourceProduction = 401,
ResourceIncome = 401,
ResourceExpense = 402,
ResourcePull = 403,

-- Statistics
TotalUnitsLost = 500,
Expand Down Expand Up @@ -386,8 +388,93 @@ local parameters = {
},

-- Resources
[triggerTypes.ResourceStored] = { },
[triggerTypes.ResourceProduction] = { },
[triggerTypes.ResourceStored] = {
[1] = {
name = 'teamID',
required = true,
type = Types.TeamID,
},
[2] = {
name = 'metal',
required = false,
type = Types.Number,
},
[3] = {
name = 'energy',
required = false,
type = Types.Number,
},
requiresOneOf = { 'metal', 'energy', },
},
[triggerTypes.ResourceIncome] = {
[1] = {
name = 'teamID',
required = true,
type = Types.TeamID,
},
[2] = {
name = 'metal',
required = false,
type = Types.Number,
},
[3] = {
name = 'energy',
required = false,
type = Types.Number,
},
[4] = {
name = 'stableFrames',
required = false,
type = Types.Number,
},
requiresOneOf = { 'metal', 'energy', },
},
[triggerTypes.ResourceExpense] = {
[1] = {
name = 'teamID',
required = true,
type = Types.TeamID,
},
[2] = {
name = 'metal',
required = false,
type = Types.Number,
},
[3] = {
name = 'energy',
required = false,
type = Types.Number,
},
[4] = {
name = 'stableFrames',
required = false,
type = Types.Number,
},
requiresOneOf = { 'metal', 'energy', },
},
[triggerTypes.ResourcePull] = {
[1] = {
name = 'teamID',
required = true,
type = Types.TeamID,
},
[2] = {
name = 'metal',
required = false,
type = Types.Number,
},
[3] = {
name = 'energy',
required = false,
type = Types.Number,
},
[4] = {
name = 'stableFrames',
required = false,
type = Types.Number,
},
requiresOneOf = { 'metal', 'energy', },
},

-- Statistics
[triggerTypes.TotalUnitsLost] = { },
Expand Down
Loading
Loading