RBXLegacy-classic/client/CSMPFunctions.lua

150 lines
4.9 KiB
Lua

--TODO: add play solo
EnforceMaxPlayers=false;
SysopConnections={};
IPBannedlist={};
function IncommingConnection(Peer, Replicator)
for Index,Value in pairs(IPBannedlist) do
if (Value == Replicator.MachineAddress) then
Replicator:CloseConnection();
end
end
end
function CSServer(Port,Limit)
assert((type(Port)~="number" or tonumber(Port)~=nil or Port==nil),"CSRun Error: Port must be nil or a number.");
local NetworkServer=game:GetService("NetworkServer");
if (Limit) then
NetworkServer:SetOutgoingKBPSLimit(Limit)
end
pcall(NetworkServer.Stop,NetworkServer);
NetworkServer:Start(Port);
game:GetService("Players").PlayerAdded:connect(function(Player)
Player:LoadCharacter();
Player.Changed:connect(function(Property)
if (Property=="Character") and (Player.Character~=nil) then
local Character=Player.Character;
local Humanoid=Character:FindFirstChild("Humanoid");
if (Humanoid~=nil) then
Humanoid.Died:connect(function() delay(5,function() Player:LoadCharacter() end) end)
end
end
end)
end)
game:GetService("RunService"):Run();
pcall(function() game.Close:connect(function() NetworkServer:Stop(); end) end);
-- ChildAdded is being a retard. Sorry for inefficient code.
--[[while wait(0.1) do
print("OMG",#game.NetworkServer:children())
for Index,Child in pairs(NetworkServer:GetChildren()) do
if (Child.className == "") then
IncommingConnection(nil, Child);
end
end
end]]
NetworkServer.IncommingConnection:connect(IncommingConnection);
end
function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Ticket,Limit)
pcall(function()
game:GetService("GuiService").Changed:connect(function()
pcall(function() game:GetService("GuiService").ShowLegacyPlayerList=true; end);
pcall(function() game.CoreGui.RobloxGui.PlayerListScript:Remove(); end);
pcall(function() game.CoreGui.RobloxGui.PlayerListTopRightFrame:Remove(); end);
pcall(function() game.CoreGui.RobloxGui.BigPlayerListWindowImposter:Remove(); end);
pcall(function() game.CoreGui.RobloxGui.BigPlayerlist:Remove(); end);
end);
end)
game:GetService("RunService"):Run();
assert((ServerIP~=nil and ServerPort~=nil),"CSConnect Error: ServerIP and ServerPort must be defined.");
local function SetMessage(Message) game:SetMessage(Message); end
local Visit,NetworkClient,PlayerSuccess,Player,ConnectionFailedHook=game:GetService("Visit"),game:GetService("NetworkClient");
local function GetClassCount(Class,Parent)
local Objects=Parent:GetChildren();
local Number=0;
for Index,Object in pairs(Objects) do
if (Object.className==Class) then
Number=Number+1;
end
Number=Number+GetClassCount(Class,Object);
end
return Number;
end
local function RequestCharacter(Replicator)
local Connection;
Connection=Player.Changed:connect(function(Property)
if (Property=="Character") then
game:ClearMessage();
end
end)
SetMessage("Requesting character...");
Replicator:RequestCharacter();
SetMessage("Waiting for character...");
end
local function Disconnection(Peer,LostConnection)
if (LostConnection==true) then
SetMessage("You have lost connection to the game");
else
SetMessage("You have lost connection to the game");
end
end
local function ConnectionAccepted(Peer,Replicator)
Replicator.Disconnection:connect(Disconnection);
local RequestingMarker=true;
game:SetMessageBrickCount();
local Marker=Replicator:SendMarker();
Marker.Received:connect(function()
RequestingMarker=false;
RequestCharacter(Replicator)
end)
while RequestingMarker do
Workspace:ZoomToExtents();
wait(0.5);
end
end
local function ConnectionFailed(Peer,Code)
SetMessage("Failed to connect to the Game. (ID="..Code..")");
end
pcall(function() settings().Diagnostics:LegacyScriptMode(); end);
pcall(function() game:SetRemoteBuildMode(true); end);
SetMessage("Progress: Connecting to the server ...");
NetworkClient.ConnectionAccepted:connect(ConnectionAccepted);
ConnectionFailedHook=NetworkClient.ConnectionFailed:connect(ConnectionFailed);
NetworkClient.ConnectionRejected:connect(function()
pcall(function() ConnectionFailedHook:disconnect(); end);
SetMessage("Failed to connect to the Game. (Connection rejected)");
end)
pcall(function() NetworkClient.Ticket=Ticket or ""; end) -- 2008 client has no ticket :O
if (Limit) then
NetworkClient:SetOutgoingKBPSLimit(Limit)
end
Player=game:GetService("Players"):CreateLocalPlayer(UserID);
PlayerSuccess=pcall(function() return NetworkClient:Connect(ServerIP,ServerPort) end);
if (not PlayerSuccess) then
SetMessage("Failed to connect to the Game. (Invalid IP Address");
NetworkClient:Disconnect();
end
if (not Player) then
SetMessage("Failed to connect to the Game. (Player not found)");
NetworkClient:Disconnect();
end
Player:SetSuperSafeChat(false);
Player.CharacterAppearance=0;
pcall(function() Player.Name=PlayerName or ""; end);
pcall(function() Visit:SetUploadUrl(""); end);
end
_G.CSServer=CSServer;
_G.CSConnect=CSConnect;