diff --git a/css/login.css b/css/login.css new file mode 100644 index 0000000..43e53f6 --- /dev/null +++ b/css/login.css @@ -0,0 +1,95 @@ +body { + background-image: url("../images/wool.jpg"); +} + +#login { + position: fixed; + width: 520; + background-color: floralwhite; + font-family: 'Electrolize', sans-serif; + padding-top: 10px; + padding-bottom: 10px; + border-color: #35170B; + border-width: 5; + border-style: solid; +} + +#register { + position: fixed; + width: 520; + background-color: floralwhite; + font-family: 'Electrolize', sans-serif; + padding-top: 10px; + padding-bottom: 10px; + border-color: #35170B; + border-width: 5; + border-style: solid; +} + +#login_button { + font-family: 'Electrolize', sans-serif; + background-color: #35170B; + color: white; + cursor: pointer; +} + +#register_button { + font-family: 'Electrolize', sans-serif; + background-color: #35170B; + color: white; + cursor: pointer; +} + +p { + display: block; + text-align: center; + font-size: 1.5em; + color: #35170B; +} + +.change { + margin-top: 5px; + display: block; + text-align: center; + font-size: 1em; + color: #35170B; + cursor: pointer; +} + +.change:hover { + display: block; + text-align: center; + font-size: 1em; + color: #FF6E35; +} + +.form { + width: 400; + margin-left: 60; + font-size: 1.5em; + text-align: center; + border-color: #35170B; + border-width: 1; + border-style: solid; + color: #35170B; +} + +.logo { + width: 500; + margin-left: 10; +} + +body { + -webkit-touch-callout: none; + /* iOS Safari */ + -webkit-user-select: none; + /* Safari */ + -khtml-user-select: none; + /* Konqueror HTML */ + -moz-user-select: none; + /* Firefox */ + -ms-user-select: none; + /* Internet Explorer/Edge */ + user-select: none; + /* Non-prefixed version, currently supported by Chrome and Opera */ +} diff --git a/css/main.css b/css/main.css index 695a581..a5ceea6 100644 --- a/css/main.css +++ b/css/main.css @@ -39,6 +39,14 @@ body { padding: 4; } +#playerinfo { + position: fixed; + width: 100%; + text-align: right; + top: 0; + color: floralwhite; +} + #selectItem { position: fixed; border: 1px, solid, black; diff --git a/game.html b/game.html index 9742be9..e2218b4 100644 --- a/game.html +++ b/game.html @@ -1,7 +1,7 @@ - Factory + Factory Master @@ -53,7 +53,7 @@ ??? Dollar -
+
Last Save 10Min ago
diff --git a/index.html b/index.html new file mode 100644 index 0000000..34af667 --- /dev/null +++ b/index.html @@ -0,0 +1,93 @@ + + + + Factory Master + + + + + + + + + + + + + + +
+

+

Username:



+

Password:



+ +

Register?

+
+
+

+

Username:



+

Password:



+

Repeat Password:



+ +

Login?

