mirror of
https://github.com/spencershepard/RotorOps.git
synced 2025-11-10 15:45:30 +00:00
Update RotorOps.lua
This commit is contained in:
parent
e6517dbbaa
commit
0b7647d034
53
RotorOps.lua
53
RotorOps.lua
@ -198,7 +198,7 @@ function RotorOps.spawnInfantryOnGrp(grp, src_grp_name, ai_task) --allow to spaw
|
|||||||
end
|
end
|
||||||
|
|
||||||
function RotorOps.chargeEnemy(vars)
|
function RotorOps.chargeEnemy(vars)
|
||||||
trigger.action.outText("charge enemies: "..mist.utils.tableShow(vars), 5)
|
--trigger.action.outText("charge enemies: "..mist.utils.tableShow(vars), 5)
|
||||||
local grp = vars.grp
|
local grp = vars.grp
|
||||||
local search_radius = vars.radius or 5000
|
local search_radius = vars.radius or 5000
|
||||||
----
|
----
|
||||||
@ -214,7 +214,7 @@ function RotorOps.chargeEnemy(vars)
|
|||||||
|
|
||||||
local volS
|
local volS
|
||||||
if vars.zone then
|
if vars.zone then
|
||||||
local sphere = trigger.misc.getZone('town')
|
local sphere = trigger.misc.getZone(vars.zone)
|
||||||
volS = {
|
volS = {
|
||||||
id = world.VolumeType.SPHERE,
|
id = world.VolumeType.SPHERE,
|
||||||
params = {
|
params = {
|
||||||
@ -265,7 +265,7 @@ end
|
|||||||
|
|
||||||
|
|
||||||
function RotorOps.patrolRadius(vars)
|
function RotorOps.patrolRadius(vars)
|
||||||
debugMsg("patrol radius: "..mist.utils.tableShow(vars.grp))
|
--debugMsg("patrol radius: "..mist.utils.tableShow(vars.grp))
|
||||||
local grp = vars.grp
|
local grp = vars.grp
|
||||||
local search_radius = vars.radius or 100
|
local search_radius = vars.radius or 100
|
||||||
local first_valid_unit
|
local first_valid_unit
|
||||||
@ -338,30 +338,35 @@ local function changeGameState(new_state)
|
|||||||
trigger.action.setUserFlag(RotorOps.game_state_flag, new_state)
|
trigger.action.setUserFlag(RotorOps.game_state_flag, new_state)
|
||||||
end
|
end
|
||||||
|
|
||||||
function RotorOps.aiTask(group_name, task)
|
function RotorOps.aiTask(group_name, task, zone)
|
||||||
if tableHasKey(RotorOps.ai_tasks, group_name) == true then --if we already have this group id in our list of timers
|
if tableHasKey(RotorOps.ai_tasks, group_name) == true then --if we already have this group id in our list of timers
|
||||||
--debugMsg("timer already active, updating task for "..group_name.." : ".. RotorOps.ai_tasks[group_name].ai_task.." to "..task)
|
debugMsg("timer already active, updating task for "..group_name.." : ".. RotorOps.ai_tasks[group_name].ai_task.." to "..task)
|
||||||
|
RotorOps.ai_tasks[group_name].ai_task = task
|
||||||
|
RotorOps.ai_tasks[group_name].zone = zone
|
||||||
else
|
else
|
||||||
--debugMsg("adding timer: "..group_name)
|
debugMsg("adding timer: "..group_name.." task: "..task)
|
||||||
local vars = {}
|
local vars = {}
|
||||||
vars.group_name = group_name
|
vars.group_name = group_name
|
||||||
vars.last_task = task
|
vars.last_task = task
|
||||||
|
if zone then
|
||||||
|
vars.zone = zone
|
||||||
|
end
|
||||||
local timer_id = timer.scheduleFunction(RotorOps.aiExecute, vars, timer.getTime() + 5)
|
local timer_id = timer.scheduleFunction(RotorOps.aiExecute, vars, timer.getTime() + 5)
|
||||||
RotorOps.ai_tasks[group_name] = {['timer_id'] = timer_id, ['ai_task'] = task}
|
RotorOps.ai_tasks[group_name] = {['timer_id'] = timer_id, ['ai_task'] = task, ['zone'] = zone}
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function RotorOps.aiExecute(vars)
|
function RotorOps.aiExecute(vars)
|
||||||
local last_task = vars.last_task
|
local last_task = vars.last_task
|
||||||
local group_name = vars.group_name
|
local group_name = vars.group_name
|
||||||
local task = RotorOps.ai_tasks[group_name].ai_task
|
local task = RotorOps.ai_tasks[group_name].ai_task
|
||||||
|
local zone = vars.zone
|
||||||
debugMsg("aiExecute: "..group_name.." : "..task)
|
debugMsg("aiExecute: "..group_name.." : "..task)
|
||||||
--debugMsg("task:"..RotorOps.ai_tasks[group_name].ai_task)
|
--debugMsg("task:"..RotorOps.ai_tasks[group_name].ai_task)
|
||||||
|
|
||||||
--we should remove inactive/dead groups and cancel timer here
|
--we should remove inactive/dead groups and cancel timer here
|
||||||
if Group.isExist(Group.getByName(group_name)) ~= true then
|
if Group.isExist(Group.getByName(group_name)) ~= true or #Group.getByName(group_name):getUnits() < 1 then
|
||||||
debugMsg("group no longer exists")
|
debugMsg("group no longer exists")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -373,20 +378,25 @@ function RotorOps.aiExecute(vars)
|
|||||||
vars.grp = Group.getByName(group_name)
|
vars.grp = Group.getByName(group_name)
|
||||||
vars.radius = 150
|
vars.radius = 150
|
||||||
RotorOps.patrolRadius(vars) --takes a group object, not name
|
RotorOps.patrolRadius(vars) --takes a group object, not name
|
||||||
end
|
elseif task == "aggressive" then
|
||||||
|
|
||||||
if task == "aggressive" then
|
|
||||||
local vars = {}
|
local vars = {}
|
||||||
vars.grp = Group.getByName(group_name)
|
vars.grp = Group.getByName(group_name)
|
||||||
vars.radius = 5000
|
vars.radius = 5000
|
||||||
RotorOps.chargeEnemy(vars) --takes a group object, not name
|
RotorOps.chargeEnemy(vars) --takes a group object, not name
|
||||||
end
|
elseif task == "clear_zone" then
|
||||||
|
local vars = {}
|
||||||
|
vars.grp = Group.getByName(group_name)
|
||||||
|
vars.zone = zone
|
||||||
|
RotorOps.chargeEnemy(vars) --takes a group object, not name
|
||||||
|
elseif task == "move_to_zone" then
|
||||||
|
--placeholder only, we currently use sendUnitsToZone function
|
||||||
|
end
|
||||||
|
|
||||||
-- end
|
-- end
|
||||||
|
|
||||||
|
|
||||||
vars.last_task = task
|
vars.last_task = task
|
||||||
local update_interval = math.random(10,20) --this can be higher since we will check for changes
|
local update_interval = math.random(10,20)
|
||||||
local timer_id = timer.scheduleFunction(RotorOps.aiExecute, vars, timer.getTime() + update_interval)
|
local timer_id = timer.scheduleFunction(RotorOps.aiExecute, vars, timer.getTime() + update_interval)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -402,13 +412,13 @@ function RotorOps.aiActiveZone(var)
|
|||||||
|
|
||||||
for index, group in pairs(RotorOps.ai_blue_infantry_groups) do
|
for index, group in pairs(RotorOps.ai_blue_infantry_groups) do
|
||||||
if group then
|
if group then
|
||||||
RotorOps.aiTask(group, "aggressive")
|
RotorOps.aiTask(group, "clear_zone", RotorOps.active_zone)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for index, group in pairs(RotorOps.ai_blue_vehicle_groups) do
|
for index, group in pairs(RotorOps.ai_blue_vehicle_groups) do
|
||||||
if group then
|
if group then
|
||||||
RotorOps.aiTask(group, "aggressive")
|
RotorOps.aiTask(group, "clear_zone", RotorOps.active_zone)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -429,10 +439,10 @@ function RotorOps.assessUnitsInZone(var)
|
|||||||
local blue_vehicles = RotorOps.sortOutInfantry(blue_ground_units).not_infantry
|
local blue_vehicles = RotorOps.sortOutInfantry(blue_ground_units).not_infantry
|
||||||
|
|
||||||
|
|
||||||
--is the active zone cleared?
|
--is the active zone cleared?
|
||||||
local active_zone_status_flag = RotorOps.zones[RotorOps.active_zone_index].zone_status_flag
|
local active_zone_status_flag = RotorOps.zones[RotorOps.active_zone_index].zone_status_flag
|
||||||
local active_zone_status = trigger.misc.getUserFlag(active_zone_status_flag)
|
local active_zone_status = trigger.misc.getUserFlag(active_zone_status_flag)
|
||||||
|
---we should grab these after the clearActiveZone below
|
||||||
|
|
||||||
if #red_ground_units <= RotorOps.max_units_left then
|
if #red_ground_units <= RotorOps.max_units_left then
|
||||||
RotorOps.clearActiveZone()
|
RotorOps.clearActiveZone()
|
||||||
@ -548,8 +558,9 @@ function RotorOps.sendUnitsToZone(units_table, zone, _formation, _final_heading,
|
|||||||
local force_offroad = _force_offroad or false
|
local force_offroad = _force_offroad or false
|
||||||
local groups = RotorOps.groupsFromUnits(units_table)
|
local groups = RotorOps.groupsFromUnits(units_table)
|
||||||
for index, group in pairs(groups) do
|
for index, group in pairs(groups) do
|
||||||
--debugMsg("sending to zone: "..zone.." grp: "..group)
|
debugMsg("sending to zone: "..zone.." grp: "..group)
|
||||||
mist.groupToPoint(group, zone, formation, final_heading, speed, force_offroad)
|
mist.groupToPoint(group, zone, formation, final_heading, speed, force_offroad)
|
||||||
|
RotorOps.aiTask(group, "move_to_zone", zone)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -706,7 +717,7 @@ function RotorOps.addPickupZone(zone_name, smoke, limit, active, side)
|
|||||||
RotorOps.ctld_pickup_zones[#RotorOps.ctld_pickup_zones + 1] = zone_name
|
RotorOps.ctld_pickup_zones[#RotorOps.ctld_pickup_zones + 1] = zone_name
|
||||||
ctld.pickupZones[#ctld.pickupZones + 1] = {zone_name, smoke, limit, active, side}
|
ctld.pickupZones[#ctld.pickupZones + 1] = {zone_name, smoke, limit, active, side}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function RotorOps.startConflict()
|
function RotorOps.startConflict()
|
||||||
if RotorOps.game_state == RotorOps.game_states.in_progress then return end
|
if RotorOps.game_state == RotorOps.game_states.in_progress then return end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user