Skip to content

Create c_settings.lua #621

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
190 changes: 190 additions & 0 deletions [gamemodes]/[race]/[addons]/race_nos/c_settings.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@


function updateTooltipPosition(_,_, x, y)
guiSetPosition(label, x + 8, y + 10, false)
guiBringToFront(label)
end


function changeNosGaugePosition(_, btnState, x, y)
if btnState == "down" then
g_Settings.GaugePosition[1] = x - 50
g_Settings.GaugePosition[2] = y - 50
end
if isEditingPosition then
isEditingPosition = false
showCursor(false)
guiSetVisible(label, false)
removeEventHandler("onClientCursorMove", g_Root, updateTooltipPosition)
removeEventHandler("onClientClick", g_Root, changeNosGaugePosition)
saveSettingsToFile()
return;
end
end


function saveSettingsToFile()
local xml = xmlCreateFile("nos_settings.xml", "settings")
if not xml then return false end

local gaugeNode = xmlCreateChild(xml, "gauge")
xmlNodeSetAttribute(gaugeNode, "display", tostring(g_Settings.DisplayGauge))
xmlNodeSetAttribute(gaugeNode, "posX", g_Settings.GaugePosition[1])
xmlNodeSetAttribute(gaugeNode, "posY", g_Settings.GaugePosition[2])

local styleNode = xmlCreateChild(xml, "behavior")
xmlNodeSetAttribute(styleNode, "sustain", tostring(g_Settings.SustainOnPickup))
xmlNodeSetAttribute(styleNode, "control", g_Settings.ControlStyle or "normal")

local ret = xmlSaveFile(xml)
xmlUnloadFile(xml)
return ret
end


function loadSettingsFromFile()
local xml = xmlLoadFile("nos_settings.xml")
if not xml then return false end

local gaugeNode = xmlFindChild(xml, "gauge", 0)
g_Settings.DisplayGauge = (xmlNodeGetAttribute(gaugeNode, "display") == "true")
g_Settings.GaugePosition[1] = xmlNodeGetAttribute(gaugeNode, "posX")
g_Settings.GaugePosition[2] = xmlNodeGetAttribute(gaugeNode, "posY")

local styleNode = xmlFindChild(xml, "behavior", 0)
g_Settings.SustainOnPickup = (xmlNodeGetAttribute(styleNode, "sustain") == "true")
g_Settings.ControlStyle = xmlNodeGetAttribute(styleNode, "control") or "normal"

xmlUnloadFile(xml)
return true
end


function letMePositionGauge()
if not isEditingPosition then
isEditingPosition = true
showCursor(true)
local x, y = getCursorPosition()
x, y = x * g_ScreenSize[1], y * g_ScreenSize[2]
guiSetPosition(label, x, y, false)
guiSetVisible(label, true)
addEventHandler("onClientCursorMove", g_Root, updateTooltipPosition)
addEventHandler("onClientClick", g_Root, changeNosGaugePosition)
end
end
addCommandHandler("move_nosgauge", letMePositionGauge)


-- Command to set the client's NOS control style
function consoleSetNosFiringStyle(commandName, nosControl)
local settingName = nosControl
--if commandName == "nos" and nosControl == "normal" then
-- nosControl = "hybrid"
--end

if nosControl ~= "hybrid" and nosControl ~= "nfs" and nosControl ~= "normal" then
if commandName == "nos" then
outputGuiPopup("Syntax: /nos [normal|nfs|hybrid]")
else
outputGuiPopup("Syntax: /noscontrol [normal|nfs|hybrid]")
end
return
end
if g_Settings.ControlStyle ~= nosControl then
g_Settings.ControlStyle = nosControl
if saveSettingsToFile() then
outputGuiPopup("Your NOS control style has been set to '" .. tostring(settingName) .. "'")
end
end
end
addCommandHandler("noscontrol", consoleSetNosFiringStyle)
addCommandHandler("nos", consoleSetNosFiringStyle)


-- Command to set the NOS gauge visibility on/off
function consoleSetGaugeVisibility(commandName, visibility)
if visibility ~= "on" and visibility ~= "off" then
outputGuiPopup("Syntax: /nosgauge [on|off]")
return
end
if visibility == "on" and not g_Settings.DisplayGauge then
g_Settings.DisplayGauge = true
elseif g_Settings.DisplayGauge then
g_Settings.DisplayGauge = false
else
return
end

if saveSettingsToFile() then
local text = "NOS gauge is now "
if g_Settings.DisplayGauge then
text = text .. "visible."
else
text = text .. "hidden."
end
outputGuiPopup(text)
end

end
addCommandHandler("nosgauge", consoleSetGaugeVisibility)


-- Command to set the NOS sustain behavior
function consoleSetNosSustainBehavior(commandName, arg)
if arg ~= "on" and arg ~= "off" then
outputGuiPopup("Syntax: /nossustain [on|off]")
return
end
if arg == "on" and not g_Settings.SustainOnPickup then
g_Settings.SustainOnPickup = true
elseif g_Settings.SustainOnPickup then
g_Settings.SustainOnPickup = false
else
return
end

if saveSettingsToFile() then
outputGuiPopup("NOS sustain behavior is now " .. arg)
end

end
addCommandHandler("nossustain", consoleSetNosSustainBehavior)



function maybeDisplaySpecialMessage()
local xml = xmlLoadFile("nos_cookie.xml")
if not xml then
xml = xmlCreateFile("nos_cookie.xml", "settings")
end
if not xml then return false end

local node = xmlFindChild(xml, "message1", 0)
if not node then
node = xmlCreateChild(xml, "message1")
end
local counter = xmlNodeGetAttribute(node, "counter")
counter = tonumber(counter or 0) + 1
xmlNodeSetAttribute(node, "counter", tostring(counter))

xmlSaveFile(xml)

-- Display custom message on 1st, 2nd and 6th connect
if counter==1 then
outputChatBox ( "** Note NOS has changed a little bit **" )
end
if counter==2 then
outputChatBox ( "** Just incase you missed this message last time **" )
end
if counter==6 then
outputChatBox ( "** Final reminder **" )
end

if counter==1 or counter==2 or counter==6 then
outputChatBox ( "If you want normal nos type: /nos normal" )
outputChatBox ( "If you want NFS style nos type: /nos nfs" )
end

xmlUnloadFile(xml)
end
maybeDisplaySpecialMessage()