OnCharacterExitVehicle script

Releasing the source files for your mod or map? Post em' here. (Applies to both SWBF1 & SWBF2)

Moderator: Moderators

Post Reply
MileHighGuy
Jedi
Jedi
Posts: 1194
Joined: Fri Dec 19, 2008 7:58 pm

OnCharacterExitVehicle script

Post by MileHighGuy »

The game does not have a OnCharacterExitVehicle listener function. So I made one using OnCharacterEnterVehicle and a timer. Here it is:

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

Post Reply