Dosyayı yüklemekle uğraşmak istemedim, util_client.lua'yı bununla değiştir.
g_Root = getRootElement()
g_ResRoot = getResourceRootElement(getThisResource())
g_Me = getLocalPlayer()
addEvent('onClientCall_race', true)
addEventHandler('onClientCall_race', resourceRoot,
	function(fnName, ...)
		local fn = _G
		local path = fnName:split('.')
		for i,pathpart in ipairs(path) do
			fn = fn[pathpart]
		end
        if not fn then
            outputDebugString( 'onClientCall_race fn is nil for ' .. tostring(fnName) )
        else
    		fn(...)
        end
	end
)
function createServerCallInterface()
	return setmetatable(
		{},
		{
			__index = function(t, k)
				t[k] = function(...) triggerServerEvent('onServerCall_race', resourceRoot, k, ...) end
				return t[k]
			end
		}
	)
end
server = createServerCallInterface()
----------------------------
-- GUI
function showHUD(show)
	for i,name in ipairs({ 'ammo', 'area_name', 'armour', 'breath', 'clock', 'health', 'money', 'vehicle_name', 'weapon' }) do
		showPlayerHudComponent(name, show)
	end
end
function showGUIComponents(...)
	for i,name in ipairs({...}) do
		if g_dxGUI[name] then
			g_dxGUI[name]:visible(true)
		elseif type(g_GUI[name]) == 'table' then
			g_GUI[name]:show()
		else
			guiSetVisible(g_GUI[name], true)
		end
	end
end
function hideGUIComponents(...)
	for i,name in ipairs({...}) do
		if g_dxGUI[name] then
			g_dxGUI[name]:visible(false)
		elseif type(g_GUI[name]) == 'table' then
			g_GUI[name]:hide()
		else
			if g_GUI[name] then
				guiSetVisible(g_GUI[name], false)
			end
		end
	end
end
function setGUIComponentsVisible(settings)
	for name,visible in pairs(settings) do
		if type(g_GUI[name]) == 'table' then
			g_GUI[name][visible and 'show' or 'hide'](g_GUI[name])
		else
			guiSetVisible(g_GUI[name], visible)
		end
	end
end
function createShadowedLabel(x, y, width, height, text, align)
	local shadow = guiCreateLabel(x + 1, y + 1, width, height, text, false)
	guiLabelSetColor(shadow, 0, 0, 0)
	local label = guiCreateLabel(x, y, width, height, text, false)
	guiLabelSetColor(label, 255, 255, 255)
	if align then
		guiLabelSetHorizontalAlign(shadow, align)
		guiLabelSetHorizontalAlign(label, align)
	end
	return label, shadow
end
function msToTimeStr(ms)
	if not ms then
		return ''
	end
	local centiseconds = tostring(math.floor(math.fmod(ms, 1000)/10))
	if #centiseconds == 1 then
		centiseconds = '0' .. centiseconds
	end
	local s = math.floor(ms / 1000)
	local seconds = tostring(math.fmod(s, 60))
	if #seconds == 1 then
		seconds = '0' .. seconds
	end
	local minutes = tostring(math.floor(s / 60))
	return minutes .. ':' .. seconds .. ':' .. centiseconds
end
function getTickTimeStr()
    return msToTimeStr(getTickCount())
end
function resAdjust(num)
	if not g_ScreenWidth then
		g_ScreenWidth, g_ScreenHeight = guiGetScreenSize()
	end
	if g_ScreenWidth < 1280 then
		return math.floor(num*g_ScreenWidth/1280)
	else
		return num
	end
end
----------------------------
-- Vehicles
function setCameraBehindVehicle(vehicle)
	if vehicle then
		local x, y, z = getElementPosition(vehicle)
		local rx, ry, rz = getElementRotation(vehicle)
		setCameraMatrix(x - 4*math.cos(math.rad(rz + 90)), y - 4*math.sin(math.rad(rz + 90)), z + 1, x, y, z + 1)
	end
	setTimer(setCameraTarget, 150, 1, getLocalPlayer())
end
function alignVehicleToGround(vehicle)
	if not g_AlignToGroundTimer then
		g_AlignToGroundTimer = setTimer(alignVehicleToGround, 200, 0, vehicle)
		g_AlignToGroundTriesLeft = 50
	else
		local x, y, z = getElementPosition(vehicle)
		local hit, hitX, hitY, groundZ = processLineOfSight(x, y, z + 5, x, y, z - 20, true, false)
		g_AlignToGroundTriesLeft = g_AlignToGroundTriesLeft - 1
		if not hit and g_AlignToGroundTriesLeft > 0 then
			return
		end
		killTimer(g_AlignToGroundTimer)
		g_AlignToGroundTimer = nil
		g_AlignToGroundTriesLeft = nil
		if hit then
			local waterZ = getWaterLevel(x, y, z + 5)
			if not waterZ or groundZ > waterZ then
				server.setElementPosition(vehicle, x, y, groundZ + getElementDistanceFromCentreOfMassToBaseOfModel(vehicle))
			end
		end
	end
