Did a lot of updating and moving around to make fights and exploring work with HTMX
This commit is contained in:
parent
74a0e32cb7
commit
35b0e07e4e
|
@ -12,24 +12,14 @@ if ($uri[0] === 'babblebox' && (isset($uri[1]) && $uri[1] === 'messages')) {
|
||||||
|
|
||||||
$r = new Router;
|
$r = new Router;
|
||||||
|
|
||||||
$r->get('/', function() {
|
$r->get('/', 'index');
|
||||||
if (user()->currentaction === "In Town") {
|
$r->post('/move', 'Explore\move');
|
||||||
$page = Towns\town();
|
$r->get('/spell/:id', 'healspells');
|
||||||
} elseif (user()->currentaction === "Exploring") {
|
$r->get('/character', 'show_character_info');
|
||||||
$page = Explore\explore();
|
$r->get('/character/:id', 'show_character_info');
|
||||||
} elseif (user()->currentaction === "Fighting") {
|
$r->get('/showmap', 'showmap');
|
||||||
redirect('/fight');
|
$r->form('/babblebox', 'babblebox');
|
||||||
}
|
$r->get('/babblebox/messages', 'babblebox_messages');
|
||||||
|
|
||||||
return is_htmx() ? $page : display($page, '');
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
NINJA! 🥷
|
|
||||||
*/
|
|
||||||
$r->get('/ninja', function() {
|
|
||||||
exit('NINJA! 🥷');
|
|
||||||
});
|
|
||||||
|
|
||||||
Towns\register_routes($r);
|
Towns\register_routes($r);
|
||||||
Fights\register_routes($r);
|
Fights\register_routes($r);
|
||||||
|
@ -39,14 +29,12 @@ Forum\register_routes($r);
|
||||||
Install\register_routes($r);
|
Install\register_routes($r);
|
||||||
Admin\register_routes($r);
|
Admin\register_routes($r);
|
||||||
|
|
||||||
$r->post('/move', 'Explore\move');
|
/*
|
||||||
|
NINJA! 🥷
|
||||||
$r->get('/spell/:id', 'healspells');
|
*/
|
||||||
$r->get('/character', 'show_character_info');
|
$r->get('/ninja', function() {
|
||||||
$r->get('/character/:id', 'show_character_info');
|
exit('NINJA! 🥷');
|
||||||
$r->get('/showmap', 'showmap');
|
});
|
||||||
$r->form('/babblebox', 'babblebox');
|
|
||||||
$r->get('/babblebox/messages', 'babblebox_messages');
|
|
||||||
|
|
||||||
// [code, handler, params, middleware]
|
// [code, handler, params, middleware]
|
||||||
$l = $r->lookup($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
|
$l = $r->lookup($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
|
||||||
|
@ -67,6 +55,22 @@ if (is_htmx() && $uri[0] !== 'babblebox') {
|
||||||
echo $content;
|
echo $content;
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a page for a couple generic actions.
|
||||||
|
*/
|
||||||
|
function index(): string
|
||||||
|
{
|
||||||
|
if (user()->currentaction === "In Town") {
|
||||||
|
$page = Towns\town();
|
||||||
|
} elseif (user()->currentaction === "Exploring") {
|
||||||
|
$page = Explore\explore();
|
||||||
|
} elseif (user()->currentaction === "Fighting") {
|
||||||
|
redirect('/fight');
|
||||||
|
}
|
||||||
|
|
||||||
|
return is_htmx() ? $page : display($page, '');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show a character's info. Defaults to the currently logged in user.
|
* Show a character's info. Defaults to the currently logged in user.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -25,7 +25,10 @@ function move() {
|
||||||
|
|
||||||
// Validate direction
|
// Validate direction
|
||||||
$form = validate($_POST, ['direction' => ['in:north,west,east,south']]);
|
$form = validate($_POST, ['direction' => ['in:north,west,east,south']]);
|
||||||
if (!$form['valid']) return display(ul_from_validate_errors($form['errors']), 'Move Error');
|
if (!$form['valid']) {
|
||||||
|
$errors = ul_from_validate_errors($form['errors']);
|
||||||
|
return is_htmx() ? $errors : display($errors, 'Move Error');
|
||||||
|
}
|
||||||
|
|
||||||
// Current game state
|
// Current game state
|
||||||
$game_size = $controlrow['gamesize'];
|
$game_size = $controlrow['gamesize'];
|
||||||
|
@ -67,5 +70,5 @@ function move() {
|
||||||
user()->longitude = $longitude;
|
user()->longitude = $longitude;
|
||||||
user()->save();
|
user()->save();
|
||||||
|
|
||||||
redirect('/');
|
return index();
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,13 +173,14 @@ function fight()
|
||||||
|
|
||||||
user()->currentfight += 1;
|
user()->currentfight += 1;
|
||||||
} else {
|
} else {
|
||||||
$pagearray["command"] = "<b>You have died.</b><br><br>As a consequence, you've lost half of your gold. However, you have been given back a portion of your hit points to continue your journey.<br><br>You may now continue back to <a href=\"/\">town</a>, and we hope you fair better next time.";
|
$page["command"] = "<b>You have died.</b><br><br>As a consequence, you've lost half of your gold. However, you have been given back a portion of your hit points to continue your journey.<br><br>You may now continue back to <a href=\"/\">town</a>, and we hope you fair better next time.";
|
||||||
}
|
}
|
||||||
|
|
||||||
user()->save();
|
user()->save();
|
||||||
|
|
||||||
// Finalize page and display it
|
// Finalize page and display it
|
||||||
return display(render('fight', ['page' => $page]), "Fighting");
|
$page = render('fight', ['page' => $page]);
|
||||||
|
return is_htmx() ? $page : display($page, "Fighting");
|
||||||
}
|
}
|
||||||
|
|
||||||
function victory()
|
function victory()
|
||||||
|
@ -252,7 +253,8 @@ function victory()
|
||||||
user()->currentmonsterimmune = 0;
|
user()->currentmonsterimmune = 0;
|
||||||
user()->save();
|
user()->save();
|
||||||
|
|
||||||
return display($page, $title);
|
page_title($title);
|
||||||
|
return is_htmx() ? $page : display($page, $title);
|
||||||
}
|
}
|
||||||
|
|
||||||
function drop()
|
function drop()
|
||||||
|
@ -264,7 +266,10 @@ function drop()
|
||||||
if (isset($_POST["submit"])) {
|
if (isset($_POST["submit"])) {
|
||||||
$slot = $_POST["slot"];
|
$slot = $_POST["slot"];
|
||||||
|
|
||||||
if ($slot == 0) { return display("Please go back and select an inventory slot to continue.","Error"); }
|
if ($slot == 0) {
|
||||||
|
$page = 'Please go back and select an inventory slot to continue.';
|
||||||
|
return is_htmx() ? $page : display($page, '');
|
||||||
|
}
|
||||||
|
|
||||||
$slotstr = 'slot'.$slot.'id';
|
$slotstr = 'slot'.$slot.'id';
|
||||||
if (user()->$slotstr != 0) {
|
if (user()->$slotstr != 0) {
|
||||||
|
@ -319,7 +324,8 @@ function drop()
|
||||||
}
|
}
|
||||||
|
|
||||||
user()->save();
|
user()->save();
|
||||||
return display("The item has been equipped. You can now continue <a href=\"/\">exploring</a>.", "Item Drop");
|
$page = 'The item has been equipped. You can now continue <a href="/" hx-get="/" hx-target="#middle">exploring</a>.';
|
||||||
|
return is_htmx() ? $page : display($page, "Item Drop");
|
||||||
}
|
}
|
||||||
|
|
||||||
$attributearray = array("maxhp"=>"Max HP",
|
$attributearray = array("maxhp"=>"Max HP",
|
||||||
|
@ -349,7 +355,7 @@ function drop()
|
||||||
$page .= "<form action=\"/drop\" method=\"post\"><select name=\"slot\"><option value=\"0\">Choose One</option><option value=\"1\">Slot 1: ".user()->slot1name."</option><option value=\"2\">Slot 2: ".user()->slot2name."</option><option value=\"3\">Slot 3: ".user()->slot3name."</option></select> <input type=\"submit\" name=\"submit\" value=\"Submit\" /></form>";
|
$page .= "<form action=\"/drop\" method=\"post\"><select name=\"slot\"><option value=\"0\">Choose One</option><option value=\"1\">Slot 1: ".user()->slot1name."</option><option value=\"2\">Slot 2: ".user()->slot2name."</option><option value=\"3\">Slot 3: ".user()->slot3name."</option></select> <input type=\"submit\" name=\"submit\" value=\"Submit\" /></form>";
|
||||||
$page .= "You may also choose to just continue <a href=\"/\">exploring</a> and give up this item.";
|
$page .= "You may also choose to just continue <a href=\"/\">exploring</a> and give up this item.";
|
||||||
|
|
||||||
return display($page, "Item Drop");
|
return is_htmx() ? $page : display($page, "Item Drop");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -361,7 +367,7 @@ function dead()
|
||||||
to continue your journey.<br><br>
|
to continue your journey.<br><br>
|
||||||
You may now continue back to <a href="/">town</a>, and we hope you fair better next time.
|
You may now continue back to <a href="/">town</a>, and we hope you fair better next time.
|
||||||
HTML;
|
HTML;
|
||||||
return display($page, 'You Died');
|
return is_htmx() ? $page : display($page, 'You Died');
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleMonsterTurn(&$userrow, $monsterrow)
|
function handleMonsterTurn(&$userrow, $monsterrow)
|
||||||
|
|
|
@ -363,43 +363,45 @@ function buy_map(int $id): string
|
||||||
/**
|
/**
|
||||||
* Send a user to a town from the Travel To menu.
|
* Send a user to a town from the Travel To menu.
|
||||||
*/
|
*/
|
||||||
function travelto($id, bool $usepoints = true)
|
function travelto(int $id, bool $use_points = true): string
|
||||||
{
|
{
|
||||||
if (user()->currentaction == "Fighting") redirect('/fight');
|
if (user()->currentaction == "Fighting") redirect('/fight');
|
||||||
|
|
||||||
$townrow = get_town_by_id($id);
|
$town = get_town_by_id($id);
|
||||||
|
$cost = $use_points ? $town['travelpoints'] : 0;
|
||||||
|
$mapped = explode(',', user()->towns);
|
||||||
|
$travelled = false;
|
||||||
|
|
||||||
if ($usepoints) {
|
if ($use_points && !in_array($id, $mapped)) {
|
||||||
if (user()->currenttp < $townrow["travelpoints"]) {
|
// trying to teleport to this town when it is not mapped
|
||||||
return display("You do not have enough TP to travel here. Please go back and try again when you get more TP.", "Travel To");
|
redirect('/');
|
||||||
}
|
} elseif (user()->currenttp < $cost) {
|
||||||
$mapped = explode(",",user()->towns);
|
$page = 'You do not have enough TP to travel here. Please <a href="/" hx-get="/" hx-target="#middle">go back</a> and try again when you get more TP.';
|
||||||
if (!in_array($id, $mapped)) { display("Cheat attempt detected.<br><br>Get a life, loser.", "Error"); }
|
} elseif ((user()->latitude == $town['latitude']) && (user()->longitude == $town['longitude'])) {
|
||||||
}
|
if (!in_array($id, $mapped)) {
|
||||||
|
// add town to user's mapped if they travelled here
|
||||||
if ((user()->latitude == $townrow["latitude"]) && (user()->longitude == $townrow["longitude"])) {
|
user()->towns .= ",$id";
|
||||||
return display("You are already in this town. <a href=\"/\">Click here</a> to return to the main town screen.", "Travel To");
|
$travelled = true;
|
||||||
|
$page = <<<HTML
|
||||||
|
You have discovered <b>{$town['name']}</b>! It has been added to your mapped towns.<br><br>
|
||||||
|
You may now <a href="/" hx-get="/" hx-target="#middle">enter this town</a>.
|
||||||
|
HTML;
|
||||||
|
} else {
|
||||||
|
$page = 'You are already in this town. <a href="/" hx-get="/" hx-target="#middle">Click here</a> to return.';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
user()->latitude = $town['latitude'];
|
||||||
|
user()->longitude = $town['longitude'];
|
||||||
|
user()->currenttp -= $cost;
|
||||||
|
$travelled = true;
|
||||||
|
$page = 'You have travelled to <b>'.$town['name'].'</b>. You may now <a href="/" hx-get="/" hx-target="#middle">enter this town</a>.';
|
||||||
}
|
}
|
||||||
|
|
||||||
$newtp = ($usepoints) ? user()->currenttp - $townrow["travelpoints"] : user()->currenttp;
|
if ($travelled) {
|
||||||
|
user()->currentaction = 'In Town';
|
||||||
|
user()->save();
|
||||||
|
}
|
||||||
|
|
||||||
$newlat = $townrow["latitude"];
|
page_title('Travelling to '.$town['name']);
|
||||||
$newlon = $townrow["longitude"];
|
return is_htmx() ? $page : display($page, '');
|
||||||
|
|
||||||
// If they got here by exploring, add this town to their map.
|
|
||||||
$mapped = explode(",",user()->towns);
|
|
||||||
$town = false;
|
|
||||||
foreach($mapped as $b) if ($b == $id) $town = true;
|
|
||||||
$mapped = implode(",", $mapped);
|
|
||||||
if ($town == false) $mapped .= ",$id";
|
|
||||||
|
|
||||||
user()->currentaction = 'In Town';
|
|
||||||
user()->towns = $mapped;
|
|
||||||
user()->currenttp = $newtp;
|
|
||||||
user()->longitude = $newlon;
|
|
||||||
user()->latitude = $newlat;
|
|
||||||
user()->save();
|
|
||||||
|
|
||||||
$page = "You have travelled to ".$townrow["name"].". You may now <a href=\"/\">enter this town</a>.";
|
|
||||||
return display($page, "Travel To");
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,20 +30,11 @@ function login()
|
||||||
'remember' => ['bool']
|
'remember' => ['bool']
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (!$form['valid']) {
|
if (!$form['valid']) exit(ul_from_validate_errors($form['errors']));
|
||||||
exit(ul_from_validate_errors($form['errors']));
|
|
||||||
}
|
|
||||||
|
|
||||||
$form = $form['data'];
|
$good = $auth->login($form['data']['username'], $form['data']['password']);
|
||||||
$row = get_user($form['username']);
|
if (!$good) exit('Invalid username or password. Please go back and try again.');
|
||||||
if ($row === false || !$auth->login($form['username'], $form['password']))
|
|
||||||
die("Invalid username or password. Please go back and try again.");
|
|
||||||
|
|
||||||
$expiretime = $form['remember'] ? time() + 31536000 : 0;
|
|
||||||
$rememberme = $form['remember'] ? 1 : 0;
|
|
||||||
$cookie = implode(' ', [$row['id'], $row['username'], $row['password'], $rememberme]);
|
|
||||||
|
|
||||||
set_cookie("dkgame", $cookie, $expiretime);
|
|
||||||
redirect('/');
|
redirect('/');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +48,6 @@ function logout()
|
||||||
{
|
{
|
||||||
global $auth;
|
global $auth;
|
||||||
$auth->logout();
|
$auth->logout();
|
||||||
set_cookie("dkgame", "", -3600);
|
|
||||||
redirect('/login');
|
redirect('/login');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ if (!file_exists('../.installed') && $uri[0] !== 'install') {
|
||||||
if (!in_array($uri[0], ['login', 'register', 'verify', 'lostpassword', 'help'])) {
|
if (!in_array($uri[0], ['login', 'register', 'verify', 'lostpassword', 'help'])) {
|
||||||
redirect('/login');
|
redirect('/login');
|
||||||
}
|
}
|
||||||
} elseif($auth->good()) {
|
} elseif ($auth->good()) {
|
||||||
// Block user if he/she has been banned.
|
// Block user if he/she has been banned.
|
||||||
if (user()->authlevel === 2) {
|
if (user()->authlevel === 2) {
|
||||||
exit("Your account has been banned.");
|
exit("Your account has been banned.");
|
||||||
|
@ -58,5 +58,8 @@ if (!file_exists('../.installed') && $uri[0] !== 'install') {
|
||||||
}
|
}
|
||||||
|
|
||||||
user()->update_online_time();
|
user()->update_online_time();
|
||||||
|
} else {
|
||||||
|
$auth->logout();
|
||||||
|
redirect('/login');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,8 @@ function header_links(): string
|
||||||
|
|
||||||
function debug_db_info(): string {
|
function debug_db_info(): string {
|
||||||
$total_time = round(microtime(true) - START, 4);
|
$total_time = round(microtime(true) - START, 4);
|
||||||
return '<div id="debug-db-info" hx-swap-oob="true">'. $total_time . ' Seconds, ' . db()->count . ' Queries</div>';
|
$htmx = is_htmx() ? ' (htmx)' : '';
|
||||||
|
return '<div id="debug-db-info" hx-swap-oob="true">'. $total_time . ' Seconds, ' . db()->count . ' Queries'.$htmx.'</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
function right_nav(): string
|
function right_nav(): string
|
||||||
|
|
|
@ -10,13 +10,13 @@
|
||||||
Latitude: <?= $lat ?><br>
|
Latitude: <?= $lat ?><br>
|
||||||
Longitude: <?= $lon ?><br>
|
Longitude: <?= $lon ?><br>
|
||||||
<a href="javascript:openmappopup()">View Map</a><br>
|
<a href="javascript:openmappopup()">View Map</a><br>
|
||||||
<form action="/move" method="post" class="move-compass">
|
<form action="/move" method="post" hx-post="/move" hx-target="#middle" class="move-compass">
|
||||||
<button type="submit" name="direction" value="north" class="north">North</button>
|
<button name="direction" value="north" class="north">North</button>
|
||||||
<div class="mid">
|
<div class="mid">
|
||||||
<button type="submit" name="direction" value="west" class="west">West</button>
|
<button name="direction" value="west" class="west">West</button>
|
||||||
<button type="submit" name="direction" value="east" class="east">East</button>
|
<button name="direction" value="east" class="east">East</button>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" name="direction" value="south" class="south">South</button>
|
<button name="direction" value="south" class="south">South</button>
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -36,7 +36,9 @@
|
||||||
while ($row = $towns->fetchArray(SQLITE3_ASSOC)) {
|
while ($row = $towns->fetchArray(SQLITE3_ASSOC)) {
|
||||||
$mapped = true;
|
$mapped = true;
|
||||||
if (in_array($row['id'], $town_list)) {
|
if (in_array($row['id'], $town_list)) {
|
||||||
echo "<a href=\"/gotown/{$row["id"]}\">".$row["name"]."</a><br>";
|
echo <<<HTML
|
||||||
|
<a href="/gotown/{$row['id']}" hx-get="/gotown/{$row['id']}" hx-target="#middle">{$row['name']}</a><br>
|
||||||
|
HTML;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$mapped) echo 'You have no towns mapped.';
|
if (!$mapped) echo 'You have no towns mapped.';
|
||||||
|
@ -45,8 +47,8 @@
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<div class="title"><img src="/img/button_functions.gif" alt="Functions" title="Functions"></div>
|
<div class="title"><img src="/img/button_functions.gif" alt="Functions" title="Functions"></div>
|
||||||
<a href="/">Home</a><br>
|
<a href="/" hx-get="/" hx-target="#middle">Home</a><br>
|
||||||
<a href="/forum">Forum</a><br>
|
<a href="/forum" hx-get="/forum" hx-target="#middle">Forum</a><br>
|
||||||
<a href="/settings">Settings</a><br>
|
<a href="/settings">Settings</a><br>
|
||||||
<a href="/changepassword">Change Password</a><br>
|
<a href="/changepassword">Change Password</a><br>
|
||||||
<a href="/logout">Log Out</a><br>
|
<a href="/logout">Log Out</a><br>
|
||||||
|
|
|
@ -8,13 +8,6 @@
|
||||||
<td>Password:</td>
|
<td>Password:</td>
|
||||||
<td><input type="password" name="password"></td>
|
<td><input type="password" name="password"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td>Remember me?</td>
|
|
||||||
<td>
|
|
||||||
<input type="hidden" name="remember" value="0">
|
|
||||||
<input type="checkbox" name="remember" value="1">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><input type="submit" name="submit" value="Log In"></td>
|
<td colspan="2"><input type="submit" name="submit" value="Log In"></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -22,9 +15,9 @@
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
Checking the "Remember Me" option will store your login information in a cookie so you don't have
|
Checking the "Remember Me" option will store your login information in a cookie so you don't have
|
||||||
to enter it next time you get online.<br><br>Want to play? You gotta
|
to enter it next time you get online.<br><br>Want to play? You gotta
|
||||||
<a href="users.php?do=register">register your own character.</a><br><br>You may also
|
<a href="/register">register your own character.</a><br><br>You may also
|
||||||
<a href="users.php?do=changepassword">change your password</a>, or
|
<a href="/changepassword">change your password</a>, or
|
||||||
<a href="users.php?do=lostpassword">request a new one</a> if you've lost yours.
|
<a href="/lostpassword">request a new one</a> if you've lost yours.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user