Jump to content

bind & unbind on marker event


Recommended Posts

Hi guys

I'm having trouble unbinding my function, it should happen when I leave marker, it does bind on enter but not on exit.

function openTrunk (theVehicle) 
    trunkState = getVehicleDoorOpenRatio(theVehicle, 1) 
    if (trunkState == 0) then 
        setVehicleDoorOpenRatio(theVehicle, 1, 1, 1000) 
    else 
        setVehicleDoorOpenRatio(theVehicle, 1, 0, 1000) 
    end 
end 
  
function bindTrunk (hitElement) 
    if (getElementType (hitElement) == "player") then 
        local linkedVehicle = getElementData(source, "marker") 
        if (isElement (linkedVehicle)) then 
            toggleControl (hitElement, "enter_exit", false) 
            bindKey (hitElement, "f", "down", function() 
                openTrunk(linkedVehicle) 
            end) 
        end 
    end 
end 
  
function unbindTrunk (hitElement) 
    if (getElementType(hitElement) == "player") then 
        toggleControl(hitElement, "enter_exit", true) 
        unbindKey(hitElement, "f", "down", openTrunk) 
    end 
end 

I have this as well

addEventHandler ( "onMarkerHit", vehMarker, bindTrunk) 
addEventHandler ( "onMarkerLeave", vehMarker, unbindTrunk) 

Kind Regards

Edited by Guest
Link to comment

There seems to be a pattern tho:

Walk in: key = binded

Walk out: key = still binded

Walk in: key doesn't work

Walk out: nothing happens

and repeat.

EDIT: I've updated my code to make the markers client sided.

SERVER

function openTrunk (theVehicle) 
    trunkState = getVehicleDoorOpenRatio(theVehicle, 1) 
    if (trunkState == 0) then 
        setVehicleDoorOpenRatio(theVehicle, 1, 1, 1000) 
    else 
        setVehicleDoorOpenRatio(theVehicle, 1, 0, 1000) 
    end 
end 
  
function bindTrunk (hitElement, linkedVehicle) 
    if (getElementType (hitElement) == "player") then 
        if (isElement (linkedVehicle)) then 
            toggleControl (hitElement, "enter_exit", false) 
            bindKey (hitElement, "f", "down", function() 
                openTrunk(linkedVehicle) 
            end) 
        end 
    end 
end 
  
addEvent("bindTrunk", true) 
addEventHandler("bindTrunk", getRootElement(),  bindTrunk) 
  
function unbindTrunk (hitElement) 
    if (getElementType(hitElement) == "player") then 
        toggleControl(hitElement, "enter_exit", true) 
        unbindKey(hitElement, "f", "down", openTrunk) 
    end 
end 
  
addEvent("unbindTrunk", true) 
addEventHandler("unbindTrunk", getRootElement(),  bindTrunk) 
  
setTimer (function () 
    for index, vehicle in pairs (getElementsByType ("vehicle" )) do 
        if not (getElementData (vehicle, "markerTrue")) then 
            setElementData(vehicle, "markerTrue", true) 
            triggerClientEvent(getRootElement(), "carTrunkSync", getRootElement(), vehicle) 
        end 
    end 
end, 6000, 0) 

CLIENT

function carTrunkSync (vehicle) 
    local x, y, z = getElementPosition (vehicle) 
    local vehMarker = createMarker ( x, y, z, "cylinder", 2.5, 255, 0, 0, 255) 
  
    attachElements (vehMarker, vehicle, 0, -3, -1) 
    setElementData (vehMarker, "marker", vehicle) 
     
    addEventHandler ( "onClientMarkerHit", vehMarker, function (hitElement) 
        local linkedVehicle = getElementData(source, "marker") 
        triggerServerEvent("bindTrunk", getLocalPlayer(), hitElement, linkedVehicle) 
    end) 
    addEventHandler ( "onClientMarkerLeave", vehMarker, function (hitElement) 
        triggerServerEvent("unbindTrunk", getLocalPlayer(), hitElement) 
    end) 
end 
  
addEvent("carTrunkSync", true) 
addEventHandler("carTrunkSync", getRootElement(), carTrunkSync) 

Link to comment
local veh 
  
function openTrunk (theVehicle) 
    trunkState = getVehicleDoorOpenRatio(theVehicle, 1) 
    if (trunkState == 0) then 
        setVehicleDoorOpenRatio(theVehicle, 1, 1, 1000) 
    else 
        setVehicleDoorOpenRatio(theVehicle, 1, 0, 1000) 
    end 
end 
  
function start() 
    if veh == nil then 
        openTrunk(veh) 
    end 
end 
  
function bindTrunk (hitElement, linkedVehicle) 
    if (getElementType (hitElement) == "player") then 
        if (isElement (linkedVehicle)) then 
            toggleControl (hitElement, "enter_exit", false) 
            if veh == nil then 
                 veh = linkedVehicle 
            end 
            bindKey (hitElement, "f", "down", start) 
        end 
    end 
end 
  
addEvent("bindTrunk", true) 
addEventHandler("bindTrunk", getRootElement(),  bindTrunk) 
  
function unbindTrunk (hitElement) 
    if (getElementType(hitElement) == "player") then 
        toggleControl(hitElement, "enter_exit", true) 
        if veh ~= nil then 
            unbindKey(hitElement, "f", "down", start) 
            veh = nil 
        end 
    end 
end 
  
addEvent("unbindTrunk", true) 
addEventHandler("unbindTrunk", getRootElement(),  bindTrunk) 
  
setTimer (function () 
    for index, vehicle in pairs (getElementsByType ("vehicle" )) do 
        if not (getElementData (vehicle, "markerTrue")) then 
            setElementData(vehicle, "markerTrue", true) 
            triggerClientEvent(getRootElement(), "carTrunkSync", getRootElement(), vehicle) 
        end 
    end 
end, 6000, 0) 
  

??

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...