second final commit lol

This commit is contained in:
XlXi 2021-09-17 19:43:24 -04:00
parent 9c322405da
commit 5cc183fde5
443 changed files with 24282 additions and 0 deletions

118
ClientDeployer.bat Normal file
View File

@ -0,0 +1,118 @@
@echo off
title ROBLOX Uploader 0.0.1
echo Welcome to the ROBLOX uploader!
echo Created by Brent Da Mage
ping localhost -n 2 >nul
:: Allows for color
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
cls
set url=setup.platinus2016.ga
echo Deploying to %url%
call :PROMPT
cls
::Variables
set CDNDir=D:\wamp320\platinus2016\setup\
set platform=Win32
set build=Release
set /p uploadType="Enter Upload Type (C,R,B): "
cls
echo Platform: %platform%
echo Build Type: %build%
echo Upload Type: %uploadType%
call :PROMPT
:: Deploy section ::
::Creates switch
2>NUL CALL :DEPLOY_%uploadType%
IF ERRORLEVEL 1 CALL :UNKNOWN_DEPLOY :: Jumps if no deploy method is found
echo Press any key to exit...
PAUSE >nul
EXIT
:DEPLOY_C
call :ColorText 09 "Deploying client..."
set typeName=RobloxClient
CALL :DEPLOY
call :ColorText 02 "Finished deploying client!"
GOTO :EOF
:DEPLOY_R
call :ColorText 09 "Deploying RCCService..."
set typeName=RCCService
CALL :DEPLOY
call :ColorText 02 "Finished deploying RCCService!"
GOTO :EOF
:DEPLOY_B
call :ColorText 09 "Deploying both..."
CALL :DEPLOY_C
CALL :DEPLOY_R
call :ColorText 02 "Finished deploying both!"
GOTO :EOF
:UNKNOWN_DEPLOY
call :ColorText 0C "Unknown upload type!"
GOTO :EOF
:DEPLOY
cd "D:\wamp320\platinus2016\UploadBits\%platform%-%build%-%typeName%"
call :Hash
SETLOCAL ENABLEDELAYEDEXPANSION
::Move the files
for /f "tokens=*" %%f in ('dir /b *') do (
::Hack to prevent multiple prompts during deployment
>> "%CDNDir%version-%hash%-%%f" rem/
xcopy /Q /Y /F "%%f" "%CDNDir%version-%hash%-%%f" > nul
echo Deployed version-%hash%-%%f
)
::Set the version
echo|set /p="version-%hash%">"%CDNDir%\version.txt"
GOTO :EOF
:: End deploy section ::
::Functions
:ColorText
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
echo.
goto :eof
:Hash
rem // Set ErrorLevel and exit code to a random number:
cmd /C exit %RANDOM%
rem // Return the last two digits of the hexadecimal exit code:
set hash=%=ExitCode:~-2%
:loop
cmd /C exit %RANDOM%
set hash=%hash%%=ExitCode:~-2%
set /a t=t+1
if %t% LSS 7 goto loop
SET hash
CALL :LoCase hash
goto :eof
:PROMPT
SET /P AREYOUSURE=Is this correct? (Y/[N]):
IF /I "%AREYOUSURE%" NEQ "Y" EXIT
goto :eof
:LoCase
:: Subroutine to convert a variable VALUE to all lower case.
:: The argument for this subroutine is the variable NAME.
FOR %%i IN ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i" "J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r" "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z") DO CALL SET "%1=%%%1:%%~i%%"
GOTO:EOF
:UpCase
:: Subroutine to convert a variable VALUE to all UPPER CASE.
:: The argument for this subroutine is the variable NAME.
FOR %%i IN ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I" "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R" "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z") DO CALL SET "%1=%%%1:%%~i%%"
GOTO:EOF
:TCase
:: Subroutine to convert a variable VALUE to Title Case.
:: The argument for this subroutine is the variable NAME.
FOR %%i IN (" a= A" " b= B" " c= C" " d= D" " e= E" " f= F" " g= G" " h= H" " i= I" " j= J" " k= K" " l= L" " m= M" " n= N" " o= O" " p= P" " q= Q" " r= R" " s= S" " t= T" " u= U" " v= V" " w= W" " x= X" " y= Y" " z= Z") DO CALL SET "%1=%%%1:%%~i%%"
GOTO:EOF

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

20
SharedCode/Autoloader.php Normal file
View File

@ -0,0 +1,20 @@
<?php
/**
* Simple autoloader, so we don't need Composer just for this.
*/
class Autoloader
{
public static function register()
{
spl_autoload_register(function ($class) {
$file = str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php';
if (file_exists($file)) {
require $file;
return true;
}
return false;
});
}
}
Autoloader::register();
?>

1
SharedCode/README.txt Normal file
View File

@ -0,0 +1 @@
This is a ROBLOX backend reconstruction that's written PHP and was created by Brent Da Mage#5357 in September of 2020.

View File

@ -0,0 +1,20 @@
<?php
// This file defines the Roblox.Caching.LocalCache class. Originally housed in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Caching\Roblox.Caching\RobloxCaches\LocalCache.cs.
namespace Roblox\Caching;
class LocalCache {
function __construct() {
}
function GetEntityFromCacheByIDLookup/*[TIndex,TEntity,TDal]*/(/*ICacheInfo*/ $cacheInfo, /*String*/ $entityIdLookup, /*Func`1*/ $getter) {
/*
at Roblox.Common.EntityHelper.DoGetOrCreate[TIndex,TDal,TEntity](GetOrCreateDAL`1 dalGetterOrCreater) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Data\Roblox.Data\Entities\EntityHelper.cs:line 316
at Roblox.Caching.LocalCache.GetEntityFromCacheByIDLookup[TIndex,TEntity,TDal](ICacheInfo cacheInfo, String entityIdLookup, Func`1 getter) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Caching\Roblox.Caching\RobloxCaches\LocalCache.cs:line 701
*/
}
}
// EOF

View File

@ -0,0 +1,20 @@
<?php
// This file defines the Roblox.Entities.Mssql.RobloxDataAccessPatternExtensions class. Originally housed in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Entities\Roblox.Entities.Mssql\RobloxDataAccessPatternExtensions.cs.
namespace Roblox\Entities\Mssql;
class LocalCache {
function __construct() {
}
function GetOrCreate/*[TDal]*/(/*RobloxDatabase*/ $database, /*String*/ $storedProcedureName, /*Func`2*/ $dalBuilder, /*Nullable`1*/ $commandTimeout, /*Boolean*/ $includeApplicationIntent, /*SqlParameter[]*/ $queryParameters) {
/*
at Roblox.Mssql.Database.ExecuteReader(String commandText, SqlParameter[] sqlParameters, CommandType commandType, Nullable`1 commandTimeout, Nullable`1 applicationIntent) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Mssql\Roblox.Mssql\Database.cs:line 226
at Roblox.Entities.Mssql.RobloxDataAccessPatternExtensions.GetOrCreate[TDal](RobloxDatabase database, String storedProcedureName, Func`2 dalBuilder, Nullable`1 commandTimeout, Boolean includeApplicationIntent, SqlParameter[] queryParameters) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Entities\Roblox.Entities.Mssql\RobloxDataAccessPatternExtensions.cs:line 51
*/
}
}
// EOF

View File

@ -0,0 +1,20 @@
<?php
// This file defines the Job class.
namespace Roblox\Grid\Rcc;
class Job {
public $id;
public $expirationInSeconds;
public $category;
public $cores;
function __construct($id, $expirationInSeconds = 10, $category = 0, $cores = 1) {
$this->id = $id;
$this->expirationInSeconds = $expirationInSeconds;
$this->category = $category;
$this->cores = $cores;
}
}
// EOF

View File

@ -0,0 +1,29 @@
<?php
// This file defines the LuaType enum. Though this is a class, please treat it like an enum and **ONLY** reference it statically.
namespace Roblox\Grid\Rcc;
class LuaType {
public const LUA_TNIL = "LUA_TNIL";
public const LUA_TBOOLEAN = "LUA_TBOOLEAN";
public const LUA_TNUMBER = "LUA_TNUMBER";
public const LUA_TSTRING = "LUA_TSTRING";
public const LUA_TTABLE = "LUA_TTABLE";
// Casts a PHP value type to a LuaType enum.
static function castToLuaType($value) {
$luaTypeConversions = [
'NULL' => LuaType::LUA_TNIL,
'boolean' => LuaType::LUA_TBOOLEAN,
'integer' => LuaType::LUA_TNUMBER,
'double' => LuaType::LUA_TNUMBER,
'string' => LuaType::LUA_TSTRING,
'array' => LuaType::LUA_TTABLE,
'object' => LuaType::LUA_TNIL
];
return $luaTypeConversions[gettype($value)];
}
}
// EOF

View File

