ProtectionAreas: Implemented adding users to an area in the DB
git-svn-id: http://mc-server.googlecode.com/svn/trunk@1566 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
01260be572
commit
bfd1ce5e53
@ -108,8 +108,18 @@ function HandleAddAreaUser(a_Split, a_Player)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Add the area to the storage
|
-- Add the area to the storage
|
||||||
g_Storage:AddAreaUsers(tonumber(a_Split[2]), a_Player:GetWorld():GetName(), a_Player:GetName(), AllowedNames);
|
if (not(g_Storage:AddAreaUsers(
|
||||||
a_Player:SendMessage("Users added: " .. table.concat(AllowedNames, ", "));
|
tonumber(a_Split[2]), a_Player:GetWorld():GetName(), a_Player:GetName(), AllowedNames))
|
||||||
|
) then
|
||||||
|
LOGWARNING("g_Storage:AddAreaUsers failed");
|
||||||
|
a_Player:SendMessage("Cannot add users, DB failure");
|
||||||
|
return true;
|
||||||
|
end
|
||||||
|
if (#AllowedNames == 0) then
|
||||||
|
a_Player:SendMessage("All the specified users were already allowed.");
|
||||||
|
else
|
||||||
|
a_Player:SendMessage("Users added: " .. table.concat(AllowedNames, ", "));
|
||||||
|
end
|
||||||
|
|
||||||
-- Reload all currently logged in players
|
-- Reload all currently logged in players
|
||||||
ReloadAllPlayersInWorld(a_Player:GetWorld():GetName());
|
ReloadAllPlayersInWorld(a_Player:GetWorld():GetName());
|
||||||
|
@ -379,6 +379,7 @@ function cStorage:ForEachUserInArea(a_AreaID, a_WorldName, a_Callback)
|
|||||||
assert(a_AreaID);
|
assert(a_AreaID);
|
||||||
assert(a_WorldName);
|
assert(a_WorldName);
|
||||||
assert(a_Callback);
|
assert(a_Callback);
|
||||||
|
assert(self);
|
||||||
|
|
||||||
-- Since in this version all the worlds share a single DB, the a_WorldName parameter is not actually used
|
-- Since in this version all the worlds share a single DB, the a_WorldName parameter is not actually used
|
||||||
-- But this may change in the future, when we have a per-world DB
|
-- But this may change in the future, when we have a per-world DB
|
||||||
@ -402,3 +403,48 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Adds the specified usernames to the specified area, if not already present
|
||||||
|
-- a_Users is an array table of usernames to add
|
||||||
|
function cStorage:AddAreaUsers(a_AreaID, a_WorldName, a_AddedBy, a_Users)
|
||||||
|
assert(a_AreaID);
|
||||||
|
assert(a_WorldName);
|
||||||
|
assert(a_Users);
|
||||||
|
assert(self);
|
||||||
|
|
||||||
|
-- Remove from a_Users the usernames already present in the area
|
||||||
|
local sql = "SELECT UserName FROM AllowedUsers WHERE AreaID = " .. a_AreaID;
|
||||||
|
local function Remove(UserData, NumValues, Values, Names)
|
||||||
|
if (NumValues ~= 1) then
|
||||||
|
-- Invalid response format
|
||||||
|
return 0;
|
||||||
|
end
|
||||||
|
local DBName = Values[1];
|
||||||
|
-- Remove the name from a_Users, if exists
|
||||||
|
for idx, Name in ipairs(a_Users) do
|
||||||
|
if (Name == DBName) then
|
||||||
|
table.remove(a_Users, idx);
|
||||||
|
return 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return 0;
|
||||||
|
end
|
||||||
|
if (not(self:DBExec(sql, Remove))) then
|
||||||
|
LOGWARNING("SQL error while iterating through users");
|
||||||
|
return false;
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add the users
|
||||||
|
for idx, Name in ipairs(a_Users) do
|
||||||
|
local sql = "INSERT INTO AllowedUsers (AreaID, UserName) VALUES (" .. a_AreaID .. ", '" .. Name .. "')";
|
||||||
|
if (not(self:DBExec(sql))) then
|
||||||
|
LOGWARNING("SQL error while adding user " .. Name .. " to area " .. a_AreaID);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return true;
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user