2013-07-27 16:24:03 +01:00
|
|
|
function SetBackCoordinates( Player )
|
|
|
|
|
BackCoords[Player:GetName()] = Vector3i( Player:GetPosX(), Player:GetPosY(), Player:GetPosZ() )
|
2013-08-13 17:55:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function SendMessage(a_Player, a_Message)
|
|
|
|
|
if (g_UsePrefixes) then
|
|
|
|
|
a_Player:SendMessage(cChatColor.Yellow .. "[INFO] " .. cChatColor.White .. a_Message)
|
|
|
|
|
else
|
|
|
|
|
a_Player:SendMessage(cChatColor.Yellow .. a_Message)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function SendMessageSuccess(a_Player, a_Message)
|
|
|
|
|
if (g_UsePrefixes) then
|
|
|
|
|
a_Player:SendMessage(cChatColor.Green .. "[INFO] " .. cChatColor.White .. a_Message)
|
|
|
|
|
else
|
|
|
|
|
a_Player:SendMessage(cChatColor.Green .. a_Message)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function SendMessageFailure(a_Player, a_Message)
|
|
|
|
|
if (g_UsePrefixes) then
|
|
|
|
|
a_Player:SendMessage(cChatColor.Red .. "[INFO] " .. cChatColor.White .. a_Message)
|
|
|
|
|
else
|
|
|
|
|
a_Player:SendMessage(cChatColor.Red .. a_Message)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- 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
|
|
|
|
|
|
|
|
|
|
--- Kicks a player by name, with the specified reason; returns bool whether found and player's real name
|
|
|
|
|
function KickPlayer( PlayerName, Reason )
|
|
|
|
|
|
|
|
|
|
local RealName = ""
|
|
|
|
|
if (Reason == nil) then
|
|
|
|
|
Reason = "You have been kicked"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local FoundPlayerCallback = function( a_Player )
|
|
|
|
|
RealName = a_Player:GetName()
|
|
|
|
|
|
|
|
|
|
local Server = cRoot:Get():GetServer()
|
|
|
|
|
LOGINFO( "'" .. RealName .. "' is being kicked for ( "..Reason..") " )
|
|
|
|
|
Server:SendMessage("Kicking " .. RealName)
|
|
|
|
|
|
|
|
|
|
a_Player:GetClientHandle():Kick(Reason)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not cRoot:Get():FindAndDoWithPlayer( PlayerName, FoundPlayerCallback ) then
|
|
|
|
|
-- Could not find player
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return true, RealName -- Player has been kicked
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function ReturnColorFromChar( Split, char )
|
|
|
|
|
|
|
|
|
|
-- Check if the char represents a color. Else return nil.
|
|
|
|
|
if char == "0" then
|
|
|
|
|
return cChatColor.Black
|
|
|
|
|
elseif char == "1" then
|
|
|
|
|
return cChatColor.Navy
|
|
|
|
|
elseif char == "2" then
|
|
|
|
|
return cChatColor.Green
|
|
|
|
|
elseif char == "3" then
|
|
|
|
|
return cChatColor.Blue
|
|
|
|
|
elseif char == "4" then
|
|
|
|
|
return cChatColor.Red
|
|
|
|
|
elseif char == "5" then
|
|
|
|
|
return cChatColor.Purple
|
|
|
|
|
elseif char == "6" then
|
|
|
|
|
return cChatColor.Gold
|
|
|
|
|
elseif char == "7" then
|
|
|
|
|
return cChatColor.LightGray
|
|
|
|
|
elseif char == "8" then
|
|
|
|
|
return cChatColor.Gray
|
|
|
|
|
elseif char == "9" then
|
|
|
|
|
return cChatColor.DarkPurple
|
|
|
|
|
elseif char == "a" then
|
|
|
|
|
return cChatColor.LightGreen
|
|
|
|
|
elseif char == "b" then
|
|
|
|
|
return cChatColor.LightBlue
|
|
|
|
|
elseif char == "c" then
|
|
|
|
|
return cChatColor.Rose
|
|
|
|
|
elseif char == "d" then
|
|
|
|
|
return cChatColor.LightPurple
|
|
|
|
|
elseif char == "e" then
|
|
|
|
|
return cChatColor.Yellow
|
|
|
|
|
elseif char == "f" then
|
|
|
|
|
return cChatColor.White
|
|
|
|
|
elseif char == "k" then
|
|
|
|
|
return cChatColor.Random
|
|
|
|
|
elseif char == "l" then
|
|
|
|
|
return cChatColor.Bold
|
|
|
|
|
elseif char == "m" then
|
|
|
|
|
return cChatColor.Strikethrough
|
|
|
|
|
elseif char == "n" then
|
|
|
|
|
return cChatColor.Underlined
|
|
|
|
|
elseif char == "o" then
|
|
|
|
|
return cChatColor.Italic
|
|
|
|
|
elseif char == "r" then
|
|
|
|
|
return cChatColor.Plain
|
|
|
|
|
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, haha. Good game, bro.")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Teleports a_SrcPlayer to a player named a_DstPlayerName; if a_TellDst is true, will send a notice to the destination player
|
|
|
|
|
function TeleportToPlayer( a_SrcPlayer, a_DstPlayerName, a_TellDst )
|
|
|
|
|
|
|
|
|
|
local teleport = function(OtherPlayer)
|
|
|
|
|
|
|
|
|
|
if OtherPlayer == a_SrcPlayer then
|
|
|
|
|
-- Asked to teleport to self?
|
|
|
|
|
SendMessageFailure( a_SrcPlayer, "Y' can't teleport to yerself!" )
|
|
|
|
|
else
|
|
|
|
|
SetBackCoordinates( a_SrcPlayer )
|
|
|
|
|
a_SrcPlayer:TeleportToEntity( OtherPlayer )
|
|
|
|
|
SendMessageSuccess( a_SrcPlayer, "You teleported to " .. OtherPlayer:GetName() .. "!" )
|
|
|
|
|
if (a_TellDst) then
|
|
|
|
|
SendMessage( OtherPlayer, Player:GetName().." teleported to you!" )
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local World = a_SrcPlayer:GetWorld()
|
|
|
|
|
if not World:DoWithPlayer(a_DstPlayerName, teleport) then
|
|
|
|
|
SendMessageFailure( a_SrcPlayer, "Can't find player " .. a_DstPlayerName)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|