v1.0 Source Code
This commit is contained in:
commit
803e53c77c
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# Custom for Visual Studio
|
||||||
|
*.cs diff=csharp
|
||||||
|
|
||||||
|
# Standard to msysgit
|
||||||
|
*.doc diff=astextplain
|
||||||
|
*.DOC diff=astextplain
|
||||||
|
*.docx diff=astextplain
|
||||||
|
*.DOCX diff=astextplain
|
||||||
|
*.dot diff=astextplain
|
||||||
|
*.DOT diff=astextplain
|
||||||
|
*.pdf diff=astextplain
|
||||||
|
*.PDF diff=astextplain
|
||||||
|
*.rtf diff=astextplain
|
||||||
|
*.RTF diff=astextplain
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
# Windows image file caches
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
|
||||||
|
# Folder config file
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# Recycle Bin used on file shares
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
|
# Windows Installer files
|
||||||
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
|
# Windows shortcuts
|
||||||
|
*.lnk
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# Operating System Files
|
||||||
|
# =========================
|
||||||
|
|
||||||
|
# OSX
|
||||||
|
# =========================
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# Thumbnails
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Files that might appear in the root of a volume
|
||||||
|
.DocumentRevisions-V100
|
||||||
|
.fseventsd
|
||||||
|
.Spotlight-V100
|
||||||
|
.TemporaryItems
|
||||||
|
.Trashes
|
||||||
|
.VolumeIcon.icns
|
||||||
|
|
||||||
|
# Directories potentially created on remote AFP share
|
||||||
|
.AppleDB
|
||||||
|
.AppleDesktop
|
||||||
|
Network Trash Folder
|
||||||
|
Temporary Items
|
||||||
|
.apdisk
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
@ECHO OFF
|
||||||
|
cls
|
||||||
|
COLOR 4F
|
||||||
|
SET appname=RBXLegacy
|
||||||
|
TITLE %appname%
|
||||||
|
SET RobloxPath=%CD%\client\RobloxApp.exe
|
||||||
|
SET RobloxPathRoot=%CD%\client
|
||||||
|
SET GameLoadPath=%RobloxPathRoot:\=\\%
|
||||||
|
SET RobloxPort=53640
|
||||||
|
SET UserID=0
|
||||||
|
SET PlayerName=Player
|
||||||
|
SET DefaultIP=localhost
|
||||||
|
SET DefaultMap=Baseplate
|
||||||
|
GOTO MainMenu
|
||||||
|
GOTO::EOF
|
||||||
|
|
||||||
|
:MainMenu
|
||||||
|
cls
|
||||||
|
ECHO %appname%
|
||||||
|
ECHO.
|
||||||
|
ECHO Menu Options:
|
||||||
|
ECHO 1 - JOIN SERVER
|
||||||
|
ECHO 2 - START SERVER
|
||||||
|
ECHO 0 - QUIT
|
||||||
|
SET /P LaunchId="Option: "
|
||||||
|
IF %LaunchId%==1 GOTO ClientSetup
|
||||||
|
IF %LaunchId%==2 GOTO ServerSetup
|
||||||
|
IF %LaunchId%==0 EXIT
|
||||||
|
GOTO::EOF
|
||||||
|
|
||||||
|
:ClientSetup
|
||||||
|
cls
|
||||||
|
ECHO JOIN SERVER
|
||||||
|
ECHO.
|
||||||
|
ECHO If you don't enter an IP, the default will be used instead.
|
||||||
|
ECHO.
|
||||||
|
SET /P JoinServer="Server IP (Default: %DefaultIP%): "
|
||||||
|
IF NOT DEFINED JoinServer SET JoinServer=%DefaultIP%
|
||||||
|
ECHO Starting Roblox...
|
||||||
|
%RobloxPath% -script "dofile('%GameLoadPath%\\CSMPFunctions.lua'); _G.CSConnect(%UserID%,'%JoinServer%',%RobloxPort%,'%PlayerName%');"
|
||||||
|
GOTO::EOF
|
||||||
|
|
||||||
|
:ServerSetup
|
||||||
|
cls
|
||||||
|
ECHO START SERVER
|
||||||
|
ECHO.
|
||||||
|
ECHO If you don't enter a map name, the default will be used instead.
|
||||||
|
ECHO Be sure you port forward %RobloxPort% if you want to start a public server.
|
||||||
|
ECHO.
|
||||||
|
ECHO Select a map:
|
||||||
|
ECHO.
|
||||||
|
for %%a in ("%CD%\client\Maps\*") do @echo %%~na
|
||||||
|
ECHO.
|
||||||
|
SET /P ServerPlaceId="Type the name of the map you would like to load (Default: %DefaultMap%): "
|
||||||
|
IF NOT DEFINED ServerPlaceId SET ServerPlaceId=%DefaultMap%
|
||||||
|
ECHO Starting Roblox...
|
||||||
|
%RobloxPath% -script "dofile('%GameLoadPath%\\CSMPFunctions.lua'); _G.CSServer(%RobloxPort%); game:Load('%GameLoadPath%\\Maps\\%ServerPlaceId%.rbxl');"
|
||||||
|
GOTO::EOF
|
||||||
|
|
@ -0,0 +1,113 @@
|
||||||
|
#RBXLegacy
|
||||||
|
-------------------------------
|
||||||
|
========= INFORMATION =========
|
||||||
|
-------------------------------
|
||||||
|
[What is RBXLegacy?]
|
||||||
|
RBXLegacy is a modified version of a late-2008 ROBLOX client, built to allow the user to run LAN and Internet servers.
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
========= INSTRUCTIONS =========
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
WARNING:
|
||||||
|
If Hamachi is on, you won't be able to join "localhost" or any other local or private IP address! In order to use RBXLegacy on LAN or Play Solo,
|
||||||
|
you must either turn off Hamachi by pressing the "Turn Off" button, or by turning one of your Hamachi networks online if you own a network.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=== HOSTING ===
|
||||||
|
|
||||||
|
How to host a server:
|
||||||
|
|
||||||
|
1. Port forward 53640 as TCP/UCP. If you do not know how to port forward, there are plenty of tutorials on the internet for this.
|
||||||
|
|
||||||
|
2. Open the RBXLegacy.bat.
|
||||||
|
|
||||||
|
3. Select the "START SERVER" option by typing 2 and then pressing Enter or Return.
|
||||||
|
|
||||||
|
4. Type in the name of the map you want to play, then press Enter or Return. The ROBLOX Studio window should load with the map you chose.
|
||||||
|
|
||||||
|
5. To share your server with friends, send them your public/external IP address (Google ip).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
How to host a LAN server:
|
||||||
|
|
||||||
|
1. First, you must know your LAN IPv4 address from ipconfig. If you don't know your LAN IPv4 address, there are plenty of tutorials on the internet for this.
|
||||||
|
|
||||||
|
2. Open the RBXLegacy.bat.
|
||||||
|
|
||||||
|
3. Select the "START SERVER" option by typing 2 and then pressing Enter or Return.
|
||||||
|
|
||||||
|
4. Type in the name of the map you want to play, then press Enter or Return. The ROBLOX Studio window should load with the map you chose.
|
||||||
|
|
||||||
|
5. To share your server with friends, tell them your LAN IPv4 address.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
How to host a Hamachi server:
|
||||||
|
|
||||||
|
1. Make sure you have Hamachi installed and you made a network already. If you do not know how, there are plenty of tutorials on the internet for this.
|
||||||
|
|
||||||
|
2. Open the RBXLegacy.bat.
|
||||||
|
|
||||||
|
3. Select the "START SERVER" option by typing 2 and then pressing Enter or Return.
|
||||||
|
|
||||||
|
4. Type in the name of the map you want to play, then press Enter or Return. The ROBLOX Studio window should load with the map you chose.
|
||||||
|
|
||||||
|
5. To share your server with friends, send them your Hamachi IPv4 address located above your computer's name on the Hamachi window.
|
||||||
|
You must also share the network ID and password to your Hamachi network.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=== CONNECTING ===
|
||||||
|
|
||||||
|
How to connect via IP (LAN/Online):
|
||||||
|
|
||||||
|
1. Open the RBXLegacy.bat.
|
||||||
|
|
||||||
|
2. Select the "JOIN SERVER" option by typing 1 and then pressing Enter or Return.
|
||||||
|
|
||||||
|
3. Type in the IP address that is shared to you, and then press Enter or Return.
|
||||||
|
|
||||||
|
4. You should be able to join the server.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
How to connect via Hamachi:
|
||||||
|
|
||||||
|
1. Open the RBXLegacy.bat.
|
||||||
|
|
||||||
|
2. Select the "JOIN SERVER" option by typing 1 and then pressing Enter or Return.
|
||||||
|
|
||||||
|
3. Type in the IPv4 Address that is in the title of the Hamachi network you are in, and then press Enter or Return.
|
||||||
|
|
||||||
|
4. You should be able to join the server.
|
||||||
|
|
||||||
|
=== PLAY SOLO ===
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
How to Play Solo:
|
||||||
|
|
||||||
|
1. Open the RBXLegacy.bat.
|
||||||
|
|
||||||
|
2. Select the "START SERVER" option by typing 2 and then pressing Enter or Return.
|
||||||
|
|
||||||
|
3. Type in the name of the map you want to play, then press Enter or Return. The ROBLOX Studio window should load with the map you chose.
|
||||||
|
|
||||||
|
4. Then, launch the RBXLegacy.bat again and then select "JOIN SERVER" by typing 1 and then pressing Enter or Return.
|
||||||
|
|
||||||
|
5. On the "JOIN SERVER" screen, press Enter or Return. ROBLOX will then load.
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
========= CREDITS =========
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
ROBLOX and the ROBLOX Client were made by the ROBLOX Corporation.
|
||||||
|
The ROBLOX Corporation does not support or endorse the creation of RBXLegacy.
|
||||||
|
Bitl is not affiliated with the ROBLOX Corporation or its subsidiaries.
|
||||||
|
Bitl does not own any of the content included with RBXLegacy.
|
||||||
|
The client itself was not modified in any way.
|
||||||
|
LUA scripts were used to build a client that can connect to LAN and the Internet.
|
||||||
|
The LUA scripts used was borrowed from the RBXPri client and merged into 1 single script.
|
||||||
|
|
@ -0,0 +1,149 @@
|
||||||
|
--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;
|
||||||
Loading…
Reference in New Issue