Jump to content

[TUT] Cover map to Lua script


WASSIm.

Recommended Posts

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 :)

  • Like 2
Link to comment
  • Moderators
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 by IIYAMA
Link to comment
  • Recently Browsing   0 members

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