Jump to content

The problem of synchronization trailers


httpRick

Recommended Posts

Posted

Hello, I have a problem with synchronization trailer because the trailer MTA walks away from Player A certain distance lose their proper sync, I wanted to remedy after the execution of the New Stremaera trailers but there are still problems at the bottom of sending the code:

Server-Side:

  
function Unhook(player) 
  if getPedOccupiedVehicle( player ) then 
  local theTruck = getPedOccupiedVehicle( player )  
      if detachTrailerFromVehicle(theTruck) then 
      local theTrailer = getElementData(theTruck,"Trailer") 
      local x,y,z = getElementPosition( theTruck ) 
      local _,_,rot = getElementRotation( theTruck ) 
      local rot = 360-rot 
      local rot = math.rad(rot) 
      local x = x - 15 * math.sin(rot) 
      local y = y - 15 * math.cos(rot) 
      setElementPosition( theTrailer, x,y,z ) 
    end 
  end 
end 
addCommandHandler( "unhook", Unhook ) 
  
  
function onTrailerAttach(theTruck) 
    setElementData(theTruck,"Trailer",source) 
    triggerClientEvent( "addTrailer", getRootElement(  ),theTruck, source ) 
end 
addEventHandler("onTrailerAttach", getRootElement(), onTrailerAttach) 
  
function onTrailerDetach(theTruck) 
    triggerClientEvent( "removeTrailer", getRootElement(  ), theTruck, source ) 
end 
addEventHandler("onTrailerDetach", getRootElement(), onTrailerDetach) 
  

Client-Side:

  
Amount = 0 
Sync = false 
Trailers = {} 
Timer = getTickCount(  ) 
local screenW, screenH = guiGetScreenSize() 
  
  
function getTrailer(theTruck,theTrailer) 
    for i,v in ipairs(Trailers) do 
        if v.truck == theTruck and v.trailer == theTrailer then 
            return theTruck, theTrailer, i 
        end 
    end 
    return nil, nil, false 
end 
  
function addTrailer(theTruck, theTrailer) 
    local _, _, index = getTrailer(theTruck,theTrailer) 
    if not(index) then 
        table.insert(Trailers, {truck=theTruck, trailer=theTrailer} ) 
    end 
end 
  
  
function deleteTrailer(theTruck, theTrailer) 
    local _, _, index = getTrailer(theTruck,theTrailer) 
    if index then 
        table.remove(Trailers, index) 
        setElementData(theTruck,"Trailer",false) 
    end 
    collectgarbage() 
end 
  
  
function UpdateSyncedTrailer() 
    if getTickCount()-Timer > 5000 then 
        Timer = getTickCount(  ) 
        Amount = 0 
        Sync = false 
        for i,v in ipairs(Trailers) do 
            if isElementStreamedIn( v.truck ) and isElementStreamedIn( v.trailer ) then 
                if not( getPedOccupiedVehicle( getLocalPlayer(  )  ) == v.truck) then 
                    detachTrailerFromVehicle( v.truck, v.trailer ) 
                    attachTrailerToVehicle( v.truck, v.trailer ) 
                    Sync = true 
                end 
                Amount = Amount+1 
            end 
        end 
        collectgarbage() 
    end 
  
     
    dxDrawText("Streaming Trailers: "..Amount.." | Size Array: "..#Trailers.." | Memory use: "..collectgarbage("count")*1024 .." | Update Time next Sync: "..  math.abs( getTickCount()-Timer - 5000 ) , screenW * 0.0063, screenH * 0.9333, screenW * 0.2906, screenH * 0.9700, tocolor(255, 255, 255, 255), 2.00, "default", "left", "top", false, false, false, false, false) 
  
end 
addEventHandler("onClientRender",root,UpdateSyncedTrailer) 
  
function onClientTrailerAttach(TheTruck, TheTrailer)     
    if not( getElementType(source) == "vehicle" ) then source = TheTrailer end 
    --setElementStreamable ( source, true ) 
    addTrailer(TheTruck, source) 
end 
addEventHandler("onClientTrailerAttach", getRootElement(), onClientTrailerAttach) 
addEvent ( "addTrailer", true ) 
addEventHandler ( "addTrailer", getRootElement(), onClientTrailerAttach ) 
  
function onClientTrailerDetach(TheTruck, TheTrailer) 
    if not( getElementType(source) == "vehicle" ) then source = TheTrailer end 
    --setElementStreamable ( source, false ) 
    if not(Sync) then 
        deleteTrailer(TheTruck, source) 
    end 
end 
addEventHandler("onClientTrailerDetach", getRootElement(), onClientTrailerDetach) 
addEvent ( "removeTrailer", true ) 
addEventHandler ( "removeTrailer", getRootElement(), onClientTrailerDetach ) 
  
  
function onClientElementStreamIn() 
    if getElementType(source) == "vehicle" then 
        if getElementData(source,"Trailer") then 
            addTrailer(source, getElementData(source,"Trailer") ) 
        end 
    end 
end 
addEventHandler( "onClientElementStreamIn", getRootElement( ), onClientElementStreamIn) 
  
function onClientElementStreamOut() 
    if getElementType(source)  == "vehicle" then 
        if getElementData(source,"Trailer") then 
            --removeTrailer(source, getElementData(source,"Trailer") ) 
        end 
    end 
end 
addEventHandler( "onClientElementStreamOut", getRootElement( ), onClientElementStreamOut) 
  

I will be grateful for any kind of help, I'm sorry to be so that my english.

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...