To use, save it to a lua file is Data_***/Common/scripts. Add the filename to data_***/Common/mission.req, add ScriptCB_DoFile("YOUR_FILENAME_HERE") to the script where you want to use it. You can use it just like you would use OnCharacterEnterVehicle. You can also change the timer of the interval for how often it checks if you've left the vehicle.
Code: Select all
---
--- Created by MileHighGuy
--- DateTime: 9/25/2021 8:24 PM
---
-- interval in seconds
-- this is how frequently/quickly the code will check if you've exited the vehicle
-- change to suit your needs
local inVehicleTimerInterval = 1
local whenExitVehicle = function(player, vehicle, callbackFunction)
local inVehicleTimer = CreateTimer("inVehicleTimerString")
--inVehicleTimer = CreateTimer("inVehicleTimerString")
SetTimerValue(inVehicleTimer, inVehicleTimerInterval)
local currentTick = 1
-- initialize to nil first so we can reference it in the OnTimerElapse function
local inVehicleTimerFunctionHandle = nil
inVehicleTimerFunctionHandle = OnTimerElapse(function(timer)
--print("timer elapsed")
--print("current tick is " .. tostring(currentTick) .. " for player " .. tostring(player))
currentTick = currentTick + 1
-- check if player is still alive and if still in vehicle
if not GetCharacterUnit(player) or not GetCharacterVehicle(player) then
--player might also have died to get to this code
--if still alive and out of vehicle
if GetCharacterUnit(player)
--and IsObjectAlive(vehicle) -- this crashed when it was false
then
callbackFunction(player, vehicle)
else
--print("player " .. tostring(player) .. " has died")
end
--END TIMER cleanup
--end timer and release timer and timerElapse handles
if timer ~= nil then
DestroyTimer(timer)
end
inVehicleTimer = nil
if inVehicleTimerFunctionHandle ~= nil then
ReleaseTimerElapse(inVehicleTimerFunctionHandle)
--else
-- print("timer elapse handle was nil")
end
inVehicleTimerFunctionHandle = nil
--reset the tick (is this necessary?)
currentTick = 1
--END TIMER cleanup
else
--print("player " .. tostring(player) .. " still in vehicle")
--do another loop if still in vehicle
SetTimerValue(timer, inVehicleTimerInterval)
StartTimer(timer)
end
end, inVehicleTimer)
StartTimer(inVehicleTimer)
--print("started timer")
end
OnCharacterExitVehicle = function(callbackFunction)
local enterVehicleHandle = OnCharacterEnterVehicle(function(player,vehicle)
print("player entered vehicle " .. tostring(vehicle))
whenExitVehicle(player, vehicle, callbackFunction)
end)
end
-- usage example:
--
-- OnCharacterExitVehicleConfig(function(player, vehicle)
-- print("player has exited vehicle, player: " .. tostring(player))
-- end,
--"rep_hover_fightertank")
OnCharacterExitVehicleConfig = function(callbackFunction, vehicleOdfString)
print("added function for vehicle " .. tostring(vehicleOdfString))
local enterVehicleHandle = OnCharacterEnterVehicle(function(player,vehicle)
print("player entered vehicle " .. tostring(vehicle))
if GetEntityClass(vehicle) == FindEntityClass(vehicleOdfString) then
print("player " .. tostring(player) .. " entered vehicle " .. tostring(vehicleOdfString) .. " " .. tostring(vehicle))
whenExitVehicle(player, vehicle, callbackFunction)
end
end)
end
OnCharacterExitVehicleTeam = function(callbackFunction, teamIndex)
local enterVehicleHandle = OnCharacterEnterVehicleTeam(function(player,vehicle)
print("player entered vehicle " .. tostring(vehicle))
whenExitVehicle(player, vehicle, callbackFunction)
end,
teamIndex)
end
-- made a new function that's triggered for a specific vehicle on a specific team
OnCharacterExitVehicleConfigTeam = function(callbackFunction, vehicleOdfString, teamIndex)
local enterVehicleHandle = OnCharacterEnterVehicleTeam(function(player,vehicle)
print("player entered vehicle " .. tostring(vehicle))
if GetEntityClass(vehicle) == FindEntityClass(vehicleOdfString) then
whenExitVehicle(player, vehicle, callbackFunction)
end
end,
teamIndex)
end