@ -0,0 +1,73 @@
<?php
// This file defines the LuaValue class.
namespace Roblox\Grid\Rcc;
class LuaValue {
public $value;
public $type;
public $table;
// Constructor
function __construct($baseValue) {
if (isset($baseValue)) {
$luaValue = LuaValue::serializeValue($baseValue);
foreach ($luaValue as $name => $child) {
$this->{$name} = $child;
}
}
}
// This function serializes the given PHP variable into a Lua value.
static function serializeValue($phpValue) {
$luaValue = new LuaValue(null); // A really dumb hack
$luaValue->type = LuaType::castToLuaType($phpValue);
if (is_array($phpValue)) {
// TODO: Make this an empty array by default to allow for easy table creation?
$luaValue->table = [];
foreach ($phpValue as $value) {
array_push($luaValue->table, new LuaValue($value));
}
}else {
$luaValue->value = $phpValue;
}
return $luaValue;
}
// This function deserializes the given Lua value into a normal PHP variable.
static function deserializeValue($luaValue) {
if (is_array($luaValue)) {
$phpValue = [];
foreach ($luaValue as $value) {
array_push($phpValue, LuaValue::deserializeValue($value));
}
}else {
if ($luaValue->type == LuaType::LUA_TTABLE && isset($luaValue->table->LuaValue)) {
$phpValue = [];
if (is_array($luaValue->table->LuaValue)) {
$value = $luaValue->table->LuaValue;
}else {
$value = $luaValue->table;
}
foreach ($value as $value) {
array_push($phpValue, $value->deserialize());
}
}elseif ($luaValue->type == LuaType::LUA_TNIL) {
// Null value
$phpValue = null;
}else {
// Direct read from LuaValue's value
$phpValue = $luaValue->value;
}
}
return $phpValue;
}
// This function deserializes the current Lua value into a normal PHP variable.
function deserialize() {
return LuaValue::deserializeValue($this);
}
}
// EOF

View File

@ -0,0 +1,800 @@
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://roblox.com/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://roblox.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://roblox.com/">
<s:element name="HelloWorld">
<s:complexType />
</s:element>
<s:element name="HelloWorldResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetVersion">
<s:complexType />
</s:element>
<s:element name="GetVersionResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetVersionResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetStatus">
<s:complexType />
</s:element>
<s:element name="GetStatusResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetStatusResult" type="tns:Status" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="Status">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="version" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="environmentCount" type="s:int" />
</s:sequence>
</s:complexType>
<s:element name="OpenJob">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="job" type="tns:Job" />
<s:element minOccurs="0" maxOccurs="1" name="script" type="tns:ScriptExecution" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="OpenJobEx">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="job" type="tns:Job" />
<s:element minOccurs="0" maxOccurs="1" name="script" type="tns:ScriptExecution" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="Job">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="id" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="expirationInSeconds" type="s:double" />
<s:element minOccurs="1" maxOccurs="1" name="category" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="cores" type="s:double" />
</s:sequence>
</s:complexType>
<s:complexType name="ScriptExecution">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="name" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="script" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="arguments" type="tns:ArrayOfLuaValue" />
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfLuaValue">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="LuaValue" nillable="true" type="tns:LuaValue" />
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfJob">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="Job" nillable="true" type="tns:Job" />
</s:sequence>
</s:complexType>
<s:complexType name="LuaValue">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="type" type="tns:LuaType" />
<s:element minOccurs="0" maxOccurs="1" name="value" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="table" type="tns:ArrayOfLuaValue" />
</s:sequence>
</s:complexType>
<s:simpleType name="LuaType">
<s:restriction base="s:string">
<s:enumeration value="LUA_TNIL" />
<s:enumeration value="LUA_TBOOLEAN" />
<s:enumeration value="LUA_TNUMBER" />
<s:enumeration value="LUA_TSTRING" />
<s:enumeration value="LUA_TTABLE" />
</s:restriction>
</s:simpleType>
<s:element name="OpenJobResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="OpenJobResult" type="tns:LuaValue"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="OpenJobExResponse">
<s:complexType>
<s:sequence>
<s:element name="OpenJobExResult" type="tns:ArrayOfLuaValue"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="RenewLease">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="jobID" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="expirationInSeconds" type="s:double" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="RenewLeaseResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="RenewLeaseResult" type="s:double" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="Execute">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="jobID" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="script" type="tns:ScriptExecution" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ExecuteResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="unbounded" name="ExecuteResult" nillable="true" type="tns:LuaValue" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ExecuteEx">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="jobID" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="script" type="tns:ScriptExecution" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ExecuteExResponse">
<s:complexType>
<s:sequence>
<s:element name="ExecuteExResult" type="tns:ArrayOfLuaValue"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="CloseJob">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="jobID" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="CloseJobResponse">
<s:complexType />
</s:element>
<s:element name="BatchJob">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="job" type="tns:Job" />
<s:element minOccurs="1" maxOccurs="1" name="script" type="tns:ScriptExecution" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="BatchJobResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="unbounded" name="BatchJobResult" nillable="true" type="tns:LuaValue" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="BatchJobEx">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="job" type="tns:Job" />
<s:element minOccurs="1" maxOccurs="1" name="script" type="tns:ScriptExecution" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="BatchJobExResponse">
<s:complexType>
<s:sequence>
<s:element name="BatchJobExResult" type="tns:ArrayOfLuaValue"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetExpiration">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="jobID" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetExpirationResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetExpirationResult" type="s:double" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetAllJobs">
<s:complexType />
</s:element>
<s:element name="GetAllJobsResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="unbounded" name="GetAllJobsResult" nillable="true" type="tns:Job" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetAllJobsEx">
<s:complexType />
</s:element>
<s:element name="GetAllJobsExResponse">
<s:complexType>
<s:sequence>
<s:element name="GetAllJobsExResult" type="tns:ArrayOfJob" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="CloseExpiredJobs">
<s:complexType />
</s:element>
<s:element name="CloseExpiredJobsResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="CloseExpiredJobsResult" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="CloseAllJobs">
<s:complexType />
</s:element>
<s:element name="CloseAllJobsResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="CloseAllJobsResult" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="Diag">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="type" type="s:int" />
<s:element minOccurs="0" maxOccurs="1" name="jobID" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="DiagResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="unbounded" name="DiagResult" nillable="true" type="tns:LuaValue" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="DiagEx">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="type" type="s:int" />
<s:element minOccurs="0" maxOccurs="1" name="jobID" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="DiagExResponse">
<s:complexType>
<s:sequence>
<s:element name="DiagExResult" type="tns:ArrayOfLuaValue" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name="HelloWorldSoapIn">
<wsdl:part name="parameters" element="tns:HelloWorld" />
</wsdl:message>
<wsdl:message name="HelloWorldSoapOut">
<wsdl:part name="parameters" element="tns:HelloWorldResponse" />
</wsdl:message>
<wsdl:message name="GetVersionSoapIn">
<wsdl:part name="parameters" element="tns:GetVersion" />
</wsdl:message>
<wsdl:message name="GetVersionSoapOut">
<wsdl:part name="parameters" element="tns:GetVersionResponse" />
</wsdl:message>
<wsdl:message name="GetStatusSoapIn">
<wsdl:part name="parameters" element="tns:GetStatus" />
</wsdl:message>
<wsdl:message name="GetStatusSoapOut">
<wsdl:part name="parameters" element="tns:GetStatusResponse" />
</wsdl:message>
<wsdl:message name="OpenJobSoapIn">
<wsdl:part name="parameters" element="tns:OpenJob" />
</wsdl:message>
<wsdl:message name="OpenJobSoapOut">
<wsdl:part name="parameters" element="tns:OpenJobResponse" />
</wsdl:message>
<wsdl:message name="OpenJobExSoapIn">
<wsdl:part name="parameters" element="tns:OpenJobEx" />
</wsdl:message>
<wsdl:message name="OpenJobExSoapOut">
<wsdl:part name="parameters" element="tns:OpenJobExResponse" />
</wsdl:message>
<wsdl:message name="RenewLeaseSoapIn">
<wsdl:part name="parameters" element="tns:RenewLease" />
</wsdl:message>
<wsdl:message name="RenewLeaseSoapOut">
<wsdl:part name="parameters" element="tns:RenewLeaseResponse" />
</wsdl:message>
<wsdl:message name="ExecuteSoapIn">
<wsdl:part name="parameters" element="tns:Execute" />
</wsdl:message>
<wsdl:message name="ExecuteSoapOut">
<wsdl:part name="parameters" element="tns:ExecuteResponse" />
</wsdl:message>
<wsdl:message name="ExecuteExSoapIn">
<wsdl:part name="parameters" element="tns:ExecuteEx" />
</wsdl:message>
<wsdl:message name="ExecuteExSoapOut">
<wsdl:part name="parameters" element="tns:ExecuteExResponse" />
</wsdl:message>
<wsdl:message name="CloseJobSoapIn">
<wsdl:part name="parameters" element="tns:CloseJob" />
</wsdl:message>
<wsdl:message name="CloseJobSoapOut">
<wsdl:part name="parameters" element="tns:CloseJobResponse" />
</wsdl:message>
<wsdl:message name="BatchJobSoapIn">
<wsdl:part name="parameters" element="tns:BatchJob" />
</wsdl:message>
<wsdl:message name="BatchJobSoapOut">
<wsdl:part name="parameters" element="tns:BatchJobResponse" />
</wsdl:message>
<wsdl:message name="BatchJobExSoapIn">
<wsdl:part name="parameters" element="tns:BatchJobEx" />
</wsdl:message>
<wsdl:message name="BatchJobExSoapOut">
<wsdl:part name="parameters" element="tns:BatchJobExResponse" />
</wsdl:message>
<wsdl:message name="GetExpirationSoapIn">
<wsdl:part name="parameters" element="tns:GetExpiration" />
</wsdl:message>
<wsdl:message name="GetExpirationSoapOut">
<wsdl:part name="parameters" element="tns:GetExpirationResponse" />
</wsdl:message>
<wsdl:message name="GetAllJobsSoapIn">
<wsdl:part name="parameters" element="tns:GetAllJobs" />
</wsdl:message>
<wsdl:message name="GetAllJobsSoapOut">
<wsdl:part name="parameters" element="tns:GetAllJobsResponse" />
</wsdl:message>
<wsdl:message name="GetAllJobsExSoapIn">
<wsdl:part name="parameters" element="tns:GetAllJobsEx" />
</wsdl:message>
<wsdl:message name="GetAllJobsExSoapOut">
<wsdl:part name="parameters" element="tns:GetAllJobsExResponse" />
</wsdl:message>
<wsdl:message name="CloseExpiredJobsSoapIn">
<wsdl:part name="parameters" element="tns:CloseExpiredJobs" />
</wsdl:message>
<wsdl:message name="CloseExpiredJobsSoapOut">
<wsdl:part name="parameters" element="tns:CloseExpiredJobsResponse" />
</wsdl:message>
<wsdl:message name="CloseAllJobsSoapIn">
<wsdl:part name="parameters" element="tns:CloseAllJobs" />
</wsdl:message>
<wsdl:message name="CloseAllJobsSoapOut">
<wsdl:part name="parameters" element="tns:CloseAllJobsResponse" />
</wsdl:message>
<wsdl:message name="DiagSoapIn">
<wsdl:part name="parameters" element="tns:Diag" />
</wsdl:message>
<wsdl:message name="DiagSoapOut">
<wsdl:part name="parameters" element="tns:DiagResponse" />
</wsdl:message>
<wsdl:message name="DiagExSoapIn">
<wsdl:part name="parameters" element="tns:DiagEx" />
</wsdl:message>
<wsdl:message name="DiagExSoapOut">
<wsdl:part name="parameters" element="tns:DiagExResponse" />
</wsdl:message>
<wsdl:portType name="RCCServiceSoap">
<wsdl:operation name="HelloWorld">
<wsdl:input message="tns:HelloWorldSoapIn" />
<wsdl:output message="tns:HelloWorldSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetVersion">
<wsdl:input message="tns:GetVersionSoapIn" />
<wsdl:output message="tns:GetVersionSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetStatus">
<wsdl:input message="tns:GetStatusSoapIn" />
<wsdl:output message="tns:GetStatusSoapOut" />
</wsdl:operation>
<wsdl:operation name="OpenJob">
<wsdl:input message="tns:OpenJobSoapIn" />
<wsdl:output message="tns:OpenJobSoapOut" />
</wsdl:operation>
<wsdl:operation name="OpenJobEx">
<wsdl:input message="tns:OpenJobExSoapIn" />
<wsdl:output message="tns:OpenJobExSoapOut" />
</wsdl:operation>
<wsdl:operation name="RenewLease">
<wsdl:input message="tns:RenewLeaseSoapIn" />
<wsdl:output message="tns:RenewLeaseSoapOut" />
</wsdl:operation>
<wsdl:operation name="Execute">
<wsdl:input message="tns:ExecuteSoapIn" />
<wsdl:output message="tns:ExecuteSoapOut" />
</wsdl:operation>
<wsdl:operation name="ExecuteEx">
<wsdl:input message="tns:ExecuteExSoapIn" />
<wsdl:output message="tns:ExecuteExSoapOut" />
</wsdl:operation>
<wsdl:operation name="CloseJob">
<wsdl:input message="tns:CloseJobSoapIn" />
<wsdl:output message="tns:CloseJobSoapOut" />
</wsdl:operation>
<wsdl:operation name="BatchJob">
<wsdl:input message="tns:BatchJobSoapIn" />
<wsdl:output message="tns:BatchJobSoapOut" />
</wsdl:operation>
<wsdl:operation name="BatchJobEx">
<wsdl:input message="tns:BatchJobExSoapIn" />
<wsdl:output message="tns:BatchJobExSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetExpiration">
<wsdl:input message="tns:GetExpirationSoapIn" />
<wsdl:output message="tns:GetExpirationSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetAllJobs">
<wsdl:input message="tns:GetAllJobsSoapIn" />
<wsdl:output message="tns:GetAllJobsSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetAllJobsEx">
<wsdl:input message="tns:GetAllJobsExSoapIn" />
<wsdl:output message="tns:GetAllJobsExSoapOut" />
</wsdl:operation>
<wsdl:operation name="CloseExpiredJobs">
<wsdl:input message="tns:CloseExpiredJobsSoapIn" />
<wsdl:output message="tns:CloseExpiredJobsSoapOut" />
</wsdl:operation>
<wsdl:operation name="CloseAllJobs">
<wsdl:input message="tns:CloseAllJobsSoapIn" />
<wsdl:output message="tns:CloseAllJobsSoapOut" />
</wsdl:operation>
<wsdl:operation name="Diag">
<wsdl:input message="tns:DiagSoapIn" />
<wsdl:output message="tns:DiagSoapOut" />
</wsdl:operation>
<wsdl:operation name="DiagEx">
<wsdl:input message="tns:DiagExSoapIn" />
<wsdl:output message="tns:DiagExSoapOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="RCCServiceSoap" type="tns:RCCServiceSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="HelloWorld">
<soap:operation soapAction="http://roblox.com/HelloWorld" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetVersion">
<soap:operation soapAction="http://roblox.com/GetVersion" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetStatus">
<soap:operation soapAction="http://roblox.com/GetStatus" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="OpenJob">
<soap:operation soapAction="http://roblox.com/OpenJob" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="OpenJobEx">
<soap:operation soapAction="http://roblox.com/OpenJobEx" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="RenewLease">
<soap:operation soapAction="http://roblox.com/RenewLease" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Execute">
<soap:operation soapAction="http://roblox.com/Execute" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ExecuteEx">
<soap:operation soapAction="http://roblox.com/ExecuteEx" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CloseJob">
<soap:operation soapAction="http://roblox.com/CloseJob" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="BatchJob">
<soap:operation soapAction="http://roblox.com/BatchJob" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="BatchJobEx">
<soap:operation soapAction="http://roblox.com/BatchJobEx" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetExpiration">
<soap:operation soapAction="http://roblox.com/GetExpiration" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAllJobs">
<soap:operation soapAction="http://roblox.com/GetAllJobs" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAllJobsEx">
<soap:operation soapAction="http://roblox.com/GetAllJobsEx" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CloseExpiredJobs">
<soap:operation soapAction="http://roblox.com/CloseExpiredJobs" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CloseAllJobs">
<soap:operation soapAction="http://roblox.com/CloseAllJobs" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Diag">
<soap:operation soapAction="http://roblox.com/Diag" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DiagEx">
<soap:operation soapAction="http://roblox.com/DiagEx" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="RCCServiceSoap12" type="tns:RCCServiceSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="HelloWorld">
<soap12:operation soapAction="http://roblox.com/HelloWorld" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetVersion">
<soap12:operation soapAction="http://roblox.com/GetVersion" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetStatus">
<soap12:operation soapAction="http://roblox.com/GetStatus" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="OpenJob">
<soap12:operation soapAction="http://roblox.com/OpenJob" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="OpenJobEx">
<soap12:operation soapAction="http://roblox.com/OpenJobEx" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="RenewLease">
<soap12:operation soapAction="http://roblox.com/RenewLease" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Execute">
<soap12:operation soapAction="http://roblox.com/Execute" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ExecuteEx">
<soap12:operation soapAction="http://roblox.com/ExecuteEx" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CloseJob">
<soap12:operation soapAction="http://roblox.com/CloseJob" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="BatchJob">
<soap12:operation soapAction="http://roblox.com/BatchJob" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="BatchJobEx">
<soap12:operation soapAction="http://roblox.com/BatchJobEx" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetExpiration">
<soap12:operation soapAction="http://roblox.com/GetExpiration" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAllJobs">
<soap12:operation soapAction="http://roblox.com/GetAllJobs" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAllJobsEx">
<soap12:operation soapAction="http://roblox.com/GetAllJobsEx" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CloseExpiredJobs">
<soap12:operation soapAction="http://roblox.com/CloseExpiredJobs" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CloseAllJobs">
<soap12:operation soapAction="http://roblox.com/CloseAllJobs" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Diag">
<soap12:operation soapAction="http://roblox.com/Diag" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DiagEx">
<soap12:operation soapAction="http://roblox.com/DiagEx" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<service name="RCCServiceSoap">
<port name="RCCServiceSoapPort" binding="tns:RCCServiceSoap">
<soap:address location="127.0.0.1:64989"/>
</port>
</service>
</wsdl:definitions>

