117 lines
3.5 KiB
Lua
117 lines
3.5 KiB
Lua
--[[
|
|
The following legacy code is created by blocco.
|
|
|
|
A little fun fact about this file:
|
|
No one ever used RBXPri Blocco Edition to make a server!
|
|
So I never got to test this!
|
|
I don't even know if it works.
|
|
|
|
It contains many comments for documentation purposes.
|
|
It is to be used for educational purposes.
|
|
|
|
This code is from RBXPri (Blocco Edition).
|
|
This file is "server.lua".
|
|
--]]
|
|
|
|
--[<>[ DOCUMENTATION ]<>]--
|
|
--[==[
|
|
Global ServerUtilities Class
|
|
Start => int port => starts a server at a port;
|
|
Stop => stops the server;
|
|
Ban => string playerName => Bans player by IP and name;
|
|
Unban => string playerName => Unbans player by IP and name;
|
|
GetIP => string playerName => Gets IP of player by player object;
|
|
SetRespawnTime => number respawnTime => Sets amount of time taken to respawn;
|
|
int ClientsConnected: number of clients connected
|
|
]==]--
|
|
|
|
local Instance=Instance;
|
|
|
|
local serverStarted=false;
|
|
local bannedIPs={} -- index = {true, nameOfPlayer}
|
|
_G.ServerUtilities={};
|
|
|
|
function isBannedIP(rep)
|
|
if rep == nil then return end
|
|
if rep:IsA("NetworkReplicator") and bannedIPs[rep.MachineAddress] and bannedIPs[rep.MachineAddress][1] then
|
|
return true
|
|
end
|
|
end
|
|
function isBannedPlayer(plyrName)
|
|
for i, v in pairs(bannedIPs) do
|
|
if v[2] == plyrName then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
function getIP(plyr)
|
|
if not serverStarted then return end
|
|
for i, v in pairs(game:service("NetworkServer"):children()) do
|
|
if v:GetPlayer() == plyr then
|
|
return v.MachineAddress;
|
|
end
|
|
end
|
|
end
|
|
|
|
function ban(plyrName) -- bans IP from connection given by GetPlayer
|
|
if not serverStarted then return end
|
|
local plyr=game.Players:FindFirstChild(plyrName);
|
|
if plyr == nil then return end;
|
|
local ip = getIP(plyr);
|
|
if ip == nil then print("IP not found") else bannedIPs[ip]={true, plyrName} pcall(plyr.Remove, plyr) end
|
|
end
|
|
|
|
function unban(plyrName)
|
|
if not serverStarted then return end
|
|
for i, v in pairs(bannedIPs) do
|
|
if v[2] == plyrName then bannedIPs[i]=nil end
|
|
end
|
|
end
|
|
|
|
function start(port)
|
|
if serverStarted then return end;
|
|
serverStarted=true;
|
|
game:service("NetworkServer"):Start(port)
|
|
game:service("RunService"):Run();
|
|
end
|
|
function stop()
|
|
if not serverStarted then return end;
|
|
serverStarted=false
|
|
game:service("NetworkServer"):Stop();
|
|
end
|
|
|
|
_G.ServerUtilities.GetIP=getIP;
|
|
_G.ServerUtilities.Ban=ban;
|
|
_G.ServerUtilities.Unban=unban;
|
|
_G.ServerUtilities.Start=start;
|
|
_G.ServerUtilities.Stop=stop;
|
|
_G.ServerUtilities.ClientsConnected=0;
|
|
local respawnTime=5;
|
|
_G.ServerUtilities.SetRespawnTime=function(x) respawnTime=x or 5 end
|
|
|
|
|
|
coroutine.resume(coroutine.create(function() dofile("rbxasset://rpui//commands.lua") end)); -- OYUS, I ADDED SERVER COMMANDS (that no one ever used)
|
|
|
|
--repeat wait() until serverStarted; -- BUG: Causing error message w/ coroutine stuff
|
|
game:service("NetworkServer").IncommingConnection:connect(function(peer, rep)
|
|
if not serverStarted then return end
|
|
if isBannedIP(rep) or (rep:GetPlayer() and isBannedPlayer(rep:GetPlayer().Name)) then
|
|
rep:CloseConnection();
|
|
end
|
|
_G.ServerUtilities.ClientsConnected=game:service("NetworkServer"):GetClientCount();
|
|
end)
|
|
|
|
game.Players.PlayerAddedEarly:connect(function(plyr)
|
|
if not serverStarted then return end
|
|
-- moved to PlayerAddedEarly
|
|
_G.ServerUtilities.ClientsConnected=game:service("NetworkServer"):GetClientCount();
|
|
if isBannedPlayer(plyr.Name) then plyr:Remove(); end
|
|
plyr.CharacterAdded:connect(function(char) -- I wrote this respawn code
|
|
char.Humanoid.Died:connect(function()
|
|
wait(respawnTime);
|
|
if plyr.Parent then char:Remove(); plyr:LoadCharacter(); end
|
|
end)
|
|
end)
|
|
end)
|