diff --git a/core/config.php b/core/config.php index 073c80e..9c01cc2 100644 --- a/core/config.php +++ b/core/config.php @@ -21,10 +21,10 @@ if($devmode) { // if ur gonna use the availablegameservers array please pick a random gameserver from the array or else we would put all stress on 1 gameserver $AvailableGameservers = [ - "ip goes here", - "ahh help!!" + "1" => "127.0.0.1" ]; // No ports? NO BITCHES +// default is 64989 NOOB $gameSettings = [ "privatekey" => "-----BEGIN RSA PRIVATE KEY----- diff --git a/game/Join.php b/game/Join.php index d8f5450..f8325cb 100644 --- a/game/Join.php +++ b/game/Join.php @@ -4,68 +4,70 @@ session_start(); require_once '../core/config.php'; require_once '../core/classes/user.php'; +$privatekey = $gameSettings["privatekey"]; + header('content-type:application/json'); -$user = new User($con, $_SESSION['user'] ?? 0); -function sign($script, $key) { -$signature = ""; -openssl_sign($script, $signature, $key, OPENSSL_ALGO_SHA1); -return base64_encode($signature); +function authticket($id, $name, $charapp, $jobid, $privatekey) { + $ticket = $id . "\n" . $jobid . "\n" . date('n\/j\/Y\ g\:i\:s\ A'); + openssl_sign($ticket, $sig, $privatekey, OPENSSL_ALGO_SHA1); + $sig = base64_encode($sig); + $ticket2 = $id . "\n" . $name . "\n" . $charapp . "\n". $jobid . "\n" . date('n\/j\/Y\ g\:i\:s\ A'); + openssl_sign($ticket2, $sig2, $privatekey, OPENSSL_ALGO_SHA1); + $sig2 = base64_encode($sig2); + $final = date('n\/j\/Y\ g\:i\:s\ A') . ";" . $sig2 . ";" . $sig; + return($final); } - -/* -$joinUser = [ - "id" => $_SESSION['user'], - "username" => $user->getUsername(), - "mship" => "None" -];*/ - -$joinUser = [ - "id" => rand(1,5), - "username" => "Grubloxxer-".getrandmax(), - "mship" => "None" -]; - -$place = [ - "id" => $_GET["gameid"] -]; - -$placeCreator = [ - "id" => 6945435215, - "username" => "PlaceCreator", -]; - -$charapp = $site["url"]."/v1.1/avatar-fetch?userId=".$joinUser["id"]."&placeId=".$place["id"]; - -$server = [ - "ip" => $_GET["ip"], - "port" => $_GET["port"] -]; - -$joinscript = [ +$token = $_GET["token"]; +$jobid = $_GET["jobid"]; +$checkjob = $con->prepare('SELECT COUNT(*) FROM jobs WHERE jobid=:jobid'); // bruh im too lazy to actually make a auto token generator thing and a table so rn this will be temporary +$checkjob->bindParam(':jobid', $jobid); +$checkjob->execute(); +$anothermomentoftruth = $checkjob->fetchColumn(); +$checkuser = $con->prepare('SELECT COUNT(*) FROM users WHERE token=:token'); // another temp workaround im gonna do token system and stuff whenever i feel like it +$checkuser->bindParam(':token', $token); +$checkuser->execute(); +$anotheranothermomentoftruth = $checkuser->fetchColumn(); +if ($anothermomentoftruth == 1 && $anotheranothermomentoftruth == 1) { + $getstuff = $con->prepare('SELECT id,username FROM users WHERE token=:token'); + $getstuff->bindParam(':token', $token); + $getstuff->execute(); + $china = $getstuff->fetch(PDO::FETCH_BOTH); + $id = $china['id']; + $username = $china['username']; + $jobstuff = $con->prepare('SELECT jobid,placeid,port FROM jobs WHERE jobid=:jobid'); + $jobstuff->bindParam(':jobid', $jobid); + $jobstuff->execute(); + $actualthing = $jobstuff->fetch(PDO::FETCH_BOTH); + $jobid = $actualthing['jobid']; + $placeid = $actualthing['placeid']; + $port = $actualthing['port']; + // still need to add charapp and membership + $authticket = authticket($id, $username, "", $jobid, $gameSettings["privatekey"]); + $joinscript = [ "ClientPort" => 0, - "MachineAddress" => $server["ip"], - "ServerPort" => $server["port"], + "MachineAddress" => $AvailableGameservers["1"], + "ServerPort" => $port, "PingUrl" => "", "PingInterval" => 20, - "UserName" => $joinUser["username"], + "UserName" => $username, "SeleniumTestMode" => false, - "UserId" => $joinUser["id"], + "UserId" => $id, "SuperSafeChat" => false, - "CharacterAppearance" => $charapp, - "ClientTicket" => "", - "GameId" => $place["id"], - "PlaceId" => $place["id"], + "CharacterAppearance" => "", + "ClientTicket" => $authticket, + "GameId" => $placeid, + "PlaceId" => $placeid, "MeasurementUrl" => "", "WaitingForCharacterGuid" => "26eb3e21-aa80-475b-a777-b43c3ea5f7d2", - "BaseUrl" => $site["url"]."/", + "BaseUrl" => "http://" . $soapcfg['url'] . "/", "ChatStyle" => "ClassicAndBubble", "VendorId" => "0", "ScreenShotInfo" => "", "VideoInfo" => "", - "CreatorId" => $placeCreator["id"], + "CreatorId" => "", "CreatorTypeEnum" => "User", - "MembershipType" => $joinUser["mship"], - "AccountAge" => 3000000, + "MembershipType" => "None", + "AccountAge" => 365, "CookieStoreFirstTimePlayKey" => "rbx_evt_ftp", "CookieStoreFiveMinutePlayKey" => "rbx_evt_fmp", "CookieStoreEnabled" => true, @@ -78,10 +80,50 @@ $joinscript = [ "BrowserTrackerId" => 0, "UsePortraitMode" => false, "FollowUserId" => 0, - "characterAppearanceId" => $joinUser["id"] -]; + "characterAppearanceId" => $id + ]; +} else { + header("Location: /"); +} +$user = new User($con, $_SESSION['user'] ?? 0); +function sign($script, $key) { +$signature = ""; +openssl_sign($script, $signature, $key, OPENSSL_ALGO_SHA1); +return base64_encode($signature); +} + +// IF U WROTE THIS SHIT BELOW THEN KYS + +/* +$joinUser = [ + "id" => $_SESSION['user'], + "username" => $user->getUsername(), + "mship" => "None" +];*/ + +//$joinUser = [ +// "id" => rand(1,5), +// "username" => "Grubloxxer-".getrandmax(), +// "mship" => "None" +//]; + +//$place = [ +// "id" => $_GET["gameid"] +//]; + +//$placeCreator = [ +// "id" => 6945435215, +// "username" => "PlaceCreator", +//]; + +//$charapp = $site["url"]."/v1.1/avatar-fetch?userId=".$joinUser["id"]."&placeId=".$place["id"]; + +//$server = [ +// "ip" => $_GET["ip"], +// "port" => $_GET["port"] +//]; $data = json_encode($joinscript, JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK); $signature = sign("\r\n" . $data, $gameSettings["privatekey"]); exit("--rbxsig%". $signature . "%\r\n" . $data); -?> \ No newline at end of file +?> diff --git a/game/PlaceLauncher.php b/game/PlaceLauncher.php index 0fc5d1f..e215a0c 100644 --- a/game/PlaceLauncher.php +++ b/game/PlaceLauncher.php @@ -1,23 +1,45 @@ "Wait", - 2 => "Working", + 1 => "0 or 1 is not an error - it is a sign that we should wait", + 2 => "Success", 3 => "Disabled", 4 => "Failed to start", 5 => "Game ended", - 6 => "Full" + 6 => "GAME_FULL", + 10 => "USER_LEFT" ]; -$status = 2; -$ip = "127.0.0.1"; -$port = 53640; -$job = 69; -$response = [ +$token = $_GET["token"]; +$checkifuser = $con->prepare('SELECT COUNT(*) FROM users WHERE token=:token'); // bruh im too lazy to actually make a auto token generator thing and a table so rn this will be temporary +$checkifuser->bindParam(':token', $token); +$checkifuser->execute(); +$momentoftruth = $checkifuser->fetchColumn(); +if ($momentoftruth == 1) { + $status = "2"; + $ip = $AvailableGameservers[1]; + $port = 64989; + $PortForGame = ""; // also pls define this + $job = ""; // we will define this later when we start the job + $placeid = ""; // also define this + // JOB STARTING CODE GOES HERE PLS HELP NOLAN + // anyways after ur done with that + $sendthatjob = $con->prepare('INSERT INTO jobs (jobid, placeid, port) VALUES (:jobid, :placeid, :port)'); + $jobid = "not-null"; // this is just a temp workaround + $sendthatjob->bindParam(':jobid', $jobid); + $tempplaceid = "1818"; + $sendthatjob->bindParam(':placeid', $tempplaceid); // another temporary thing since we don't have random token generator thing and token table + $sendthatjob->bindParam(':port', $PortForGame); + $sendthatjob->execute(); + $response = [ "jobId" => $job, "status" => $status, - "joinScriptUrl" => $site["url"]."/game/join?ip=$ip&port=$port&gameid=1818&jobid=$job", - "authenticationUrl" => $site["url"]."/Login/Negotiate.ashx", - "authenticationTicket" => "1", + "joinScriptUrl" => "http://". $soapcfg['url'] ."/game/join?token=". $token ."&jobid=". $job, + "authenticationUrl" => "http://". $soapcfg['url'] ."/Login/Negotiate.ashx", + "authenticationTicket" => $token, "message" => $allstatus[$status] -]; -echo json_encode($response); \ No newline at end of file + ]; + echo json_encode($response); +} else { + header("Location: /"); +} diff --git a/grublox.sql b/grublox.sql index 4c7f279..3b6ebce 100644 --- a/grublox.sql +++ b/grublox.sql @@ -2,10 +2,10 @@ -- version 5.2.0 -- https://www.phpmyadmin.net/ -- --- Host: localhost --- Generation Time: Feb 12, 2023 at 08:53 PM --- Server version: 10.4.21-MariaDB-log --- PHP Version: 8.0.27 +-- Host: 127.0.0.1 +-- Generation Time: Feb 12, 2023 at 11:26 PM +-- Server version: 10.4.25-MariaDB +-- PHP Version: 8.1.10 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; @@ -104,6 +104,19 @@ CREATE TABLE `games` ( -- -------------------------------------------------------- +-- +-- Table structure for table `jobs` +-- + +CREATE TABLE `jobs` ( + `id` int(11) NOT NULL, + `jobid` varchar(50) NOT NULL, + `placeid` int(11) NOT NULL, + `port` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- -------------------------------------------------------- + -- -- Table structure for table `users` -- @@ -125,7 +138,7 @@ CREATE TABLE `users` ( -- INSERT INTO `users` (`id`, `username`, `password`, `date`, `token`, `description`, `money`, `lastPaid`, `admin`) VALUES -(1, 'qzip', '$2y$10$AS751CiLVhlbLKo.T9CSVuc81sk8OxC2aWCJzhXac/m8m.J3.pezi', '2023-02-05 18:52:48', NULL, NULL, 2460, '1676646382', 1); +(1, 'qzip', '$2y$10$AS751CiLVhlbLKo.T9CSVuc81sk8OxC2aWCJzhXac/m8m.J3.pezi', '2023-02-05 18:52:48', '1', NULL, 2460, '1676646382', 1); -- -- Indexes for dumped tables @@ -155,6 +168,12 @@ ALTER TABLE `friends` ALTER TABLE `games` ADD PRIMARY KEY (`id`); +-- +-- Indexes for table `jobs` +-- +ALTER TABLE `jobs` + ADD PRIMARY KEY (`id`); + -- -- Indexes for table `users` -- @@ -189,6 +208,12 @@ ALTER TABLE `friends` ALTER TABLE `games` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; +-- +-- AUTO_INCREMENT for table `jobs` +-- +ALTER TABLE `jobs` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; + -- -- AUTO_INCREMENT for table `users` --