View File

@ -0,0 +1,264 @@
<?php
// This file defines the RCCServiceSoap class. The class inherits the properties of a standard SoapClient, but it can be used to call RCCService functions via SOAP requests.
namespace Roblox\Grid\Rcc;
class RCCServiceSoap {
private $SoapClient;
private $classmap = [
"Status" => "Roblox\Grid\Rcc\Status",
"Job" => "Roblox\Grid\Rcc\Job",
"ScriptExecution" => "Roblox\Grid\Rcc\ScriptExecution",
"LuaValue" => "Roblox\Grid\Rcc\LuaValue",
"LuaType" => "Roblox\Grid\Rcc\LuaType"
];
// The specification of a URL and port should always be done during production, though the defaults can be used when testing.
function __construct($url = "127.0.0.1", $port = 64989) {
$this->SoapClient = new \SoapClient(__DIR__."\RCCService.wsdl", ["location" => "http://".$url.":".$port, "features" => SOAP_WAIT_ONE_WAY_CALLS, "uri" => "http://roblox.com/", "classmap" => $this->classmap, "exceptions" => false]);
}
// Begin function handlers
// Use the HelloWorld function as a template for all future functions.
// NOTE: Please use is_soap_fault() when checking if functions failed.
function callToService($name, $arguments = []) {
$result = $this->SoapClient->{$name}($arguments);
return (!is_soap_fault($result) ? (/*is_soap_fault($result) ||*/ !isset($result->{$name."Result"}) ? null : $result->{$name."Result"}) : $result);
}
private static function parseJobResult($value) {
if ($value !== new \stdClass() && isset($value->LuaValue)) {
// Our job result isn't empty, so let's deserialize it
$result = LuaValue::deserializeValue($value->LuaValue);
}else {
// Something went wrong :(
$result = null;
}
return $result;
}
/**
* Name: Hello World
* Description: This function calls a simple HelloWorld function from RCCService. The expected HelloWorldResponse is "Hello World".
* Parameters: []
*/
function HelloWorld() {
return $this->callToService(__FUNCTION__);
}
/**
* Name: Get Version
* Description: This function fetches the version of RCCService.
* Parameters: []
*/
function GetVersion() {
return $this->callToService(__FUNCTION__);
}
/**
* Name: Open Job
* Description: This function opens a job in accordance with the given arguments. Though this function is deprecated on ROBLOX's end, we'll still use it here and OpenJobEx will be called instead.
* Parameters: [
* "job" => "This function opens a job in accordance with the given arguments. It returns the value that's returned by the Lua script.",
* "script" => "The ScriptExecution class that's going to be executed in the job. This contains values such as name, script, and arguments."
* ]
*/
function OpenJob($job, $script = null) {
return $this->OpenJobEx($job, $script);
}
/**
* Name: Open Job Ex
* Description: This function opens a job in accordance with the given arguments. It returns the value that's returned by the Lua script. Feel free to use the other version of this function.
* Parameters: [
* "job" => "The Job class that's going to be serialized and pushed to the service.",
* "script" => "The ScriptExecution class that's going to be executed in the job. This contains values such as name, script, and arguments."
* ]
*/
function OpenJobEx($job, $script = null) {
$result = $this->callToService(__FUNCTION__, ["job" => $job, "script" => $script]);
return RCCServiceSoap::parseJobResult($result);
}
/**
* Name: Batch Job
* Description: This function runs a batch job in accordance with the given arguments. Though this function is deprecated on ROBLOX's end, we'll still use it here and BatchJobEx will be called instead.
* Parameters: [
* "job" => "The Job class that's going to be serialized and pushed to the service.",
* "script" => "The ScriptExecution class that's going to be executed in the job. This contains values such as name, script, and arguments."
* ]
*/
function BatchJob($job, $script) {
return $this->BatchJobEx($job, $script);
}
/**
* Name: Batch Job Ex
* Description: This function runs a batch job in accordance with the given arguments. Feel free to use the other version of this function.
* Parameters: [
* "job" => "The Job class that's going to be serialized and pushed to the service.",
* "script" => "The ScriptExecution class that's going to be executed in the job. This contains values such as name, script, and arguments."
* ]
*/
function BatchJobEx($job, $script) {
$result = $this->callToService(__FUNCTION__, ["job" => $job, "script" => $script]);
return RCCServiceSoap::parseJobResult($result);
}
/**
* Name: Renew Lease
* Description: This function changes the expirationInSeconds of a job based on the jobID. It essentially allows you to set the expiration time of a currently opened job.
* Parameters: [
* "jobID" => "The ID of the job who's expiration is going to be renewed.",
* "expirationInSeconds" => "The new expiration time for the job."
* ]
*/
function RenewLease($jobID, $expirationInSeconds) {
return $this->callToService(__FUNCTION__, ["jobID" => $jobID, "expirationInSeconds" => $expirationInSeconds]);
}
/**
* Name: Execute
* Description: This function uses the given arguments to execute a script inside an existing job. Though this function is deprecated on ROBLOX's end, we'll still use it here and ExecuteEx will be called instead.
* Parameters: [
* "jobID" => "The ID of the job in which the script is executed.",
* "script" => "The script that's going to be executed."
* ]
*/
function Execute($jobID, $script) {
return $this->ExecuteEx($jobID, $script);
}
/**
* Name: Execute Ex
* Description: This function uses the given arguments to execute a script inside an existing job.
* Parameters: [
* "jobID" => "The ID of the job in which the script is executed.",
* "script" => "The script that's going to be executed."
* ]
*/
function ExecuteEx($jobID, $script) {
return $this->callToService(__FUNCTION__, ["jobID" => $jobID, "script" => $script]);
}
/**
* Name: Close Job
* Description: This function closes an existing job using the given job ID.
* Parameters: [
* "jobID" => "The ID of the job that's going to be closed."
* ]
*/
function CloseJob($jobID) {
return $this->callToService(__FUNCTION__, ["jobID" => $jobID]);
}
/**
* Name: Get Expiration
* Description: This function fetches and returns the expirationInSeconds of a job using the given job ID.
* Parameters: [
* "jobID" => "The ID of the job."
* ]
*/
function GetExpiration($jobID) {
return $this->callToService(__FUNCTION__, ["jobID" => $jobID]);
}
/**
* Name: Diag
* Description: This function returns various types of diagnostic information from RCCService. Though this function is deprecated on ROBLOX's end, we'll still use it here and DiagEx will be called instead.
* Parameters: [
* "type" => "The diagnostic type to retrieve.",
* "jobID" => "The id of the job to retrieve the diagnostic from."
* ]
*/
function Diag($type, $jobID) {
return $this->DiagEx($type, $jobID);
}
/**
* Name: Diag Ex
* Description: This function returns various types of diagnostic information from RCCService.
* Parameters: [
* "type" => "The diagnostic type to retrieve.",
* "jobID" => "The id of the job to retrieve the diagnostic from."
* ]
*/
/* This is the format of the Diag data:
type == 0
DataModel Count in this process
PerfCounter data
Task Scheduler
(obsolete entry)
double threadAffinity
double numQueuedJobs
double numScheduledJobs
double numRunningJobs
long threadPoolSize
double messageRate
double messagePumpDutyCycle
DataModel Jobs Info
Machine configuration
Memory Leak Detection
type & 1
leak dump
type & 2
attempt to allocate 500k. if success, then true else false
type & 4
DataModel dutyCycles
*/
function DiagEx($type, $jobID) {
return $this->callToService(__FUNCTION__, ["type" => $type, "jobID" => $jobID]);
}
/**
* Name: Get Status
* Description: This function fetches the status information from RCCService. The returned Status class contains a version string and an environmentCount int.
* Parameters: []
*/
function GetStatus() {
return $this->callToService(__FUNCTION__);
}
/**
* Name: Get All Jobs
* Description: This function fetches an array of every job that's currently open on RCCService. Though this function is deprecated on ROBLOX's end, we'll still use it here and GetAllJobsEx will be called instead.
* Parameters: []
*/
function GetAllJobs() {
// GetAllJobs is deprecated.
return $this->GetAllJobsEx();
}
/**
* Name: Get All Jobs Ex
* Description: This function fetches an array of every job that's currently open on RCCService.
* Parameters: []
*/
function GetAllJobsEx() {
return $this->callToService(__FUNCTION__);
}
/**
* Name: Close Expired Jobs
* Description: This function closes all currently open and expired jobs on RCCService. This returns the amount of jobs that were closed.
* Parameters: []
*/
function CloseExpiredJobs() {
return $this->callToService(__FUNCTION__);
}
/**
* Name: Close All Jobs
* Description: This function closes all currently open jobs on RCCService. This returns the amount of jobs that were closed.
* Parameters: []
*/
function CloseAllJobs() {
return $this->callToService(__FUNCTION__);
}
}
// EOF