+
+ + + + diff --git a/js/game.js b/js/game.js index 5400bf1..2a8fe25 100644 --- a/js/game.js +++ b/js/game.js @@ -5,6 +5,7 @@ var money = 100 var items = [] var time = 0 +var gametime = 0 var timestep = 1000 / 48 var delta = 0 var lastFrameTimeMs = 0 @@ -22,14 +23,21 @@ var mode = "none" var renderItems = true +var playername = "Player" +var lastsave = 0 + $(document).ready(function() { - $("#save").click(function() { + $("#forcesave").click(function() { save() - $("#textarea").val(JSON.stringify(game)) }) - $("#load").click(function() { - game = JSON.parse($("#textarea").val()) - loadGameData() + $("#logout").click(function() { + $.get("php/logout.php", function(data) { + window.location.replace("index.html") + }) + }) + $.get("php/playerdata.php", function(data) { + if (JSON.parse(data).status == "nologin") + window.location.replace("index.html") }) loadGameData() loadItems() @@ -47,6 +55,7 @@ $(window).on("beforeunload", function() { function save() { game = {} game.money = money + game.gametime = gametime game.inventory = [] for (var i = 0; i < inventory.items.length; i++) { game.inventory.push(inventory.items[i].id) @@ -81,40 +90,64 @@ function save() { } } Cookies.set("game", JSON.stringify(game)) + $.ajax({ + url: 'php/savegame.php', + type: 'POST', + data: { + gamedata: JSON.stringify(game), + "gametime": gametime + }, + success: function(result) { + console.log(result) + if (JSON.parse(result).status == "succes") { + lastsave = new Date().getTime() + } + } + }); } function loadGameData() { + lastsave = new Date().getTime() //Keine Save Vorhanden factorys.push(new Factory()) inventory = new Inventory() //game = Cookies.get("game") - if (game != 0) { - //game = JSON.parse(game) - money = game.money - inventory = new Inventory() - factorys = [] - for (var i = 0; i < game.inventory.length; i++) { - inventory.addItem(new Item(game.inventory[i])) + $.get("php/playerdata.php", function(data) { + if (JSON.parse(data).gametime != undefined) { + game = JSON.parse(data) + } else { + game = 0 } - for (var i = 0; i < game.factorys.length; i++) { - factorys.push(new Factory) - for (var x = 0; x < 25; x++) { - for (var y = 0; y < 12; y++) { - if (game.factorys[i].tiles[x][y] != 0) { - var keys = Object.keys(game.factorys[i].tiles[x][y]) - factorys[i].tiles[x][y] = new tileClasses[game.factorys[i].tiles[x][y].i](game.factorys[i].tiles[x][y].x, game.factorys[i].tiles[x][y].y) - factorys[i].tiles[x][y].factory = factorys[i] - for (var key = 0; key < keys.length; key++) { - if (keys[key] == "d") - factorys[i].tiles[x][y].direction = d[game.factorys[i].tiles[x][y]["d"]] - else - factorys[i].tiles[x][y][keys[key]] = game.factorys[i].tiles[x][y][keys[key]] + if (game != 0) { + //game = JSON.parse(game) + console.log("Loading Game") + money = game.money + gametime = game.gametime + inventory = new Inventory() + factorys = [] + for (var i = 0; i < game.inventory.length; i++) { + inventory.addItem(new Item(game.inventory[i])) + } + for (var i = 0; i < game.factorys.length; i++) { + factorys.push(new Factory) + for (var x = 0; x < 25; x++) { + for (var y = 0; y < 12; y++) { + if (game.factorys[i].tiles[x][y] != 0) { + var keys = Object.keys(game.factorys[i].tiles[x][y]) + factorys[i].tiles[x][y] = new tileClasses[game.factorys[i].tiles[x][y].i](game.factorys[i].tiles[x][y].x, game.factorys[i].tiles[x][y].y) + factorys[i].tiles[x][y].factory = factorys[i] + for (var key = 0; key < keys.length; key++) { + if (keys[key] == "d") + factorys[i].tiles[x][y].direction = d[game.factorys[i].tiles[x][y]["d"]] + else + factorys[i].tiles[x][y][keys[key]] = game.factorys[i].tiles[x][y][keys[key]] + } } } } } } - } + }); } function loadItems() { @@ -177,6 +210,7 @@ var tick = [] function gametick(timestep) { //time gibt an in den Wievielten von 40 Ticks man sich befindet time++ + gametime++ time = time % 48 //Wird 40 mal in einer Sekunde aufgerufen for (var i = 0; i < factorys.length; i++) { @@ -189,6 +223,9 @@ function gametick(timestep) { tick = tick.splice(1) $("#speed").text("Game Speed: " + ((tick[47] - tick[0] + 30) / 10) + "%") } + if (Math.round((new Date().getTime() - lastsave) / 60000) > 5 && lastsave != 0) { + save() + } } function render() { @@ -293,6 +330,7 @@ function render() { if (mode == "showmore") { drawBigInventory(inventory) } + $('#lastsave').text("last save " + Math.round((new Date().getTime() - lastsave) / 60000) + "min ago") } function getItemFormId(id) { diff --git a/js/tiles.js b/js/tiles.js index 794a86f..519fd08 100644 --- a/js/tiles.js +++ b/js/tiles.js @@ -253,7 +253,7 @@ class Quarry extends Tile { this.hasNoInventory = true this.cost = [{ "id": 0, - "count": 10000 + "count": 5000 }, { "id": 2, "count": 50 diff --git a/js/userinterface.js b/js/userinterface.js index 45eaf0e..9946e9d 100644 --- a/js/userinterface.js +++ b/js/userinterface.js @@ -12,7 +12,11 @@ $(document).ready(function() { }) function style() { - var screenMarginTop = window.innerHeight - 912 + var top = 0 + if (window.innerHeight < 910) { + top = 43 + } + var screenMarginTop = window.innerHeight - 912 + top var screenMarginLeft = (window.innerWidth - 1200) / 2 var itemCountMarginTop = screenMarginTop + 624 var infoMarginLeft = screenMarginLeft + 768 diff --git a/js/util.js b/js/util.js index 450c1d6..fb5ddec 100644 --- a/js/util.js +++ b/js/util.js @@ -47,6 +47,8 @@ function infoDrawRotatedImage(image, x, y, angle) { } function formatCount(c) { + if (c == 0) + return 0 for (var pow = 0; pow < lang.numbers.length; pow++) { if (c / Math.pow(10, pow * 3) >= 1 && c / Math.pow(10, pow * 3) < 1000) { return round(c / Math.pow(10, pow * 3), 3) + lang.numbers[pow] diff --git a/php/login.php b/php/login.php index 5e343c2..781502f 100644 --- a/php/login.php +++ b/php/login.php @@ -1,7 +1,36 @@ connect_error) { + die("Connection failed: " . $conn->connect_error); + } + $sql = "SELECT password FROM users WHERE username='".$_GET['username']."'"; + $result = $conn->query($sql); + if ($result->num_rows > 0) { + // output data of each row + while($row = $result->fetch_assoc()) { + if(password_verify($_GET['password'],$row["password"])){ + $_SESSION["login"] = "true"; + $_SESSION["username"] = $_GET['username']; + echo '{"status": "succes"}'; + }else{ + //Wrong PW + echo '{"status": "error"}'; + } + } + } else { + //Wrong Username + echo '{"status": "error"}'; + } +} else { + echo '{"status": "error"}'; +} ?> diff --git a/php/logout.php b/php/logout.php new file mode 100644 index 0000000..0a0fc99 --- /dev/null +++ b/php/logout.php @@ -0,0 +1,5 @@ + diff --git a/php/playerdata.php b/php/playerdata.php new file mode 100644 index 0000000..1e00bcf --- /dev/null +++ b/php/playerdata.php @@ -0,0 +1,24 @@ +connect_error) { + die("Connection failed: " . $conn->connect_error); + } + $sql = "SELECT gamedata FROM users WHERE username='".$_SESSION["username"]."'"; + $result = $conn->query($sql); + if ($result->num_rows > 0) { + // output data of each row + while($row = $result->fetch_assoc()) { + echo $row["gamedata"]; + } + } + } +}else{ + echo '{"status": "nologin"}'; +} + +?> diff --git a/php/register.php b/php/register.php new file mode 100644 index 0000000..90ba60a --- /dev/null +++ b/php/register.php @@ -0,0 +1,48 @@ + 15) { + echo '{"status":"username"}'; + $error = true; +} +if(strlen($passwort) == 0 && !$error) { + echo '{"status":"password1"}'; + $error = true; +} +if($passwort != $passwort2 && !$error) { + echo '{"status":"password2"}'; + $error = true; +} + +if(!$error) { + $statement = $pdo->prepare("SELECT * FROM users WHERE username = :username"); + $result = $statement->execute(array('username' => $username)); + $user = $statement->fetch(); + if($user !== false) { + echo '{"status":"username"}'; + $error = true; + } +} +if(!$error) { + $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT); + + $statement = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)"); + $result = $statement->execute(array('username' => $username, 'password' => $passwort_hash)); + + if($result) { + $_SESSION["login"] = "true"; + $_SESSION["username"] = $_GET['username']; + echo '{"status":"succes"}'; + } else { + echo '{"status":"error"}'; + } +} +?> diff --git a/php/savegame.php b/php/savegame.php new file mode 100644 index 0000000..96f9a29 --- /dev/null +++ b/php/savegame.php @@ -0,0 +1,35 @@ +connect_error) { + die("Connection failed: " . $conn->connect_error); + } + $sql = "SELECT gametime FROM users WHERE username='".$_SESSION["username"]."'"; + $result = $conn->query($sql); + if ($result->num_rows > 0) { + // output data of each row + while($row = $result->fetch_assoc()) { + if( intval($row["gametime"]) < intval($gametime) ){ + $sql = "UPDATE users SET gamedata = '". $gamedata ."' WHERE username = '".$_SESSION["username"]."'"; + $result = $conn->query($sql); + $sql = "UPDATE users SET gametime = '". $gametime ."' WHERE username = '".$_SESSION["username"]."'"; + $result = $conn->query($sql); + echo '{"status": "succes"}'; + die(); + } else { + echo '{"status": "old"}'; + } + } + } else { + //Wrong Username + echo '{"status": "error"}'; + } + } +} +?>