0355be903f
Squashed commit of the following: commit b6ecb378ca6f213b4676ca17efcb5baa64f2f132 Merge: b273df1 1a6f70f Author: Alexander Harkness <bearbin@gmail.com> Date: Sat Aug 10 06:05:32 2013 -0700 Merge pull request #13 from mc-server/give-console Added a console command for giving players items. commit b273df17c759eba82342466cf6e2291d84b77ab3 Author: Alexander Harkness <bearbin@gmail.com> Date: Sat Aug 10 08:27:14 2013 +0100 Hopefully fixed the /i command not working. I had not defined the newSplit variable before using it. commit 8a74037cc092d048364299f18e07c02c85ae3737 Author: Alexander Harkness <bearbin@gmail.com> Date: Thu Aug 8 10:18:48 2013 +0100 Fixed the contributors not being on their own lines. commit 0f61781047fbe3a4986dde3079be4fc1fb9ff14d Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 18:26:12 2013 +0100 Fix the README - fixes #15 commit cc438b3229cdb730d308479c59491b5e66130118 Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 18:01:48 2013 +0100 Alpha-sort the console commands. commit aa22f647c27d50b3ccf7e763927bd24329da3a56 Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 18:00:44 2013 +0100 Alpha-sort the commands when they are bound. commit 5d9367fcdeeb8a5e1485aac539147edb7a0cd0ab Merge: a485101 01ccfaa Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 09:41:38 2013 -0700 Merge pull request #14 from mc-server/ireplace Told the player receiving items what they are getting, and fixed the console log. commit 01ccfaa340afa8a4b909a923702da48b8b5f0d4a Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 17:39:36 2013 +0100 Told the player reveiving items what they are getting, and fixed the console log. commit 1a6f70f25ffa4c12a0d738c97435ae2c30cdb6a9 Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 17:35:48 2013 +0100 Added a console command for giving players items. commit a4851010b2ff29bb55feb6331ea6ddec28532a0f Merge: 0ffbd4a ba923e4 Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 09:01:47 2013 -0700 Merge pull request #12 from mc-server/ireplace Re-implement the /i command and make /give conform to the vanilla standards commit ba923e4764b6a3064be6aacea86e059828b2d0e6 Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 16:59:53 2013 +0100 Added /item and made /i an alias of it. commit 25652d2d5390d46a9cfe8bc80ab702b831bb49ed Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 16:46:14 2013 +0100 Kept the stuff alpha-sorted. commit 7fc56322420c0f99c1d0f0e6ba5df6169ef57fcc Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 16:45:09 2013 +0100 Removed some extra semicolons. commit 06b1adbcde3d4d610f9d3646ac3dd912b4071ea7 Author: Alexander Harkness <bearbin@gmail.com> Date: Wed Aug 7 16:44:06 2013 +0100 Cleaned up the code a little and fixed the messed up stuff that tried to make sure a player was good. commit 0ffbd4adb80edf51cf7eb5117b0287c7ed286add Author: tonibm19 <tonibm19@gmail.com> Date: Wed Aug 7 13:52:02 2013 +0200 Fixed typo commit b9503b977bdfeed8795fcacd8c6d15bc2e6a723a Author: Alexander Harkness <bearbin@gmail.com> Date: Tue Aug 6 18:23:51 2013 +0100 Re-implement the /i command and make /give conform to the vanilla standards. This commit is experimental and may fail. Please test it! commit f4ac029a0f1903fc9e49365117a81293303c8811 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Fri Aug 2 23:23:15 2013 +0100 Miscellaneous Changes Reduced ban/unban code size a little. Clarified console commands. Added commented code to onjoin when bugs are fixed. Removed embarrassing server wide messages. commit da84f4977522ab48ead4af7a71efd43cdd4e3d0a Merge: cc77056 a631484 Author: bearbin <bearbin@gmail.com> Date: Thu Aug 1 10:58:05 2013 -0700 Merge pull request #10 from mc-server/tabmix Fix the inconsistency of spaces and tabs. commit a6314849c2b474b6e17a245c91a2ac74c7acf7bf Author: Alexander Harkness <bearbin@gmail.com> Date: Thu Aug 1 16:47:15 2013 +0100 Changed everything to use the correct system of tabs. commit cc7705645b6b387c618c9448fa6b0d5c789370c6 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Wed Jul 31 16:56:41 2013 +0100 Rewrote Info Messages + Implemented #7 [SEE DESC] Standardisation of info messages: [INFO] [WARNING] [JOIN] [LEAVE] [FATALITY] with colours Green, Gold, Red, Rose, and Yellow. Individual worlds have individual LimitWorld setting, with individual WebAdmin setting as well. commit 16cae4cdc0ec067e7e71fa5c5a3ba8c248ce063b Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Mon Jul 29 14:47:45 2013 +0100 Fix of nil value in SpawnProtect commit 7c33f75e7da7fc104112c17fcb53bc9f06fe09fc Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Mon Jul 29 13:19:11 2013 +0100 Fixed potential SpawnProtect nil value issue Now detects if PROTECTRADIUS is zero, and if so, cancels checks. commit 0c4a9d427620ab04ca01b5f31ed9b90530353d96 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Mon Jul 29 13:07:50 2013 +0100 Enhanced SpawnProtect greatly (thanks xoft) Wow. Who knew ~30 lines of code could become one? commit 17f5ef4fed0b6f32900cc7473563848466139655 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Mon Jul 29 11:11:22 2013 +0100 Removed Development LOGINFOs commit 02034bf2d67f2ae62092b0688d81338f7b0788df Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Mon Jul 29 10:40:57 2013 +0100 Implemented Issue #5 Enhancement [SEE DESC] Made spawn protection configurable in each world's world file. World has to be listed in settings.ini! commit ccc73db8c51e45372069ec0a42f437cfb25253b1 Merge: 6bf4b40 21c7c68 Author: Alexander Harkness <bearbin@gmail.com> Date: Sun Jul 28 14:00:15 2013 +0100 Merge branch 'master' of github.com:tigerw/MCSCore into tigerw-master Conflicts: main.lua commit 21c7c68d20782a7dfd0d8f9ce0996397549dd425 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Sun Jul 28 12:55:50 2013 +0100 Default WorldLimiter = Off commit 141298481f3adef30b68d0c4200204aa264cb3e2 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Sun Jul 28 12:47:24 2013 +0100 Fixed Potential WorldLimit & OnDisable Bugs Changed WorldLimiter if detection from nil value to config boolean. Changed OnDisable to use hardcoded name as Plugin:GetName was apparently a nil value. ?? commit 6bf4b40a0e27677afa6df9cb3521266e6b99c4f7 Merge: 1ca4217 bfd6c5f Author: bearbin <bearbin@gmail.com> Date: Sat Jul 27 11:44:18 2013 -0700 Merge pull request #3 from tonibm19/master Added /me command commit bfd6c5f2a47cda4ac98a7225736e2669eaf61849 Author: tonibm19 <tonibm19@gmail.com> Date: Sat Jul 27 20:35:22 2013 +0200 Added /me command commit d25abaf44a6f5828b90297ff80003d2cd2a90be5 Author: tonibm19 <tonibm19@gmail.com> Date: Sat Jul 27 20:30:31 2013 +0200 Added /me command commit 9047f7778aa1cdd42d22c4dcf925db792b4d684e Author: tonibm19 <tonibm19@gmail.com> Date: Sat Jul 27 20:29:24 2013 +0200 added /me command commit 1ca42172391d41ba71c65a3f15d3a96d15a80496 Merge: 52a6f4e 7a40336 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Sat Jul 27 09:01:45 2013 -0700 Merge pull request #2 from tigerw/master Fixed /give descriptor & removed webadmin commit 7a40336437525c447adae3d9800e75b39c0300c4 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Sat Jul 27 17:00:38 2013 +0100 Fixed /give descriptor & removed webadmin commit 52a6f4e35bdea2ae9f33977928b6693f5800e515 Merge: f5d56ff 2af1da8 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Sat Jul 27 08:51:45 2013 -0700 Merge pull request #1 from tigerw/master Added TPA (tonibm9's fork) commit 2af1da8a3cd8e94674b22805662b83de87ac4a95 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Sat Jul 27 16:38:10 2013 +0100 Added TPA (tonibm9's fork) With code from STR_Warrior. commit f5d56ffeb02fef4735e846661fa71d15622d25b9 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Sat Jul 27 15:51:18 2013 +0100 Integrated SpawnProtect & Bugfixes [SEE DESC.] Integrated bearbin's SpawnProtect. Fixed config file bugs. Improved SpawnProtect to use settings.ini. Variable cleanup (SHOW_PLUGIN_NAMES). File and filename cleanup. commit 56dc51c00af4514253c04e38b5ccc9fbed2f0022 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Fri Jul 26 23:14:40 2013 +0100 Update README.md Added info. commit acd7e2849dcd7f3ee7bdc6b0f9b777ee1d9cbb3c Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Fri Jul 26 19:37:59 2013 +0100 Implemented Block Property checking for Collisions Used g_BlockIsSolid, instead of checking data values. commit 246d423ff9660a2b00a1c51e6276ec74eb3419de Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Fri Jul 26 15:49:55 2013 +0100 Updated Files Buildpermandcollision: updated collision code to check for torches and redstone torches. Help: attempt at always showing page number Web_serversettings: attempt at introducing a check for Maximum Players (must be above zero). commit 868f99ab49edeee78f4fc1c212c6bf614b860378 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Thu Jul 25 19:46:08 2013 +0100 Update README.md Extended 'GUI Redesign' section. commit e0df40bd082bdeb5c6823b485bc5001103a77502 Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Thu Jul 25 19:43:00 2013 +0100 Update README.md Added features and fixes and instructions for use. commit 332d8221f753f1a38d6c21bfc30af5890f48e3bb Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Thu Jul 25 19:35:27 2013 +0100 Uploaded All Files All Core files, both modified and unmodified. commit 3dd191f6bed71c863ee264856fbc3660e52cf88b Author: Tiger Wang <ziwei.tiger@hotmail.co.uk> Date: Thu Jul 25 04:59:50 2013 -0700 Initial commit
361 lines
12 KiB
Lua
361 lines
12 KiB
Lua
-- Implements things related to console commands
|
|
|
|
function InitConsoleCommands()
|
|
local PluginMgr = cPluginManager:Get();
|
|
|
|
-- Please keep the list alpha-sorted
|
|
PluginMgr:BindConsoleCommand("ban", HandleConsoleBan, " ~ Bans a player by name");
|
|
PluginMgr:BindConsoleCommand("banlist ips", HandleConsoleBanList, " - Lists all players banned by IP");
|
|
PluginMgr:BindConsoleCommand("banlist", HandleConsoleBanList, " - Lists all players banned by name");
|
|
PluginMgr:BindConsoleCommand("getversion", HandleConsoleVersion, " - Gets server version reported to 1.4+ clients");
|
|
PluginMgr:BindConsoleCommand("help", HandleConsoleHelp, " - Lists all commands");
|
|
PluginMgr:BindConsoleCommand("give", HandleConsoleGive, " - Gives items to the specified player.")
|
|
PluginMgr:BindConsoleCommand("list", HandleConsoleList, " - Lists all players in a machine-readable format");
|
|
PluginMgr:BindConsoleCommand("listgroups", HandleConsoleListGroups, " - Shows a list of all the groups");
|
|
PluginMgr:BindConsoleCommand("numchunks", HandleConsoleNumChunks, " - Shows number of chunks currently loaded");
|
|
PluginMgr:BindConsoleCommand("players", HandleConsolePlayers, " - Lists all connected players");
|
|
PluginMgr:BindConsoleCommand("rank", HandleConsoleRank, " ~ Add a player to a group");
|
|
PluginMgr:BindConsoleCommand("reload", HandleConsoleReload, " - Reloads all plugins");
|
|
PluginMgr:BindConsoleCommand("save-all", HandleConsoleSaveAll, " - Saves all chunks");
|
|
PluginMgr:BindConsoleCommand("say", HandleConsoleSay, " - Sends a chat message to all players");
|
|
PluginMgr:BindConsoleCommand("setversion", HandleConsoleVersion, " ~ Sets server version reported to 1.4+ clients");
|
|
PluginMgr:BindConsoleCommand("unban", HandleConsoleUnban, " ~ Unbans a player by name");
|
|
PluginMgr:BindConsoleCommand("unload", HandleConsoleUnload, " - Unloads all unused chunks");
|
|
|
|
end
|
|
|
|
function HandleConsoleGive(Split)
|
|
|
|
-- Make sure there are a correct number of arguments.
|
|
if #Split ~= 3 and #Split ~= 4 and #Split ~= 5 then
|
|
return true, "Usage: give <player> <item> [amount] [meta]"
|
|
end
|
|
|
|
-- Get the item from the arguments and check it's valid.
|
|
local Item = cItem()
|
|
if #Split == 5 then
|
|
local FoundItem = StringToItem(Split[3] .. ":" .. Split[5], Item)
|
|
else
|
|
local FoundItem = StringToItem(Split[3], Item)
|
|
end
|
|
if not IsValidItem(Item.m_ItemType) then -- StringToItem does not check if item is valid
|
|
FoundItem = false
|
|
end
|
|
|
|
if not FoundItem then
|
|
return true, "Invalid item id or name!"
|
|
end
|
|
|
|
-- Work out how many items the user wants.
|
|
local ItemAmount = 1
|
|
if #Split > 3 then
|
|
ItemAmount = tonumber(Split[4])
|
|
if ItemAmount == nil or ItemAmount < 1 or ItemAmount > 512 then
|
|
return true, "Invalid amount!"
|
|
end
|
|
end
|
|
|
|
Item.m_ItemCount = ItemAmount
|
|
|
|
-- Get the playername from the split.
|
|
local playerName = Split[2]
|
|
|
|
local function giveItems(newPlayer)
|
|
local ItemsGiven = newPlayer:GetInventory():AddItem(Item)
|
|
if ItemsGiven == ItemAmount then
|
|
newPlayer:SendMessage(cChatColor.Green .. "[INFO] " .. cChatColor.White .. "There you go!" )
|
|
LOG("Gave " .. newPlayer:GetName() .. " " .. Item.m_ItemCount .. " times " .. Item.m_ItemType .. ":" .. Item.m_ItemDamage)
|
|
else
|
|
Player:SendMessage( cChatColor.Rose .. "[INFO] " .. cChatColor.White .. "Not enough space in inventory, only gave " .. ItemsGiven)
|
|
return true, "Only " .. Item.m_ItemCount .. " out of " .. ItemsGiven .. "items could be delivered.")
|
|
end
|
|
end
|
|
|
|
-- Finally give the items to the player.
|
|
itemStatus = cRoot:Get():FindAndDoWithPlayer(playerName, giveItems)
|
|
|
|
-- Check to make sure that giving items was successful.
|
|
if not itemStatus then
|
|
return true, "There was no player that matched your query."
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
|
end
|
|
|
|
function HandleConsoleBan(Split)
|
|
if (#Split < 2) then
|
|
return true, "Usage: ban [Player] <Reason>";
|
|
end
|
|
|
|
local Reason = cChatColor.Red .. "You have been banned." .. cChatColor.White .. " Did you do something illegal?"
|
|
if( #Split > 2 ) then
|
|
Reason = table.concat(Split, " ", 3)
|
|
end
|
|
|
|
if KickPlayer(Split[2], Reason) == false then
|
|
BannedPlayersIni:DeleteValue("Banned", Split[2])
|
|
BannedPlayersIni:SetValueB("Banned", Split[2], true)
|
|
BannedPlayersIni:WriteFile()
|
|
LOGINFO("Could not find player, but banned anyway" )
|
|
else
|
|
BannedPlayersIni:DeleteValue("Banned", Split[2])
|
|
BannedPlayersIni:SetValueB("Banned", Split[2], true)
|
|
BannedPlayersIni:WriteFile()
|
|
LOGINFO("Successfully kicked and banned player" )
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
function HandleConsoleUnban(Split)
|
|
if( #Split < 2 ) then
|
|
return true, "Usage: unban [Player]"
|
|
end
|
|
|
|
if( BannedPlayersIni:GetValueB("Banned", Split[2], false) == false ) then
|
|
return true, Split[2] .. " is not banned!"
|
|
end
|
|
|
|
BannedPlayersIni:SetValueB("Banned", Split[2], false, false)
|
|
BannedPlayersIni:WriteFile()
|
|
|
|
local Server = cRoot:Get():GetServer()
|
|
return true, "Unbanned " .. Split[2]
|
|
end
|
|
|
|
function HandleConsoleBanList(Split)
|
|
if (#Split == 1) then
|
|
return true, BanListByName();
|
|
end
|
|
|
|
if (string.lower(Split[2]) == "ips") then
|
|
return true, BanListByIPs();
|
|
end
|
|
|
|
return true, "Unknown banlist subcommand";
|
|
end
|
|
|
|
function HandleConsoleHelp(Split)
|
|
local Commands = {}; -- {index => {"Command", "HelpString"} }
|
|
local MaxLength = 0;
|
|
local AddToTable = function(Command, HelpString)
|
|
table.insert(Commands, { Command, HelpString });
|
|
local CmdLen = Command:len();
|
|
if (CmdLen > MaxLength) then
|
|
MaxLength = CmdLen;
|
|
end
|
|
end
|
|
|
|
cPluginManager:Get():ForEachConsoleCommand(AddToTable);
|
|
|
|
-- Sort the table:
|
|
local CompareCommands = function(a, b)
|
|
return a[1] < b[1]; -- compare command strings
|
|
end
|
|
table.sort(Commands, CompareCommands);
|
|
|
|
local Out = "";
|
|
Out = "'-' denotes no prefix, '~' denotes that a value is required.\n"
|
|
for i, Command in ipairs(Commands) do
|
|
Out = Out .. Command[1] .. string.rep(" ", MaxLength - Command[1]:len()); -- Align to a table
|
|
Out = Out .. Command[2] .. "\n";
|
|
end
|
|
return true, Out;
|
|
end
|
|
|
|
function HandleConsoleList(Split)
|
|
-- Get a list of all players, one playername per line
|
|
local Out = "";
|
|
cRoot:Get():ForEachWorld(
|
|
function (a_World)
|
|
a_World:ForEachPlayer(
|
|
function (a_Player)
|
|
Out = Out .. a_Player:GetName() .. "\n";
|
|
end
|
|
);
|
|
end
|
|
);
|
|
return true, Out;
|
|
end
|
|
|
|
function HandleConsoleListGroups(Split)
|
|
-- Read the groups.ini file:
|
|
local GroupsIni = cIniFile("groups.ini");
|
|
if (not(GroupsIni:ReadFile())) then
|
|
return true, "No groups found";
|
|
end
|
|
|
|
-- Read the groups:
|
|
Number = GroupsIni:NumKeys();
|
|
Groups = {};
|
|
for i = 0, Number do
|
|
table.insert(Groups, GroupsIni:KeyName(i))
|
|
end
|
|
|
|
-- Output the groups, concatenated to a string:
|
|
local Out = "Groups:\n"
|
|
Out = Out .. table.concat(Groups, ", ");
|
|
return true, Out;
|
|
end
|
|
|
|
function HandleConsoleNumChunks(Split)
|
|
local Output = {};
|
|
local AddNumChunks = function(World)
|
|
Output[World:GetName()] = World:GetNumChunks();
|
|
end;
|
|
|
|
cRoot:Get():ForEachWorld(AddNumChunks);
|
|
|
|
local Total = 0;
|
|
local Out = "";
|
|
for name, num in pairs(Output) do
|
|
Out = Out .. " " .. name .. ": " .. num .. " chunks\n";
|
|
Total = Total + num;
|
|
end
|
|
Out = Out .. "Total: " .. Total .. " chunks\n";
|
|
|
|
return true, Out;
|
|
end
|
|
|
|
function HandleConsolePlayers(Split)
|
|
local PlayersInWorlds = {}; -- "WorldName" => [players array]
|
|
local AddToTable = function(Player)
|
|
local WorldName = Player:GetWorld():GetName();
|
|
if (PlayersInWorlds[WorldName] == nil) then
|
|
PlayersInWorlds[WorldName] = {};
|
|
end
|
|
table.insert(PlayersInWorlds[WorldName], Player:GetName() .. " @ " .. Player:GetIP());
|
|
end
|
|
|
|
cRoot:Get():ForEachPlayer(AddToTable);
|
|
|
|
local Out = "";
|
|
for WorldName, Players in pairs(PlayersInWorlds) do
|
|
Out = Out .. "World " .. WorldName .. ":\n";
|
|
for i, PlayerName in ipairs(Players) do
|
|
Out = Out .. " " .. PlayerName .. "\n";
|
|
end
|
|
end
|
|
|
|
return true, Out;
|
|
end
|
|
|
|
function HandleConsoleVersion(Split)
|
|
if (#Split == 1) then
|
|
-- Display current version:
|
|
local Version = cRoot:Get():GetPrimaryServerVersion();
|
|
return true, "Primary server version: #" .. Version .. ", " .. cRoot:GetProtocolVersionTextFromInt(Version);
|
|
end
|
|
|
|
-- Set new value as the version:
|
|
cRoot:Get():SetPrimaryServerVersion(tonumber(Split[2]));
|
|
local Version = cRoot:Get():GetPrimaryServerVersion();
|
|
return true, "Primary server version is now #" .. Version .. ", " .. cRoot:GetProtocolVersionTextFromInt(Version);
|
|
end
|
|
|
|
function HandleConsoleRank(Split)
|
|
if (Split[2] == nil) or (Split[3] == nil) then
|
|
return true, "Usage: /rank [Player] [Group]";
|
|
end
|
|
local Out = "";
|
|
|
|
-- Read the groups.ini file:
|
|
local GroupsIni = cIniFile("groups.ini")
|
|
if (not(GroupsIni:ReadFile())) then
|
|
Out = "Could not read groups.ini, creating anew!\n"
|
|
end
|
|
|
|
-- Find the group:
|
|
if (GroupsIni:FindKey(Split[3]) == -1) then
|
|
return true, Out .. "Group does not exist";
|
|
end
|
|
|
|
-- Read the users.ini file:
|
|
local UsersIni = cIniFile("users.ini");
|
|
if (not(UsersIni:ReadFile())) then
|
|
Out = Out .. "Could not read users.ini, creating anew!\n";
|
|
end
|
|
|
|
-- Write the new group value to users.ini:
|
|
UsersIni:DeleteKey(Split[2]);
|
|
UsersIni:GetValueSet(Split[2], "Groups", Split[3]);
|
|
UsersIni:WriteFile();
|
|
|
|
-- Reload the player's permissions:
|
|
cRoot:Get():ForEachWorld(
|
|
function (World)
|
|
World:ForEachPlayer(
|
|
function (Player)
|
|
if (Player:GetName() == Split[2]) then
|
|
Player:SendMessage(cChatColor.Yellow .. "[INFO] " .. cChatColor.White .. "You were moved to group " .. Split[3]);
|
|
Player:LoadPermissionsFromDisk();
|
|
end
|
|
end
|
|
);
|
|
end
|
|
)
|
|
|
|
return true, Out .. "Player " .. Split[2] .. " was moved to " .. Split[3];
|
|
end
|
|
|
|
function HandleConsoleReload(Split)
|
|
Server = cRoot:Get():GetServer();
|
|
Server:SendMessage(cChatColor.Rose .. "[WARNING] " .. cChatColor.White .. "Reloading all plugins!");
|
|
cPluginManager:Get():ReloadPlugins();
|
|
return true;
|
|
end
|
|
|
|
function HandleConsoleSaveAll(Split)
|
|
Server = cRoot:Get():GetServer();
|
|
Server:SendMessage(cChatColor.Rose .. "[WARNING] " .. cChatColor.White .. "Saving all chunks!");
|
|
cRoot:Get():SaveAllChunks();
|
|
return true;
|
|
end
|
|
|
|
function HandleConsoleSay(Split)
|
|
table.remove(Split, 1);
|
|
local Message = "";
|
|
for i, Text in ipairs(Split) do
|
|
Message = Message .. " " .. Text;
|
|
end
|
|
Message = Message:sub(2); -- Cut off the first space
|
|
cRoot:Get():GetServer():BroadcastChat(cChatColor.Gold .. "[SERVER] " .. cChatColor.Yellow .. Message);
|
|
return true;
|
|
end
|
|
|
|
function HandleConsoleUnload(Split)
|
|
local UnloadChunks = function(World)
|
|
World:UnloadUnusedChunks();
|
|
end
|
|
|
|
local Out = "Num loaded chunks before: " .. cRoot:Get():GetTotalChunkCount() .. "\n";
|
|
cRoot:Get():ForEachWorld(UnloadChunks);
|
|
Out = Out .. "Num loaded chunks after: " .. cRoot:Get():GetTotalChunkCount();
|
|
return true, Out;
|
|
end
|
|
|
|
|
|
-- Helper functions:
|
|
|
|
--- Returns the list of players banned by name, separated by ", "
|
|
function BanListByName()
|
|
local NumValues = BannedPlayersIni:NumValues("Banned");
|
|
local Banned = {};
|
|
local KeyID = BannedPlayersIni:FindKey("Banned");
|
|
for i = 1, NumValues do
|
|
local PlayerName = BannedPlayersIni:ValueName(KeyID, i - 1);
|
|
if (BannedPlayersIni:GetValueB("Banned", PlayerName)) then
|
|
-- Player listed AND banned
|
|
table.insert(Banned, PlayerName);
|
|
end
|
|
end
|
|
return table.concat(Banned, ", ");
|
|
end
|
|
|
|
--- Returns the list of players banned by IP, separated by ", "
|
|
function BanListByIPs()
|
|
-- TODO: No IP ban implemented yet
|
|
return "";
|
|
end |