Updated core plugin.
Added limited world. Configurable through webadmin. Added a Manage server page in webadmin where you can reload/restart/stop the server. You can add players to groups with the webadmin. without the player have to relog first You can change someone's group in-game with a command, without the player have to relog first Hardcore mode Improved death messages git-svn-id: http://mc-server.googlecode.com/svn/trunk@1306 0a769ca7-a7f5-676a-18bf-c427514a06d6master
parent
a4e6a027a1
commit
03e29802cd
|
@ -17,6 +17,7 @@ function InitConsoleCommands()
|
|||
PluginMgr:BindConsoleCommand("save-all", HandleConsoleSaveAll, "Saves all chunks");
|
||||
PluginMgr:BindConsoleCommand("say", HandleConsoleSay, "Sends a chat message to all players");
|
||||
PluginMgr:BindConsoleCommand("unload", HandleConsoleUnload, "Unloads all unused chunks");
|
||||
PluginMgr:BindConsoleCommand("rank", HandleConsoleRank, " [Player] [Rank] - to add someone to a group");
|
||||
end
|
||||
|
||||
|
||||
|
@ -166,8 +167,39 @@ function HandleConsoleUnload(Split)
|
|||
return true;
|
||||
end
|
||||
|
||||
|
||||
|
||||
function HandleConsoleRank(Split)
|
||||
if Split[2] == nil or Split[3] == nil then
|
||||
LOG("Usage: /rank [Player] [Group]")
|
||||
return true
|
||||
end
|
||||
local GroupsIni = cIniFile("groups.ini")
|
||||
if( GroupsIni:ReadFile() == false ) then
|
||||
LOG("Could not read groups.ini!")
|
||||
end
|
||||
if GroupsIni:FindKey(Split[3]) == -1 then
|
||||
LOG("Group does not exist")
|
||||
return true
|
||||
end
|
||||
local UsersIni = cIniFile("users.ini")
|
||||
if( UsersIni:ReadFile() == false ) then
|
||||
LOG("Could not read users.ini!")
|
||||
end
|
||||
UsersIni:DeleteKey(Split[2])
|
||||
UsersIni:GetValueSet(Split[2], "Groups", Split[3])
|
||||
UsersIni:WriteFile()
|
||||
local loopPlayers = function( Player )
|
||||
if Player:GetName() == Split[2] then
|
||||
Player:SendMessage( cChatColor.Green .. "You were moved to group " .. Split[3] )
|
||||
Player:LoadPermissionsFromDisk()
|
||||
end
|
||||
end
|
||||
local loopWorlds = function ( World )
|
||||
World:ForEachPlayer( loopPlayers )
|
||||
end
|
||||
cRoot:Get():ForEachWorld( loopWorlds )
|
||||
LOG("Player " .. Split[2] .. " Was moved to " .. Split[3])
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
function HandleConsole(Split)
|
||||
|
|
|
@ -19,7 +19,7 @@ function Initialize(Plugin)
|
|||
PLUGIN = Plugin
|
||||
|
||||
Plugin:SetName("Core")
|
||||
Plugin:SetVersion(10)
|
||||
Plugin:SetVersion(12)
|
||||
|
||||
PluginManager = cRoot:Get():GetPluginManager()
|
||||
PluginManager:AddHook(Plugin, cPluginManager.HOOK_PLAYER_JOINED)
|
||||
|
@ -29,13 +29,17 @@ function Initialize(Plugin)
|
|||
PluginManager:AddHook(Plugin, cPluginManager.HOOK_KILLING)
|
||||
PluginManager:AddHook(Plugin, cPluginManager.HOOK_CRAFTING_NO_RECIPE)
|
||||
PluginManager:AddHook(Plugin, cPluginManager.HOOK_CHAT) -- used in web_chat.lua
|
||||
|
||||
PluginManager:AddHook(Plugin, cPluginManager.HOOK_CHUNK_GENERATING)
|
||||
PluginManager:AddHook(Plugin, cPluginManager.HOOK_PLAYER_MOVING)
|
||||
|
||||
PluginManager:BindCommand("/back", "core.back", HandleBackCommand, " - Return to your last position");
|
||||
PluginManager:BindCommand("/save-all", "core.save-all", HandleSaveAllCommand, " - Saves all your worlds");
|
||||
PluginManager:BindCommand("/help", "core.help", HandleHelpCommand, " [Page] - Show available commands");
|
||||
PluginManager:BindCommand("/rank", "core.rank", HandleRankCommand, " [Player] [Rank] - to add someone to a group");
|
||||
PluginManager:BindCommand("/pluginlist", "core.pluginlist", HandlePluginListCommand, " - Show list of plugins");
|
||||
PluginManager:BindCommand("/tp", "core.teleport", HandleTPCommand, " [Player] - Teleport yourself to a player");
|
||||
PluginManager:BindCommand("/item", "core.item", HandleItemCommand, " [ItemType/Name] <Amount> - Give yourself an item");
|
||||
PluginManager:BindCommand("/i", "core.item", HandleItemCommand, "");
|
||||
PluginManager:BindCommand("/list", "core.playerlist", HandlePlayerListCommand, " - Shows list of connected players");
|
||||
PluginManager:BindCommand("/who", "core.playerlist", HandlePlayerListCommand, " - Shows list of connected players");
|
||||
PluginManager:BindCommand("/playerlist", "core.playerlist", HandlePlayerListCommand, " - Shows list of connected players");
|
||||
|
@ -55,10 +59,14 @@ function Initialize(Plugin)
|
|||
PluginManager:BindCommand("/viewdistance", "core.viewdistance", HandleViewDistanceCommand, " [".. cClientHandle.MIN_VIEW_DISTANCE .."-".. cClientHandle.MAX_VIEW_DISTANCE .."] - Change your view distance")
|
||||
|
||||
InitConsoleCommands();
|
||||
|
||||
local IniFile = cIniFile("settings.ini")
|
||||
|
||||
-- Load the settings
|
||||
IniFile = cIniFile("Settings.ini")
|
||||
if ( IniFile:ReadFile() == true ) then
|
||||
SHOW_PLUGIN_NAMES = IniFile:GetValueB("HelpPlugin", "ShowPluginNames", true )
|
||||
HardCore = IniFile:GetValueSet("GameMode", "Hardcore", "false")
|
||||
LimitWorld = IniFile:GetValueSetB("Worlds", "LimitWorld", true)
|
||||
LimitWorldWidth = IniFile:GetValueSetI("Worlds", "LimitWorldWidth", 200)
|
||||
SHOW_PLUGIN_NAMES = IniFile:GetValueSetB("HelpPlugin", "ShowPluginNames", true )
|
||||
end
|
||||
|
||||
-- Load whitelist, and add default values and stuff
|
||||
|
@ -96,6 +104,7 @@ function Initialize(Plugin)
|
|||
end
|
||||
end
|
||||
|
||||
Plugin:AddWebTab("Manage Server", HandleRequest_ManageServer);
|
||||
Plugin:AddWebTab("Server Settings", HandleRequest_ServerSettings);
|
||||
Plugin:AddWebTab("Chat", HandleRequest_Chat);
|
||||
Plugin:AddWebTab("Playerlist", HandleRequest_PlayerList);
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
function OnChunkGenerating(World, ChunkX, ChunkZ, ChunkDesc)
|
||||
if LimitWorld == true then
|
||||
SpawnX = math.floor(World:GetSpawnX() / 16)
|
||||
SpawnZ = math.floor(World:GetSpawnZ() / 16)
|
||||
if ( (SpawnX + LimitWorldWidth) < ChunkX ) or ( (SpawnX - LimitWorldWidth) > ChunkX ) then
|
||||
FillBlocks(World, ChunkX, ChunkZ, ChunkDesc)
|
||||
end
|
||||
if ( (SpawnZ + LimitWorldWidth) < ChunkZ ) or ( (SpawnZ - LimitWorldWidth) > ChunkZ ) then
|
||||
FillBlocks(World, ChunkX, ChunkZ, ChunkDesc)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function FillBlocks(World, ChunkX, ChunkZ, ChunkDesc)
|
||||
ChunkDesc:FillBlocks(0,0)
|
||||
ChunkDesc:SetUseDefaultBiomes(false)
|
||||
ChunkDesc:SetUseDefaultHeight(false)
|
||||
ChunkDesc:SetUseDefaultComposition(false)
|
||||
ChunkDesc:SetUseDefaultStructures(false)
|
||||
ChunkDesc:SetUseDefaultFinish(false)
|
||||
end
|
|
@ -1,24 +1,87 @@
|
|||
function OnKilling(Victim, Killer)
|
||||
if (Killer == nil) then
|
||||
local KilledPlayer = tolua.cast(Victim, "cPlayer")
|
||||
if( not KilledPlayer:IsA("cPlayer") or KilledPlayer == nil ) then
|
||||
return false
|
||||
if Victim:IsPlayer() == true then
|
||||
Server = cRoot:Get():GetServer()
|
||||
if Killer == nil then
|
||||
if Victim:IsOnFire() then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " burned away." )
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
end
|
||||
if Victim:GetWorld():GetBlock(Victim:GetPosX(), Victim:GetPosY(), Victim:GetPosZ()) == 10 or Victim:GetWorld():GetBlock(Victim:GetPosX(), Victim:GetPosY(), Victim:GetPosZ()) == 11 then
|
||||
Server:SendMessage( cChatColor.Red .. Victim:GetName() .. " tried to swim in lava" )
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
end
|
||||
else
|
||||
if Killer:IsPlayer() == true then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by " .. Killer:GetName() )
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsMob() == true then
|
||||
if Killer:IsA("cZombie") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is eaten by a zombie")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cSkeleton") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by a skeleton" )
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cCreeper") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by a creeper")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cSpider") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by a spider")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cCaveSpider") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by a cavespider")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cBlaze") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by a blaze")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cEnderman") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is slain by a enderman")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cSilverfish") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by a silverfish")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cSlime") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by a slime")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cWitch") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by a witch")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cZombiepigman") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is slain by a zombiepigman")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cMagmacube") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by a magmacube")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
elseif Killer:IsA("cWolf") then
|
||||
Server:SendMessage( cChatColor.Red .. "Player " .. Victim:GetName() .. " is killed by a wolf")
|
||||
CheckHardcore(Victim)
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
Server:SendMessage( cChatColor.Red .. Victim:GetName() .. " Died")
|
||||
end
|
||||
end
|
||||
|
||||
function CheckHardcore(Victim)
|
||||
if HardCore == "true" then
|
||||
if Victim:IsPlayer() == true then
|
||||
local KilledPlayer = tolua.cast(Victim, "cPlayer")
|
||||
BanPlayer(KilledPlayer:GetName(), "You Died")
|
||||
end
|
||||
|
||||
local Server = cRoot:Get():GetServer()
|
||||
Server:SendMessage( cChatColor.Red .. KilledPlayer:GetName() .. " died" )
|
||||
else
|
||||
local KilledPlayer = tolua.cast(Victim, "cPlayer")
|
||||
if( not KilledPlayer:IsA("cPlayer") or KilledPlayer == nil ) then
|
||||
return false
|
||||
end
|
||||
local KillerPlayer = tolua.cast(Killer, "cPlayer")
|
||||
if( not KillerPlayer:IsA("cPlayer") or KillerPlayer == nil ) then
|
||||
return false
|
||||
end
|
||||
|
||||
local Server = cRoot:Get():GetServer()
|
||||
Server:SendMessage( cChatColor.Red .. KilledPlayer:GetName() .. " was killed by " .. KillerPlayer:GetName() .. "!" )
|
||||
end
|
||||
return false
|
||||
end
|
|
@ -0,0 +1,21 @@
|
|||
function OnPlayerMoving( Player )
|
||||
if LimitWorld == true then
|
||||
local World = Player:GetWorld()
|
||||
local SpawnX = math.floor(World:GetSpawnX() / 16)
|
||||
local SpawnZ = math.floor(World:GetSpawnZ() / 16)
|
||||
local X = math.floor(Player:GetPosX() / 16)
|
||||
local Z = math.floor(Player:GetPosZ() / 16)
|
||||
if ( (SpawnX + LimitWorldWidth - 1) < X ) then
|
||||
Player:TeleportTo(Player:GetPosX() - 1, Player:GetPosY(), Player:GetPosZ())
|
||||
end
|
||||
if ( (SpawnX - LimitWorldWidth + 1) > X ) then
|
||||
Player:TeleportTo(Player:GetPosX() + 1, Player:GetPosY(), Player:GetPosZ())
|
||||
end
|
||||
if ( (SpawnZ + LimitWorldWidth - 1) < Z ) then
|
||||
Player:TeleportTo(Player:GetPosX(), Player:GetPosY(), Player:GetPosZ() - 1)
|
||||
end
|
||||
if ( (SpawnZ - LimitWorldWidth + 1) > Z ) then
|
||||
Player:TeleportTo(Player:GetPosX(), Player:GetPosY(), Player:GetPosZ() + 1)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,33 @@
|
|||
function HandleRankCommand( Split, Player )
|
||||
if Split[2] == nil or Split[3] == nil then
|
||||
Player:SendMessage(cChatColor.Rose .. "Usage: /rank [Player] [Group]")
|
||||
return true
|
||||
end
|
||||
local GroupsIni = cIniFile("groups.ini")
|
||||
if( GroupsIni:ReadFile() == false ) then
|
||||
LOG("Could not read groups.ini!")
|
||||
end
|
||||
if GroupsIni:FindKey(Split[3]) == -1 then
|
||||
Player:SendMessage(cChatColor.Rose .. "Group does not exist")
|
||||
return true
|
||||
end
|
||||
local UsersIni = cIniFile("users.ini")
|
||||
if( UsersIni:ReadFile() == false ) then
|
||||
LOG("Could not read users.ini!")
|
||||
end
|
||||
UsersIni:DeleteKey(Split[2])
|
||||
UsersIni:GetValueSet(Split[2], "Groups", Split[3])
|
||||
UsersIni:WriteFile()
|
||||
local loopPlayers = function( Player )
|
||||
if Player:GetName() == Split[2] then
|
||||
Player:SendMessage( cChatColor.Green .. "You were moved to group " .. Split[3] )
|
||||
Player:LoadPermissionsFromDisk()
|
||||
end
|
||||
end
|
||||
local loopWorlds = function ( World )
|
||||
World:ForEachPlayer( loopPlayers )
|
||||
end
|
||||
cRoot:Get():ForEachWorld( loopWorlds )
|
||||
Player:SendMessage(cChatColor.Green .. "Player " .. Split[2] .. " Was moved to " .. Split[3])
|
||||
return true
|
||||
end
|
|
@ -1,6 +1,8 @@
|
|||
function HandleStopCommand( Split, Player )
|
||||
Server = cRoot:Get():GetServer()
|
||||
PluginManager = cRoot:Get():GetPluginManager()
|
||||
Server:SendMessage( cChatColor.Green .. "Stopping the server..." )
|
||||
cRoot:Get():ServerCommand("stop")
|
||||
PluginManager:ExecuteConsoleCommand("stop")
|
||||
--cRoot:Get():ServerCommand("stop")
|
||||
return true
|
||||
end
|
|
@ -0,0 +1,24 @@
|
|||
function HandleRequest_ManageServer( Request )
|
||||
local Content = ""
|
||||
if( Request.PostParams["RestartServer"] ~= nil ) then
|
||||
cRoot:Get():ServerCommand("restart")
|
||||
elseif( Request.PostParams["ReloadServer"] ~= nil ) then
|
||||
cRoot:Get():GetPluginManager():ReloadPlugins()
|
||||
elseif( Request.PostParams["StopServer"] ~= nil ) then
|
||||
cRoot:Get():ServerCommand("stop")
|
||||
end
|
||||
Content = Content .. [[
|
||||
<form method="POST">]]
|
||||
|
||||
Content = Content .. [[<table>
|
||||
<tr style="padding-top:5px;">
|
||||
<td><input type="submit" value="Restart Server" name="RestartServer"> <br /> restart the server</td>
|
||||
<td><input type="submit" value="Reload Server" name="ReloadServer"> <br /> reload the server</td>
|
||||
<td><input type="submit" value="Stop Server" name="StopServer"> <br /> stop the server</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
]]
|
||||
return Content
|
||||
end
|
||||
|
|
@ -1,11 +1,6 @@
|
|||
local function ShowUsersTable()
|
||||
local Content = "<h4>Users</h4>"
|
||||
|
||||
local UsersIni = cIniFile("users.ini")
|
||||
if( UsersIni:ReadFile() == false ) then
|
||||
return "Could not read users.ini!"
|
||||
end
|
||||
|
||||
local NumUsers = UsersIni:GetNumKeys()
|
||||
|
||||
Content = Content .. "<table>"
|
||||
|
@ -36,11 +31,6 @@ end
|
|||
local function ShowGroupsTable()
|
||||
local Content = "<h4>Groups</h4>"
|
||||
|
||||
local GroupsIni = cIniFile("groups.ini")
|
||||
if( GroupsIni:ReadFile() == false ) then
|
||||
return "Could not read groups.ini!"
|
||||
end
|
||||
|
||||
local NumGroups = GroupsIni:GetNumKeys()
|
||||
|
||||
Content = Content .. "<table>"
|
||||
|
@ -69,9 +59,55 @@ local function ShowGroupsTable()
|
|||
return Content
|
||||
end
|
||||
|
||||
local function AddPlayers( Request )
|
||||
local Content = "<h4>Add Players</h4>"
|
||||
if( Request.PostParams["AddPlayerToGroup"] ~= nil ) then
|
||||
if Request.PostParams["AddPlayer"] ~= "" then
|
||||
if Request.PostParams["AddGroups"] ~= "" then
|
||||
if GroupsIni:FindKey(Request.PostParams["AddGroup"]) == -1 then
|
||||
return "Group does not exist"
|
||||
end
|
||||
UsersIni:DeleteKey(Request.PostParams["AddPlayer"])
|
||||
UsersIni:GetValueSet(Request.PostParams["AddPlayer"], "Groups", Request.PostParams["AddGroup"])
|
||||
UsersIni:WriteFile()
|
||||
local loopPlayers = function( Player )
|
||||
if Player:GetName() == Request.PostParams["AddPlayer"] then
|
||||
Player:SendMessage( cChatColor.Green .. "You were moved to group " .. Request.PostParams["AddGroup"] )
|
||||
Player:LoadPermissionsFromDisk()
|
||||
end
|
||||
end
|
||||
local loopWorlds = function ( World )
|
||||
World:ForEachPlayer( loopPlayers )
|
||||
end
|
||||
cRoot:Get():ForEachWorld( loopWorlds )
|
||||
end
|
||||
end
|
||||
end
|
||||
Content = Content .. [[
|
||||
<form method="POST">
|
||||
<table>
|
||||
<tr><td style="width: 20%;">Player:</td>
|
||||
<td><input type="text" name="AddPlayer" value=""></td></tr><br>
|
||||
<tr><td style="width: 20%;">Group:</td>
|
||||
<td><input type="text" name="AddGroup" value=""></td></tr>
|
||||
</table>
|
||||
<input type="submit" value="Add Player" name="AddPlayerToGroup">]]
|
||||
return Content
|
||||
end
|
||||
|
||||
function HandleRequest_Permissions( Request )
|
||||
GroupsIni = cIniFile("groups.ini")
|
||||
if( GroupsIni:ReadFile() == false ) then
|
||||
return "Could not read groups.ini!"
|
||||
end
|
||||
UsersIni = cIniFile("users.ini")
|
||||
if( UsersIni:ReadFile() == false ) then
|
||||
return "Could not read users.ini!"
|
||||
end
|
||||
|
||||
local Content = ""
|
||||
|
||||
Content = Content .. AddPlayers( Request )
|
||||
Content = Content .. ShowGroupsTable()
|
||||
Content = Content .. ShowUsersTable()
|
||||
|
||||
|
|
|
@ -52,6 +52,13 @@ local function ShowGeneralSettings( Request )
|
|||
if( tonumber( Request.PostParams["Authentication_Authenticate"] ) ~= nil ) then
|
||||
SettingsIni:SetValue("Authentication", "Authenticate", Request.PostParams["Authentication_Authenticate"], false )
|
||||
end
|
||||
if( tonumber( Request.PostParams["Limit_World"] ) ~= nil ) then
|
||||
SettingsIni:SetValue("Worlds", "LimitWorld", Request.PostParams["Limit_World"], false )
|
||||
end
|
||||
if( tonumber( Request.PostParams["LimitWorldWidth"] ) ~= nil ) then
|
||||
SettingsIni:SetValue("Worlds", "LimitWorldWidth", Request.PostParams["LimitWorldWidth"], false )
|
||||
end
|
||||
|
||||
if( SettingsIni:WriteFile() == false ) then
|
||||
InfoMsg = [[<b style="color: red;">ERROR: Could not write to settings.ini!</b>]]
|
||||
else
|
||||
|
@ -88,6 +95,13 @@ local function ShowGeneralSettings( Request )
|
|||
<td>]] .. HTML_Select_On_Off("Authentication_Authenticate", SettingsIni:GetValueI("Authentication", "Authenticate") ) .. [[</td></tr>
|
||||
</table><br>
|
||||
|
||||
<table>
|
||||
<th colspan="2">LimitWorld</th>
|
||||
<tr><td style="width: 50%;">Limit World:</td>
|
||||
<td>]] .. HTML_Select_On_Off("Limit_World", SettingsIni:GetValueI("Worlds", "LimitWorld") ) .. [[</td></tr>
|
||||
<tr><td>Max Chunks from spawn:</td>
|
||||
<td><input type="text" name="LimitWorldWidth" value="]] .. SettingsIni:GetValue("Worlds", "LimitWorldWidth") .. [["></td></tr>
|
||||
</table><br>
|
||||
<input type="submit" value="Save Settings" name="general_submit"> WARNING: Any changes made here might require a server restart in order to be applied!
|
||||
</form>]]
|
||||
|
||||
|
|
Loading…
Reference in New Issue