View File

@ -0,0 +1,20 @@
<?php
// This file defines the ScriptExecution class.
namespace Roblox\Grid\Rcc;
class ScriptExecution {
public $name;
public $script;
public $arguments = [];
function __construct($name, $script, $arguments = []) {
$this->name = $name;
$this->script = $script;
foreach ($arguments as $arg) {
array_push($this->arguments, new LuaValue($arg));
}
}
}
// EOF

View File

@ -0,0 +1,16 @@
<?php
// This file defines the Status class. This contains the version and environmentCount variables and it's used for gathering basic information from RCCService processes.
namespace Roblox\Grid\Rcc;
class Status {
public $version;
public $environmentCount;
function __construct($version, $environmentCount) {
$this->version = $version;
$this->environmentCount = $environmentCount;
}
}
// EOF

View File

@ -0,0 +1,32 @@
<?php
// This file defines the Roblox.Mssql.Database class. Originally housed in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Mssql\Roblox.Mssql\Database.cs.
namespace Roblox\Mssql;
class Database {
function __construct() {
}
function ExecuteReader(/*String*/ $commandText, /*SqlParameter[]*/ $sqlParameters, /*CommandType*/ $commandType, /*Nullable`1*/ $commandTimeout, /*Nullable`1*/ $applicationIntent) {
/*
at Roblox.Mssql.GuardedDatabase.Execute(CommandType commandType, String commandText, SqlParameter[] sqlParameters, Action`1 action, Nullable`1 commandTimeout, Nullable`1 applicationIntent) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Mssql\Roblox.Mssql\GuardedDatabase.cs:line 22
at Roblox.Mssql.Database.ExecuteReader(String commandText, SqlParameter[] sqlParameters, CommandType commandType, Nullable`1 commandTimeout, Nullable`1 applicationIntent) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Mssql\Roblox.Mssql\Database.cs:line 226
*/
}
function Execute(/*CommandType*/ $commandType, /*String*/ $commandText, /*SqlParameter[]*/ $sqlParameters, /*Action`1*/ $action, /*Nullable`1*/ $commandTimeout, /*(Nullable`1*/ $applicationIntent) {
/*
at System.Data.SqlClient.SqlConnection.PermissionDemand()
at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Roblox.Mssql.Database.Execute(CommandType commandType, String commandText, SqlParameter[] sqlParameters, Action`1 action, Nullable`1 commandTimeout, Nullable`1 applicationIntent) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Mssql\Roblox.Mssql\Database.cs:line 105
*/
}
}
// EOF

