Inveteratus Posted August 16, 2022 Posted August 16, 2022 (edited) While playing a number of mccodes games over the years, a lot of them exhibit a page "lag", where you perhaps commit a crime, our brave (nerve) bar goes down by one, your money goes up by $100, but you don't see these changes until the next page load. It's a very common problem and easily explained as the code as it stands outputs the user data with your bars and money *before* the page itself runs and outputs itself. So the simple solution, at the cost of a single extra query is to tweak the header.php script from: <?php class headers { function startheaders() { // ... } function userdata($ir, $lv, $fm, $cm, $dosessh = 1) { // ... } function menuarea() { // ... } function smenuarea() { // ... } function endpage() { // ... } } to: <?php class headers { private $_menu = '_nomenuarea'; // new constructor to save the body data public function __construct() { ob_start(); } // new destructor to display everything correctly public function __destruct() { global $db, $userid, $ir, $atkpage; // Get the body html $body = ob_get_clean(); // Refresh the global user information array $sql = 'SELECT u.*, us.* FROM users u LEFT JOIN userstats us USING (userid) WHERE userid = ' . $userid; $ir = $db->fetch_row($db->query($sql)); // Prep some basic variables for the header $fm = money_formatter($ir['money']); $cm = money_formatter($ir['crystals'], ''); $lv = date('F j, Y, g:i a', $ir['laston']); // Output the headers and userdata $this->_startheaders(); $this->_userdata($ir, $lv, $fm, $cm, $atkpage); // Call the correct menu call_user_func([$this, $this->_menu]); // Output the body echo $body; // And tidy up $this->_endpage(); } // These functions are called by globals.php/sglobals.php and intentionally do nothing public function startheaders() { } public function userdata($ir, $lv, $fm, $cm, $dosessh = 1) { } public function menuarea() { $this->menu = "_menuarea"; } public function smenuarea() { $this->menu = "_smenuarea"; } public function endpage() { } // These functions are the original functions called by globals.php/sglobals.php // Note, they have all been prefixed with _ private function _startheaders() { // ... } private function _userdata($ir, $lv, $fm, $cm, $dosessh = 1) { // ... } private function _menuarea() { // ... } private function _smenuarea() { // ... } private function _endpage() { // ... } // Finally add a "no-menu" for when no menu function has been called private function _nomenuarea() { echo '</td>'; echo '<td width="2" class="linegrad" bgcolor="#ffffff"> </td>'; echo '<td width="80%" bgcolor="#ffffff" valign="top">'; echo '<center>'; } } It has the added advantage of meaning that that no longer have to call $h->endpage() anywhere in your pages, as it is automatically called. Obviously, if you have made changes to your header.php, then you have to fiddle with it quite a bit to shoehorn this concept in, and of course you may need to adjust the new _nomenuarea() method to suit. Edited August 16, 2022 by Lacuna Code tweak Quote
Dayo Posted August 16, 2022 Posted August 16, 2022 This was one of the things that irritated me with McCodes and one that i aimed to fix when making GL. Looks interesting what you put and would be good to see this in action Quote
Inveteratus Posted August 16, 2022 Author Posted August 16, 2022 It should be noted that I don't consider this a definitive solution - rather it's a workaround. The reason being that you are adding another query, and it would probably be better to use a template manager such as Twig or maybe Smarty. Your workflow then becomes: requires/includes, and bootstrap your session check to see if the user is permitted to access this page handle any POST requests and perform redirects handle the GET request push all the up-to-date information out to your templating system Quote
AdamHull Posted August 16, 2022 Posted August 16, 2022 I've started working on mccodes again. Currently have a game I am working through to bring back up to modern standards. Nice to see someone else realising for mccodes 🙂 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.