Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
FogNetwork
GitHub Repository: FogNetwork/Tsunami
Path: blob/main/public/games/files/pacman/data/db-handler.php
1036 views
1
<?php header('Content-Type: application/json');
2
3
/* IMPORTANT:
4
* change this to the main url of where you host the application, otherwise, every entry will be marked as a cheater
5
*/
6
$hostdomain = 'pacman.platzh1rsch.ch';
7
8
if (isset($_POST['action'])) {
9
switch ($_POST['action']) {
10
case 'get':
11
if(isset($_POST['page'])) {
12
echo getHighscore($_POST['page']);
13
} else {
14
echo getHighscore();
15
}
16
break;
17
case 'add':
18
if(isset($_POST['name']) || isset($_POST['score']) || isset($_POST['level']))
19
echo addHighscore($_POST['name'],$_POST['score'], $_POST['level']);
20
break;
21
}
22
} else if (isset($_GET['action'])) {
23
if ($_GET['action'] == 'get') {
24
if(isset($_GET['page'])) {
25
echo getHighscore($_GET['page']);
26
} else {
27
echo getHighscore();
28
}
29
} else if ($_GET['action'] == 'version') {
30
echo getVersionInfo();
31
}
32
} else echo "define action to call";
33
34
35
function getVersionInfo() {
36
$strJsonFileContents = file_get_contents("../package.json");
37
// Convert to array
38
$array = json_decode($strJsonFileContents, true);
39
40
$response["version"] = $array["version"];
41
42
if (!isset($response) || is_null($response)) {
43
return "[]";
44
} else {
45
return json_encode($response);
46
}
47
}
48
49
function getHighscore($page = 1) {
50
51
$db = new SQLite3('pacman.db');
52
createDataBase($db);
53
$results = $db->query('SELECT name, score FROM highscore WHERE cheater = 0 AND name != "" ORDER BY score DESC LIMIT 10 OFFSET ' . ($page-1)*10);
54
while ($row = $results->fetchArray()) {
55
$tmp["name"] = htmlspecialchars($row['name']);
56
$tmp["score"] = strval($row['score']);
57
$response[] = $tmp;
58
}
59
if (!isset($response) || is_null($response)) {
60
return "[]";
61
} else {
62
return json_encode($response);
63
}
64
}
65
66
function addHighscore($name, $score, $level) {
67
68
$db = new SQLite3('pacman.db');
69
$date = date('Y-m-d h:i:s', time());
70
createDataBase($db);
71
$ref = isset($_SERVER[ 'HTTP_REFERER']) ? $_SERVER[ 'HTTP_REFERER'] : "";
72
$ua = isset($_SERVER[ 'HTTP_USER_AGENT']) ? $_SERVER[ 'HTTP_USER_AGENT'] : "";
73
$remA = isset($_SERVER[ 'REMOTE_ADDR']) ? $_SERVER[ 'REMOTE_ADDR'] : "";
74
$remH = isset($_SERVER[ 'REMOTE_HOST']) ? $_SERVER[ 'REMOTE_HOST'] : "";
75
76
// some simple checks to avoid cheaters
77
$ref_assert = preg_match('/http(s)?:\/\/.*' . $hostdomain . '/', $ref) > 0;
78
$ua_assert = ($ua != "");
79
$cheater = 0;
80
if (!$ref_assert || !$ua_assert) {
81
$cheater = 1;
82
}
83
84
$maxlvlpoints_pills = 104 * 10;
85
$maxlvlpoints_powerpills = 4 * 50;
86
$maxlvlpoints_ghosts = 4 * 4 * 100;
87
$maxlvlpoints = $maxlvlpoints_pills + $maxlvlpoints_powerpills + $maxlvlpoints_ghosts;
88
89
// check if score is even possible
90
if ($level < 1 || $level > 10) {
91
$cheater = 1;
92
} else if (($score / $level) > $maxlvlpoints) {
93
$cheater = 1;
94
}
95
96
$name_clean = htmlspecialchars($name);
97
$score_clean = htmlspecialchars($score);
98
99
$db->exec('INSERT INTO highscore (name, score, level, date, log_referer, log_user_agent, log_remote_addr, log_remote_host, cheater) '
100
. 'VALUES ("'
101
. $name . '", '
102
. $score . ', '
103
. $level . ', "'
104
. $date . '", "'
105
. $ref .'", "'
106
. $ua . '", "'
107
. $remA .'", "'
108
. $remH . '", "'
109
. $cheater
110
.'")'
111
);
112
113
$response['status'] = "success";
114
$response['level'] = $level;
115
$response['name'] = $name;
116
$response['score'] = $score;
117
$response['cheater'] = $cheater;
118
return json_encode($response);
119
}
120
121
function createDataBase($db) {
122
$db->exec('CREATE TABLE IF NOT EXISTS highscore(name VARCHAR(60),score INT, level INT, date DATETIME, log_referer VARCHAR(200), log_user_agent VARCHAR(200), log_remote_addr VARCHAR(200), log_remote_host VARCHAR(200), cheater BOOLEAN)');
123
}
124
125
?>
126
127