View File

@ -0,0 +1,21 @@
<?php
// This file defines the Roblox.Mssql.GuardedDatabase class. Originally housed in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Mssql\Roblox.Mssql\GuardedDatabase.cs.
// Also has Roblox.Mssql.GuardedDatabase.<>c__DisplayClass2_0.<Execute>b__0() in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Mssql\Roblox.Mssql\GuardedDatabase.cs:line 21.
namespace Roblox\Mssql;
class GuardedDatabase {
function __construct() {
}
function Execute(/*CommandType*/ $commandType, /*String*/ $commandText, /*SqlParameter[]*/ $sqlParameters, /*Action`1*/ $action, /*Nullable`1*/ $commandTimeout, /*Nullable`1*/ $applicationIntent) {
/*
at Roblox.Sentinels.ExecutionCircuitBreakerBase.Execute(Action action)
at Roblox.Mssql.GuardedDatabase.Execute(CommandType commandType, String commandText, SqlParameter[] sqlParameters, Action`1 action, Nullable`1 commandTimeout, Nullable`1 applicationIntent) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Mssql\Roblox.Mssql\GuardedDatabase.cs:line 22
*/
}
}
// EOF

View File

@ -0,0 +1,21 @@
<?php
// This file defines the Roblox.Platform.AssetOwnership.UserAsset class.
namespace Roblox\Platform\AssetOwnership;
class UserAsset {
public /*int*/ $userAssetId;
public /*int*/ $assetId;
public /*int*/ $serialNumber;
public /*Roblox\Platform\Membership\IUser*/ $owner;
public /*\DateTime*/ $created;
public /*\DateTime*/ $updated;
function __construct($userAssetId) {
$this->userAssetId = $userAssetId;
// TODO: Load other values
}
}
// EOF

View File

@ -0,0 +1,65 @@
<?php
// This file defines the AssetType enum. Though this is a class, please treat it like an enum and **ONLY** reference it statically.
namespace Roblox\Platform\Assets;
class AssetType {
const Image = "Image";
const TShirt = "TShirt";
const Audio = "Audio";
const Mesh = "Mesh";
const Lua = "Lua";
const HTML = "HTML";
const Text = "Text";
const Hat = "Hat";
const Place = "Place";
const Model = "Model";
const Shirt = "Shirt";
const Pants = "Pants";
const Decal = "Decal";
const Avatar = "Avatar";
const Head = "Head";
const Face = "Face";
const Gear = "Gear";
const Badge = "Badge";
const GroupEmblem = "GroupEmblem";
const Animation = "Animation";
const Arms = "Arms";
const Legs = "Legs";
const Torso = "Torso";
const RightArm = "RightArm";
const LeftArm = "LeftArm";
const LeftLeg = "LeftLeg";
const RightLeg = "RightLeg";
const Package = "Package";
const YouTubeVideo = "YouTubeVideo";
const GamePass = "GamePass";
const App = "App";
const Code = "Code";
const Plugin = "Plugin";
const SolidModel = "SolidModel";
const MeshPart = "MeshPart";
const HairAccessory = "HairAccessory";
const FaceAccessory = "FaceAccessory";
const NeckAccessory = "NeckAccessory";
const ShoulderAccessory = "ShoulderAccessory";
const FrontAccessory = "FrontAccessory";
const BackAccessory = "BackAccessory";
const WaistAccessory = "WaistAccessory";
const ClimbAnimation = "ClimbAnimation";
const DeathAnimation = "DeathAnimation";
const FallAnimation = "FallAnimation";
const IdleAnimation = "IdleAnimation";
const JumpAnimation = "JumpAnimation";
const RunAnimation = "RunAnimation";
const SwimAnimation = "SwimAnimation";
const WalkAnimation = "WalkAnimation";
const PoseAnimation = "PoseAnimation";
const LocalizationTableManifest = "LocalizationTableManifest";
const LocalizationTableTranslation = "LocalizationTableTranslation";
const EmoteAnimation = "EmoteAnimation";
const Video = "Video";
}
// EOF

View File

@ -0,0 +1,12 @@
<?php
// This file defines the BundleType enum. Though this is a class, please treat it like an enum and **ONLY** reference it statically.
namespace Roblox\Platform\Bundles\Core;
class BundleType {
const BodyParts = "BodyParts";
const AvatarAnimations = "AvatarAnimations";
}
// EOF

View File

@ -0,0 +1,13 @@
<?php
// This file defines the Roblox.Platform.Membership.IUser interface.
namespace Roblox\Platform\Membership;
interface IUser {
public /*int*/ $userId;
public /*string*/ $username;
public /*UserModelBuildersClubMembershipTypeEnum*/ $buildersClubMembershipType;
}
// EOF

View File

@ -0,0 +1,14 @@
<?php
// This file defines the Roblox.Platform.Membership.User class. This class may or may not have existed.
namespace Roblox\Platform\Membership;
class User implements IUser {
function __construct($userId) {
$this->userId = $userId;
// TODO: Load other values
}
}
// EOF

View File

@ -0,0 +1,20 @@
<?php
// This file defines the Roblox.Platform.Throttling.Entities.NamespaceDAL class.
namespace Roblox\Platform\Throttling\Entities;
class NamespaceDAL {
function __construct() {
}
function GetOrCreateNamespace(/*String*/ $value) {
/*
at Roblox.Entities.Mssql.RobloxDataAccessPatternExtensions.GetOrCreate[TDal](RobloxDatabase database, String storedProcedureName, Func`2 dalBuilder, Nullable`1 commandTimeout, Boolean includeApplicationIntent, SqlParameter[] queryParameters) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Entities\Roblox.Entities.Mssql\RobloxDataAccessPatternExtensions.cs:line 51
at Roblox.Platform.Throttling.Entities.NamespaceDAL.GetOrCreateNamespace(String value)
*/
}
}
// EOF

View File

@ -0,0 +1,20 @@
<?php
// This file defines the Roblox.Platform.Throttling.IpRequest class.
namespace Roblox\Platform\Throttling;
class IpRequest {
function __construct() {
}
function IsEnabled() {
/*
at Roblox.Platform.Throttling.ThrottleRequestBase.GetRateLimitEntity()
at Roblox.Platform.Throttling.IpRequest.IsEnabled()
*/
}
}
// EOF

View File

@ -0,0 +1,20 @@
<?php
// This file defines the Roblox.Platform.Throttling.ThrottleRequestBase class.
namespace Roblox\Platform\Throttling;
class ThrottleRequestBase {
function __construct() {
}
function GetRateLimitEntity() {
/*
at Roblox.Common.EntityHelper.GetOrCreateEntity[TIndex,TEntity,TDal](ICacheInfo cacheInfo, String entityIdLookup, GetOrCreate`1 getterOrCreator) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Data\Roblox.Data\Entities\EntityHelper.cs:line 0
at Roblox.Platform.Throttling.ThrottleRequestBase.GetRateLimitEntity()
*/
}
}
// EOF

View File

@ -0,0 +1,12 @@
<?php
// This file defines the CatalogItemType enum. Though this is a class, please treat it like an enum and **ONLY** reference it statically.
namespace Roblox\Search\Client;
class CatalogItemType {
const Asset = "Asset";
const Bundle = "Bundle";
}
// EOF

View File

@ -0,0 +1,21 @@
<?php
// This file defines the Roblox.Sentinels.ExecutionCircuitBreakerBase class.
namespace Roblox\Sentinels;
class ExecutionCircuitBreakerBase {
function __construct() {
}
function Execute(/*Action*/ $action) {
/*
at Roblox.Mssql.Database.Execute(CommandType commandType, String commandText, SqlParameter[] sqlParameters, Action`1 action, Nullable`1 commandTimeout, Nullable`1 applicationIntent) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Mssql\Roblox.Mssql\Database.cs:line 105
at Roblox.Mssql.GuardedDatabase.&lt;&gt;c__DisplayClass2_0.&lt;Execute&gt;b__0() in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Mssql\Roblox.Mssql\GuardedDatabase.cs:line 21
at Roblox.Sentinels.ExecutionCircuitBreakerBase.Execute(Action action)
*/
}
}
// EOF

View File

@ -0,0 +1,13 @@
<?php
// This file defines the Roblox.Web.Catalog.NoPriceStatus enum. Though this is a class, please treat it like an enum and **ONLY** reference it statically.
namespace Roblox\Web\Catalog;
class NoPriceStatus {
public const Free = "Free";
public const OffSale = "OffSale";
public const NoResellers = "NoResellers";
}
// EOF

View File

