the map only loads once and is invisible
for i, v in pairs(events) do
_removeEventHandler(v.event, v.parent, v.func)
end
events = {}
function desLoadingDM()
for i, v in pairs(objects) do
if isElement(v) then
destroyElement(v)
end
end
objects = {}
for i, v in pairs(markers) do
if isElement(v) then
destroyElement(v)
end
end
markers = {}
for i, v in pairs(timers) do
if isTimer(v) then
killTimer(v)
end
end
timers = {}
for i, v in pairs(events) do
_removeEventHandler(v.event, v.parent, v.func)
end
events = {}
for i, v in pairs(colspheres) do
if isElement(v) then
destroyElement(v)
end
end
colspheres = {}
for i, v in pairs(sounds) do
if isElement(v) then
_stopSound(v)
end
end
sounds = {}
for i, v in pairs(commands) do
_removeCommandHandler(v)
end
commands = {}
for i, v in pairs(models) do
engineRestoreModel(v)
end
models = {}
for i, v in pairs(binds) do
_unbindKey(v.key)
end
binds = {}
dlFiles = 0
dlScripts = 0
loaded = false
setTimer(function()
triggerServerEvent("loadNewMapDM",root, loadNewMapDM)
end,3000,1)
end
addEvent("desLoadingDM",true)
_addEventHandler("desLoadingDM",root,desLoadingDM)
--DM FABINHO SCRIPT TEST BUGS
function loadNewMapDM()
local newMap = coreServer:getRandomMap("DM")
if newMap then
if not getResourceFromName("deathmatch") then
createResource("deathmatch")
end
if fileExists(":deathmatch/meta.xml") then
fileDelete(":deathmatch/meta.xml")
end
local metaXML = xmlCreateFile(":deathmatch/meta.xml","meta")
local metaXMLNode = xmlCreateChild(metaXML, "info")
xmlNodeSetAttribute(metaXMLNode,"author","Fabinho")
xmlNodeSetAttribute(metaXMLNode,"description","DM-Lobby Maploader")
xmlNodeSetAttribute(metaXMLNode,"type","script")
metaXMLNode = xmlCreateChild(metaXML, "min_mta_version")
xmlNodeSetAttribute(metaXMLNode,"server","1.3.1")
local scriptNode = xmlCreateChild(metaXML, "script")
xmlNodeSetAttribute(scriptNode,"src","loader.lua")
xmlNodeSetAttribute(scriptNode,"type","client")
fileCopy("loader/dmloader.lua", ":deathmatch/loader.lua", true)
local scriptNode = xmlCreateChild(metaXML, "script")
xmlNodeSetAttribute(scriptNode,"src","loader_s.lua")
xmlNodeSetAttribute(scriptNode,"type","server")
if fileCopy("loader/dmloader_s.lua", ":deathmatch/loader_s.lua",true) then end
xmlSaveFile(metaXML)
xmlUnloadFile(metaXML)
if fileExists(":deathmatch/map.xml") then
fileDelete(":deathmatch/map.xml")
end
local mapXML = xmlCreateFile(":deathmatch/map.xml","meta")
local metaXML = xmlLoadFile(":"..newMap.mapname.."/meta.xml")
if metaXML then
for i, m in ipairs(xmlNodeGetChildren(metaXML)) do
local metaXMLName = xmlNodeGetName(m)
---Checks if the XMl-File is a .map file---
if metaXMLName == "map" then
local mapPath = xmlNodeGetAttribute(m,"src")
if mapPath and fileExists(":"..newMap.mapname.."/"..mapPath) then
local mapFile = xmlLoadFile(":"..newMap.mapname.."/"..mapPath)
if mapFile then
for r, p in ipairs(xmlNodeGetChildren(mapFile)) do
local objectType = xmlNodeGetName(p)
if objectType == "spawnpoint" then
table.insert(dmTable.Spawnpoints,{
modelID = tonumber(xmlNodeGetAttribute(p, "vehicle")),
interiorID = tonumber(xmlNodeGetAttribute(p, "interior")),
posX = tonumber(xmlNodeGetAttribute(p, "posX")),
posY = tonumber(xmlNodeGetAttribute(p, "posY")),
posZ = tonumber(xmlNodeGetAttribute(p, "posZ")),
rotX = tonumber(xmlNodeGetAttribute(p, "rotX")),
rotY = tonumber(xmlNodeGetAttribute(p, "rotY")),
rotZ = tonumber(xmlNodeGetAttribute(p, "rotZ")),
dimension = 1
})
elseif objectType == "object" then
table.insert(dmTable.objects,{
modelId = tonumber(xmlNodeGetAttribute(p,"model")),
interiorID = tonumber(xmlNodeGetAttribute(p, "interior")) or 0,
posX = tonumber(xmlNodeGetAttribute(p,"posX")),
posY = tonumber(xmlNodeGetAttribute(p,"posY")),
posZ = tonumber(xmlNodeGetAttribute(p,"posZ")),
rotX = tonumber(xmlNodeGetAttribute(p,"rotX")),
rotY = tonumber(xmlNodeGetAttribute(p,"rotY")),
rotZ = tonumber(xmlNodeGetAttribute(p,"rotZ")),
doublesided = xmlNodeGetAttribute(p,"doublesided"),
dimension = 1
})
elseif objectType == "marker" then
table.insert(dmTable.marker,{
theType = xmlNodeGetAttribute(p, "type"),
interiorID = tonumber(xmlNodeGetAttribute(p, "interior")),
posX = tonumber(xmlNodeGetAttribute(p, "posX")),
posY = tonumber(xmlNodeGetAttribute(p, "posY")),
posZ = tonumber(xmlNodeGetAttribute(p, "posZ")),
size = tonumber(xmlNodeGetAttribute(p, "size")),
color = xmlNodeGetAttribute(p, "color"),
dimension = 1
})
elseif objectType == "racepickup" then
table.insert(dmTable.pickup,{
pickupType = xmlNodeGetAttribute(p, "type"),
posX = tonumber(xmlNodeGetAttribute(p, "posX")),
posY = tonumber(xmlNodeGetAttribute(p, "posY")),
posZ = tonumber(xmlNodeGetAttribute(p, "posZ")),
interiorID = tonumber(xmlNodeGetAttribute(p, "interior")),
vehicle = tonumber(xmlNodeGetAttribute(p, "vehicle")) or false,
dimension = 1
})
end
end
end
xmlSaveFile(mapFile)
xmlUnloadFile(mapFile)
end
---Checks if the XML File is a Script File---
elseif metaXMLName == "script" then
local scriptPath = xmlNodeGetAttribute(m,"src")
fileCopy(":"..newMap.mapname.."/"..scriptPath, ":deathmatch/"..scriptPath,true)
local scriptNode = xmlCreateChild(mapXML,"file")
xmlNodeSetAttribute(scriptNode,"src",scriptPath)
xmlNodeSetAttribute(scriptNode,"downloaded","false")
---Checks if the XMl File is a File---
elseif metaXMLName == "file" then
local filePath = xmlNodeGetAttribute(m,"src")
fileCopy(":"..newMap.mapname.."/"..filePath, ":deathmatch/"..filePath,true)
local fileNode = xmlCreateChild(mapXML,"file")
xmlNodeSetAttribute(fileNode,"src",filePath)
xmlNodeSetAttribute(fileNode,"downloaded","false")
end
end
end
local xmlSettings = xmlFindChild ( metaXML, "settings", 0)
local xmlChild = xmlCreateChild(mapXML, "settings")
i = 0
while true do
local xmlNode = xmlFindChild ( xmlSettings, "setting", i)
if not xmlNode then
break
else
mapNode = xmlCreateChild(xmlChild, "setting")
xmlNodeSetAttribute(mapNode, "name", xmlNodeGetAttribute(xmlNode, "name"))
xmlNodeSetAttribute(mapNode, "value", xmlNodeGetAttribute(xmlNode, "value"))
i = i + 1
end
end
xmlSaveFile(mapXML)
xmlUnloadFile(mapXML)
xmlUnloadFile(metaXML)
local file = fileOpen(":deathmatch/map.xml")
local map = ""
if file then
--outputChatBox("OK")
while not fileIsEOF(file) do
map = map..""..fileRead(file,500)
end
end
fileClose(file)
mapDM = map
dnsp = dmTable.Spawonpoints
startResource(getResourceFromName("deathmatch"))
end
for i, p in ipairs(getGamemodePlayers("deathmatch")) do
setUPDMPlayer(p,dmTable.Spawnpoints,dmTable.objects,dmTable.marker,dmTable.pickup)
end
end
addEvent("loadNewMapDM",true)
addEventHandler("loadNewMapDM",root, loadNewMapDM)
function setUPDMPlayer(player,spawn,o,m,p)
--outputChatBox(#spawn)
if spawn then
toggleControl(player,"vehicle_secondary_fire",true)
toggleControl(player,"vehicle_primary_fire",false)
local rand = math.random(tonumber(#spawn))
spawnPlayer(player,spawn[rand].posX,spawn[rand].posY,spawn[rand].posZ)
setElementDimension(player,1)
local vehicle = createVehicle(spawn[rand].modelID,spawn[rand].posX,spawn[rand].posY,spawn[rand].posZ,spawn[rand].rotX,spawn[rand].rotY,spawn[rand].rotZ)
setElementDimension(vehicle,1)
fadeCamera(player,true)
setCameraTarget(player,player)
setCameraTarget(player,vehicle)
setElementFrozen(vehicle,true)
warpPedIntoVehicle(player,vehicle)
setElementData(vehicle,"DMVehicle",true)
setElementData(player,"curVehicle",veh)
setElementAlpha(player,255)
setElementFrozen(player,false)
setElementData(player,"ghostmode",true)
end
triggerLatentClientEvent(player,"loadMapDM",500000,false,root,mapDM,o,m,p)
end
addEvent("dmDownloadFinished",true)
addEventHandler("dmDownloadFinished",getRootElement(),function(player)
table.insert(readyDMPlayers,{
player = player
})
startCountdownDM(player)
end)
function setPlayerDMWaitRound(player)
if isDmMapRunning() then
end
end
function startCountdownDM(player)
triggerClientEvent(player,"startCountdown",root)
setTimer(startRoundDM,3800,1,player)
end
function startRoundDM(player)
setElementFrozen(getPedOccupiedVehicle(player),false)
setElementData(player,"state","ready")
--setElementData(player,"state","alive")
end
addEvent("killDMPlayer",true)
addEventHandler("killDMPlayer",root,function()
if isPedInVehicle(source) and getElementHealth(source) > 0 then
if getElementData(source,"state") ~= "ready" then
setTimer(function()
destroyElement(getPedOccupiedVehicle(source))
killPed(source)
end,10000,1)
else
destroyElement(getPedOccupiedVehicle(source))
killPed(source)
end
end
triggerClientEvent(source,"desLoadingDM",root,desLoadingDM)
end)