768 lines
29 KiB
Lua
768 lines
29 KiB
Lua
vehicleInfoTable = {}
|
|
patternInfoTable = {}
|
|
|
|
local verFile = LoadResourceFile(GetCurrentResourceName(), "version.json")
|
|
local curVersion = json.decode(verFile).version
|
|
Citizen.CreateThread( function()
|
|
local updatePath = "ELS-FiveM"
|
|
local resourceName = "ELS-FiveM ("..GetCurrentResourceName()..")"
|
|
PerformHttpRequest("https://raw.githubusercontent.com/MrDaGree/"..updatePath.."/master/version.json", function(err, response, headers)
|
|
local data = json.decode(response)
|
|
|
|
|
|
if curVersion ~= data.version and tonumber(curVersion) < tonumber(data.version) then
|
|
print("\n--------------------------------------------------------------------------")
|
|
print("\n"..resourceName.." is outdated.\nCurrent Version: "..data.version.."\nYour Version: "..curVersion.."\nPlease update it from https://github.com/MrDaGree"..updatePath.."")
|
|
print("\nUpdate Changelog:\n"..data.changelog)
|
|
print("\n--------------------------------------------------------------------------")
|
|
elseif tonumber(curVersion) > tonumber(data.version) then
|
|
print("Your version of "..resourceName.." seems to be higher than the current version. Hax bro?")
|
|
else
|
|
print(resourceName.." is up to date!")
|
|
end
|
|
end, "GET", "", {version = 'this'})
|
|
end)
|
|
|
|
RegisterCommand('_curver', function(source)
|
|
PerformHttpRequest('https://raw.githubusercontent.com/MrDaGree/ELS-FiveM/master/version.json', function(err, response, headers)
|
|
local data = json.decode(response)
|
|
|
|
if curVersion ~= data.version and tonumber(curVersion) < tonumber(data.version) then
|
|
TriggerClientEvent('chat:addMessage', source, { args = { "ELS-FiveM", "You are currently an outdated version of [ " .. GetCurrentResourceName() .. " ]. Your version: [ " .. curVersion .. " ]. Newest version: [ " .. data.version .. " ]."}, color = {13, 161, 200}})
|
|
elseif tonumber(curVersion) > tonumber(data.version) then
|
|
TriggerClientEvent('chat:addMessage', source, { args = { "ELS-FiveM", "Um, what? Your version of ELS-FiveM is higher than the current version. What?"}, color = {13, 161, 200}})
|
|
else
|
|
TriggerClientEvent('chat:addMessage', source, { args = { "ELS-FiveM", "Your version of [ " .. GetCurrentResourceName() .. " ] is up to date! Current version: [ " .. curVersion .. " ]."}, color = {13, 161, 200}})
|
|
end
|
|
end, "GET", "", {version = 'this'})
|
|
end)
|
|
|
|
local function processXml(el)
|
|
local v = {}
|
|
local text
|
|
|
|
for _,kid in ipairs(el.kids) do
|
|
if kid.type == 'text' then
|
|
text = kid.value
|
|
elseif kid.type == 'element' then
|
|
if not v[kid.name] then
|
|
v[kid.name] = {}
|
|
end
|
|
|
|
table.insert(v[kid.name], processXml(kid))
|
|
end
|
|
end
|
|
|
|
v._ = el.attr
|
|
|
|
if #el.attr == 0 and #el.el == 0 then
|
|
v = text
|
|
end
|
|
|
|
return v
|
|
end
|
|
|
|
function parseVehData(xml, fileName)
|
|
|
|
local a = {}
|
|
fileName = string.sub(fileName, 1, -5)
|
|
|
|
a = {}
|
|
a.interface = {}
|
|
a.extras = {}
|
|
a.misc = {}
|
|
a.cruise = {}
|
|
a.sounds = {}
|
|
a.wrnl = {}
|
|
a.priml = {}
|
|
a.secl = {}
|
|
|
|
for i=1,#xml.root.el do
|
|
if(xml.root.el[i].name == "INTERFACE") then
|
|
for ex=1,#xml.root.el[i].kids do
|
|
if(xml.root.el[i].kids[ex].name== "LstgActivationType") then
|
|
local elem = xml.root.el[i].kids[ex]
|
|
a.interface.activationType = elem.kids[1].value
|
|
|
|
end
|
|
if(xml.root.el[i].kids[ex].name== "InfoPanelHeaderColor") then
|
|
local elem = xml.root.el[i].kids[ex]
|
|
a.interface.headerColor = {}
|
|
if elem.kids[1].value == string.lower("grey") then
|
|
a.interface.headerColor['r'] = 40
|
|
a.interface.headerColor['g'] = 40
|
|
a.interface.headerColor['b'] = 40
|
|
end
|
|
if elem.kids[1].value == string.lower("white") then
|
|
a.interface.headerColor['r'] = 255
|
|
a.interface.headerColor['g'] = 255
|
|
a.interface.headerColor['b'] = 255
|
|
end
|
|
if elem.kids[1].value == string.lower("yellow") then
|
|
a.interface.headerColor['r'] = 242
|
|
a.interface.headerColor['g'] = 238
|
|
a.interface.headerColor['b'] = 0
|
|
end
|
|
end
|
|
if(xml.root.el[i].kids[ex].name== "InfoPanelButtonLightColor") then
|
|
local elem = xml.root.el[i].kids[ex]
|
|
a.interface.buttonColor = {}
|
|
if elem.kids[1].value == string.lower("green") then
|
|
a.interface.buttonColor['r'] = 0
|
|
a.interface.buttonColor['g'] = 255
|
|
a.interface.buttonColor['b'] = 0
|
|
end
|
|
if elem.kids[1].value == string.lower("red") then
|
|
a.interface.buttonColor['r'] = 255
|
|
a.interface.buttonColor['g'] = 0
|
|
a.interface.buttonColor['b'] = 0
|
|
end
|
|
if elem.kids[1].value == string.lower("blue") then
|
|
a.interface.buttonColor['r'] = 0
|
|
a.interface.buttonColor['g'] = 0
|
|
a.interface.buttonColor['b'] = 255
|
|
end
|
|
if elem.kids[1].value == string.lower("purple") then
|
|
a.interface.buttonColor['r'] = 170
|
|
a.interface.buttonColor['g'] = 0
|
|
a.interface.buttonColor['b'] = 255
|
|
end
|
|
if elem.kids[1].value == string.lower("orange") then
|
|
a.interface.buttonColor['r'] = 255
|
|
a.interface.buttonColor['g'] = 157
|
|
a.interface.buttonColor['b'] = 0
|
|
end
|
|
if elem.kids[1].value == string.lower("yellow") then
|
|
a.interface.buttonColor['r'] = 242
|
|
a.interface.buttonColor['g'] = 238
|
|
a.interface.buttonColor['b'] = 0
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if(xml.root.el[i].name == "EOVERRIDE") then
|
|
for ex=1,#xml.root.el[i].kids do
|
|
if(string.upper(string.sub(xml.root.el[i].kids[ex].name, 1, -3)) == "EXTRA") then
|
|
local elem = xml.root.el[i].kids[ex]
|
|
local extra = tonumber(string.sub(elem.name, -2))
|
|
a.extras[extra] = {}
|
|
if elem.attr['IsElsControlled'] == "true" then
|
|
a.extras[extra].enabled = true
|
|
else
|
|
a.extras[extra].enabled = false
|
|
end
|
|
|
|
a.extras[extra].env_light = false
|
|
a.extras[extra].env_pos = {}
|
|
a.extras[extra].env_pos['x'] = 0
|
|
a.extras[extra].env_pos['y'] = 0
|
|
a.extras[extra].env_pos['z'] = 0
|
|
a.extras[extra].env_color = {}
|
|
a.extras[extra].env_color['r'] = 255
|
|
a.extras[extra].env_color['g'] = 0
|
|
a.extras[extra].env_color['b'] = 0
|
|
|
|
if(elem.attr['AllowEnvLight'] == "true") then
|
|
a.extras[extra].env_light = true
|
|
a.extras[extra].env_pos = {}
|
|
a.extras[extra].env_pos['x'] = tonumber(elem.attr['OffsetX'])
|
|
a.extras[extra].env_pos['y'] = tonumber(elem.attr['OffsetY'])
|
|
a.extras[extra].env_pos['z'] = tonumber(elem.attr['OffsetZ'])
|
|
a.extras[extra].env_color = {}
|
|
|
|
if string.upper(elem.attr['Color']) == "RED" then
|
|
a.extras[extra].env_color['r'] = 255
|
|
a.extras[extra].env_color['g'] = 0
|
|
a.extras[extra].env_color['b'] = 0
|
|
elseif string.upper(elem.attr['Color']) == "BLUE" then
|
|
a.extras[extra].env_color['r'] = 0
|
|
a.extras[extra].env_color['g'] = 0
|
|
a.extras[extra].env_color['b'] = 255
|
|
elseif string.upper(elem.attr['Color']) == "GREEN" then
|
|
a.extras[extra].env_color['r'] = 0
|
|
a.extras[extra].env_color['g'] = 255
|
|
a.extras[extra].env_color['b'] = 0
|
|
elseif string.upper(elem.attr['Color']) == "AMBER" then
|
|
a.extras[extra].env_color['r'] = 255
|
|
a.extras[extra].env_color['g'] = 194
|
|
a.extras[extra].env_color['b'] = 0
|
|
elseif string.upper(elem.attr['Color']) == "WHITE" then
|
|
a.extras[extra].env_color['r'] = 255
|
|
a.extras[extra].env_color['g'] = 255
|
|
a.extras[extra].env_color['b'] = 255
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
if(xml.root.el[i].name == "MISC") then
|
|
for ex=1,#xml.root.el[i].kids do
|
|
if(xml.root.el[i].kids[ex].name == "ArrowboardType") then
|
|
local elem = xml.root.el[i].kids[ex]
|
|
a.misc.arrowboardType = elem.kids[1].value
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name == "UseSteadyBurnLights") then
|
|
local elem = xml.root.el[i].kids[ex]
|
|
if elem.kids[1].value == "true" then
|
|
a.misc.usesteadyburnlights = true
|
|
else
|
|
a.misc.usesteadyburnlights = false
|
|
end
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name == "DfltSirenLtsActivateAtLstg") then
|
|
local elem = xml.root.el[i].kids[ex]
|
|
a.misc.dfltsirenltsactivateatlstg = tonumber(elem.kids[1].value)
|
|
end
|
|
end
|
|
end
|
|
|
|
if(xml.root.el[i].name == "CRUISE") then
|
|
for ex=1,#xml.root.el[i].kids do
|
|
local elem = xml.root.el[i].kids[ex]
|
|
if(xml.root.el[i].kids[ex].name== "UseExtras") then
|
|
if elem.attr['Extra1'] == "true" then a.cruise[1] = 0 else a.cruise[1] = 1 end
|
|
if elem.attr['Extra2'] == "true" then a.cruise[2] = 0 else a.cruise[2] = 1 end
|
|
if elem.attr['Extra3'] == "true" then a.cruise[3] = 0 else a.cruise[3] = 1 end
|
|
if elem.attr['Extra4'] == "true" then a.cruise[4] = 0 else a.cruise[4] = 1 end
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name== "DisableAtLstg3") then
|
|
local elem = xml.root.el[i].kids[ex]
|
|
if elem.kids[1].value == "true" then
|
|
a.cruise.DisableLstgThree = true
|
|
else
|
|
a.cruise.DisableLstgThree = false
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if(xml.root.el[i].name == "SOUNDS") then
|
|
for ex=1,#xml.root.el[i].kids do
|
|
local elem = xml.root.el[i].kids[ex]
|
|
if(xml.root.el[i].kids[ex].name== "MainHorn") then
|
|
a.sounds.mainHorn = {}
|
|
if elem.attr['InterruptsSiren'] == "true" then a.sounds.mainHorn.interrupt = true else a.sounds.mainHorn.interrupt = false end
|
|
a.sounds.mainHorn.audioString = elem.attr['AudioString']
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name== "ManTone1") then
|
|
a.sounds.manTone1 = {}
|
|
if elem.attr['AllowUse'] == "true" then a.sounds.manTone1.allowUse = true else a.sounds.manTone1.allowUse = false end
|
|
a.sounds.manTone1.audioString = elem.attr['AudioString']
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name== "ManTone2") then
|
|
a.sounds.manTone2 = {}
|
|
if elem.attr['AllowUse'] == "true" then a.sounds.manTone2.allowUse = true else a.sounds.manTone2.allowUse = false end
|
|
a.sounds.manTone2.audioString = elem.attr['AudioString']
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name== "SrnTone1") then
|
|
a.sounds.srnTone1 = {}
|
|
if elem.attr['AllowUse'] == "true" then a.sounds.srnTone1.allowUse = true else a.sounds.srnTone1.allowUse = false end
|
|
a.sounds.srnTone1.audioString = elem.attr['AudioString']
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name== "SrnTone2") then
|
|
a.sounds.srnTone2 = {}
|
|
if elem.attr['AllowUse'] == "true" then a.sounds.srnTone2.allowUse = true else a.sounds.srnTone2.allowUse = false end
|
|
a.sounds.srnTone2.audioString = elem.attr['AudioString']
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name== "SrnTone3") then
|
|
a.sounds.srnTone3 = {}
|
|
if elem.attr['AllowUse'] == "true" then a.sounds.srnTone3.allowUse = true else a.sounds.srnTone3.allowUse = false end
|
|
a.sounds.srnTone3.audioString = elem.attr['AudioString']
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name== "SrnTone4") then
|
|
a.sounds.srnTone4 = {}
|
|
if elem.attr['AllowUse'] == "true" then a.sounds.srnTone4.allowUse = true else a.sounds.srnTone4.allowUse = false end
|
|
a.sounds.srnTone4.audioString = elem.attr['AudioString']
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name== "AuxSiren") then
|
|
a.sounds.auxSiren = {}
|
|
if elem.attr['AllowUse'] == "true" then a.sounds.auxSiren.allowUse = true else a.sounds.auxSiren.allowUse = false end
|
|
a.sounds.auxSiren.audioString = elem.attr['AudioString']
|
|
end
|
|
|
|
if(xml.root.el[i].kids[ex].name== "PanicMde") then
|
|
a.sounds.panicMode = {}
|
|
if elem.attr['AllowUse'] == "true" then a.sounds.panicMode.allowUse = true else a.sounds.panicMode.allowUse = false end
|
|
a.sounds.panicMode.audioString = elem.attr['AudioString']
|
|
end
|
|
end
|
|
end
|
|
|
|
if(xml.root.el[i].name == "WRNL") then
|
|
a.wrnl.type = string.lower(xml.root.el[i].attr['LightingFormat'])
|
|
a.wrnl.PresetPatterns = {}
|
|
a.wrnl.ForcedPatterns = {}
|
|
for ex=1,#xml.root.el[i].kids do
|
|
if(xml.root.el[i].kids[ex].name == "PresetPatterns") then
|
|
for inner=1,#xml.root.el[i].kids[ex].el do
|
|
local elem = xml.root.el[i].kids[ex].el[inner]
|
|
|
|
a.wrnl.PresetPatterns[string.lower(elem.name)] = {}
|
|
if string.lower(elem.attr['Enabled']) == "true" then a.wrnl.PresetPatterns[string.lower(elem.name)].enabled = true else a.wrnl.PresetPatterns[string.lower(elem.name)].enabled = false end
|
|
a.wrnl.PresetPatterns[string.lower(elem.name)].pattern = tonumber(elem.attr['Pattern'])
|
|
end
|
|
end
|
|
if(xml.root.el[i].kids[ex].name == "ForcedPatterns") then
|
|
for inner=1,#xml.root.el[i].kids[ex].el do
|
|
local elem = xml.root.el[i].kids[ex].el[inner]
|
|
|
|
a.wrnl.ForcedPatterns[string.lower(elem.name)] = {}
|
|
if string.lower(elem.attr['Enabled']) == "true" then a.wrnl.ForcedPatterns[string.lower(elem.name)].enabled = true else a.wrnl.ForcedPatterns[string.lower(elem.name)].enabled = false end
|
|
a.wrnl.ForcedPatterns[string.lower(elem.name)].pattern = tonumber(elem.attr['Pattern'])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if(xml.root.el[i].name == "PRML") then
|
|
a.priml.type = string.lower(xml.root.el[i].attr['LightingFormat'])
|
|
a.priml.ExtrasActiveAtLstg2 = string.lower(xml.root.el[i].attr['ExtrasActiveAtLstg2'])
|
|
a.priml.PresetPatterns = {}
|
|
a.priml.ForcedPatterns = {}
|
|
for ex=1,#xml.root.el[i].kids do
|
|
if(xml.root.el[i].kids[ex].name == "PresetPatterns") then
|
|
for inner=1,#xml.root.el[i].kids[ex].el do
|
|
local elem = xml.root.el[i].kids[ex].el[inner]
|
|
|
|
a.priml.PresetPatterns[string.lower(elem.name)] = {}
|
|
if string.lower(elem.attr['Enabled']) == "true" then a.priml.PresetPatterns[string.lower(elem.name)].enabled = true else a.priml.PresetPatterns[string.lower(elem.name)].enabled = false end
|
|
a.priml.PresetPatterns[string.lower(elem.name)].pattern = tonumber(elem.attr['Pattern'])
|
|
end
|
|
end
|
|
if(xml.root.el[i].kids[ex].name == "ForcedPatterns") then
|
|
for inner=1,#xml.root.el[i].kids[ex].el do
|
|
local elem = xml.root.el[i].kids[ex].el[inner]
|
|
|
|
a.priml.ForcedPatterns[string.lower(elem.name)] = {}
|
|
if string.lower(elem.attr['Enabled']) == "true" then a.priml.ForcedPatterns[string.lower(elem.name)].enabled = true else a.priml.ForcedPatterns[string.lower(elem.name)].enabled = false end
|
|
a.priml.ForcedPatterns[string.lower(elem.name)].pattern = tonumber(elem.attr['Pattern'])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if(xml.root.el[i].name == "SECL") then
|
|
a.secl.type = string.lower(xml.root.el[i].attr['LightingFormat'])
|
|
a.secl.PresetPatterns = {}
|
|
a.secl.ForcedPatterns = {}
|
|
for ex=1,#xml.root.el[i].kids do
|
|
if(xml.root.el[i].kids[ex].name == "PresetPatterns") then
|
|
for inner=1,#xml.root.el[i].kids[ex].el do
|
|
local elem = xml.root.el[i].kids[ex].el[inner]
|
|
|
|
a.secl.PresetPatterns[string.lower(elem.name)] = {}
|
|
if string.lower(elem.attr['Enabled']) == "true" then a.secl.PresetPatterns[string.lower(elem.name)].enabled = true else a.secl.PresetPatterns[string.lower(elem.name)].enabled = false end
|
|
a.secl.PresetPatterns[string.lower(elem.name)].pattern = tonumber(elem.attr['Pattern'])
|
|
end
|
|
end
|
|
if(xml.root.el[i].kids[ex].name == "ForcedPatterns") then
|
|
for inner=1,#xml.root.el[i].kids[ex].el do
|
|
local elem = xml.root.el[i].kids[ex].el[inner]
|
|
|
|
a.secl.ForcedPatterns[string.lower(elem.name)] = {}
|
|
if string.lower(elem.attr['Enabled']) == "true" then a.secl.ForcedPatterns[string.lower(elem.name)].enabled = true else a.secl.ForcedPatterns[string.lower(elem.name)].enabled = false end
|
|
a.secl.ForcedPatterns[string.lower(elem.name)].pattern = tonumber(elem.attr['Pattern'])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
vehicleInfoTable[fileName] = a
|
|
|
|
if outputLoading and outputLoading ~= nil then
|
|
if printDebugInformation == nil or printDebugInformation == true then
|
|
print("Done with vehicle: " .. fileName)
|
|
end
|
|
end
|
|
end
|
|
|
|
function parsePatternData(xml, fileName)
|
|
|
|
local primary = {}
|
|
local secondary = {}
|
|
local advisor = {}
|
|
local patternError = false
|
|
|
|
fileName = string.sub(fileName, 1, -5)
|
|
|
|
for i=1,#xml.root.el do
|
|
if(xml.root.el[i].name == "PRIMARY") then
|
|
primary.stages = {}
|
|
primary.speed = tonumber(xml.root.el[i].attr["speed"])
|
|
for ex=1,#xml.root.el[i].kids do
|
|
if(string.upper(string.sub(xml.root.el[i].kids[ex].name, 1, -3)) == "STATE") then
|
|
local spot = tonumber(string.sub(xml.root.el[i].kids[ex].name, 6))
|
|
local elem = xml.root.el[i].kids[ex]
|
|
primary.stages[spot] = {}
|
|
if elem.attr['Extra1'] == "true" then
|
|
primary.stages[spot][1] = 0
|
|
elseif elem.attr['Extra1'] == "false" then
|
|
primary.stages[spot][1] = 1
|
|
end
|
|
if elem.attr['Extra2'] == "true" then
|
|
primary.stages[spot][2] = 0
|
|
elseif elem.attr['Extra2'] == "false" then
|
|
primary.stages[spot][2] = 1
|
|
end
|
|
if elem.attr['Extra3'] == "true" then
|
|
primary.stages[spot][3] = 0
|
|
elseif elem.attr['Extra3'] == "false" then
|
|
primary.stages[spot][3] = 1
|
|
end
|
|
if elem.attr['Extra4'] == "true" then
|
|
primary.stages[spot][4] = 0
|
|
elseif elem.attr['Extra4'] == "false" then
|
|
primary.stages[spot][4] = 1
|
|
end
|
|
if elem.attr['Extra5'] == "true" then
|
|
primary.stages[spot][5] = 0
|
|
elseif elem.attr['Extra5'] == "false" then
|
|
primary.stages[spot][5] = 1
|
|
end
|
|
if elem.attr['Extra6'] == "true" then
|
|
primary.stages[spot][6] = 0
|
|
elseif elem.attr['Extra6'] == "false" then
|
|
primary.stages[spot][6] = 1
|
|
end
|
|
if elem.attr['Extra7'] == "true" then
|
|
primary.stages[spot][7] = 0
|
|
elseif elem.attr['Extra7'] == "false" then
|
|
primary.stages[spot][7] = 1
|
|
end
|
|
if elem.attr['Extra8'] == "true" then
|
|
primary.stages[spot][8] = 0
|
|
elseif elem.attr['Extra8'] == "false" then
|
|
primary.stages[spot][8] = 1
|
|
end
|
|
if elem.attr['Extra9'] == "true" then
|
|
primary.stages[spot][9] = 0
|
|
elseif elem.attr['Extra9'] == "false" then
|
|
primary.stages[spot][9] = 1
|
|
end
|
|
if elem.attr['Extra10'] == "true" then
|
|
primary.stages[spot][10] = 0
|
|
elseif elem.attr['Extra10'] == "false" then
|
|
primary.stages[spot][10] = 1
|
|
end
|
|
if elem.attr['Extra11'] == "true" then
|
|
primary.stages[spot][11] = 0
|
|
elseif elem.attr['Extra11'] == "false" then
|
|
primary.stages[spot][11] = 1
|
|
end
|
|
if elem.attr['Extra12'] == "true" then
|
|
primary.stages[spot][12] = 0
|
|
elseif elem.attr['Extra12'] == "false" then
|
|
primary.stages[spot][12] = 1
|
|
end
|
|
|
|
if elem.attr['Speed'] ~= nil then
|
|
primary.stages[spot].speed = tonumber(elem.attr['Speed'])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if(xml.root.el[i].name == "SECONDARY") then
|
|
secondary.stages = {}
|
|
secondary.speed = tonumber(xml.root.el[i].attr["speed"])
|
|
for ex=1,#xml.root.el[i].kids do
|
|
if(string.upper(string.sub(xml.root.el[i].kids[ex].name, 1, -3)) == "STATE") then
|
|
local spot = tonumber(string.sub(xml.root.el[i].kids[ex].name, 6))
|
|
local elem = xml.root.el[i].kids[ex]
|
|
secondary.stages[spot] = {}
|
|
if elem.attr['Extra1'] == "true" then
|
|
secondary.stages[spot][1] = 0
|
|
elseif elem.attr['Extra1'] == "false" then
|
|
secondary.stages[spot][1] = 1
|
|
end
|
|
if elem.attr['Extra2'] == "true" then
|
|
secondary.stages[spot][2] = 0
|
|
elseif elem.attr['Extra2'] == "false" then
|
|
secondary.stages[spot][2] = 1
|
|
end
|
|
if elem.attr['Extra3'] == "true" then
|
|
secondary.stages[spot][3] = 0
|
|
elseif elem.attr['Extra3'] == "false" then
|
|
secondary.stages[spot][3] = 1
|
|
end
|
|
if elem.attr['Extra4'] == "true" then
|
|
secondary.stages[spot][4] = 0
|
|
elseif elem.attr['Extra4'] == "false" then
|
|
secondary.stages[spot][4] = 1
|
|
end
|
|
if elem.attr['Extra5'] == "true" then
|
|
secondary.stages[spot][5] = 0
|
|
elseif elem.attr['Extra5'] == "false" then
|
|
secondary.stages[spot][5] = 1
|
|
end
|
|
if elem.attr['Extra6'] == "true" then
|
|
secondary.stages[spot][6] = 0
|
|
elseif elem.attr['Extra6'] == "false" then
|
|
secondary.stages[spot][6] = 1
|
|
end
|
|
if elem.attr['Extra7'] == "true" then
|
|
secondary.stages[spot][7] = 0
|
|
elseif elem.attr['Extra7'] == "false" then
|
|
secondary.stages[spot][7] = 1
|
|
end
|
|
if elem.attr['Extra8'] == "true" then
|
|
secondary.stages[spot][8] = 0
|
|
elseif elem.attr['Extra8'] == "false" then
|
|
secondary.stages[spot][8] = 1
|
|
end
|
|
if elem.attr['Extra9'] == "true" then
|
|
secondary.stages[spot][9] = 0
|
|
elseif elem.attr['Extra9'] == "false" then
|
|
secondary.stages[spot][9] = 1
|
|
end
|
|
if elem.attr['Extra10'] == "true" then
|
|
secondary.stages[spot][10] = 0
|
|
elseif elem.attr['Extra10'] == "false" then
|
|
secondary.stages[spot][10] = 1
|
|
end
|
|
if elem.attr['Extra11'] == "true" then
|
|
secondary.stages[spot][11] = 0
|
|
elseif elem.attr['Extra11'] == "false" then
|
|
secondary.stages[spot][11] = 1
|
|
end
|
|
if elem.attr['Extra12'] == "true" then
|
|
secondary.stages[spot][12] = 0
|
|
elseif elem.attr['Extra12'] == "false" then
|
|
secondary.stages[spot][12] = 1
|
|
end
|
|
|
|
if elem.attr['Speed'] ~= nil then
|
|
secondary.stages[spot].speed = tonumber(elem.attr['Speed'])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if(xml.root.el[i].name == "ADVISOR") then
|
|
advisor = {}
|
|
advisor.stages = {}
|
|
advisor.speed = tonumber(xml.root.el[i].attr["speed"])
|
|
for ex=1,#xml.root.el[i].kids do
|
|
if(string.upper(string.sub(xml.root.el[i].kids[ex].name, 1, -3)) == "STATE") then
|
|
local spot = tonumber(string.sub(xml.root.el[i].kids[ex].name, 6))
|
|
local elem = xml.root.el[i].kids[ex]
|
|
|
|
advisor.stages[spot] = {}
|
|
if elem.attr['Extra1'] == "true" then
|
|
advisor.stages[spot][1] = 0
|
|
elseif elem.attr['Extra1'] == "false" then
|
|
advisor.stages[spot][1] = 1
|
|
end
|
|
if elem.attr['Extra2'] == "true" then
|
|
advisor.stages[spot][2] = 0
|
|
elseif elem.attr['Extra2'] == "false" then
|
|
advisor.stages[spot][2] = 1
|
|
end
|
|
if elem.attr['Extra3'] == "true" then
|
|
advisor.stages[spot][3] = 0
|
|
elseif elem.attr['Extra3'] == "false" then
|
|
advisor.stages[spot][3] = 1
|
|
end
|
|
if elem.attr['Extra4'] == "true" then
|
|
advisor.stages[spot][4] = 0
|
|
elseif elem.attr['Extra4'] == "false" then
|
|
advisor.stages[spot][4] = 1
|
|
end
|
|
if elem.attr['Extra5'] == "true" then
|
|
advisor.stages[spot][5] = 0
|
|
elseif elem.attr['Extra5'] == "false" then
|
|
advisor.stages[spot][5] = 1
|
|
end
|
|
if elem.attr['Extra6'] == "true" then
|
|
advisor.stages[spot][6] = 0
|
|
elseif elem.attr['Extra6'] == "false" then
|
|
advisor.stages[spot][6] = 1
|
|
end
|
|
if elem.attr['Extra7'] == "true" then
|
|
advisor.stages[spot][7] = 0
|
|
elseif elem.attr['Extra7'] == "false" then
|
|
advisor.stages[spot][7] = 1
|
|
end
|
|
if elem.attr['Extra8'] == "true" then
|
|
advisor.stages[spot][8] = 0
|
|
elseif elem.attr['Extra8'] == "false" then
|
|
advisor.stages[spot][8] = 1
|
|
end
|
|
if elem.attr['Extra9'] == "true" then
|
|
advisor.stages[spot][9] = 0
|
|
elseif elem.attr['Extra9'] == "false" then
|
|
advisor.stages[spot][9] = 1
|
|
end
|
|
if elem.attr['Extra10'] == "true" then
|
|
advisor.stages[spot][10] = 0
|
|
elseif elem.attr['Extra10'] == "false" then
|
|
advisor.stages[spot][10] = 1
|
|
end
|
|
if elem.attr['Extra11'] == "true" then
|
|
advisor.stages[spot][11] = 0
|
|
elseif elem.attr['Extra11'] == "false" then
|
|
advisor.stages[spot][11] = 1
|
|
end
|
|
if elem.attr['Extra12'] == "true" then
|
|
advisor.stages[spot][12] = 0
|
|
elseif elem.attr['Extra12'] == "false" then
|
|
advisor.stages[spot][12] = 1
|
|
end
|
|
|
|
if elem.attr['Speed'] ~= nil then
|
|
advisor.stages[spot].speed = tonumber(elem.attr['Speed'])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if primary.stages ~= nil then
|
|
patternInfoTable.primarys[#patternInfoTable.primarys + 1] = primary
|
|
end
|
|
if secondary.stages ~= nil then
|
|
patternInfoTable.secondarys[#patternInfoTable.secondarys + 1] = secondary
|
|
end
|
|
if advisor.stages ~= nil then
|
|
patternInfoTable.advisors[#patternInfoTable.advisors + 1] = advisor
|
|
end
|
|
patternInfoTable[#patternInfoTable + 1] = a
|
|
|
|
if outputLoading and outputLoading ~= nil then
|
|
if printDebugInformation == nil or printDebugInformation == true then
|
|
print("Done with pattern: " .. fileName)
|
|
end
|
|
end
|
|
end
|
|
|
|
function parseObjSet(data, fileName)
|
|
local xml = SLAXML:dom(data, fileName)
|
|
if xml and xml.root then
|
|
if xml.root.name == "vcfroot" then
|
|
parseVehData(xml, fileName)
|
|
elseif xml.root.name == "pattern" then
|
|
parsePatternData(xml, fileName)
|
|
end
|
|
end
|
|
end
|
|
|
|
function configCheck()
|
|
if (panelOffsetX == nil) then
|
|
print("\n\n[ERROR] Please add 'panelOffsetX = 0.0' to your config or you will not get a panel.\n\n")
|
|
end
|
|
if (panelOffsetY == nil) then
|
|
print("\n\n[ERROR] Please add 'panelOffsetY = 0.0' to your config or you will not get a panel.\n\n")
|
|
end
|
|
end
|
|
|
|
AddEventHandler('onResourceStart', function(name)
|
|
if name:lower() == GetCurrentResourceName():lower() then
|
|
patternInfoTable.primarys = {}
|
|
patternInfoTable.secondarys = {}
|
|
patternInfoTable.advisors = {}
|
|
for i=1,#vcf_files do
|
|
local data = LoadResourceFile(GetCurrentResourceName(), "vcf/" .. vcf_files[i])
|
|
|
|
if data then
|
|
parseObjSet(data, vcf_files[i])
|
|
end
|
|
end
|
|
|
|
-- for i=1,#pattern_files do
|
|
-- local data = LoadResourceFile(GetCurrentResourceName(), "patterns/" .. pattern_files[i])
|
|
|
|
-- if data then
|
|
-- parseObjSet(data, pattern_files[i])
|
|
-- end
|
|
-- end
|
|
configCheck()
|
|
end
|
|
end)
|
|
|
|
RegisterServerEvent("els:requestVehiclesUpdate")
|
|
AddEventHandler('els:requestVehiclesUpdate', function()
|
|
if printDebugInformation == nil or printDebugInformation == true then
|
|
print("Sending player (" .. source .. ") ELS data")
|
|
end
|
|
|
|
TriggerClientEvent("els:updateElsVehicles", source, vehicleInfoTable, patternInfoTable)
|
|
end)
|
|
|
|
RegisterServerEvent("els:changeLightStage_s")
|
|
AddEventHandler("els:changeLightStage_s", function(state, advisor, prim, sec)
|
|
TriggerClientEvent("els:changeLightStage_c", -1, source, state, advisor, prim, sec)
|
|
end)
|
|
|
|
RegisterServerEvent("els:changePartState_s")
|
|
AddEventHandler("els:changePartState_s", function(part, state)
|
|
TriggerClientEvent("els:changePartState_c", -1, source, part, state)
|
|
end)
|
|
|
|
RegisterServerEvent("els:changeAdvisorPattern_s")
|
|
AddEventHandler("els:changeAdvisorPattern_s", function(pat)
|
|
TriggerClientEvent("els:changeAdvisorPattern_c", -1, source, pat)
|
|
end)
|
|
|
|
RegisterServerEvent("els:changeSecondaryPattern_s")
|
|
AddEventHandler("els:changeSecondaryPattern_s", function(pat)
|
|
TriggerClientEvent("els:changeSecondaryPattern_c", -1, source, pat)
|
|
end)
|
|
|
|
RegisterServerEvent("els:changePrimaryPattern_s")
|
|
AddEventHandler("els:changePrimaryPattern_s", function(pat)
|
|
TriggerClientEvent("els:changePrimaryPattern_c", -1, source, pat)
|
|
end)
|
|
|
|
RegisterServerEvent("els:toggleDfltSirenMute_s")
|
|
AddEventHandler("els:toggleDfltSirenMute_s", function(toggle)
|
|
TriggerClientEvent("els:toggleDfltSirenMute_s", -1, source, toggle)
|
|
end)
|
|
|
|
RegisterServerEvent("els:setSirenState_s")
|
|
AddEventHandler("els:setSirenState_s", function(newstate)
|
|
TriggerClientEvent("els:setSirenState_c", -1, source, newstate)
|
|
end)
|
|
|
|
RegisterServerEvent("els:setDualSirenState_s")
|
|
AddEventHandler("els:setDualSirenState_s", function(newstate)
|
|
TriggerClientEvent("els:setDualSirenState_c", -1, source, newstate)
|
|
end)
|
|
|
|
RegisterServerEvent("els:setDualSiren_s")
|
|
AddEventHandler("els:setDualSiren_s", function(newstate)
|
|
TriggerClientEvent("els:setDualSiren_c", -1, source, newstate)
|
|
end)
|
|
|
|
RegisterServerEvent("els:setHornState_s")
|
|
AddEventHandler("els:setHornState_s", function(state)
|
|
TriggerClientEvent("els:setHornState_c", -1, source, state)
|
|
end)
|
|
|
|
RegisterServerEvent("els:setTakedownState_s")
|
|
AddEventHandler("els:setTakedownState_s", function(state)
|
|
TriggerClientEvent("els:setTakedownState_c", -1, source)
|
|
end)
|
|
|
|
RegisterServerEvent("els:setSceneLightState_s")
|
|
AddEventHandler("els:setSceneLightState_s", function(state)
|
|
TriggerClientEvent("els:setSceneLightState_c", -1, source)
|
|
end)
|
|
|
|
RegisterServerEvent("els:setCruiseLights_s")
|
|
AddEventHandler("els:setCruiseLights_s", function(state)
|
|
TriggerClientEvent("els:setCruiseLights_c", -1, source)
|
|
end)
|