setPursuitMode
Definition
-- @/lua/ge/extensions/gameplay/police.lua:206
local function setPursuitMode(mode, targetId, policeIds) -- sets pursuit mode; -1 = busted, 0 = off, 1 and higher = pursuit level
targetId = targetId or be:getPlayerVehicleID(0) -- if targetId is not provided, uses player vehicle (intended as a backwards compatibility measure)
if not targetId then return end
local traffic = gameplay_traffic.getTrafficData()
local targetVeh = traffic[targetId]
if not traffic[targetId] then return end
local pursuit = targetVeh.pursuit
if not policeIds then
policeIds = tableKeys(policeVehs) -- use all police vehicles
elseif type(policeIds) == 'number' then -- backwards compatibility
policeIds = {policeIds}
end
mode = clamp(mode or 0, -1, 3)
local lastMode = pursuit.mode
if mode == -1 then
if targetVeh.role.name == 'suspect' then
targetVeh.role:setAction('arrest')
end
pursuit.timers.main = 0
pursuit.timers.arrest = 0
for id, veh in pairs(traffic) do
if id ~= targetId and veh.pursuit.mode >= 1 and veh.pos:squaredDistance(targetVeh.pos) < 6400 then -- during active arrest, clear pursuit level of nearby suspects
setPursuitMode(0, id)
end
end
elseif mode == 0 then -- reset pursuit data
if targetVeh.role.name == 'suspect' then
targetVeh.role:setAction('clear')
suspectActive = false
end
pursuit.mode = 0
targetVeh.role:resetAction()
targetVeh:resetAll()
if targetVeh.role.name == 'suspect' then
targetVeh:setRole(targetVeh.autoRole)
end
else
if targetVeh.role.name ~= 'suspect' then
targetVeh:setRole('suspect')
end
if targetVeh.role.state ~= 'flee' then
suspectTimer = math.huge
suspectActive = true
if targetVeh.role.state == 'wanted' then -- "wanted" vehicles will always try to flee
local policePlayer = policeVehs[be:getPlayerVehicleID(0)]
if gameplay_traffic.showMessages and policePlayer and not policePlayer.role.flags.busy then
ui_message(string.format('%s %s', translateLanguage('ui.traffic.suspectFlee', 'A suspect is fleeing from you! Vehicle:'), targetVeh.modelName), 5, 'traffic', 'traffic')
end
targetVeh.role.keepActionOnRefresh = false
targetVeh.role:setAction('fleePolice')
else
if targetVeh.isAi then
targetVeh.role.keepActionOnRefresh = false
targetVeh.role:setAction('fleePolice')
else
targetVeh.role:setAction('fleePolice')
if gameplay_traffic.showMessages and be:getPlayerVehicleID(0) == targetId then
ui_message('ui.traffic.policePursuit', 5, 'traffic', 'traffic')
end
end
end
end
if lastMode <= 0 then
pursuit.initialSpeed = targetVeh.speed
extensions.hook('onPursuitAction', targetId, 'start', pursuit)
end
end
pursuit.mode = mode
for _, id in ipairs(policeIds) do
local veh = policeVehs[id]
if veh and veh.role.state ~= 'disabled' then
if mode == -1 then -- player is busted
if veh.role.targetId == targetId then
veh.role:setAction('pursuitEnd')
end
elseif mode == 0 then
if veh.role.targetId == targetId then
veh.role:resetAction()
end
elseif mode >= 1 then
veh.role:setTarget(targetId)
veh.role:setAction('pursuitStart', {mode = mode, targetId = targetId})
pursuit.score = lastMode <= mode and max(pursuit.score, vars.scoreLevels[mode]) or min(pursuit.score, vars.scoreLevels[mode])
end
end
end
extensions.hook('onPursuitModeUpdate', targetId, {mode = mode})
end
Callers
@/lua/ge/extensions/gameplay/police.lua
if id ~= targetId and veh.pursuit.mode >= 1 and veh.pos:squaredDistance(targetVeh.pos) < 6400 then -- during active arrest, clear pursuit level of nearby suspects
setPursuitMode(0, id)
end
end
setPursuitMode(-1, id, tempIds)
end
end
setPursuitMode(0, id, tempIds)
end
end
setPursuitMode(0, id, tempIds)
end
if veh.pursuit.mode ~= 0 then
setPursuitMode(0, suspectId) -- resets the pursuit mode if it was active
end
traffic[newId].pursuit = deepcopy(traffic[oldId].pursuit)
setPursuitMode(0, oldId)
traffic[newId].queuedFuncs.pursuitChange = {timer = 0.1, func = gameplay_police.setPursuitMode, args = {mode, newId}}
else
setPursuitMode(i, id)
end
@/lua/ge/extensions/gameplay/traffic/roles/suspect.lua
if policeIds[1] then
gameplay_police.setPursuitMode(self.pursuitMode, self.veh.id, policeIds) -- police start chasing the wanted suspect
local bestId = gameplay_police.getNearestPoliceVehicle(self.veh.id, true, true)
@/lua/ge/extensions/flowgraph/nodes/gameplay/traffic/pursuitMode.lua
gameplay_police.setPursuitMode(self.pinIn.mode.value or 0, vehId, self.pinIn.policeId.value)
end
@/lua/ge/extensions/gameplay/traffic/vehicle.lua
if self.pursuit and self.pursuit.mode ~= 0 then
gameplay_police.setPursuitMode(0, self.id)
end