Update RotorOpsPerks.lua

This commit is contained in:
Spencer Shepard 2024-07-14 20:55:08 -07:00
parent b50b05dd28
commit 1c967e2797

View File

@ -61,14 +61,23 @@ RotorOpsPerks.static_helicopter_types = { --mapping of player helicopters to th
} }
---- END OPTIONS ---- ---- END OPTIONS ----
local function log(msg) local function log(msg, log_type)
env.info("ROTOROPS PERKS: " .. msg) if type(msg) == 'table' then
msg = mist.utils.tableShow(msg)
end
if not msg then
msg = "nil"
end
if log_type == "error" then
env.error("ROTOROPS PERKS ERROR: " .. msg)
else
env.info("ROTOROPS PERKS: " .. msg)
end
end end
local function debugMsg(msg) local function debugMsg(msg)
if RotorOpsPerks.debug then if RotorOpsPerks.debug then
log("ROTOROPS PERKS:")
if msg then if msg then
log(msg) log(msg)
end end
@ -351,20 +360,14 @@ RotorOpsPerks.perks.player_fatcow["action_function"] = function(args)
return return
end end
local dest_point = {x=args.target_point.x, z=args.target_point.z} local dest_point = {x=args.target_point.x, z=args.target_point.z}
--RotorOpsPerks.teleportStatic('FAT COW FARP ' .. farp.index, dest_point) --axis mixed up
RotorOpsPerks.teleportStatic('FAT COW FARP ' .. farp.index, {x=args.target_point.x, y=args.target_point.z}) RotorOpsPerks.teleportStatic('FAT COW FARP ' .. farp.index, {x=args.target_point.x, y=args.target_point.z})
local owner_player_name = Group.getByName(args.player_group_name):getUnit(1):getPlayerName() local owner_player_name = Group.getByName(args.player_group_name):getUnit(1):getPlayerName()
local monitored_unit = Group.getByName(args.player_group_name):getUnit(1) local monitored_unit = Group.getByName(args.player_group_name):getUnit(1)
local owner_group_name = args.player_group_name
log("FARP DEPLOYED AT: "..args.target_point.x..", "..args.target_point.z)
log("OWNER PLAYER: "..owner_player_name)
log("OWNER GROUP: "..owner_group_name)
log("MONITORED UNIT: "..monitored_unit:getName())
local request = { local request = {
dest_point = dest_point, dest_point = dest_point,
owner_player_name = owner_player_name, owner_player_name = owner_player_name,
owner_group_name = owner_group_name, monitored_unit = monitored_unit,
monitored_unit = monitored_unit,} immediate_deploy = true,}
RotorOpsPerks.changeFarpState(farp.index, "requested", request) RotorOpsPerks.changeFarpState(farp.index, "requested", request)
RotorOpsPerks.perks.player_fatcow.active[owner_player_name] = true RotorOpsPerks.perks.player_fatcow.active[owner_player_name] = true
farp = RotorOpsPerks.fat_cow_farps[farp.index] farp = RotorOpsPerks.fat_cow_farps[farp.index]
@ -704,6 +707,12 @@ function RotorOpsPerks.monitorFarps()
end end
end end
if farp.expiration_time and timer.getTime() > farp.expiration_time then
log("Fat Cow FARP expired, despawning FARP!")
trigger.action.outText('Fat Cow FARP expired, despawning FARP!', 5)
despawn_farp = true
end
if despawn_farp then if despawn_farp then
RotorOpsPerks.changeFarpState(farp.index, 'not_deployed', nil) RotorOpsPerks.changeFarpState(farp.index, 'not_deployed', nil)
end end
@ -742,16 +751,11 @@ function RotorOpsPerks.buildFatCowFarpTable()
fuel = fuel, fuel = fuel,
fuel_p = fuel:getPosition().p, fuel_p = fuel:getPosition().p,
chinook = chinook, chinook = chinook,
owner_player_name = nil,
owner_original_group_name = nil,
expiration_time = nil,
available = true,
deployed = false,
mark_id_base = 5550 + (i * 10), --arbitrary id for map drawing; allows 10 marks per FARP mark_id_base = 5550 + (i * 10), --arbitrary id for map drawing; allows 10 marks per FARP
deployed_p = nil, state = 'uninitialized',
monitored_unit = nil,
state = 'not_deployed',
} }
RotorOpsPerks.changeFarpState(i, 'not_deployed', nil) --initialize the farp
i = i + 1 i = i + 1
else else
farp_found = false farp_found = false
@ -770,14 +774,6 @@ function RotorOpsPerks.getFatCowFarp()
return nil return nil
end end
function RotorOpsPerks.returnFatCowFarp(farp_index, despawn) -- return the farp to the pool of available farps
local farp = RotorOpsPerks.fat_cow_farps[farp_index]
RotorOpsPerks.updateFarpAttribute(farp.index, 'available', true)
if despawn then
RotorOpsPerks.despawnFatCowFarp(farp.index)
end
end
function RotorOpsPerks.changeFarpState(farp_index, new_state, request) function RotorOpsPerks.changeFarpState(farp_index, new_state, request)
local farp = RotorOpsPerks.fat_cow_farps[farp_index] local farp = RotorOpsPerks.fat_cow_farps[farp_index]
@ -789,27 +785,31 @@ function RotorOpsPerks.changeFarpState(farp_index, new_state, request)
return return
end end
local next_state = nil
if new_state == 'requested' then --set the farp attributes if new_state == 'requested' then --set the farp attributes
if not request then if not request then
env.error("No request object provided for FARP state change") log("No request object provided for FARP state change", "error")
return return
end end
farp.deployed = false farp.deployed = false
farp.available = false farp.available = false
farp.deployed_p = request.dest_point farp.deployed_p = request.dest_point
farp.owner_player_name = request.owner_player_name farp.owner_player_name = request.owner_player_name
farp.owner_original_group_name = request.owner_original_group_name
farp.monitored_unit = request.monitored_unit farp.monitored_unit = request.monitored_unit
--log all vars --log all vars
log("FARP REQUESTED AT: "..request.dest_point.x..", "..request.dest_point.z) log("FARP REQUESTED AT: "..request.dest_point.x..", "..request.dest_point.z)
log("OWNER PLAYER: "..request.owner_player_name) log("OWNER PLAYER NAME: "..request.owner_player_name)
log("OWNER GROUP: "..request.owner_group_name)
log("MONITORED UNIT: "..request.monitored_unit:getName()) log("MONITORED UNIT: "..request.monitored_unit:getName())
RotorOpsPerks.spawnFatCowFarp(farp.deployed_p.x, farp.deployed_p.z, farp.index, 15, "deployed_occupied") --what about AI farps? if request.immediate_deploy then --for player fat cow farps
farp.expiration_time = timer.getTime() + 1800
RotorOpsPerks.spawnFatCowFarp(farp.deployed_p.x, farp.deployed_p.z, farp.index, 15, "deployed_occupied")
end
elseif new_state == 'deploying' then elseif new_state == 'deployed_ai' then
farp.expiration_time = timer.getTime() + 1800 farp.expiration_time = timer.getTime() + 1800
RotorOpsPerks.spawnFatCowFarp(farp.deployed_p.x, farp.deployed_p.z, farp.index, 15, "deployed_empty")
elseif new_state == 'deployed_occupied' then elseif new_state == 'deployed_occupied' then
farp.deployed = true farp.deployed = true
@ -842,13 +842,13 @@ function RotorOpsPerks.changeFarpState(farp_index, new_state, request)
elseif new_state == 'not_deployed' then --reset the farp elseif new_state == 'not_deployed' then --reset the farp
RotorOpsPerks.returnFatCowFarp(farp.index, true) RotorOpsPerks.despawnFatCowFarp(farp.index)
if old_state == 'deployed_static' then if old_state == 'deployed_static' then
RotorOpsPerks.despawnStaticChinook(farp.index) RotorOpsPerks.despawnStaticChinook(farp.index)
elseif old_state == 'deployed_occupied' then elseif old_state == 'deployed_occupied' then
RotorOpsPerks.perks.player_fatcow.active[farp.owner_player_name] = nil --what about the AI fatcow perk?? RotorOpsPerks.perks.player_fatcow.active[farp.owner_player_name] = nil --what about the AI fatcow perk??
if farp.monitored_unit and farp.monitored_unit:getGroup() then if farp.monitored_unit and farp.monitored_unit:getGroup() then
trigger.action.outTextForGroup(farp.monitored_unit:getGroup():getID(), "FARP despawned.", 10) trigger.action.outTextForGroup(farp.monitored_unit:getGroup():getID(), "FAT COW FARP despawned.", 10)
end end
end end
@ -856,6 +856,8 @@ function RotorOpsPerks.changeFarpState(farp_index, new_state, request)
farp.deployed_p = nil farp.deployed_p = nil
farp.owner_player_name = nil farp.owner_player_name = nil
farp.monitored_unit = nil farp.monitored_unit = nil
farp.expiration_time = nil
farp.available = true
end end
@ -868,6 +870,10 @@ function RotorOpsPerks.changeFarpState(farp_index, new_state, request)
farp.state = new_state farp.state = new_state
RotorOpsPerks.fat_cow_farps[farp_index] = farp RotorOpsPerks.fat_cow_farps[farp_index] = farp
if next_state then
RotorOpsPerks.changeFarpState(farp_index, next_state, nil)
end
end end
@ -1033,7 +1039,16 @@ end
function RotorOpsPerks.spawnAiChinook(dest_point, farp_index) --the AI Chinook with spawn and fly to the FARP function RotorOpsPerks.spawnAiChinook(dest_point, farp_index) --the AI Chinook with spawn and fly to the FARP
local farp =RotorOpsPerks.fat_cow_farps[farp_index] local farp = RotorOpsPerks.fat_cow_farps[farp_index]
local request = {
dest_point = dest_point,
farp_index = farp_index,
monitored_unit = nil,
immediate_deploy = false,
owner_player_name = nil,
}
RotorOpsPerks.changeFarpState(farp_index, 'requested', request)
local index = farp_index local index = farp_index
local fatcow_name = 'FAT COW' local fatcow_name = 'FAT COW'
local source_farp_name = 'FAT COW FARP ' .. index local source_farp_name = 'FAT COW FARP ' .. index