Games\Game Impl

This commit is contained in:
Astrologies 2021-12-21 03:24:08 -05:00
parent 0db2c2e82e
commit 309f1df376
15 changed files with 287 additions and 307 deletions

View File

@ -6,15 +6,42 @@
namespace Alphaland\Games { namespace Alphaland\Games {
use Alphaland\Assets\Asset;
use Alphaland\Grid\RccServiceHelper;
use Exception;
use PDO; use PDO;
class Game class Game
{ {
public static function AllocatePort() //allocs a port between 50000 - 60000, verifies the port isn't in use by another game server
{
$port = 0;
do {
$port = rand(50000,60000); //port range forwarded on the server side (support up to 10000 jobs)
$s = $GLOBALS['pdo']->prepare("SELECT * FROM `open_servers` WHERE `port` = :p AND `status` < 2");
$s->bindParam(":p", $port, PDO::PARAM_STR);
$s->execute();
} while ($s->fetchColumn() != 0);
return $port;
}
public static function GenerateJobId()
{
$jobid = "";
do {
$jobid = gen_uuid();
$jobcheck = $GLOBALS['pdo']->prepare("SELECT COUNT(*) FROM `open_servers` WHERE `jobid` = :u");
$jobcheck->bindParam(":u", $jobid, PDO::PARAM_STR);
$jobcheck->execute();
} while ($jobcheck->fetchColumn() != 0);
return $jobid;
}
public static function SetChatStyle(int $assetid, int $enum) public static function SetChatStyle(int $assetid, int $enum)
{ {
if ($enum > -1 && $enum < 3) if ($enum > -1 && $enum < 3) {
{ $update = $GLOBALS['pdo']->prepare("UPDATE `assets` SET `ChatStyleEnum` = :enum WHERE `id` = :i");
$update = $GLOBALS['pdo']->prepare("UPDATE assets SET ChatStyleEnum = :enum WHERE id = :i");
$update->bindParam(":enum", $enum, PDO::PARAM_INT); $update->bindParam(":enum", $enum, PDO::PARAM_INT);
$update->bindParam(":i", $assetid, PDO::PARAM_INT); $update->bindParam(":i", $assetid, PDO::PARAM_INT);
$update->execute(); $update->execute();
@ -23,7 +50,7 @@ namespace Alphaland\Games {
public static function GetChatStyle(int $assetid) public static function GetChatStyle(int $assetid)
{ {
$enum = $GLOBALS['pdo']->prepare("SELECT ChatStyleEnum FROM assets WHERE id = :i"); $enum = $GLOBALS['pdo']->prepare("SELECT `ChatStyleEnum` FROM `assets` WHERE `id` = :i");
$enum->bindParam(":i", $assetid, PDO::PARAM_INT); $enum->bindParam(":i", $assetid, PDO::PARAM_INT);
$enum->execute(); $enum->execute();
return $enum->fetch(PDO::FETCH_OBJ)->ChatStyleEnum; return $enum->fetch(PDO::FETCH_OBJ)->ChatStyleEnum;
@ -31,8 +58,7 @@ namespace Alphaland\Games {
public static function ConvertChatStyle(int $chatstyle) public static function ConvertChatStyle(int $chatstyle)
{ {
switch ($chatstyle) switch ($chatstyle) {
{
case 0: case 0:
return "Classic"; return "Classic";
case 1: case 1:
@ -43,5 +69,190 @@ namespace Alphaland\Games {
return "ClassicAndBubble"; return "ClassicAndBubble";
} }
} }
public static function EnableWhitelist(int $placeid)
{
if (isOwner($placeid)) {
$configgame = $GLOBALS['pdo']->prepare("UPDATE `assets` SET `isGameWhitelisted` = 1 WHERE `id` = :assetid");
$configgame->bindParam(":assetid", $placeid, PDO::PARAM_INT);
$configgame->execute();
if ($configgame->rowCount() > 0) {
return true;
}
return false;
}
}
public static function UserAccess(int $placeid, int $userid)
{
if (Asset::GetAssetInfo($placeid)->isGameWhitelisted) { //game whitelisted
$whitelist = $GLOBALS['pdo']->prepare("SELECT COUNT(*) FROM `game_access` WHERE `placeid` = :pid AND `userid` = :uid");
$whitelist->bindParam(":pid", $placeid, PDO::PARAM_INT);
$whitelist->bindParam(":uid", $userid, PDO::PARAM_INT);
$whitelist->execute();
if ($whitelist->fetchColumn() > 0 || $userid == Asset::GetAssetInfo($placeid)->CreatorId) {
return true;
}
return false;
}
return true;
}
public static function WhitelistAddUser(int $placeid, int $userid)
{
if (isOwner($placeid)) {
if ($userid != Asset::GetAssetInfo($placeid)->CreatorId && !Game::UserAccess($placeid, $userid)) {
$whitelist = $GLOBALS['pdo']->prepare("INSERT INTO game_access(placeid, userid, whenWhitelisted) VALUES (:pid, :uid, UNIX_TIMESTAMP())");
$whitelist->bindParam(":pid", $placeid, PDO::PARAM_INT);
$whitelist->bindParam(":uid", $userid, PDO::PARAM_INT);
$whitelist->execute();
return true;
}
throw new Exception("Invalid user");
}
throw new Exception("Invalid permissions");
}
public static function WhitelistRemoveUser(int $placeid, int $userid)
{
if (isOwner($placeid)) {
if ($userid != Asset::GetAssetInfo($placeid)->CreatorId) {
$whitelistremove = $GLOBALS['pdo']->prepare("DELETE FROM game_access WHERE placeid = :pid AND userid = :uid");
$whitelistremove->bindParam(":pid", $placeid, PDO::PARAM_INT);
$whitelistremove->bindParam(":uid", $userid, PDO::PARAM_INT);
$whitelistremove->execute();
if ($whitelistremove->rowCount() > 0) {
return true;
}
throw new Exception("Failed to remove user");
}
throw new Exception("Invalid user");
}
throw new Exception("Invalid permissions");
}
public static function ClearWhitelist(int $placeid)
{
if (isOwner($placeid)) {
$whitelistclear = $GLOBALS['pdo']->prepare("DELETE FROM game_access WHERE placeid = :pid");
$whitelistclear->bindParam(":pid", $placeid, PDO::PARAM_INT);
$whitelistclear->execute();
if ($whitelistclear->rowCount() > 0)
{
return true;
}
}
return false;
}
public static function CloseDeadJobs(int $placeid)
{
$jobinfo = $GLOBALS['pdo']->prepare("UPDATE `open_servers` SET `status` = 2, `killedby` = 0, `whenDied` = UNIX_TIMESTAMP() WHERE `gameID` = :g AND (`lastPing` + 95) < UNIX_TIMESTAMP() AND (`status` = 0 OR `status` = 1)");
$jobinfo->bindParam(":g", $placeid, PDO::PARAM_INT);
$jobinfo->execute();
if ($jobinfo->rowCount() > 0) {
return true;
}
return false;
}
public static function JobClosed(string $jobid)
{
$job = $GLOBALS['pdo']->prepare("SELECT COUNT(*) FROM `open_servers` WHERE `jobid` = :j AND `status` = 2");
$job->bindParam(":j", $jobid, PDO::PARAM_STR);
$job->execute();
if ($job->fetchColumn() > 0) {
return true;
}
return false;
}
public static function TotalPlayerCount(int $placeid)
{
$job = $GLOBALS['pdo']->prepare("SELECT COUNT(*) FROM `game_presence` WHERE `placeid` = :placeid AND (`lastPing` + 50) > UNIX_TIMESTAMP()");
$job->bindParam(":placeid", $placeid, PDO::PARAM_INT);
$job->execute();
return $job->fetchColumn();
}
public static function JobPlayerCount(int $placeid, string $jobid)
{
$p = $GLOBALS['pdo']->prepare("SELECT COUNT(*) FROM `game_presence` WHERE `placeid` = :p AND `jobid` = :j AND (`lastPing` + 50) > UNIX_TIMESTAMP()");
$p->bindParam(":p", $placeid, PDO::PARAM_INT);
$p->bindParam(":j", $jobid, PDO::PARAM_STR);
$p->execute();
return $p->fetchColumn();
}
public static function CloseAllJobs(int $placeid)
{
$servers = $GLOBALS['pdo']->prepare("SELECT * FROM `open_servers` WHERE `gameID` = :gid AND `status` < 2");
$servers->bindParam(":gid", $placeid, PDO::PARAM_INT);
$servers->execute();
if ($servers->rowCount() > 0) {
$CloseJob = new RccServiceHelper($GLOBALS['gamesArbiter']);
foreach ($servers as $server) {
$CloseJob->CloseJob($server['jobid']);
}
return true;
}
return false;
}
public static function SetToPersonalBuildPlace(int $placeid)
{
$set = $GLOBALS['pdo']->prepare("UPDATE `assets` SET `isPersonalServer` = 1 WHERE `id` = :i");
$set->bindParam(":i", $placeid, PDO::PARAM_INT);
$set->execute();
if ($set->rowCount() > 0) {
return true;
}
return false;
}
public static function SetToPlace(int $placeid)
{
$set = $GLOBALS['pdo']->prepare("UPDATE assets SET `isPersonalServer` = 0 WHERE `id` = :i");
$set->bindParam(":i", $placeid, PDO::PARAM_INT);
$set->execute();
if ($set->rowCount() > 0) {
return true;
}
return false;
}
public static function GetAllGames()
{
$games = $GLOBALS['pdo']->query("SELECT * FROM assets WHERE AssetTypeId = 9 ORDER BY Visited DESC");
return $games;
}
public static function ArbiterOnline() //the main portion of this check is now a background script
{
$check = $GLOBALS['pdo']->prepare("SELECT COUNT(*) FROM websettings WHERE isGameServerAlive = 1");
$check->execute();
if ($check->fetchColumn() > 0) {
return true;
}
return false;
}
public static function PersonalBuildRankToName($rank)
{
switch ($rank)
{
case 255:
return "Owner";
case 240:
return "Admin";
case 128:
return "Member";
case 10:
return "Visitor";
case 0:
return "Banned";
}
}
} }
} }

View File

@ -7,6 +7,7 @@
*/ */
use Alphaland\Assets\Render; use Alphaland\Assets\Render;
use Alphaland\Games\Game;
use Alphaland\Users\Render as UsersRender; use Alphaland\Users\Render as UsersRender;
use Alphaland\Web\WebContextManager; use Alphaland\Web\WebContextManager;
@ -188,24 +189,6 @@ function gen_uuid() {
); );
} }
function genJobId()
{
$uuid = "";
$alloc = true;
while ($alloc) {
$uuid = gen_uuid();
$uuidcheck = $GLOBALS['pdo']->prepare("SELECT * FROM open_servers WHERE jobid = :u");
$uuidcheck->bindParam(":u", $uuid, PDO::PARAM_STR);
$uuidcheck->execute();
if ($uuidcheck->rowCount() > 0) {
continue;
} else {
$alloc = false;
}
}
return $uuid;
}
// //
//auth ticket utilities //auth ticket utilities
@ -449,89 +432,6 @@ function logChatMessage($userid, $text, $trippedfilter) //privacy concern?
//personal build servers //personal build servers
function isUserWhitelisted($placeid, $userid)
{
$whitelist = $GLOBALS['pdo']->prepare("SELECT * FROM game_access WHERE placeid = :pid AND userid = :uid");
$whitelist->bindParam(":pid", $placeid, PDO::PARAM_INT);
$whitelist->bindParam(":uid", $userid, PDO::PARAM_INT);
$whitelist->execute();
if ($whitelist->rowCount() > 0)
{
return true;
}
return false;
}
function gameWhitelistAddUser($placeid, $userid)
{
if (isOwner($placeid))
{
if ($userid != getAssetInfo($placeid)->CreatorId && !isUserWhitelisted($placeid, $userid))
{
$whitelist = $GLOBALS['pdo']->prepare("INSERT INTO game_access(placeid, userid, whenWhitelisted) VALUES (:pid, :uid, UNIX_TIMESTAMP())");
$whitelist->bindParam(":pid", $placeid, PDO::PARAM_INT);
$whitelist->bindParam(":uid", $userid, PDO::PARAM_INT);
if ($whitelist->execute())
{
return true;
}
return "Failed to whitelist user";
}
return "Invalid User";
}
return "No Permission";
}
function gameWhitelistRemoveUser($placeid, $userid)
{
if (isOwner($placeid))
{
if ($userid != getAssetInfo($placeid)->CreatorId)
{
$whitelistremove = $GLOBALS['pdo']->prepare("DELETE FROM game_access WHERE placeid = :pid AND userid = :uid");
$whitelistremove->bindParam(":pid", $placeid, PDO::PARAM_INT);
$whitelistremove->bindParam(":uid", $userid, PDO::PARAM_INT);
$whitelistremove->execute();
if ($whitelistremove->rowCount() > 0)
{
return true;
}
return "Failed to unwhitelist user";
}
return "Invalid User";
}
return "No Permission";
}
function gameClearWhitelist($placeid)
{
if (isOwner($placeid))
{
$whitelistclear = $GLOBALS['pdo']->prepare("DELETE FROM game_access WHERE placeid = :pid");
$whitelistclear->bindParam(":pid", $placeid, PDO::PARAM_INT);
$whitelistclear->execute();
return true;
}
return false;
}
function getPBSRankName($rank)
{
switch ($rank)
{
case 255:
return "Owner";
case 240:
return "Admin";
case 128:
return "Member";
case 10:
return "Visitor";
case 0:
return "Banned";
}
}
function updateBuildServerRank($placeid, $userid, $rank) function updateBuildServerRank($placeid, $userid, $rank)
{ {
if ($userid != getAssetInfo($placeid)->CreatorId && getAssetInfo($placeid)->isPersonalServer == 1) if ($userid != getAssetInfo($placeid)->CreatorId && getAssetInfo($placeid)->isPersonalServer == 1)
@ -657,7 +557,7 @@ function updatePBSGameSettings($placeid, $name, $description, $commentsenabled,
if ($whitelistenabled == 0) //whitelist being disabled if ($whitelistenabled == 0) //whitelist being disabled
{ {
if (!gameClearWhitelist($placeid)) if (!Game::ClearWhitelist($placeid))
{ {
$whitelistenabled = 1; $whitelistenabled = 1;
} }
@ -1686,54 +1586,6 @@ function configPermission($groupid)
// ... // ...
//game utility functions
function userAccessToGame($placeid, $userid)
{
if (getAssetInfo($placeid)->isGameWhitelisted == 1) //game whitelisted
{
$whitelist = $GLOBALS['pdo']->prepare("SELECT * FROM game_access WHERE placeid = :pid AND userid = :uid");
$whitelist->bindParam(":pid", $placeid, PDO::PARAM_INT);
$whitelist->bindParam(":uid", $userid, PDO::PARAM_INT);
$whitelist->execute();
if ($whitelist->rowCount() > 0 || $userid == getAssetInfo($placeid)->CreatorId || $GLOBALS['user']->IsAdmin())
{
return true;
}
return false;
}
return true;
}
function checkForDeadJobs($placeid)
{
$jobinfo = $GLOBALS['pdo']->prepare("SELECT * FROM open_servers WHERE gameID = :g AND (lastPing + 95) < UNIX_TIMESTAMP() AND (status = 0 OR status = 1)");
$jobinfo->bindParam(":g", $placeid, PDO::PARAM_INT);
$jobinfo->execute();
foreach ($jobinfo as $job)
{
$editjob = $GLOBALS['pdo']->prepare("UPDATE open_servers SET status = 2, killedby = 0, whenDied = UNIX_TIMESTAMP() WHERE jobid = :j");
$editjob->bindParam(":j", $job['jobid'], PDO::PARAM_STR);
$editjob->execute();
}
}
function isJobMarkedClosed($jobid)
{
$job = $GLOBALS['pdo']->prepare("SELECT * FROM open_servers WHERE jobid = :j AND status = 2");
$job->bindParam(":j", $jobid, PDO::PARAM_STR);
$job->execute();
if ($job->rowCount() > 0)
{
return true;
}
return false;
}
//end game utility functions
//render utility functions //render utility functions
function setHeadshotAngleRight($userid) function setHeadshotAngleRight($userid)
@ -1806,7 +1658,7 @@ function checkUserPendingRender($player)
$checkdata = $check->fetch(PDO::FETCH_OBJ); $checkdata = $check->fetch(PDO::FETCH_OBJ);
$waspendingrender = false; $waspendingrender = false;
if ($checkdata->pendingRender == true) //render pending if ($checkdata->pendingRender == true) //render pending
{ {
if (($checkdata->lastRender + 15) < time()) //last render still pending after 15 seconds if (($checkdata->lastRender + 15) < time()) //last render still pending after 15 seconds
@ -1818,7 +1670,7 @@ function checkUserPendingRender($player)
else else
{ {
$waspendingrender = true; $waspendingrender = true;
} }
} }
if ($checkdata->pendingHeadshotRender == true) //headshot render pending if ($checkdata->pendingHeadshotRender == true) //headshot render pending
@ -1832,7 +1684,7 @@ function checkUserPendingRender($player)
else else
{ {
$waspendingrender = true; $waspendingrender = true;
} }
} }
return $waspendingrender; return $waspendingrender;
@ -3233,22 +3085,6 @@ function rewardUserBadge($UserID, $BadgeID, $PlaceID)
//backend communication and utilities for jobs { //backend communication and utilities for jobs {
function gameCloseAllJobs($id)
{
$s = $GLOBALS['pdo']->prepare("SELECT * FROM open_servers WHERE gameID = :gid AND status < 2");
$s->bindParam(":gid", $id, PDO::PARAM_INT);
if ($s->execute())
{
foreach ($s as $server)
{
soapCloseJob($GLOBALS['gamesArbiter'], $server['jobid']);
}
return true;
}
return false;
}
function logSoapFault($soapresult, $description, $script) function logSoapFault($soapresult, $description, $script)
{ {
$theFault = print_r($soapresult, TRUE); $theFault = print_r($soapresult, TRUE);
@ -3259,39 +3095,6 @@ function logSoapFault($soapresult, $description, $script)
$fault->execute(); $fault->execute();
} }
function allocGamePort() //allocs a port between 50000 - 60000, verifies the port isn't in use by another game server
{
$port = 0;
$alloc = true;
while ($alloc)
{
$port = rand(50000,60000); //port range forwarded on the server side (support up to 10000 jobs)
$s = $GLOBALS['pdo']->prepare("SELECT * FROM open_servers WHERE port = :p AND status < 2");
$s->bindParam(":p", $port, PDO::PARAM_STR);
$s->execute();
if ($s->rowCount() > 0 || $port == 57236) {
continue;
} else {
$alloc = false;
}
}
return $port;
}
function isGameServerAlive() //the main portion of this check is now a background script
{
$check = $GLOBALS['pdo']->prepare("SELECT * FROM websettings WHERE isGameServerAlive = 1");
$check->execute();
if ($check->rowCount() > 0)
{
return true;
}
return false;
}
function isThumbnailerAlive() //the main portion of this check is now a background script function isThumbnailerAlive() //the main portion of this check is now a background script
{ {
$check = $GLOBALS['pdo']->prepare("SELECT * FROM websettings WHERE isThumbnailerAlive = 1"); $check = $GLOBALS['pdo']->prepare("SELECT * FROM websettings WHERE isThumbnailerAlive = 1");
@ -4361,30 +4164,6 @@ function userShout($uid)
//end of shouts } //end of shouts }
//games portion { //games portion {
function setPBSGame($placeid)
{
$set = $GLOBALS['pdo']->prepare("UPDATE assets SET isPersonalServer = 1 WHERE id = :i");
$set->bindParam(":i", $placeid, PDO::PARAM_INT);
$set->execute();
if ($set->rowCount() > 0)
{
return true;
}
return false;
}
function setRegularGame($placeid)
{
$set = $GLOBALS['pdo']->prepare("UPDATE assets SET isPersonalServer = 0 WHERE id = :i");
$set->bindParam(":i", $placeid, PDO::PARAM_INT);
$set->execute();
if ($set->rowCount() > 0)
{
return true;
}
return false;
}
function createPlace($userid, $name, $description, $maxplayers) function createPlace($userid, $name, $description, $maxplayers)
{ {
@ -4501,54 +4280,6 @@ function userPlaceVisits($userid)
} }
function getAllSiteGames()
{
$check = $GLOBALS['pdo']->query("SELECT * FROM assets WHERE AssetTypeId = 9 ORDER BY Visited DESC");
return $check;
}
function getRecentlyPlayed()
{
$localuser = $GLOBALS['user']->id;
$check = $GLOBALS['pdo']->prepare("SELECT * FROM game_recents WHERE uid = :u ORDER by whenPlayed DESC");
$check->bindParam(":u", $localuser, PDO::PARAM_INT);
$check->execute();
return $check;
}
function gamePlayerCount($id)
{
$sQ = $GLOBALS['pdo']->prepare("SELECT * FROM open_servers WHERE status != 2 AND gameID = :i");
$sQ->bindParam(":i", $id, PDO::PARAM_INT);
$sQ->execute();
if($sQ->rowCount() > 0)
{
$servers = $sQ->fetchAll(PDO::FETCH_ASSOC);
foreach($servers as $server) // TODO: re-work this when i implement job-id based presence
{
$p = $GLOBALS['pdo']->prepare("SELECT * FROM game_presence WHERE placeid = :p AND (lastPing + 50) > UNIX_TIMESTAMP()");
$p->bindParam(":p", $id, PDO::PARAM_INT);
$p->execute();
return $p->rowCount();
}
}
else
{
return 0;
}
}
function jobPlayerCount($placeid, $jobid)
{
$p = $GLOBALS['pdo']->prepare("SELECT * FROM game_presence WHERE placeid = :p AND jobid = :j AND (lastPing + 50) > UNIX_TIMESTAMP()");
$p->bindParam(":p", $placeid, PDO::PARAM_INT);
$p->bindParam(":j", $jobid, PDO::PARAM_STR);
$p->execute();
return $p->rowCount();
}
//end games portion } //end games portion }
//utility { //utility {
@ -4978,7 +4709,7 @@ function getNav()
$thumbnailerstatus = "<div style='margin:0 auto;Overflow:hidden;text-align: center' class='alert alert-danger' role='alert'>WARNING: Thumbnailer is offline, no Avatar changes will be applied</div>"; $thumbnailerstatus = "<div style='margin:0 auto;Overflow:hidden;text-align: center' class='alert alert-danger' role='alert'>WARNING: Thumbnailer is offline, no Avatar changes will be applied</div>";
} }
if (!isGameServerAlive()) if (!Game::ArbiterOnline())
{ {
$gameserverstatus = "<div style='margin:0 auto;Overflow:hidden;text-align: center' class='alert alert-danger' role='alert'>WARNING: Gameserver is offline, games will not launch</div>"; $gameserverstatus = "<div style='margin:0 auto;Overflow:hidden;text-align: center' class='alert alert-danger' role='alert'>WARNING: Gameserver is offline, games will not launch</div>";
} }
@ -5062,7 +4793,7 @@ function getNav()
</header> </header>
<script> <script>
setInterval(function(){ getJSONCDS("https://api.alphaland.cc/sitepresence/ping"); }, 60000); //ping every minute setInterval(function(){ getJSONCDS("https://api.alphaland.cc/sitepresence/ping"); }, 60000); //ping every minute
setTimeout(function() { new Snow("alphaland-main-body");}, 800); setTimeout(function() { new Snow("alphaland-main-body");}, 800);
</script> </script>
<br/>'; <br/>';
} }
@ -5146,7 +4877,7 @@ function adminPanelStats() {
} }
$gameserverstatus = "OK"; $gameserverstatus = "OK";
if (!isGameServerAlive()) if (!Game::ArbiterOnline())
{ {
$gameserverstatus = "DOWN"; $gameserverstatus = "DOWN";
} }

View File

@ -53,7 +53,7 @@ if ($_SERVER['HTTP_USER_AGENT'] == $GLOBALS['clientUserAgent']) //user agent res
$gameInfo = getAssetInfo($serverInfo->gameID); $gameInfo = getAssetInfo($serverInfo->gameID);
if (userAccessToGame($gameInfo->id, $sInfo->uid)) if (Game::UserAccess($gameInfo->id, $sInfo->uid))
{ {
$jobid = $sInfo->jobid; $jobid = $sInfo->jobid;
$placeid = $gameInfo->id; $placeid = $gameInfo->id;

View File

@ -5,6 +5,8 @@ This is used on the client (if the client has the session token set) to request
TODO: Clean up TODO: Clean up
*/ */
use Alphaland\Assets\Asset;
use Alphaland\Games\Game;
use Alphaland\Grid\RccServiceHelper; use Alphaland\Grid\RccServiceHelper;
$requesttype = $_GET['request']; $requesttype = $_GET['request'];
@ -72,8 +74,9 @@ function StartServer($gid)
{ {
$gameInfo = getAssetInfo($gid); $gameInfo = getAssetInfo($gid);
$jobuuid = genJobId(); //generate a UUID for the job $jobuuid = genJobId(); //generate a UUID for the job
$jobuuid = Game::GenerateJobId(); //generate a UUID for the job
$ip = $GLOBALS['gameMachine']; //IP address of the gameserver machine $ip = $GLOBALS['gameMachine']; //IP address of the gameserver machine
$port = allocGamePort(); //generate an available port for the gameserver $port = Game::AllocatePort(); //generate an available port for the gameserver
//add this server to the database //add this server to the database
$s = $GLOBALS['pdo']->prepare("INSERT INTO open_servers(jobid,gameID,ip,port,whenStarted,lastPing) VALUES(:j,:g,:ip,:port,UNIX_TIMESTAMP(),UNIX_TIMESTAMP())"); $s = $GLOBALS['pdo']->prepare("INSERT INTO open_servers(jobid,gameID,ip,port,whenStarted,lastPing) VALUES(:j,:g,:ip,:port,UNIX_TIMESTAMP(),UNIX_TIMESTAMP())");
@ -134,10 +137,10 @@ if ($requesttype == "RequestGame") //start new server or join existing one
{ {
//safe ID //safe ID
$gameID = $gInfo->id; $gameID = $gInfo->id;
checkForDeadJobs($gameID); Game::CloseDeadJobs($gameID);
if (userAccessToGame($gameID, $user->id)) if (Game::UserAccess($gameID, $user->id))
{ {
//check for open servers //check for open servers
$servers = $pdo->prepare("SELECT * FROM open_servers WHERE gameID = :i AND (status = 0 OR status = 1) ORDER BY status DESC LIMIT 1"); $servers = $pdo->prepare("SELECT * FROM open_servers WHERE gameID = :i AND (status = 0 OR status = 1) ORDER BY status DESC LIMIT 1");
@ -155,7 +158,7 @@ if ($requesttype == "RequestGame") //start new server or join existing one
addPlayerToQueue($gameID, $sInfo->jobid, $user->id); //add player to queue (if they are in it, this updates ping) addPlayerToQueue($gameID, $sInfo->jobid, $user->id); //add player to queue (if they are in it, this updates ping)
if (isNextInQueue($gameID, $sInfo->jobid, $user->id)) //player next in queue if (isNextInQueue($gameID, $sInfo->jobid, $user->id)) //player next in queue
{ {
if (jobPlayerCount($gameID, $sInfo->jobid) >= $gInfo->MaxPlayers) if (Game::JobPlayerCount($gameID, $sInfo->jobid) >= $gInfo->MaxPlayers)
{ {
echo constructJson($sInfo->jobid."", 6, "", "", "", ""); //return job full echo constructJson($sInfo->jobid."", 6, "", "", "", ""); //return job full
} }
@ -203,7 +206,7 @@ else if ($requesttype == "RequestFollowUser") //follow user
if ($assettype == 9) //asset is a game if ($assettype == 9) //asset is a game
{ {
checkForDeadJobs($placeid); Game::CloseDeadJobs($placeid);
$playersgame = $pdo->prepare("SELECT * FROM game_presence WHERE uid = :u AND placeid = :p"); $playersgame = $pdo->prepare("SELECT * FROM game_presence WHERE uid = :u AND placeid = :p");
$playersgame->bindParam(":u", $userid, PDO::PARAM_INT); $playersgame->bindParam(":u", $userid, PDO::PARAM_INT);

View File

@ -57,9 +57,9 @@ function convertToPBSPlace($placetype, $placeid)
//copy template, set the game type to PBS, update the hash, delete persistence data, close all servers, start place render and redirect //copy template, set the game type to PBS, update the hash, delete persistence data, close all servers, start place render and redirect
if (copy($selectedPlacePath, $assetcdn . $gamehash)) if (copy($selectedPlacePath, $assetcdn . $gamehash))
{ {
if (gameCloseAllJobs($placeid)) if (Game::CloseAllJobs($placeid))
{ {
if (setPBSGame($placeid)) if (Game::SetToPersonalBuildPlace($placeid))
{ {
$set = $GLOBALS['pdo']->prepare("UPDATE assets SET Hash = :hash WHERE id = :i"); $set = $GLOBALS['pdo']->prepare("UPDATE assets SET Hash = :hash WHERE id = :i");
$set->bindParam(":hash", $gamehash, PDO::PARAM_INT); $set->bindParam(":hash", $gamehash, PDO::PARAM_INT);
@ -77,7 +77,7 @@ function convertToPBSPlace($placetype, $placeid)
} }
} }
} }
setRegularGame($placeid); Game::SetToPlace($placeid);
} }
return "Error converting to PBS"; return "Error converting to PBS";
} }

View File

@ -1,5 +1,6 @@
<?php <?php
use Alphaland\Games\Game;
use Alphaland\Web\WebContextManager; use Alphaland\Web\WebContextManager;
$body = ''; $body = '';
@ -25,16 +26,16 @@ else
if (isset($_POST['ConvertToRegular'])) if (isset($_POST['ConvertToRegular']))
{ {
if (gameCloseAllJobs($gameid)) if (Game::CloseAllJobs($gameid))
{ {
if (setRegularGame($gameid)) if (Game::SetToPlace($gameid))
{ {
handleRenderPlace($gameid); handleRenderPlace($gameid);
WebContextManager::Redirect("/games/config?id=".$gameid); WebContextManager::Redirect("/games/config?id=".$gameid);
} }
else else
{ {
setPBSGame($gameid); Game::SetToPersonalBuildPlace($gameid);
} }
} }
} }
@ -286,6 +287,7 @@ function updatePBSGen()
function whitelistUser(username) function whitelistUser(username)
{ {
updatePBSGen();
postJSONCDS("https://api.alphaland.cc/game/pbs/configure?id="+gameid+"&whitelist=true", JSON.stringify({"username": username})) postJSONCDS("https://api.alphaland.cc/game/pbs/configure?id="+gameid+"&whitelist=true", JSON.stringify({"username": username}))
.done(function(object) { .done(function(object) {
var alert = object.alert; var alert = object.alert;

View File

@ -4,6 +4,7 @@
Alphaland 2021 Alphaland 2021
*/ */
use Alphaland\Games\Game;
use Alphaland\Web\WebContextManager; use Alphaland\Web\WebContextManager;
$gameID = $_GET['id']; $gameID = $_GET['id'];
@ -22,7 +23,7 @@ else
WebContextManager::Redirect("/404"); WebContextManager::Redirect("/404");
} }
checkForDeadJobs($gameID); Game::CloseDeadJobs($gameID);
$body = ' $body = '

View File

@ -1,5 +1,6 @@
<?php <?php
use Alphaland\Games\Game;
use Alphaland\Web\WebContextManager; use Alphaland\Web\WebContextManager;
WebContextManager::ForceHttpsCloudflare(); WebContextManager::ForceHttpsCloudflare();
@ -26,7 +27,7 @@ foreach($b as $jobInfo)
{ {
$jobid = $jobInfo['jobid']; $jobid = $jobInfo['jobid'];
$placeid = $jobInfo['gameID']; $placeid = $jobInfo['gameID'];
checkForDeadJobs($placeid); Game::CloseDeadJobs($placeid);
$jsonInfo = array( $jsonInfo = array(
"JobID" => $jobid, "JobID" => $jobid,

View File

@ -1,5 +1,6 @@
<?php <?php
use Alphaland\Games\Game;
use Alphaland\Grid\RccServiceHelper; use Alphaland\Grid\RccServiceHelper;
use Alphaland\Web\WebContextManager; use Alphaland\Web\WebContextManager;
@ -16,7 +17,7 @@ $jobid = $data->jobid;
$script = $data->script; $script = $data->script;
$output = ""; $output = "";
if (!isJobMarkedClosed($jobid)) if (!Game::JobClosed($jobid))
{ {
$jobExecuteEx = new RccServiceHelper($GLOBALS['gamesArbiter']); $jobExecuteEx = new RccServiceHelper($GLOBALS['gamesArbiter']);
$jobExecuteEx->ExecuteEx( $jobExecuteEx->ExecuteEx(

View File

@ -6,6 +6,9 @@ Alphaland 2021
*/ */
//headers //headers
use Alphaland\Games\Game;
header("Access-Control-Allow-Origin: https://www.alphaland.cc"); header("Access-Control-Allow-Origin: https://www.alphaland.cc");
header("access-control-allow-credentials: true"); header("access-control-allow-credentials: true");
@ -30,7 +33,7 @@ $userInfo = array(
"Creator" => getUsername($assetinfo->CreatorId), "Creator" => getUsername($assetinfo->CreatorId),
"CreatorId" => $assetinfo->CreatorId, "CreatorId" => $assetinfo->CreatorId,
"isPersonalServer" => boolval($assetinfo->isPersonalServer), "isPersonalServer" => boolval($assetinfo->isPersonalServer),
"playPermission" => userAccessToGame($assetinfo->id, $user->id), "playPermission" => Game::UserAccess($assetinfo->id, $user->id),
"canManage" => boolval($assetinfo->CreatorId == $user->id || $user->IsAdmin()), "canManage" => boolval($assetinfo->CreatorId == $user->id || $user->IsAdmin()),
"CommentsEnabled" => boolval($assetinfo->IsCommentsEnabled), "CommentsEnabled" => boolval($assetinfo->IsCommentsEnabled),
"PersonalServerWhitelist" => boolval($assetinfo->isGameWhitelisted), "PersonalServerWhitelist" => boolval($assetinfo->isGameWhitelisted),

View File

@ -6,6 +6,9 @@ Alphaland 2021
*/ */
//headers //headers
use Alphaland\Games\Game;
header("Access-Control-Allow-Origin: https://www.alphaland.cc"); header("Access-Control-Allow-Origin: https://www.alphaland.cc");
header("access-control-allow-credentials: true"); header("access-control-allow-credentials: true");
header('Content-Type: application/json'); header('Content-Type: application/json');
@ -65,7 +68,7 @@ $jsonData = array(
foreach($servers as $server) foreach($servers as $server)
{ {
$jobid = $server['jobid']; $jobid = $server['jobid'];
$playing = jobPlayerCount($server['gameID'], $jobid); $playing = Game::JobPlayerCount($server['gameID'], $jobid);
$maxplayers = (int)getAssetInfo($server['gameID'])->MaxPlayers; $maxplayers = (int)getAssetInfo($server['gameID'])->MaxPlayers;
$isowner = isOwner($server['gameID']); $isowner = isOwner($server['gameID']);
$whenStarted = date("h:ia", $server['whenStarted']); $whenStarted = date("h:ia", $server['whenStarted']);

View File

@ -6,6 +6,9 @@ Alphaland 2021
*/ */
//headers //headers
use Alphaland\Games\Game;
header("Access-Control-Allow-Origin: https://www.alphaland.cc"); header("Access-Control-Allow-Origin: https://www.alphaland.cc");
header("access-control-allow-credentials: true"); header("access-control-allow-credentials: true");
@ -68,17 +71,29 @@ else
$userid = getID($data->username); $userid = getID($data->username);
if ($userid) if ($userid)
{ {
$message = gameWhitelistAddUser($assetid, $userid); try {
if (Game::WhitelistAddUser($assetid, $userid)) {
$message = true;
}
} catch (Exception $e) {
$message = $e->getMessage();
}
} }
else else
{ {
$message = "Invalid User"; $message = "User not found";
} }
} }
else if ($removewhitelistuser) else if ($removewhitelistuser)
{ {
$userid = $data->userid; $userid = $data->userid;
$message = gameWhitelistRemoveUser($assetid, $userid); try {
if (Game::WhitelistRemoveUser($assetid, $userid)) {
$message = true;
}
} catch (Exception $e) {
$message = $e->getMessage();
}
} }
if ($message === true) { if ($message === true) {

View File

@ -6,6 +6,9 @@
*/ */
//headers //headers
use Alphaland\Games\Game;
header("Access-Control-Allow-Origin: https://www.alphaland.cc"); header("Access-Control-Allow-Origin: https://www.alphaland.cc");
header("access-control-allow-credentials: true"); header("access-control-allow-credentials: true");
@ -85,7 +88,7 @@ foreach($members as $member)
"username" => $username, "username" => $username,
"userid" => $userid, "userid" => $userid,
"thumbnail" => $thumbnail, "thumbnail" => $thumbnail,
"rankname" => getPBSRankName($rank), "rankname" => Game::PersonalBuildRankToName($rank),
"rank" => $rank "rank" => $rank
); );
} }

View File

@ -8,6 +8,9 @@ This is parsed with javascript on the users end, this allows the user to handle
//headers //headers
use Alphaland\Games\Game;
header("Access-Control-Allow-Origin: https://www.alphaland.cc"); header("Access-Control-Allow-Origin: https://www.alphaland.cc");
header("access-control-allow-credentials: true"); header("access-control-allow-credentials: true");
@ -75,7 +78,7 @@ foreach($games as $game)
$visits = $game['Visited']; //visit count of the game $visits = $game['Visited']; //visit count of the game
$creation = date("m/d/Y", $game['Created']); //creation date of the game NOTE: to get the date, use UNIX_TIMESTAMP() $creation = date("m/d/Y", $game['Created']); //creation date of the game NOTE: to get the date, use UNIX_TIMESTAMP()
$creatorN = getUsername($game['CreatorId']); //creator of the game username $creatorN = getUsername($game['CreatorId']); //creator of the game username
$playercount = gamePlayerCount($gameID); //players in the game $playercount = Game::TotalPlayerCount($gameID); //players in the game
$placerender = handleGameThumb($gameID); $placerender = handleGameThumb($gameID);
$placeInfo = array( $placeInfo = array(

View File

@ -6,6 +6,9 @@ Alphaland 2021
*/ */
//headers //headers
use Alphaland\Games\Game;
header("Access-Control-Allow-Origin: https://www.alphaland.cc"); header("Access-Control-Allow-Origin: https://www.alphaland.cc");
header("access-control-allow-credentials: true"); header("access-control-allow-credentials: true");
@ -71,7 +74,7 @@ foreach($recents as $game)
$id = $game['gid']; $id = $game['gid'];
$visits = $placeinfo->Visited; $visits = $placeinfo->Visited;
$placename = cleanOutput($placeinfo->Name); $placename = cleanOutput($placeinfo->Name);
$playercount = gamePlayerCount($game['gid']); $playercount = Game::TotalPlayerCount($game['gid']);
$creatorid = $placeinfo->CreatorId; $creatorid = $placeinfo->CreatorId;
$creator = getUsername($creatorid); $creator = getUsername($creatorid);
$thumbnail = handleGameThumb($game['gid']); $thumbnail = handleGameThumb($game['gid']);