WASSIm. Posted November 16, 2019 Share Posted November 16, 2019 Hi guys i want show how to cover map (file with .map) to Lua script, but not finished yet, Its cover this elements: Object Vehicle Ped Marker Pickup Blip RemoveWorldObject 1) Use this code: addCommandHandler("covermap", function (thePlayer, _, map) if not (map) then return end local file = xmlLoadFile(map..".map") if (file) then local newMapFile = fileCreate(map..".Lua") if (newMapFile) then local mapTable = {} local mapText = "" local functionName = false for i,element in ipairs(xmlNodeGetChildren(file)) do local elementType = xmlNodeGetName(element) if not (mapTable[elementType]) then mapTable[elementType] = {} end table.insert(mapTable[elementType], xmlNodeGetAttributes(element)) end for type, dataList in pairs(mapTable) do mapText = mapText.."----- "..type..": # "..(#dataList).."\r\n" if (type == "object") then for _, data in ipairs(dataList) do mapText = mapText.."createObject".."("..(data.model or "nil")..", "..(data.posX or "nil")..", "..(data.posY or "nil")..", "..(data.posZ or "nil")..", "..(data.rotX or 0)..", "..(data.rotY or 0)..", "..(data.rotZ or 0)..")\r\n" end elseif (type == "vehicle") then for _, data in ipairs(dataList) do mapText = mapText.."createVehicle".."("..(data.model or "nil")..", "..(data.posX or "nil")..", "..(data.posY or "nil")..", "..(data.posZ or "nil")..", "..(data.rotX or 0)..", "..(data.rotY or 0)..", "..(data.rotZ or 0)..")\r\n" end elseif (type == "ped") then for _, data in ipairs(dataList) do mapText = mapText.."createPed".."("..(data.model or "nil")..", "..(data.posX or "nil")..", "..(data.posY or "nil")..", "..(data.posZ or "nil")..", "..(data.rotZ or 0)..")\r\n" end elseif (type == "marker") then local data.color = table.concat({getColorFromString(data.color or "#ff0000")}, ", ") for _, data in ipairs(dataList) do mapText = mapText.."createMarker".."("..(data.posX or "nil")..", "..(data.posY or "nil")..", "..(data.posZ or "nil")..", "..(data.type or "checkpoint")..", "..(data.size or "4")..", "..(data.color or "nil")..")\r\n" end elseif (type == "pickup") then for _, data in ipairs(dataList) do mapText = mapText.."createPickup".."("..(data.posX or "nil")..", "..(data.posY or "nil")..", "..(data.posZ or "nil")..", "..(data.type or "nil")..", "..(data.amount or "nil")..", "..(data.respawn or "30000")..")\r\n" end elseif (type == "blip") then local r, g, b, a = table.concat({getColorFromString(data.color or "#ff0000")}, ", ") for _, data in ipairs(dataList) do mapText = mapText.."createBlip".."("..(data.posX or "nil")..", "..(data.posY or "nil")..", "..(data.posZ or "nil")..", "..(data.icon or "0")..", 2, "..(r or "255")..", "..(g or "255")..", "..(b or "255")..", "..(a or "255")..", "..(data.ordering or "0")..")\r\n" end elseif (type == "removeWorldObject") then for _, data in ipairs(dataList) do mapText = mapText.."removeWorldObject".."("..(data.radius or "nil")..", "..(data.interior or "nil")..", "..(data.model or "nil")..", "..(data.lodModel or "nil")..", "..(data.posX or 0)..", "..(data.posY or 0)..", "..(data.posZ or 0)..")\r\n" end end end fileWrite(newMapFile, tostring(mapText)) fileFlush(newMapFile) fileClose(newMapFile) outputDebugString("Successfully "..map..".map covered to "..map..".Lua") else outputDebugString("Fail to create new map file") end xmlUnloadFile(file) else outputDebugString("Fail to load map file") end end) 2) For use removeWorldObject add this function function removeWorldObject(radius, interior, model, lodModel, posX, posY, posZ) table.insert(objectsRemoved, {radius, interior, model, lodModel, posX, posY, posZ}) removeWorldModel(model, radius, posX, posY, posZ, interior) removeWorldModel(lodModel, radius, posX, posY, posZ, interior) end 3) For restore all objects was removed when stop resource add this code: addEventHandler("onResourceStop", resourceRoot, function( ) for _, data in ipairs(objectsRemoved) do local radius, interior, model, lodModel, posX, posY, posZ = unpack(data) restoreWorldModel(model, radius, posX, posY, posZ, interior) restoreWorldModel(lodModel, radius, posX, posY, posZ, interior) end end) 4) Remember add this table: local objectsRemoved = {} 5) Use command 'covermap filename' example: /covermap base51 I have hope this TUT helpful and sorry for bad english 2 Link to comment
Moderators IIYAMA Posted November 20, 2019 Moderators Share Posted November 20, 2019 (edited) On 16/11/2019 at 14:34, WASSIm. said: Its cover this elements: GJ! Some suggestions: You could move not supported elements to custom elements, so that spawn points ect, are maintained. https://wiki.multitheftauto.com/wiki/CreateElement ------ <sync_map_element_data> In some cases you want elementdata to be applied to the elements. (Especially the custom ones). Edited November 20, 2019 by IIYAMA Link to comment
Recommended Posts