DouglaS666 Posted June 16, 2018 Share Posted June 16, 2018 ERROR: freeroam\util.lua:21: attempt to call local 'fn' (a nil value) function createServerCallInterface() return setmetatable( {}, { __index = function(t, k) t[k] = function(...) triggerServerEvent('onServerCall', g_Me, k, ...) end return t[k] end } ) end addEvent('onClientCall', true) addEventHandler('onClientCall', getResourceRootElement(getThisResource()), function(fnName, ...) local fn = _G local path = fnName:split('.') for i,pathpart in ipairs(path) do fn = fn[pathpart] end fn(...) end, false ) function setCameraPlayerMode() local r local vehicle = getPedOccupiedVehicle(g_Me) if vehicle then local rx, ry, rz = getElementRotation(vehicle) r = rz else r = getPedRotation(g_Me) end local x, y, z = getElementPosition(g_Me) setCameraMatrix(x - 4*math.cos(math.rad(r + 90)), y - 4*math.sin(math.rad(r + 90)), z + 1, x, y, z + 1) setTimer(setCameraTarget, 100, 1, g_Me) end function getPlayerOccupiedSeat(player) local vehicle = getPedOccupiedVehicle(player) if not vehicle then return false end for i=0,getVehicleMaxPassengers(vehicle) do if getVehicleOccupant(vehicle, i) == player then return i end end return false end function destroyBlipsAttachedTo(elem) local wasDestroyed = false for i,attached in ipairs(getAttachedElements(elem)) do if getElementType(attached) == 'blip' then destroyElement(attached) wasDestroyed = true end end return wasDestroyed end local _isPlayerDead = isPedDead function isPedDead(player) return _isPlayerDead(player) or isPlayerTerminated(player) end function isPlayerTerminated(player) local x, y, z = getElementPosition(player) return (math.floor(x) == 132 and math.floor(y) == -68) or (math.abs(x) < 2 and math.abs(y) < 2 and z < 1) end function table.find(t, ...) local args = { ... } if #args == 0 then for k,v in pairs(t) do if v then return k end end return false end local value = table.remove(args) if value == '[nil]' then value = nil end for k,v in pairs(t) do for i,index in ipairs(args) do if type(index) == 'function' then v = index(v) else if index == '[last]' then index = #v end v = v[index] end end if v == value then return k end end return false end function table.findall(t, ...) local args = { ... } local result = {} if #args == 0 then for k,v in pairs(t) do if v then result[#result+1] = k end end return result end local value = table.remove(args) if value == '[nil]' then value = nil end for k,v in pairs(t) do for i,index in ipairs(args) do if type(index) == 'function' then v = index(v) else if index == '[last]' then index = #v end v = v[index] end end if v == value then result[#result+1] = k end end return result 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.merge(appendTo, ...) -- table.merge(targetTable, table1, table2, ...) -- Append the values of one or more tables to a target table. -- -- In the arguments list, a table pointer can be followed by a -- numeric or textual key. In that case the values in the table -- will be assumed to be tables, and of each of these the value -- corresponding to the given key will be appended instead of the -- subtable itself. local appendval local args = { ... } for i,a in ipairs(args) do if type(a) == 'table' then for k,v in pairs(a) do if args[i+1] and type(args[i+1]) ~= 'table' then appendval = v[args[i+1]] else appendval = v end if appendval then if type(k) == 'number' then table.insert(appendTo, appendval) else appendTo[k] = appendval end end end end end return appendTo end function table.map(t, callback) for k,v in ipairs(t) do t[k] = callback(v) end return t end function table.dump(t, caption, depth) if not depth then depth = 1 end if depth == 1 and caption then outputConsole(caption .. ':') end if not t then outputConsole('Table is nil') elseif type(t) ~= 'table' then outputConsole('Argument passed is of type ' .. type(t)) local str = tostring(t) if str then outputConsole(str) end else local braceIndent = string.rep(' ', depth-1) local fieldIndent = braceIndent .. ' ' outputConsole(braceIndent .. '{') for k,v in pairs(t) do if type(v) == 'table' and k ~= 'siblings' and k ~= 'parent' then outputConsole(fieldIndent .. tostring(k) .. ' = ') table.dump(v, nil, depth+1) else outputConsole(fieldIndent .. tostring(k) .. ' = ' .. tostring(v)) end end outputConsole(braceIndent .. '}') end end function table.flatten(t, result) if not result then result = {} end for k,v in ipairs(t) do if type(v) == 'table' then table.flatten(v, result) else table.insert(result, v) end end return result end function table.rep(value, times) local result = {} for i=1,times do table.insert(result, value) end return result 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 string.split(str, delim) local startPos = 1 local endPos = string.find(str, delim, 1, true) local result = {} while endPos do table.insert(result, string.sub(str, startPos, endPos-1)) startPos = endPos + 1 endPos = string.find(str, delim, startPos, true) end table.insert(result, string.sub(str, startPos)) return result end function xmlToTable(xmlFile, leafAttrs) -- takes an xml file with <group>s of leaf nodes (groups may be nested), -- and returns it as a table of the form { 'group', name='groupname', children={ {'leafName', leafattr1='attr1', ...}, ... } } local xml = getResourceConfig(xmlFile) if not xml then outputChatBox(xmlFile .. ' could not be opened') return false end local result = {} _addXMLChildrenToTable(xml, xmlNodeGetAttribute(xml, 'type'), leafAttrs, result) xmlUnloadFile(xml) addTreeMetaInfo(result) return result end function _addXMLChildrenToTable(parentNode, leafName, leafAttrs, targetTable) local i = 0 local groupNode = xmlFindChild(parentNode, 'group', 0) while groupNode do local group = {'group', name=xmlNodeGetAttribute(groupNode, 'name'), children={}} table.insert(targetTable, group) _addXMLChildrenToTable(groupNode, leafName, leafAttrs, group.children) i = i + 1 groupNode = xmlFindChild(parentNode, 'group', i) end i = 0 local leafNode = xmlFindChild(parentNode, leafName, 0) while leafNode do local leaf = {leafName} table.insert(targetTable, leaf) for k,attr in ipairs(leafAttrs) do leaf[attr] = ( attr == 'id' and tonumber(xmlNodeGetAttribute(leafNode, attr)) or xmlNodeGetAttribute(leafNode, attr) ) end i = i + 1 leafNode = xmlFindChild(parentNode, leafName, i) end end function followTreePath(root, ...) local item = root local path = table.flatten({...}) for i,pathPart in ipairs(path) do if pathPart == '..' then item = item.parent else item = (item.children and item.children[pathPart]) or item[pathPart] end if not item then return false end end return item end function treePathToString(root, ...) local item = root local result = '' local path = table.flatten({...}) if #path == 0 then return '/' end for i,pathPart in ipairs(path) do item = (item.children and item.children[pathPart]) or item[pathPart] if not item then return false end result = result .. '/' .. item.name end return result end function addTreeMetaInfo(targetTable, parentTable, depth) if not depth then depth = 1 end local maxSubDepth = depth for k,v in pairs(targetTable) do if type(v) == 'table' then v.depth = depth v.parent = parentTable or targetTable v.siblings = targetTable if v.children then addTreeMetaInfo(v.children, v, depth+1) if v.maxSubDepth > maxSubDepth then maxSubDepth = v.maxSubDepth end end end end (parentTable or targetTable).maxSubDepth = maxSubDepth end function treeHasMetaInfo(tree) for k,v in pairs(tree) do if type(v) == 'table' then return v.depth and true or false end end return false end function applyToLeaves(t, callback) -- apply a callback function to leaves of a table created by xmlToTable() for i,item in ipairs(t) do if type(item) == 'table' then if item.children then applyToLeaves(item.children, callback) else callback(item) end end end end addEventHandler("onClientResourceStart", resourceRoot, function () triggerServerEvent("onPlayerCheckForHexCodes", getLocalPlayer()) end ) addEvent("onServerProvideHexCodesSetting", true) addEventHandler("onServerProvideHexCodesSetting", getRootElement(), function (remove) hexCodesDisabled = remove end) _getPlayerName = getPlayerName function getPlayerName(player) if hexCodesDisabled then return string.gsub(_getPlayerName(player), "#%x%x%x%x%x%x", "") else return _getPlayerName(player) end end Link to comment
Other Languages Moderators Lord Henry Posted June 16, 2018 Other Languages Moderators Share Posted June 16, 2018 Não entendi nada deste script, nem sua utilidade. Link to comment
DNL291 Posted June 17, 2018 Share Posted June 17, 2018 Você alterou alguma coisa do freeroam? Se for só uma mensagem de erro irrelevante, você pode evitar ela assim (linha 21): if type(fn) == "function" then fn(...) end 1 1 Link to comment
DouglaS666 Posted June 18, 2018 Author Share Posted June 18, 2018 23 hours ago, DNL291 said: Você alterou alguma coisa do freeroam? Se for só uma mensagem de erro irrelevante, você pode evitar ela assim (linha 21): if type(fn) == "function" then fn(...) end Não. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now