@ -0,0 +1,39 @@
<?php
// This file defines the Roblox.Web.Mvc.ThrottlingFilterAttribute class. Originally housed in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Web\Roblox.Web.Mvc\FilterAttributes\ThrottlingFilterAttribute.cs.
namespace Roblox\Web\Mvc;
class ThrottlingFilterAttribute {
function __construct() {
}
function OnActionExecuting(/*ActionExecutingContext*/ $filterContext) {
/*
at Roblox.Web.Mvc.ThrottlingFilterAttribute.VerifyRequestThrottling(ActionExecutingContext filterContext) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Web\Roblox.Web.Mvc\FilterAttributes\ThrottlingFilterAttribute.cs:line 44
at Roblox.Web.Mvc.ThrottlingFilterAttribute.OnActionExecuting(ActionExecutingContext filterContext) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Web\Roblox.Web.Mvc\FilterAttributes\ThrottlingFilterAttribute.cs:line 31
*/
}
function VerifyRequestThrottling(/*ActionExecutingContext*/ $filterContext) {
/*
at Roblox.Web.WebThrottlingManager.IsRequestAllowed(List`1 requestsForCurrentContext, DateTime executionDateTime, RequesterType requester, String actionName) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Web\Roblox.Web\Throttling\WebThrottlingManager.cs:line 129
at Roblox.Web.Mvc.ThrottlingFilterAttribute.OnActionExecuting(ActionExecutingContext filterContext) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Web\Roblox.Web.Mvc\FilterAttributes\ThrottlingFilterAttribute.cs:line 31
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
*/
}
}
// EOF

View File

@ -0,0 +1,20 @@
<?php
// This file defines the Roblox.Web.WebThrottlingManager class. Originally housed in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Web\Roblox.Web\Throttling\WebThrottlingManager.cs.
namespace Roblox\Web;
class WebThrottlingManager {
function __construct() {
}
function IsRequestAllowed(/*List`1*/ $requestsForCurrentContext, /*DateTime*/ $executionDateTime, /*RequesterType*/ $requester, /*String*/ $actionName) {
/*
at Roblox.Platform.Throttling.IpRequest.IsEnabled()
at Roblox.Web.WebThrottlingManager.IsRequestAllowed(List`1 requestsForCurrentContext, DateTime executionDateTime, RequesterType requester, String actionName) in C:\teamcity-agent\work\a6371342c4f9b6ec\Assemblies\Web\Roblox.Web\Throttling\WebThrottlingManager.cs:line 129
*/
}
}
// EOF

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
1, 6, 3, 172

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
<?php
header("Content-Type: application/json");
?>
{"FFlagUS30484p3":"True","FFlagDirectXEnable":"True","FFlagDirectX11Enable":"False","FFlagRenderFixFog":"True","FFlagStudioCSGAssets":"True","FFlagCSGLoadBlocking":"False","FFlagCSGPhysicsLevelOfDetailEnabled":"True","FFlagFormFactorDeprecated":"False","FFlagLuaChatFiltering":"False","FFlagFontSmoothScalling":"True","FFlagAlternateFontKerning":"True","FFlagFontSourceSans":"True","FFlagRenderNewFonts":"True","FFlagDMFeatherweightEnabled":"True","FFlagRenderFeatherweightEnabled":"True","FFlagRenderFeatherweightUseGeometryGenerator":"True","FFlagScaleExplosionLifetime":"True","FFlagEnableNonleathalExplosions":"True","DFFlagHttpCurlHandle301":"True","FFlagSearchToolboxByDataModelSearchString":"True","FFlagClientABTestingEnabled":"False","FFlagStudioSmoothTerrainForNewPlaces":"True","FFlagUsePGSSolver":"True","FFlagSimplifyKeyboardInputPath":"False","FFlagNewInGameDevConsole":"True","FFlagTextFieldUTF8":"True","FFlagTypesettersReleaseResources":"True","FFlagLuaBasedBubbleChat":"True","FFlagUseCanManageApiToDetermineConsoleAccess":"False","FFlagConsoleCodeExecutionEnabled":"True","DFFlagCustomEmitterInstanceEnabled":"True","FFlagCustomEmitterRenderEnabled":"True","FFlagCustomEmitterLuaTypesEnabled":"True","FFlagStudioInSyncWebKitAuthentication":"False","FFlagGlowEnabled":"True","FFlagUseNewAppBridgeInputWindows":"False","DFFlagUseNewFullscreenLogic":"True","FFlagRenderMaterialsOnMobile":"True","FFlagMaterialPropertiesEnabled":"True","FFlagSurfaceLightEnabled":"True","FFlagStudioPropertyErrorOutput":"True","FFlagAnchoredSendPositionUpdate":"True","DFFlagFixShapeChangeBug":"True","DFFlagFixFallenPartsNotDeleted":"True","FFlagFMODSoundChannels":"2048","FFlagDebugBreakOnFMODErrors":"False","DFFlagUseR15Character":"True","DFFlagEnableHipHeight":"True","DFFlagUseStarterPlayerCharacter":"True","DFFlagFilteringEnabledDialogFix":"True","FFlagCSGMeshColorToolsEnabled":"True","FFlagStudioEnableGameAnimationsTab":"True","DFFlagScriptExecutionContextApi":"True","FFlagStudioVariableIntellesense":"True","FFlagStudioIntellisenseAllowUnderscore":"True","FFlagLuaDebugger":"True","FFlagUseUserListMenu":"True","FFlagEnableSetCoreTopbarEnabled":"True","FFlagUseInGameTopBar":"True","FFlagPlayerDropDownEnabled":"True","FFlagSetCoreMoveChat":"True","FFlagSetCoreDisableChatBar":"False","FFlagRemoveUnusedPhysicsSenders":"True","FFlagRemoveInterpolationReciever":"True","FFlagGraphicsGL3":"True","DFFlagUserUseLuaVehicleController":"True","FFlagTextBoxUnicodeAware":"True","FFlagLetLegacyScriptsWork":"True","FFlagDep":"True","DFFlagDisableBackendInsertConnection":"True","FFlagPhysicsAnalyzerEnabled":"True","DFFlagGetGroupsAsyncEnabled":"True","DFFlagGetFocusedTextBoxEnabled":"True","DFFlagTextBoxIsFocusedEnabled":"True","DFFlagGetCharacterAppearanceEnabled":"False","FFlagLoadIEquipableWithR15":"True","FFlagUnlimitedRemoteTextureSize":"True","FFlagRccDisconnectPreauthFailure":"True","DFFlagFixAnchoredSeatingPosition":"True","DFFlagFixSeatingWhileSitting":"True","DFFlagMinMaxDistanceEnabled":"True","DFFlagRollOffModeEnabled":"True","FFlagRenderVR":"False","FFlagPhysPropConstructFromMaterial":"True","FFlagRenderLowLatencyLoop":"False","FFlagRenderThumbModelReflectionsFix":"True","FFlagEnableForceHantLocalization":"False","FFlagEnableLocalizationHantFallback":"True","DFFlagScriptContextGuardAgainstCStackOverflow":"True","DFFlagTextScaleDontWrapInWords":"False","FFlagCheckNullptrOnDestroyDescendantsOfType":"True","FFlagResetMouseCursorOnToolUnequip":"True","FFlagOnScreenProfiler":"True","DFFlagNamesOccludedAsDefault":"True","DFFlagMaterialPropertiesEnabled":"True","SFFlagMaterialPropertiesNewIsDefault":"True","FFlagPGSSolverDefaultOnNewPlaces":"True","FFlagAnalyzerGroupUIEnabled":"True","FFlagModifyDefaultMaterialProperties":"True","DFFlagUseTerrainCustomPhysicalProperties":"True","FFlagFixMeshOffset":"True"}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
<?php
header("Content-Type: application/json");
?>
{
"ShowInstallSuccessPrompt":"True"
}

View File

@ -0,0 +1,4 @@
<?php
header("Content-Type: application/json");
?>
{}

View File

@ -0,0 +1,4 @@
<?php
header("Content-Type: application/json");
?>
{"data":["0.235.0pcplayer"]}

10
api/www/.htaccess Normal file
View File

@ -0,0 +1,10 @@
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$"
RewriteRule .* - [L,R=404]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php/[? ].*$"
RewriteRule .* - [L,R=404]
RewriteRule ^game/players/(.+) game/playersLogic.php [L]
RewriteRule ^users/(.+) userLogic.php [L]

View File

@ -0,0 +1,6 @@
<?php
header("content-type: application/json");
echo json_encode(array(
"ChatFilter"=>"whitelist"
));
?>

0
api/www/index.php Normal file
View File

View File

@ -0,0 +1,36 @@
<?php
header("content-type: application/json; charset=utf-8");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://api.roblox.com/marketplace/productinfo?assetId=" . $_GET["assetId"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$output = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
curl_close($ch);
$headers = array();
$header_text = substr($output, 0, strpos($output, "\r\n\r\n"));
foreach (explode("\r\n", $header_text) as $i => $line){
if ($i === 0){
$headers['http_code'] = $line;
}else{
list($key, $value) = explode(': ', $line);
$headers[$key] = $value;
}
}
if($headers["http_code"]=="HTTP/1.1 200 OK"){
$body = substr($output, $header_size);
if(isset($headers["content-encoding"])){
header("content-encoding: gzip");
}
http_response_code(200);
echo $body;
}else{
http_response_code(400);
}
?>

View File

@ -0,0 +1,20 @@
<?php
$failed = "Failed to filter chat.";
$dataArray = array(
"data"=>array(
"white"=>$failed,
"black"=>$failed
)
);
if(isset($_POST["text"])){
foreach(array("white","black") as &$filter){
$dataArray["data"][$filter] = $_POST["text"];
}
}
echo json_encode($dataArray);
?>

View File

@ -0,0 +1,4 @@
<?php
header("content-type:application/json");
?>
false

View File

@ -0,0 +1 @@
{"r15Morphing":"True"}

View File

@ -0,0 +1 @@
true

4
api/www/userLogic.php Normal file
View File

@ -0,0 +1,4 @@
<?php
header("content-type: application/json");
?>
{"Success":true,"CanManage":true}

8
assetgame/www/.htaccess Normal file
View File