end
function checkVehicleIsHelicopter()
	local vehID = getElementModel(g_Vehicle)
	if vehID == 417 or vehID == 425 or vehID == 447 or vehID == 465 or vehID == 469 or vehID == 487 or vehID == 488 or vehID == 497 or vehID == 501 or vehID == 548 or vehID == 563 then
		setHelicopterRotorSpeed (g_Vehicle, 0.2)
	end
end
function checkModelIsAirplane(g_VehicleModel)
	if g_VehicleModel == 592 or g_VehicleModel == 577 or g_VehicleModel == 511 or g_VehicleModel == 512 or g_VehicleModel == 593 or g_VehicleModel == 520 or g_VehicleModel == 553 or g_VehicleModel == 476 or g_VehicleModel == 519 or g_VehicleModel == 460 or g_VehicleModel == 513 or g_VehicleModel == 539 then
		return true
	end
end
-----------------------------
-- Table extensions
function table.find(tableToSearch, index, value)
	if not value then
		value = index
		index = false
	elseif value == '[nil]' then
		value = nil
	end
	for k,v in pairs(tableToSearch) do
		if index then
			if v[index] == value then
				return k
			end
		elseif v == value then
			return k
		end
	end
	return false
end
function table.removevalue(t, val)
	for i,v in ipairs(t) do
		if v == val then
			table.remove(t, i)
			return i
		end
	end
	return false
end
function table.each(t, index, callback, ...)
	local args = { ... }
	if type(index) == 'function' then
		table.insert(args, 1, callback)
		callback = index
		index = false
	end
	for k,v in pairs(t) do
		callback(index and v[index] or v, unpack(args))
	end
	return t
end
function table.deepcopy(t)
	local known = {}
	local function _deepcopy(t)
		local result = {}
		for k,v in pairs(t) do
			if type(v) == 'table' then
				if not known[v] then
					known[v] = _deepcopy(v)
				end
				result[k] = known[v]
			else
				result[k] = v
			end
		end
		return result
	end
	return _deepcopy(t)
end
function table.create(keys, vals)
	local result = {}
	if type(vals) == 'table' then
		for i,k in ipairs(keys) do
			result[k] = vals[i]
		end
	else
		for i,k in ipairs(keys) do
			result[k] = vals
		end
	end
	return result
end
function table.insertUnique(t,val)
    if not table.find(t, val) then
        table.insert(t,val)
    end
end
function table.popLast(t,val)
    if #t==0 then
        return false
    end
    local last = t[#t]
    table.remove(t)
    return last
end
	
-----------------------------
-- String extensions
function string:split(sep)
	if #self == 0 then
		return {}
	end
	sep = sep or ' '
	local result = {}
	local from = 1
	local to
	repeat
		to = self:find(sep, from, true) or (#self + 1)
		result[#result+1] = self:sub(from, to - 1)
		from = to + 1
	until from == #self + 2
	return result
end
function clamp( lo, value, hi )
    return math.max( lo, math.min( value, hi ) )
end
function outputDebug( chan, msg )
    if _DEBUG_LOG then
        if not msg then
            msg = chan
            chan = 'UNDEF'
        end
        if table.find(_DEBUG_LOG,chan) then
            outputConsole( getTickTimeStr() .. ' cDEBUG: ' .. msg )
            outputDebugString( getTickTimeStr() .. ' cDEBUG: ' .. msg )
        end
    end
    if g_bPipeDebug then
        outputConsole( getTickTimeStr() .. ' cDEBUG: ' .. (msg or chan) )
    end
end
function outputWarning( msg )
    outputConsole( getTickTimeStr() .. ' cWARNING: ' .. msg )
    outputDebugString( getTickTimeStr() .. ' cWARNING: ' .. msg )
end
-------------------------------------------------------
-- Trigger an event when the screen fades in/out
-------------------------------------------------------
local fadeInFinTimer = Timer:create()
_fadeCamera = fadeCamera
function fadeCamera(fadeIn,timeToFade,...)
    _fadeCamera (fadeIn,timeToFade,...)
    local ticksToFade = (not timeToFade or timeToFade < 1) and 0 or timeToFade * 1000
    if not fadeIn then
        fadeInFinTimer:killTimer()
		triggerEvent( 'onClientScreenFadedOut', g_Root )
    else
        fadeInFinTimer:setTimer( onfadeInFin, math.max(50,ticksToFade/8), 1 )
    end
end
function onfadeInFin()
	triggerEvent( 'onClientScreenFadedIn', g_Root )
end
-------------------------------------------------------
-- Calculate the gap between element bounding spheres
function getGapBetweenElements( elemA, elemB )
	if not isElement( elemA ) or not isElement( elemB ) then
		return false
	end
	local x,y,z = getElementPosition( elemA )
	local distance = getDistanceBetweenPoints3D( x, y, z, getElementPosition( elemB ) )
	distance = distance - ( getElementRadius( elemA ) or 0 )
	distance = distance - ( getElementRadius( elemB ) or 0 )
	return math.max( 0, distance )
end