Added support for multiple decks

This commit is contained in:
2022-03-15 16:20:06 -04:00
parent 697017bc8e
commit a5bf7186f8
4 changed files with 39 additions and 17 deletions

View File

@@ -56,8 +56,18 @@ function reshuffleDeck($game) {
*/
function readyGame($game) {
$deck = array(); # Used to get the deck ready
for ($i=0;$i<52;$i++) {
array_push($deck, $i);
$decks = dbRequest2("SELECT decks FROM golfGame WHERE ID='$game'");
# Makes sure that it is not asking for an unreasonable amount of decks
if ($decks > 50) {
$decks = 50;
} elseif ($decks < 1) {
$decks = 1;
}
# Creates the cards for all the decks.
for ($j=0;$j<$decks;$j++) {
for ($i=0;$i<52;$i++) {
array_push($deck, $i);
}
}
shuffle($deck);
$gameData = dbRequest2("SELECT * FROM golfGame WHERE ID='$game'");
@@ -100,9 +110,11 @@ function readyGame($game) {
}
}
if ($USERNAME) {
if (array_key_exists("game", $_GET)){ // Gets the log
$playing = dbRequest2("SELECT name, password, players, playersToStart, cardNumber, flipNumber, multiplierForFlip, pointsToEnd, ID FROM golfGame WHERE EXISTS (SELECT * FROM golfGamePlayers WHERE golfGamePlayers.gameID = ID and user='$USERNAME') ORDER BY turnStartTime DESC");
$data = dbRequest2("SELECT name, password, players, playersToStart, cardNumber, flipNumber, multiplierForFlip, pointsToEnd, ID FROM golfGame WHERE players != playersToStart and NOT EXISTS (SELECT * FROM golfGamePlayers WHERE golfGamePlayers.gameID = ID and user='$USERNAME') ORDER BY players DESC");
if (array_key_exists("game", $_GET)){ // Gets the game
# Finds all games the player is still playing.
$playing = dbRequest2("SELECT name, password, players, playersToStart, cardNumber, flipNumber, multiplierForFlip, pointsToEnd, ID, decks FROM golfGame WHERE EXISTS (SELECT * FROM golfGamePlayers WHERE golfGamePlayers.gameID = ID and user='$USERNAME') ORDER BY turnStartTime DESC");
# Finds all open games.
$data = dbRequest2("SELECT name, password, players, playersToStart, cardNumber, flipNumber, multiplierForFlip, pointsToEnd, ID, decks FROM golfGame WHERE players != playersToStart and NOT EXISTS (SELECT * FROM golfGamePlayers WHERE golfGamePlayers.gameID = ID and user='$USERNAME') ORDER BY players DESC");
foreach ($data as $id => $entry) { // Makes sure to not leak the password
if ($entry["password"]) {
$data[$id]["password"] = true;
@@ -313,7 +325,7 @@ if ($USERNAME) {
http_response_code(404);
echo "Game not found";
}
} elseif (array_key_exists("create", $_POST) and array_key_exists("cardNumber", $_POST) and array_key_exists("flipNumber", $_POST) and array_key_exists("playersToStart", $_POST) and array_key_exists("multiplierForFlip", $_POST)) { # Used to create a new room
} elseif (array_key_exists("create", $_POST) and array_key_exists("cardNumber", $_POST) and array_key_exists("flipNumber", $_POST) and array_key_exists("playersToStart", $_POST) and array_key_exists("multiplierForFlip", $_POST) and array_key_exists("decks", $_POST)) { # Used to create a new room
$password = "";
$name = $_POST["create"];
$cardNumber = intval($_POST["cardNumber"]);
@@ -321,6 +333,7 @@ if ($USERNAME) {
$multiplierForFlip = floatval($_POST["multiplierForFlip"]);
$playersToStart = $_POST["playersToStart"];
$pointsToEnd = intval($_POST["pointsToEnd"]);
$decks = intval($_POST["decks"]);
$time = time();
if (array_key_exists("password", $_POST)) {
$password = $_POST["password"];
@@ -340,13 +353,16 @@ if ($USERNAME) {
} elseif ($pointsToEnd <= 0) {
http_response_code(400);
echo "The points to end need to be more than 0";
} elseif ($playersToStart * $cardNumber >= 52) {
} elseif ($playersToStart * $cardNumber >= 52 * $decks) {
http_response_code(400);
echo "There are not enough cards in a deck for that amount of players and cards";
} elseif ($decks > 50 or $decks < 1) {
http_response_code(400);
echo "You can only have 50 decks";
} else {
dbCommand("INSERT INTO golfGame (deck, discard, cardNumber, flipNumber, multiplierForFlip, pointsToEnd, name, password, players, playersToStart, currentPlayer, turnStartTime) VALUES ('[]', '[]', $cardNumber, $flipNumber, $multiplierForFlip, $pointsToEnd, '$name', '$password', 0, $playersToStart, -1, $time)");
dbCommand("INSERT INTO golfGame (deck, discard, cardNumber, flipNumber, multiplierForFlip, pointsToEnd, name, password, players, playersToStart, currentPlayer, turnStartTime, decks) VALUES ('[]', '[]', $cardNumber, $flipNumber, $multiplierForFlip, $pointsToEnd, '$name', '$password', 0, $playersToStart, -1, $time, $decks)");
echo "Created Game";
writeLog(14, "$USERNAME created game for $playersToStart players and $cardNumber cards and name $name with ip of $address");
writeLog(14, "$USERNAME created game for $playersToStart players, $cardNumber cards, $decks decks, and name $name with ip of $address");
}
} elseif (array_key_exists("forceUpdate", $_GET)) { // Used to force the update the next time an update is called
$id = $_GET["forceUpdate"];

View File

@@ -1,5 +1,5 @@
function update(repeat=false) { // Will update the game.
var text = "<tr><th>Name</th><Players</th><th>Current Players</th><th>Max Players</th><th>Multiplier for Flipping Last Card</th><th>Points to Out</th><th>Password</th><th>Cards</th><th>Cards to flip</th></tr>";
var text = "<tr><th>Name</th><Players</th><th>Current Players</th><th>Max Players</th><th>Multiplier for Flipping Last Card</th><th>Points to Out</th><th>Password</th><th>Cards</th><th>Cards to flip</th><th>Decks</th></tr>";
const ajax = new XMLHttpRequest();
ajax.onload = function() {
if (ajax.status == 200) {
@@ -8,7 +8,7 @@ function update(repeat=false) { // Will update the game.
if (element.players == element.playersToStart) {
joinText = "Continue";
}
text += `<tr><td>${element.name} <button onClick='joinGame(${element.ID})'>${joinText}</button></td><td>${element.players}</td><td>${element.playersToStart}</td><td>${element.multiplierForFlip}</td><td>${element.pointsToEnd}</td><td>${element.password ? `true` : "false"}</td><td>${element.cardNumber}</td><td>${element.flipNumber}</td></tr>`;
text += `<tr><td>${element.name} <button onClick='joinGame(${element.ID})'>${joinText}</button></td><td>${element.players}</td><td>${element.playersToStart}</td><td>${element.multiplierForFlip}</td><td>${element.pointsToEnd}</td><td>${element.password ? `true` : "false"}</td><td>${element.cardNumber}</td><td>${element.flipNumber}</td><td>${element.decks}</td></tr>`;
});
$("#games").html(text);
} else {
@@ -40,7 +40,7 @@ function create() { // Will create a game
if ($("#password").val()) {
password = `&password=${$("#password").val()}`;
}
ajax.send(`create=${$("#name").val()}&cardNumber=${$("#cardNumber").val()}&flipNumber=${$("#flipNumber").val()}&playersToStart=${$("#playersToStart").val()}&multiplierForFlip=${$("#multiplierForFlip").val()}&pointsToEnd=${$("#pointsToEnd").val()}&key='${getCookie('user')}'${password}`);
ajax.send(`create=${$("#name").val()}&cardNumber=${$("#cardNumber").val()}&flipNumber=${$("#flipNumber").val()}&playersToStart=${$("#playersToStart").val()}&multiplierForFlip=${$("#multiplierForFlip").val()}&pointsToEnd=${$("#pointsToEnd").val()}&decks=${$("#decks").val()}&key='${getCookie('user')}'${password}`);
}
function joinGame(id) {
window.location = `game.php?game=${id}`;

View File

@@ -37,6 +37,7 @@
<label for="playersToStart">Players: </label><input type='number' value='4' id="playersToStart"><br>
<label for="multiplierForFlip">Multiplier for flipping last card: </label><input type='number' value='2' id="multiplierForFlip"><br>
<label for="pointsToEnd">Points to get out: </label><input type='number' value='100' id="pointsToEnd"><br>
<label for="decks">Number of decks to use </label><input type='number' value='1' id="decks"><br>
<label for="password">Password(leave blank for none): </label><input type='password' value='' id="password"><br>
<button id='create'>Create</button>
</div>

View File

@@ -167,7 +167,7 @@ def repair(): # Repairs all tables or updates them if needed
"space3likes" : [["id", 1], ["account", 0]],
"golfGamePlayers" : [["gameID", 1], ["multiplier", 1], ["user", 0], ["points", 1], ["orderID", 1], ["lastMode", 0], ["upToDate", 6]],
"golfGameCards" : [["gameID", 1], ["user", 0], ["card", 1], ["cardPlacement", 1], ["faceUp", 6]],
"golfGame" : [["ID", 5], ["deck", 4], ["discard", 4], ["cardNumber", 1], ["flipNumber", 1], ["multiplierForFlip", 1], ["pointsToEnd", 1], ["name", 0], ["password", 0], ["players", 1], ["playersToStart", 1], ["currentPlayer", 1], ["turnStartTime", 1], ["locked", 6]],
"golfGame" : [["ID", 5], ["deck", 4], ["discard", 4], ["cardNumber", 1], ["flipNumber", 1], ["multiplierForFlip", 1], ["pointsToEnd", 1], ["name", 0], ["password", 0], ["players", 1], ["playersToStart", 1], ["currentPlayer", 1], ["turnStartTime", 1], ["locked", 6], ["decks", 1]],
"docker" : [["link", 0], ["action", 0], ["image", 0], ["password", 0], ["owner", 0], ["port", 1], ["ID", 0]],
"dockerImages" : [["realName", 0], ["shortName", 0]]
}
@@ -230,23 +230,28 @@ def repair(): # Repairs all tables or updates them if needed
versionNumber = version[0][0]
if versionNumber == "v1.0":
try:
command("ALTER TABLE cookies ADD lastIP varchar(255) NULL")
command("ALTER TABLE cookies ADD lastIP varchar(255)")
except Exception:
1
version = "v1.1"
updatedVersions.append("v1.1")
if versionNumber == "v1.1":
try:
command("ALTER TABLE cookies ADD lastIP varchar(255) NULL")
command("ALTER TABLE cookies ADD lastIP varchar(255)")
except Exception:
1
createTable("docker", [["link", 0], ["action", 0], ["image", 0], ["password", 0], ["owner", 0], ["port", 1], ["ID", 0]])
createTable("dockerImage", [["realName", 0], ["shortName", 0]])
version = "v2.0"
updatedVersions.append("v2.0")
if versionNumber == "v2.0": # Adds support for multiple decks
command("ALTER table golfGame ADD decks int")
command("UPDATE golfGame SET decks='1'")
version = "v2.1"
updatedVersions.append("v2.1")
# Fixes the version if it is invalid to the latest version
if version != "v2.0":
version = "v2.0"
if version != "v2.1":
version = "v2.1"
except:
1
command("DELETE FROM information WHERE pointer='version'")