Skip to content

Commit

Permalink
admin2: Add ability to change server configuration settings (#469)
Browse files Browse the repository at this point in the history
  • Loading branch information
FileEX committed Apr 3, 2024
1 parent 1dcb295 commit 118d58e
Show file tree
Hide file tree
Showing 6 changed files with 267 additions and 32 deletions.
28 changes: 17 additions & 11 deletions [admin]/admin2/client/main/admin_server.lua
Original file line number Diff line number Diff line change
Expand Up @@ -106,25 +106,29 @@ function aServerTab.Create(tab)
aServerTab.FPS = guiCreateEdit(0.35, 0.710, 0.135, 0.04, fpsLimit, true, tab)
aServerTab.FPSSet = guiCreateButton(0.50, 0.710, 0.10, 0.04, "Set", true, tab, "setfpslimit")

guiCreateHeader(0.02, 0.755, 0.30, 0.035, "Automatic scripts:", true, tab)
aServerTab.ServerConf = guiCreateLabel(0.03, 0.755, 0.25, 0.035, "Server configuration", true, tab)
aServerTab.ServerConfSet = guiCreateButton(0.35, 0.755, 0.25, 0.04, "Change", true, tab, "setserverconf")
aServerConfig.Open()

guiCreateHeader(0.02, 0.8, 0.30, 0.035, "Automatic scripts:", true, tab)
aServerTab.PingKickerCheck =
guiCreateCheckBox(0.03, 0.800, 0.30, 0.04, "Ping Kicker", false, true, tab, "setpingkicker")
aServerTab.PingKicker = guiCreateEdit(0.35, 0.800, 0.135, 0.04, "300", true, tab)
aServerTab.PingKickerSet = guiCreateButton(0.50, 0.800, 0.10, 0.04, "Set", true, tab, "setpingkicker")
guiCreateCheckBox(0.03, 0.845, 0.30, 0.04, "Ping Kicker", false, true, tab, "setpingkicker")
aServerTab.PingKicker = guiCreateEdit(0.35, 0.845, 0.135, 0.04, "300", true, tab)
aServerTab.PingKickerSet = guiCreateButton(0.50, 0.845, 0.10, 0.04, "Set", true, tab, "setpingkicker")
guiSetEnabled(aServerTab.PingKicker, false)
guiSetEnabled(aServerTab.PingKickerSet, false)

aServerTab.FPSKickerCheck =
guiCreateCheckBox(0.03, 0.845, 0.30, 0.04, "FPS Kicker", false, true, tab, "setfpskicker")
aServerTab.FPSKicker = guiCreateEdit(0.35, 0.845, 0.135, 0.04, "5", true, tab)
aServerTab.FPSKickerSet = guiCreateButton(0.50, 0.845, 0.10, 0.04, "Set", true, tab, "setfpskicker")
guiCreateCheckBox(0.03, 0.89, 0.30, 0.04, "FPS Kicker", false, true, tab, "setfpskicker")
aServerTab.FPSKicker = guiCreateEdit(0.35, 0.89, 0.135, 0.04, "5", true, tab)
aServerTab.FPSKickerSet = guiCreateButton(0.50, 0.89, 0.10, 0.04, "Set", true, tab, "setfpskicker")
guiSetEnabled(aServerTab.FPSKicker, false)
guiSetEnabled(aServerTab.FPSKickerSet, false)

aServerTab.IdleKickerCheck =
guiCreateCheckBox(0.03, 0.890, 0.30, 0.04, "Idle Kicker", false, true, tab, "setidlekicker")
aServerTab.IdleKicker = guiCreateEdit(0.35, 0.890, 0.135, 0.04, "10", true, tab)
aServerTab.IdleKickerSet = guiCreateButton(0.50, 0.890, 0.10, 0.04, "Set", true, tab, "setidlekicker")
guiCreateCheckBox(0.03, 0.935, 0.30, 0.04, "Idle Kicker", false, true, tab, "setidlekicker")
aServerTab.IdleKicker = guiCreateEdit(0.35, 0.935, 0.135, 0.04, "10", true, tab)
aServerTab.IdleKickerSet = guiCreateButton(0.50, 0.935, 0.10, 0.04, "Set", true, tab, "setidlekicker")
guiSetEnabled(aServerTab.IdleKicker, false)
guiSetEnabled(aServerTab.IdleKickerSet, false)

Expand Down Expand Up @@ -287,6 +291,8 @@ function aServerTab.onClientClick(button)
else
messageBox("Invalid FPS limit: range is 25 - 32767, or 0 for default.", MB_ERROR, MB_OK)
end
elseif (source == aServerTab.ServerConfSet) then
aServerConfig.Open()
elseif (source == aServerTab.QuickReload) then
triggerServerEvent(
"aServer",
Expand Down Expand Up @@ -542,4 +548,4 @@ end)

function getWeatherNameFromID(weather)
return iif(aServerTab.Weathers[weather], aServerTab.Weathers[weather], "Unknown")
end
end
213 changes: 213 additions & 0 deletions [admin]/admin2/client/widgets/admin_server_conf.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
--[[**********************************
*
* Multi Theft Auto - Admin Panel
*
* client\widgets\admin_server_conf.lua
*
**************************************]]
aServerConfig = {
Intervals = {
player_sync_interval = "Player Sync",
lightweight_sync_interval = "Lightweight Sync",
camera_sync_interval = "Camera Sync",
ped_sync_interval = "Ped Sync",
unoccupied_vehicle_sync_interval = "Unoccupied Vehicle Sync",
keysync_mouse_sync_interval = "Mouse Key Sync",
keysync_analog_sync_interval = "Analog Key Sync",
player_triggered_event_interval = "Player Triggered Event"
}
}

function aServerConfig.Open()
if (not isElement(aServerConfig.Form)) then
local x,y = guiGetScreenSize()

aServerConfig.Form = guiCreateWindow(x/2 - 240, y/2 - 215, 480, 430, "Server Configuration", false)

guiCreateHeader(0.05, 0.052, 0.3, 0.04, "Connection:", true, aServerConfig.Form)

aServerConfig.minVersion = guiCreateLabel(0.1, 0.089, 0.5, 0.04, "Minimum Client Version:", true, aServerConfig.Form)
aServerConfig.minVersionField = guiCreateEdit(0.725, 0.089, 0.25, 0.04, "", true, aServerConfig.Form)

aServerConfig.recVersion = guiCreateLabel(0.1, 0.141, 0.5, 0.04, "Recommended Client Version:", true, aServerConfig.Form)
aServerConfig.recVersionField = guiCreateEdit(0.725, 0.141, 0.25, 0.04, "", true, aServerConfig.Form)

guiCreateHeader(0.05, 0.193, 0.3, 0.04, "Performance:", true, aServerConfig.Form)

aServerConfig.bandwidth = guiCreateLabel(0.1, 0.23, 0.5, 0.04, "Bandwidth Reduction:", true, aServerConfig.Form)

aServerConfig.bandwidthCombo = guiCreateComboBox(0.725, 0.23, 0.2, 0.2, "", true, aServerConfig.Form)
guiComboBoxAddItem(aServerConfig.bandwidthCombo, "None")
guiComboBoxAddItem(aServerConfig.bandwidthCombo, "Medium")
guiComboBoxAddItem(aServerConfig.bandwidthCombo, "Maximum")

aServerConfig.bulletSync = guiCreateLabel(0.1, 0.292, 0.5, 0.04, "Bullet Sync:", true, aServerConfig.Form)
aServerConfig.bulletSyncCombo = guiCreateComboBox(0.725, 0.292, 0.2, 0.2, "", true, aServerConfig.Form)
guiComboBoxAddItem(aServerConfig.bulletSyncCombo, "False")
guiComboBoxAddItem(aServerConfig.bulletSyncCombo, "True")

aServerConfig.maxTriggers = guiCreateLabel(0.1, 0.354, 0.55, 0.04, "Max player triggered events per interval:", true, aServerConfig.Form)
aServerConfig.maxTriggersField = guiCreateEdit(0.725, 0.354, 0.2, 0.04, "", true, aServerConfig.Form)
guiEditSetMaxLength(aServerConfig.maxTriggersField, 4)

guiCreateHeader(0.05, 0.406, 0.3, 0.04, "Intervals:", true, aServerConfig.Form);

local i = 1
local py = 0
for k,v in pairs(aServerConfig.Intervals) do
py = 0.443 + 0.052 * (i - 1)
guiCreateLabel(0.1, py, 0.5, 0.04, v..":", true, aServerConfig.Form)

aServerConfig[k] = guiCreateEdit(0.725, py, 0.2, 0.04, "", true, aServerConfig.Form)
guiEditSetMaxLength(aServerConfig[k], 4)
i = i + 1
end

aServerConfig.infoLabel = guiCreateLabel(0, py + 0.052, 1, 0.2, "WARNING\nIf you don't know what you're doing, close this window.", true, aServerConfig.Form)
guiLabelSetHorizontalAlign(aServerConfig.infoLabel, "center", true)
guiLabelSetColor(aServerConfig.infoLabel, 255,0,0)
guiSetFont(aServerConfig.infoLabel, "default-bold-small")

aServerConfig.saveButton = guiCreateButton(0.25, 0.93, 0.2, 0.1, "Save", true, aServerConfig.Form)
aServerConfig.closeButton = guiCreateButton(0.55, 0.93, 0.2, 0.1, "Close", true, aServerConfig.Form)

guiSetVisible(aServerConfig.Form, false)

aRegister("ServerConfig", aServerConfig.Form, aServerConfig.Open, aServerConfig.Close)
else
guiSetVisible(aServerConfig.Form, true)
guiBringToFront(aServerConfig.Form)
end

addEventHandler("onClientGUIClick", aServerConfig.Form, aServerConfig.onClientClick)
addEventHandler('onClientGUIChanged', aServerConfig.Form, aServerConfig.onClientChanged)
addEventHandler("onAdminRefresh", aServerConfig.Form, aServerConfig.Refresh)

aServerConfig.Refresh()
end

function aServerConfig.Close(destroy)
if (destroy) then
destroyElement(aServerConfig.Form)
else
removeEventHandler('onClientGUIClick', aServerConfig.Form, aServerConfig.onClientClick)
removeEventHandler('onClientGUIChanged', aServerConfig.Form, aServerConfig.onClientChanged)
removeEventHandler('onAdminRefresh', aServerConfig.Form, aServerConfig.Refresh)

guiSetVisible(aServerConfig.Form, false)
end
end

function aServerConfig.onClientChanged()
local actualText = guiGetText(source)
local character = actualText:sub(#actualText, #actualText)
if (not tonumber(character) and character ~= '.' and character ~= '-') then
guiSetText(source, actualText:sub(0, #actualText - 1))
end
end

function aServerConfig.onClientClick(button)
if (button == "left") then
if (source == aServerConfig.closeButton) then
aServerConfig.Close()
elseif (source == aServerConfig.saveButton) then
local triggersPerInterval = guiGetText(aServerConfig.maxTriggersField)
local cameraSyncInterval = guiGetText(aServerConfig.camera_sync_interval)
local playerSyncInterval = guiGetText(aServerConfig.player_sync_interval)
local playerTriggeredEventInterval = guiGetText(aServerConfig.player_triggered_event_interval)
local keySyncAnalogInterval = guiGetText(aServerConfig.keysync_analog_sync_interval)
local keySyncMouseInterval = guiGetText(aServerConfig.keysync_mouse_sync_interval)
local pedSyncInterval = guiGetText(aServerConfig.ped_sync_interval)
local unoccupiedVehicleSyncInterval = guiGetText(aServerConfig.unoccupied_vehicle_sync_interval)
local lightWeightSyncInterval = guiGetText(aServerConfig.lightweight_sync_interval)

if (#triggersPerInterval <= 0 or tonumber(triggersPerInterval) < 1 or tonumber(triggersPerInterval) > 1000) then
messageBox("The range for 'Max player triggered events per interval' is: 1-1000", MB_ERROR, MB_OK)
return
end

if (#cameraSyncInterval <= 0 or tonumber(cameraSyncInterval) < 50 or tonumber(cameraSyncInterval) > 4000) then
messageBox("The range for 'Camera sync interval' is: 50-4000", MB_ERROR, MB_OK)
return
end

if (#playerSyncInterval <= 0 or tonumber(playerSyncInterval) < 50 or tonumber(playerSyncInterval) > 4000) then
messageBox("The range for 'Player sync interval' is: 50-4000", MB_ERROR, MB_OK)
return
end

if (#playerTriggeredEventInterval <= 0 or tonumber(playerTriggeredEventInterval) < 50 or tonumber(playerTriggeredEventInterval) > 5000) then
messageBox("The range for 'Player triggered event interval' is: 50-5000", MB_ERROR, MB_OK)
return
end

if (#keySyncAnalogInterval <= 0 or tonumber(keySyncAnalogInterval) < 50 or tonumber(keySyncAnalogInterval) > 4000) then
messageBox("The range for 'Analog key sync interval' is: 50-4000", MB_ERROR, MB_OK)
return
end

if (#keySyncMouseInterval <= 0 or tonumber(keySyncMouseInterval) < 50 or tonumber(keySyncMouseInterval) > 4000) then
messageBox("The range for 'Mouse key sync interval' is: 50-4000", MB_ERROR, MB_OK)
return
end

if (#pedSyncInterval <= 0 or tonumber(pedSyncInterval) < 50 or tonumber(pedSyncInterval) > 4000) then
messageBox("The range for 'Ped sync interval' is: 50-4000", MB_ERROR, MB_OK)
return
end

if (#unoccupiedVehicleSyncInterval <= 0 or tonumber(unoccupiedVehicleSyncInterval) < 50 or tonumber(unoccupiedVehicleSyncInterval) > 4000) then
messageBox("The range for 'Unoccupied vehicle sync interval' is: 50-4000", MB_ERROR, MB_OK)
return
end

if (#lightWeightSyncInterval <= 0 or tonumber(lightWeightSyncInterval) < 200 or tonumber(lightWeightSyncInterval) > 4000) then
messageBox("The range for 'Lightweight sync interval' is: 200-4000", MB_ERROR, MB_OK)
return
end

if (messageBox("Are you sure you want to save the server configuration changes?", MB_QUESTION, MB_YESNO)) then
triggerServerEvent("aServer", localPlayer, "setconfig", {
minclientversion = guiGetText(aServerConfig.minVersionField),
recommendedclientversion = guiGetText(aServerConfig.recVersionField),
bandwidth_reduction = guiComboBoxGetItemText(aServerConfig.bandwidthCombo, guiComboBoxGetSelected(aServerConfig.bandwidthCombo)):lower() or "medium",
bullet_sync = tostring(guiComboBoxGetSelected(aServerConfig.bulletSyncCombo)),
max_player_triggered_events_per_interval = triggersPerInterval,
camera_sync_interval = cameraSyncInterval,
player_sync_interval = playerSyncInterval,
player_triggered_event_interval = playerTriggeredEventInterval,
keysync_analog_sync_interval = keySyncAnalogInterval,
keysync_mouse_sync_interval = keySyncMouseInterval,
ped_sync_interval = pedSyncInterval,
unoccupied_vehicle_sync_interval = unoccupiedVehicleSyncInterval,
lightweight_sync_interval = lightWeightSyncInterval
})

aServerConfig.Close()
end
end
end
end

function aServerConfig.Refresh()
triggerServerEvent("aServerConfigRefresh", localPlayer)
end

addEvent("aClientConfigRefresh", true)
addEventHandler("aClientConfigRefresh", localPlayer, function(minclientversion, recommendedclientversion, bandwidthreduction, bulletsync, maxplayertriggers, camerasync_interval, playersync_interval, playertriggers_interval, keysync_analog_interval, keysync_mousse_interval, pedsync_interval, unoccupiedvehicle_interval, lightweight_interval)
guiSetText(aServerConfig.minVersionField, minclientversion)
guiSetText(aServerConfig.recVersionField, recommendedclientversion)

guiComboBoxSetSelected(aServerConfig.bandwidthCombo, (bandwidthreduction == "none" and 0 or (bandwidthreduction == "medium" and 1 or 2)) or 0)
guiComboBoxSetSelected(aServerConfig.bulletSyncCombo, tonumber(bulletsync))

guiSetText(aServerConfig.maxTriggersField, maxplayertriggers)
guiSetText(aServerConfig.camera_sync_interval, camerasync_interval)
guiSetText(aServerConfig.player_sync_interval, playersync_interval)
guiSetText(aServerConfig.player_triggered_event_interval, playertriggers_interval)
guiSetText(aServerConfig.keysync_analog_sync_interval, keysync_analog_interval)
guiSetText(aServerConfig.keysync_mouse_sync_interval, keysync_mousse_interval)
guiSetText(aServerConfig.ped_sync_interval, pedsync_interval)
guiSetText(aServerConfig.unoccupied_vehicle_sync_interval, unoccupiedvehicle_interval)
guiSetText(aServerConfig.lightweight_sync_interval, lightweight_interval)
end)
4 changes: 4 additions & 0 deletions [admin]/admin2/conf/ACL.xml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
<right name="command.setfpskicker" access="true" />
<right name="command.setidlekicker" access="true" />
<right name="command.clearchat" access="true" />
<right name="command.setserverconf" access="true" />
<!--Bans related-->
<right name="command.ban" access="true" />
<right name="command.unban" access="true" />
Expand Down Expand Up @@ -159,6 +160,7 @@
<right name="command.setfpskicker" access="false" />
<right name="command.setidlekicker" access="false" />
<right name="command.clearchat" access="true" />
<right name="command.setserverconf" access="false" />
<!--Bans related-->
<right name="command.ban" access="true" />
<right name="command.unban" access="true" />
Expand Down Expand Up @@ -241,6 +243,7 @@
<right name="command.setfpskicker" access="false" />
<right name="command.setidlekicker" access="false" />
<right name="command.clearchat" access="true" />
<right name="command.setserverconf" access="false" />
<!--Bans related-->
<right name="command.ban" access="false" />
<right name="command.unban" access="false" />
Expand Down Expand Up @@ -320,6 +323,7 @@
<right name="command.setfpskicker" access="false" />
<right name="command.setidlekicker" access="false" />
<right name="command.clearchat" access="false" />
<right name="command.setserverconf" access="false" />
<!--Bans related-->
<right name="command.ban" access="false" />
<right name="command.unban" access="false" />
Expand Down
3 changes: 2 additions & 1 deletion [admin]/admin2/meta.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
<script src="client/widgets/admin_vehicle.lua" type="client" cache="false"/>
<script src="client/widgets/admin_interior.lua" type="client" cache="false"/>
<script src="client/widgets/admin_screenshot.lua" type="client" cache="false"/>
<script src="client/widgets/admin_server_conf.lua" type="client" cache="false" />
<script src="client/widgets/admin_ban.lua" type="client" cache="false"/>
<script src="client/widgets/admin_ban_details.lua" type="client" cache="false"/>
<script src="client/widgets/admin_warp.lua" type="client" cache="false"/>
Expand Down Expand Up @@ -109,4 +110,4 @@
<setting name="#adminChatCommandName" value="a" group="General" friendlyname="Admin chat command name" desc="The command name for admin chat."/>
<setting name="*useip2c" value="true" friendlyname="useip2c" group="_Advanced" accept="true,false" desc="When enabled, ip2c resource runs and fetches player countries by IP."/>
</settings>
</meta>
</meta>
8 changes: 7 additions & 1 deletion [admin]/admin2/server/admin_functions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -480,8 +480,14 @@ aFunctions = {
["clearchat"] = function()
clearChatBox()
return true
end,
["setconfig"] = function(configData)
for k,v in pairs(configData) do
setServerConfigSetting(k,v, true)
end
return true
end
},
admin = {},
bans = {}
}
}
Loading

0 comments on commit 118d58e

Please sign in to comment.