@ -0,0 +1,8 @@
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$"
RewriteRule .* - [L,R=404]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php/[? ].*$"
RewriteRule .* - [L,R=404]

19
assetgame/www/asset.php Normal file
View File

@ -0,0 +1,19 @@
<?php
if(isset($_GET["id"])){
$url = "https://assetdelivery.roblox.com/v1/asset/?id=" . $_GET["id"];
if(isset($_GET["version"])){
$url = $url . "&version=" . $_GET["version"];
}
//$options = array('http' => array('user_agent' => 'Roblox/WinInet'));
//$context = stream_context_create($options);
//$asset = @file_get_contents($url, false, $context);
if($url){
//$asset = json_decode($asset,true)["location"];
header("location: $url");
}else{
http_response_code(404);
}
}else{
http_response_code(400);
}
?>

View File

@ -0,0 +1,4 @@
<?php
header("content-type: text/html; charset=utf-8");
?>
<Value Type="boolean">false</Value>

View File

@ -0,0 +1,40 @@
<?php
$url = "";
if(isset($_GET["sid"])){
$url = "http://assetgame.roblox.com/Game/Tools/InsertAsset.ashx?sid=" . $_GET["sid"];
}else{
$url = "http://assetgame.roblox.com/Game/Tools/InsertAsset.ashx?nsets=" . $_GET["nsets"] . "&type=user&userid=" . $_GET["userid"];
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$output = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
curl_close($ch);
$headers = array();
$header_text = substr($output, 0, strpos($output, "\r\n\r\n"));
foreach (explode("\r\n", $header_text) as $i => $line){
if ($i === 0){
$headers['http_code'] = $line;
}else{
list($key, $value) = explode(': ', $line);
$headers[$key] = $value;
}
}
if($headers["http_code"]=="HTTP/1.1 200 OK"){
$body = substr($output, $header_size);
if(isset($headers["content-encoding"])){
header("content-encoding: gzip");
}
http_response_code(200);
echo $body;
}else{
http_response_code(400);
}
?>

View File

@ -0,0 +1,175 @@
<?php
header("Content-Type: text/plain; charset=utf-8");
$newline = "
";
ob_start();
?>
-- Prepended to Edit.lua and Visit.lua and Studio.lua and PlaySolo.lua--
function ifSeleniumThenSetCookie(key, value)
if false then
game:GetService("CookiesService"):SetCookieValue(key, value)
end
end
ifSeleniumThenSetCookie("SeleniumTest1", "Inside the visit lua script")
pcall(function() game:SetPlaceID(0) end)
pcall(function() game:SetUniverseId(0) end)
visit = game:GetService("Visit")
local message = Instance.new("Message")
message.Parent = workspace
message.archivable = false
game:GetService("ScriptInformationProvider"):SetAssetUrl("http://assetgame.platinus2016.ga/Asset/")
game:GetService("ContentProvider"):SetThreadPool(16)
pcall(function() game:GetService("InsertService"):SetFreeModelUrl("http://assetgame.platinus2016.ga/Game/Tools/InsertAsset.ashx?type=fm&q=%s&pg=%d&rs=%d") end) -- Used for free model search (insert tool)
pcall(function() game:GetService("InsertService"):SetFreeDecalUrl("http://assetgame.platinus2016.ga/Game/Tools/InsertAsset.ashx?type=fd&q=%s&pg=%d&rs=%d") end) -- Used for free decal search (insert tool)
ifSeleniumThenSetCookie("SeleniumTest2", "Set URL service")
settings().Diagnostics:LegacyScriptMode()
game:GetService("InsertService"):SetBaseSetsUrl("http://assetgame.platinus2016.ga/Game/Tools/InsertAsset.ashx?nsets=10&type=base")
game:GetService("InsertService"):SetUserSetsUrl("http://assetgame.platinus2016.ga/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d")
game:GetService("InsertService"):SetCollectionUrl("http://assetgame.platinus2016.ga/Game/Tools/InsertAsset.ashx?sid=%d")
game:GetService("InsertService"):SetAssetUrl("http://assetgame.platinus2016.ga/Asset/?id=%d")
game:GetService("InsertService"):SetAssetVersionUrl("http://assetgame.platinus2016.ga/Asset/?assetversionid=%d")
pcall(function() game:GetService("SocialService"):SetFriendUrl("http://assetgame.platinus2016.ga/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end)
pcall(function() game:GetService("SocialService"):SetBestFriendUrl("http://assetgame.platinus2016.ga/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end)
pcall(function() game:GetService("SocialService"):SetGroupUrl("http://assetgame.platinus2016.ga/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end)
pcall(function() game:GetService("SocialService"):SetGroupRankUrl("http://assetgame.platinus2016.ga/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end)
pcall(function() game:GetService("SocialService"):SetGroupRoleUrl("http://assetgame.platinus2016.ga/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end)
pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl("http://assetgame.platinus2016.ga/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end)
pcall(function() game:GetService("MarketplaceService"):SetProductInfoUrl("https://api.platinus2016.ga/marketplace/productinfo?assetId=%d") end)
pcall(function() game:GetService("MarketplaceService"):SetDevProductInfoUrl("https://api.platinus2016.ga/marketplace/productDetails?productId=%d") end)
pcall(function() game:GetService("MarketplaceService"):SetPlayerOwnsAssetUrl("https://api.platinus2016.ga/ownership/hasasset?userId=%d&assetId=%d") end)
pcall(function() game:SetCreatorID(0, Enum.CreatorType.User) end)
ifSeleniumThenSetCookie("SeleniumTest3", "Set creator ID")
pcall(function() game:SetScreenshotInfo("") end)
pcall(function() game:SetVideoInfo("") end)
function registerPlay(key)
if true and game:GetService("CookiesService"):GetCookieValue(key) == "" then
game:GetService("CookiesService"):SetCookieValue(key, "{ \"userId\" : 0, \"placeId\" : 0, \"os\" : \"" .. settings().Diagnostics.OsPlatform .. "\"}")
end
end
pcall(function()
registerPlay("rbx_evt_ftp")
delay(60*5, function() registerPlay("rbx_evt_fmp") end)
end)
ifSeleniumThenSetCookie("SeleniumTest4", "Exiting SingleplayerSharedScript")-- SingleplayerSharedScript.lua inserted here --
pcall(function() settings().Rendering.EnableFRM = true end)
pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end)
game:GetService("ChangeHistoryService"):SetEnabled(false)
pcall(function() game:GetService("Players"):SetBuildUserPermissionsUrl("http://assetgame.platinus2016.ga//Game/BuildActionPermissionCheck.ashx?assetId=0&userId=%d&isSolo=true") end)
workspace:SetPhysicsThrottleEnabled(true)
local addedBuildTools = false
local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui")
local inStudio = false or false
function doVisit()
message.Text = "Loading Game"
if false then
if false then
success, err = pcall(function() game:Load("") end)
if not success then
message.Text = "Could not teleport"
return
end
end
else
if false then
game:Load("")
pcall(function() visit:SetUploadUrl("") end)
else
pcall(function() visit:SetUploadUrl("") end)
end
end
message.Text = "Running"
game:GetService("RunService"):Run()
message.Text = "Creating Player"
if false or false then
player = game:GetService("Players"):CreateLocalPlayer(0)
if not inStudio then
player.Name = [====[Guest <?= rand(1000,9999) ?>]====]
end
else
player = game:GetService("Players"):CreateLocalPlayer(0)
end
player.CharacterAppearance = "http://assetgame.platinus2016.ga/Asset/CharacterFetch.ashx?userId=1&placeId=0"
local propExists, canAutoLoadChar = false
propExists = pcall(function() canAutoLoadChar = game.Players.CharacterAutoLoads end)
if (propExists and canAutoLoadChar) or (not propExists) then
player:LoadCharacter()
end
message.Text = "Setting GUI"
player:SetSuperSafeChat(false)
pcall(function() player:SetUnder13(False) end)
pcall(function() player:SetMembershipType(None) end)
pcall(function() player:SetAccountAge(0) end)
if not inStudio and false then
message.Text = "Setting Ping"
visit:SetPing("http://assetgame.platinus2016.ga/Game/ClientPresence.ashx?version=old&PlaceID=0", 120)
message.Text = "Sending Stats"
game:HttpGet("")
end
end
success, err = pcall(doVisit)
if not inStudio and not addedBuildTools then
local playerName = Instance.new("StringValue")
playerName.Name = "PlayerName"
playerName.Value = player.Name
playerName.RobloxLocked = true
playerName.Parent = screenGui
pcall(function() game:GetService("ScriptContext"):AddCoreScript(59431535,screenGui,"BuildToolsScript") end)
addedBuildTools = true
end
if success then
message.Parent = nil
else
print(err)
if not inStudio then
if false then
pcall(function() visit:SetUploadUrl("") end)
end
end
wait(5)
message.Text = "Error on visit: " .. err
if not inStudio then
if false then
game:HttpPost("https://data.platinus2016.ga/Error/Lua.ashx", "Visit.lua: " .. err)
end
end
end
<?php
$data = ob_get_clean();
$signature;
$key = file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/../../key.pem");
openssl_sign($newline.$data, $signature, $key, OPENSSL_ALGO_SHA1);
echo sprintf("%s%%%s%%%s", "--rbxsig", base64_encode($signature), $newline.$data);
?>

6
changelog Normal file
View File

@ -0,0 +1,6 @@
network/streaming.h
line 167 replaced with org: "if (remoteChecksum == 0)"
network/clientreplicator.cpp
line 507 commented out
commented out all references to HATE_RETURN_CHECK
commented something in application.cpp

8
dbcon.php Normal file
View File

@ -0,0 +1,8 @@
<?php
try {
$conn = new PDO("mysql:host=localhost:3306;dbname=XlXi16", "XlXi16", "v2g4ZtKcWLbZm6P2");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
header("Content-Type: application/json");
exit('{"error":"Failed to connect to database."}');
}

View File

@ -0,0 +1,8 @@
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$"
RewriteRule .* - [L,R=404]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php/[? ].*$"
RewriteRule .* - [L,R=404]

View File

@ -0,0 +1,38 @@
<?php
header("Content-Type: application/json");
require_once($_SERVER["DOCUMENT_ROOT"]."/../../dbcon.php");
if(isset($_SERVER["HTTP_CF_CONNECTING_IP"])){
$ip=$_SERVER["HTTP_CF_CONNECTING_IP"];
if(isset($_GET["key"])&&isset($_GET["placeId"])&&isset($_GET["scope"])){
$query = "SELECT * FROM `persistence` WHERE `ip`=\"$ip\" AND `type`=\"sorted\" AND `placeid`=:pid AND `key`=:key AND `scope`=:scope";
$key = (string)$_GET["key"];;
$pid = (int)$_GET["placeId"];;
$scope = (string)$_GET["scope"];
$limit = 0;
$limitSet = isset($_GET["pageSize"]);
if($limitSet){
$query = $query . " LIMIT :limit";
$limit = (int)$_GET["pageSize"];
}
$stmt = $conn->prepare($query);
$stmt->bindParam(':key', $key, PDO::PARAM_STR);
$stmt->bindParam(':pid', $pid, PDO::PARAM_INT);
$stmt->bindParam(':scope', $scope, PDO::PARAM_STR);
if($limitSet){
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
}
$stmt->execute();
$entries = [];
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($result as &$data){
array_push($entries,array("Target"=>$data["target"],"Value"=>$data["value"]));
}
$conn = null;
exit(json_encode(["data"=>array("Entries"=>$entries)], JSON_NUMERIC_CHECK));
}
exit(json_encode(["error"=>"This driver can't. He just can't. Don't push him."]));
}
exit(json_encode(["error"=>"Failed to fetch client address."]));
?>

View File

@ -0,0 +1,58 @@
<?php
header("Content-Type: application/json");
require_once($_SERVER["DOCUMENT_ROOT"]."/../../dbcon.php");
function removeEverythingBefore($in, $before) {
$pos = strpos($in, $before);
return $pos !== FALSE
? substr($in, $pos + strlen($before), strlen($in))
: "";
}
function removeEverythingAfter($in, $before) {
$pos = strpos($in, $before);
return $pos !== FALSE
? substr($in, $pos - strlen($before), strlen($in))
: "";
}
if(isset($_SERVER["HTTP_CF_CONNECTING_IP"])){
$ip=$_SERVER["HTTP_CF_CONNECTING_IP"];
if(isset($_GET["placeId"])&&isset($_GET["scope"])&&isset($_GET["type"])){
$values=[];
$input = file_get_contents('php://input');
$qkeys = explode("&",substr($input, 1));
$tempTable = array();
foreach($qkeys as &$val){
$after = substr($val, 0, strpos($val, "="));
$tempTable[$after]=removeEverythingBefore($val,"=");
}
$qkeys = $tempTable;
$tempTable = null;
if(isset($qkeys['qkeys[0].key'])&&isset($qkeys['qkeys[0].target'])){
$key = (string)urldecode($qkeys['qkeys[0].key']);
$pid = (int)$_GET["placeId"];
$scope = (string)urldecode($_GET["scope"]);
$type = (string)urldecode($_GET["type"]);
$target = (string)urldecode($qkeys['qkeys[0].target']);
$stmt = $conn->prepare("SELECT * FROM `persistence` WHERE `ip`=\"$ip\" AND `placeId`=:pid AND `scope`=:scope AND `type`=:type AND `key`=:key AND `target`=:target");
$stmt->bindParam(':key', $key, PDO::PARAM_STR);
$stmt->bindParam(':pid', $pid, PDO::PARAM_INT);
$stmt->bindParam(':scope', $scope, PDO::PARAM_STR);
$stmt->bindParam(':type', $type, PDO::PARAM_STR);
$stmt->bindParam(':target', $target, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($result as &$data){
array_push($values,array("Value"=>$data["value"],"Scope"=>$data["scope"],"Key"=>$data["key"],"Target"=>$data["target"]));
}
$conn=null;
exit(json_encode(["data"=>$values], JSON_NUMERIC_CHECK));
}
}
exit(json_encode(["error"=>"This driver can't. He just can't. Don't push him."]));
}
exit(json_encode(["error"=>"Failed to fetch client address."]));
?>

View File

@ -0,0 +1,48 @@
<?php
header("Content-Type: application/json");
require_once($_SERVER["DOCUMENT_ROOT"]."/../../dbcon.php");
if(isset($_SERVER["HTTP_CF_CONNECTING_IP"])){
$ip=$_SERVER["HTTP_CF_CONNECTING_IP"];
if(isset($_POST["value"])&&isset($_GET["key"])&&isset($_GET["placeId"])&&isset($_GET["scope"])&&isset($_GET["type"])&&isset($_GET["target"])){
$values=[];
$key = (string)$_GET["key"];
$pid = (int)$_GET["placeId"];
$scope = (string)$_GET["scope"];
$type = (string)$_GET["type"];
$target = (string)$_GET["target"];
$query = "INSERT INTO `persistence`(`id`, `key`, `ip`, `placeId`, `type`, `scope`, `target`, `value`) VALUES (NULL,:key,\"$ip\",:pid,:type,:scope,:target,:val)";
$queryChanged=false;
$where = "WHERE `ip`=\"$ip\" AND `placeId`=:pid AND `scope`=:scope AND `type`=:type AND `key`=:key AND `target`=:target";
$stmt = $conn->prepare("SELECT * FROM `persistence` $where");
$stmt->bindParam(':key', $key, PDO::PARAM_STR);
$stmt->bindParam(':pid', $pid, PDO::PARAM_INT);
$stmt->bindParam(':scope', $scope, PDO::PARAM_STR);
$stmt->bindParam(':type', $type, PDO::PARAM_STR);
$stmt->bindParam(':target', $target, PDO::PARAM_STR);
$stmt->execute();
if($stmt->rowCount()>0){
$query = "UPDATE `persistence` SET `value`=:val $where";
}
$stmt = $conn->prepare($query);
$stmt->bindParam(':key', $key, PDO::PARAM_STR);
$stmt->bindParam(':pid', $pid, PDO::PARAM_INT);
$stmt->bindParam(':scope', $scope, PDO::PARAM_STR);
$stmt->bindParam(':type', $type, PDO::PARAM_STR);
$stmt->bindParam(':target', $target, PDO::PARAM_STR);
$stmt->bindParam(':val', $_POST["value"], PDO::PARAM_STR);
$stmt->execute();
$conn=null;
$values = [array("Value"=>$_POST["value"],"Scope"=>$scope,"Key"=>$key,"Target"=>$target)];
exit(json_encode(["data"=>$values], JSON_NUMERIC_CHECK));
}
exit(json_encode(["error"=>"This driver can't. He just can't. Don't push him."]));
}
exit(json_encode(["error"=>"Failed to fetch client address."]));
?>

3
key.pem Normal file
View File

@ -0,0 +1,3 @@
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQCfW3hby9fjryoBB4VqOCFnJOJSeiNHOQu/STmHj2ykoijlaa23k7rzpL3Sx7GylzbmNwD+jHoIvtgsV9bhfx9pHLNzht3LjD7w89MyyvzLZl6Uw9u8W0P29sSo2WePqpwSeJr5L73X/TDSBSPT9LJ4W74db3ZGI2fOBv3rNw29WQIDAQABAoGAFYxq5A7WbKVdCrKXqdtZOPdV201Ew/bEzeL68ofEaya6XPtDUFWbrCKUwJHcR4gHFm5Nph4cyl30IVrnZaqo9nkJpOs+mzCm9Shm7o3Y7KAvYK3rkAa/gIcX3xXYgvOtEcnpWvH05a2NMG75cqeMcgPZWdZpRwZeAx2ACmGx6LkCQQDTuxM77LJh4mw3dXB0wx+ADceP9xNjAC3RKAnZmOhTvzZ5TclhKK8+tss52hzTggCI88toXLWqkEF1f8BFyLpTAkEAwK0YzLe3JKMuukikyplGakXqOdZGkgRetWbT3w+C/lnmQLou2DxP5wJu5kWujNmHlmBQEfyxeMEW8/cmylIsIwJAU+yOFi2fE0+FZ4IkXhPNk5tio7zisVYr0wDUzqxeQnvDYtejX+CZfflEmpzK2kdoYOCJmsdMttvRJnrJwp9qwwJAbaeVv5ym3HEKfPYu4ybMTlsv7G6ohx15kR/OYNqBIKSlSB0t396jUsOtvdvWdU6vvcNejn4TureZiosURnzxpQJAaJ2NN/a6DC00exhGAtieNmBLE275OIBRVBrJ70SRSbfcFANfvxhx8yaT+1+yyuZtQfT5gfb5FEZxMdFQkQfkGg==
-----END RSA PRIVATE KEY-----

8
setup/.htaccess Normal file
View File

@ -0,0 +1,8 @@
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$"
RewriteRule .* - [L,R=404]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php/[? ].*$"
RewriteRule .* - [L,R=404]

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
1, 6, 3, 172

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
1, 6, 3, 172

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More