From 550a14a669ca4271db64856ff7c7ce376fc2cd34 Mon Sep 17 00:00:00 2001 From: BlueRaja Date: Wed, 29 May 2013 06:58:14 -0500 Subject: Set up foreign keys within the database. There is a small chance I may have broken emails, unlocks, or chat. Will test :) --- ajax/chat.ajax.php | 16 +++++++------- db updates.sql | 54 ++++++++++++++++++++++++++++++++++++++++++++++-- includes/emails.php | 4 ++-- includes/mapoftheday.php | 2 +- pages/chat.php | 6 +++--- pages/cp.php | 20 ------------------ pages/login.php | 4 ++-- pages/massemail.php | 2 +- 8 files changed, 70 insertions(+), 38 deletions(-) diff --git a/ajax/chat.ajax.php b/ajax/chat.ajax.php index 07df57c..2561619 100644 --- a/ajax/chat.ajax.php +++ b/ajax/chat.ajax.php @@ -21,7 +21,7 @@ if (isset($_REQUEST['messages'])) { $r[0]['message'] = "You're talking too fast - or your internet is being too slow. *OR ARE YOU SPAMMING ON PURPOSE?! JERK!*"; $r[0]['secondsSince'] = 0; $r[0]['displayName'] = 'SERVER'; - $r[0]['userID'] = -1; + $r[0]['userID'] = null; echo json_encode($r); exit; } @@ -40,7 +40,7 @@ $chatLockDown = false; // } // } -require('../includes/chats.php'); +require_once('../includes/chats.php'); $sent = false; @@ -52,7 +52,7 @@ if (isset($_REQUEST['messages'])) { $r[0]['message'] = 'You have been muted; You are muted until '.$date." (The current time is: ".date("Y-m-d H:i:s").")"; $r[0]['secondsSince'] = 0; $r[0]['displayName'] = 'SERVER'; - $r[0]['userID'] = -1; + $r[0]['userID'] = null; echo json_encode($r); exit; } @@ -62,7 +62,7 @@ if (isset($_REQUEST['messages'])) { $r[0]['message'] = 'Chat Lockdown has been activated. Messages are not being accepted'; $r[0]['secondsSince'] = 0; $r[0]['displayName'] = 'SERVER'; - $r[0]['userID'] = -1; + $r[0]['userID'] = null; echo json_encode($r); exit; } @@ -78,7 +78,7 @@ if (isset($_REQUEST['messages'])) { //Admin only commands if ($_SESSION['isAdmin'] == true) { if ($command == 'say') { - $insertID = addchat(-1, substr($message, 5)); + $insertID = addchat(null, substr($message, 5)); } } //javascript based commands: @@ -89,7 +89,7 @@ if (isset($_REQUEST['messages'])) { $r[0]['serverMessage'] = 'true'; $r[0]['message'] = "Commands: /help /time /spoiler /me. Surround text with ** for bold * for italics and ~~ for strikethrough. Chat by Pathery.com"; $r[0]['secondsSince'] = 0; - $r[0]['userID'] = -1; + $r[0]['userID'] = null; echo json_encode($r); exit; } @@ -97,7 +97,7 @@ if (isset($_REQUEST['messages'])) { $r[0]['serverMessage'] = 'true'; $r[0]['message'] = "Server Time: ".date('l jS \of F Y h:i:s A'); $r[0]['secondsSince'] = 0; - $r[0]['userID'] = -1; + $r[0]['userID'] = null; echo json_encode($r); exit; } @@ -157,6 +157,7 @@ function chatFilter($chat) { $chat = str_ireplace("sucks ass", "is dumb", $chat); $chat = str_ireplace("suck ass", "are dumb", $chat); $chat = str_ireplace("damnit", "do'h", $chat); + $chat = str_ireplace("sonuvabitch", "fiddlesticks", $chat); $chat = str_ireplace("a bitch", "an engaging conversationalist", $chat); $chat = str_ireplace("bitch", "engaging conversationalist", $chat); @@ -182,6 +183,7 @@ function chatFilter($chat) { $chat = str_ireplace("i just pwned Snap", "Snap just totally pwned me ^^", $chat); $chat = str_ireplace("i just pwned Blue", "Blue just epicly pwned me the with chat filter", $chat); $chat = str_ireplace("language filter", "highly educated team of monkeys employed to filter bad language", $chat); + $chat = str_ireplace("chat filter", "highly educated team of monkeys employed to filter bad language", $chat); return $chat; } ?> \ No newline at end of file diff --git a/db updates.sql b/db updates.sql index 9a20ade..26495b3 100644 --- a/db updates.sql +++ b/db updates.sql @@ -1,10 +1,60 @@ -- db updates reset after patch on March 24th. ---Dialog to challenges: +-- Dialog to challenges: ALTER TABLE `challenges` ADD `dialogStart` VARCHAR( 200 ) DEFAULT NULL , ADD `dialogFail` VARCHAR( 200 ) DEFAULT NULL , ADD `dialogSuccess` VARCHAR( 200 ) DEFAULT NULL ; -- Add index necessary for stats updates ALTER TABLE `bluePathery`.`solutions` -ADD INDEX `mapIDMoves` ( `mapID` , `moves` ) \ No newline at end of file +ADD INDEX `mapIDMoves` ( `mapID` , `moves` ); + +-- Remove unnecessary table +DROP TABLE `guestSolutions`; +DROP TABLE `statistics`; + +-- ADD FOREIGN KEY CONSTRAINTS -- +-- Achievements +DELETE FROM achievements WHERE userID NOT IN (SELECT ID from users); +ALTER TABLE `achievements` ADD FOREIGN KEY ( `userID` ) REFERENCES `users` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- Challenges +ALTER TABLE `challenges` ADD FOREIGN KEY ( `mapID` ) REFERENCES `challengeMaps` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- Challenge solutions +DELETE FROM challengeSolutions WHERE userID NOT IN (SELECT ID from users); +ALTER TABLE `challengeSolutions` ADD FOREIGN KEY ( `userID` ) REFERENCES `users` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE `challengeSolutions` ADD FOREIGN KEY ( `challengeID` ) REFERENCES `challenges` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- Chat +ALTER TABLE `chat` CHANGE `userID` `userID` INT( 11 ) NULL; +UPDATE chat SET userID = NULL WHERE userID <= 0; +ALTER TABLE `chat` ADD FOREIGN KEY ( `userID` ) REFERENCES `users` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- Email Queue +ALTER TABLE `emailQueue` ADD FOREIGN KEY ( `emailID` ) REFERENCES `emails` (`ID`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- Emails +ALTER TABLE `emails` CHANGE `fromUserID` `fromUserID` INT( 11 ) NULL; +UPDATE emails SET fromUserID = NULL WHERE fromUserID <= 0; +ALTER TABLE `emails` ADD FOREIGN KEY ( `fromUserID` ) REFERENCES `users` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- MapOfTheDay +DELETE FROM mapOfTheDay WHERE mapID NOT IN (SELECT ID FROM maps); +ALTER TABLE `mapOfTheDay` ADD FOREIGN KEY ( `mapID` ) REFERENCES `maps` (`ID`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- Solutions +DELETE FROM `solutions` WHERE userID NOT IN (SELECT ID FROM users); +ALTER TABLE `solutions` ADD FOREIGN KEY ( `userID` ) REFERENCES `users` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE `solutions` ADD FOREIGN KEY ( `mapID` ) REFERENCES `maps` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- Unlocks +ALTER TABLE `unlocks` ENGINE = InnoDB; -- Looks like this was forgotten? +DELETE FROM unlocks WHERE userID NOT IN (SELECT ID FROM users); +ALTER TABLE `unlocks` ADD FOREIGN KEY ( `userID` ) REFERENCES `users` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- UserData +ALTER TABLE `userData` ENGINE = InnoDB; -- Looks like this was forgotten? +ALTER TABLE `userData` ADD FOREIGN KEY ( `userID` ) REFERENCES `users` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- END ADD FOREIGN KEY CONSTRAINTS \ No newline at end of file diff --git a/includes/emails.php b/includes/emails.php index 74658ad..7a54a89 100644 --- a/includes/emails.php +++ b/includes/emails.php @@ -81,11 +81,11 @@ function SendQueuedEmail() { return true; } -function QueueEmail($fromUserID, $to, $subject, $body, $priority = 100, $fromServer = false) { +function QueueEmail($fromUserID, $to, $subject, $body, $priority = 100) { global $mysqli; //TODO !! allow a way for users to refer-friends via email. Here. - if ($fromServer == false) { + if ($fromUserID !== null) { return false; //Email tracker is not added !! $res = $mysqli->query("SELECT `fromUserID` FROM emailTracker WHERE `fromUserID` = '$fromUserID'"); diff --git a/includes/mapoftheday.php b/includes/mapoftheday.php index 2e3b5aa..669abb9 100644 --- a/includes/mapoftheday.php +++ b/includes/mapoftheday.php @@ -1 +1 @@ - NOW() ORDER BY mapOfTheDay.mapDate DESC LIMIT 1 "; $result = mysql_query($sql); if (mysql_num_rows($result) == 0) { return null; } //A map was found, so return it $r['code'] = mysql_result($result, 0, 'code'); $r['map'] = GenerateMapByCode($r['code']); $r['id'] = mysql_result($result, 0, 'ID'); return $r; } /** * Generates all the new maps for the day. Includes a critical section so maps aren't generated more * than once per day. */ function generateNewMapsOfTheDay() { ignore_user_abort(true); set_time_limit(0); $lock = acquireMotdLock(); try { //Double check that we still need to generate a new map for today. Since that was done outside of the lock, it's possible //two threads could reach this point at the same time. $latestSpecialMap = getMapOfTheDayInternal(MapType::Special); $latestWeeklyMap = getMapOfTheDayInternal(MapType::Weekly); if($latestSpecialMap != null && $latestWeeklyMap != null) { releaseMotdLock($lock); return; } //The rest of the code in the try{} can be assumed to only be run once a day //Generate the maps $mapCode = array(); if($latestSpecialMap == null) { $mapCode[MapType::Simple] = generateNewMapCode(MapType::Simple); $mapCode[MapType::Normal] = generateNewMapCode(MapType::Normal); $mapCode[MapType::Complex] = generateNewMapCode(MapType::Complex); $mapCode[MapType::Special] = generateNewMapCode(MapType::Special); } //The weekly maps might not need to be generated tonight. Check if it does first if($latestWeeklyMap == null) { $mapCode[MapType::Weekly] = generateNewMapCode(MapType::Weekly); } //Add the actual maps to the DB addNewMapsToDB($mapCode); //Update the player-statistics if($latestSpecialMap == null) { //Add points for yesterday's maps if we just created the daily maps addStatsForYesterdaysMaps(); } if($latestWeeklyMap == null) { //Add points for the weekly map, which is created at noon rather than midnight addStatsForMiddayMaps(); //Note that there could potentially be an issue adding points twice if server goes from noon on Saturday //(or whenever we generate the new weekly map) to midnight the next morning without anyone visiting the site. //That's probably not going to be an issue on the production site, however... } } catch (Exception $exc) { /* Ignore... :| */ } //try/catch above is necessary to make sure an exception doesn't prevent us from releasing the lock! releaseMotdLock($lock); } /** * Generates a single map of the given type, and returns its "map code" */ function generateNewMapCode($type) { // If you want to modify the maps created! This is the line //GenerateMap($rows, $cols, $rockchance, $numBlocks = -1, $cp = -1, $tp = -1) switch ($type) { case MapType::Simple: $map = GenerateMap(13, 7, 12, rand(7, 10), rand(0, 1), 0, 'Simple'); break; case MapType::Normal: $map = GenerateMap(15, 9, 7, rand(11, 13), rand(1, 3) + rand(0, 1), 0, 'Normal'); break; case MapType::Complex: $map = getRandomComplexMap(); break; case MapType::Special: $map = getRandomSpecialMap(); break; case MapType::Weekly: $map = getRandomWeeklyMap(); break; default: $map = GenerateMap(rand(13, 18), rand(10, 14), rand(6, 9)); break; } return GenerateMapCode($map); } function addNewMapsToDB($mapCode) { foreach($mapCode as $code) { $map = new map($code); $codeSafe = mysql_escape_string($code); $nameSafe = mysql_escape_string($map->name); $codeValuesAry[] = " ('$codeSafe', '$nameSafe')"; } $codeValues = implode(",", $codeValuesAry); //Insert all the maps at once. $sql = "INSERT INTO `maps` (`code`, `name`) VALUES $codeValues"; //Did we succeed? $result = mysql_query($sql); if (!$result) { releaseMotdLock($lock); die("Error on inserting maps, offending SQL: $sql"); } //Get the ID of the first insert. $mapIDI = mysql_insert_id(); foreach ($mapCode as $type => $code) { if($type == MapType::Weekly) { //Weekly map lasts MAP_EXPIRE_TIME_WEEKLY days. We also want to offset by 12 hours $numHours = 24*MAP_EXPIRE_TIME_WEEKLY + 12; $expireTime = "ADDDATE(CURDATE(), INTERVAL $numHours HOUR)"; } else { //All other maps are assumed to last one day $expireTime = 'ADDDATE(CURDATE(), INTERVAL 1 DAY)'; } $mapOfTheDayAry[] = "('$mapIDI', '$type', CURDATE(), $expireTime)"; $mapIDI++; } $mapOfTheDayValues = implode(",", $mapOfTheDayAry); $sql = "INSERT INTO `mapOfTheDay` (`mapID`, `mapType`, `mapDate`, `mapExpireTime`) VALUES $mapOfTheDayValues "; $result = mysql_query($sql); if (!$result) { releaseMotdLock($lock); die("Error on insert into mapOfTheDay SQL: $sql"); } else { //Post it in the chat! addchat(-1, "New maps added!"); } } /** * The file locked in order to create serialize map-creations, since our DB doesn't support transactions... */ define('FILE_MOTD_LOCK', './motdLockFile'); /** * Obtains the mutex used for creating the Map Of The Day, so that race-conditions cannot occur (like two threads * creating and inserting the maps into the database at the same time, which has happened */ function acquireMotdLock() { $fileHandle = fopen(FILE_MOTD_LOCK, 'a+'); flock($fileHandle, LOCK_EX); return $fileHandle; } /** * Releases the lock acquired from acquireMotdLock */ function releaseMotdLock($fileHandle) { if($fileHandle) flock($fileHandle, LOCK_UN); } function getRandomComplexMap() { $random = weight(0, 0, 0, 0, 0, 0, 0, 1); switch ($random) { case 0: $map = GenerateMap(19, 9, rand(7, 9), rand(14, 16), rand(2, 5), rand(1, 2), 'Complex'); break; case 1: $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath = insertPoint($reversePath, 'abc'); $reversePath = insertPoint($reversePath, 'tu'); $myparams['checkpoints'] = 3; $myparams['teleports'] = 0; $myparams['rockchance'] = 7; $myparams['walls'] = 12; $myparams['name'] = 'Reverse Order'; $map = GenerateShapedMap($reversePath, $myparams); break; } return $map; } function getRandomSpecialMap() { //This can be used to add additional weight to certain maps that we like. $random = weight(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); //FORCE: //$random = 11; $shape = array(); $params = array(); switch ($random) { //===================================== case 0: //Thirty $map = GenerateMap( 18, 14, 20, //width, height, rocks weight(30), //Walls weight(1), //Checkpoints weight(1), //Teleports 'Thirty' ); break; //===================================== case 1: //Finite $map = GenerateMap( 18, 9, 7, //width, height, rocks weight(15, 16, 17), //Walls weight(0), //Checkpoints weight(0), //Teleports 'Finite' ); break; //===================================== case 2: //ABC's $map = GenerateMap( 19, 11, 12, //width, height, rocks weight(20, 21, 22, 22, 23), //Walls weight(3), //Checkpoints weight(0), //Teleports "ABC's " ); break; //===================================== case 3: //Tele Madness $map = GenerateMap( 17, 12, 10, //width, height, rocks weight(17, 18), //Walls weight(1), //Checkpoints weight(5), //Teleports 'Teleport Madness' ); break; //===================================== case 4: //Rocky Maze $map = GenerateMap( 19, 15, 5, //width, height, rocks weight(16, 17, 18), //Walls weight(1, 2, 2, 2, 3, 3), //Checkpoints weight(0), //Teleports 'Rocky Maze' ); break; //===================================== case 5: //Side to Side $map = GenerateMap( 26, 6, 12, //width, height, rocks weight(17, 18, 19), //Walls weight(2, 2, 2, 3, 3), //Checkpoints weight(3, 3, 3, 4), //Teleports 'Side to Side' ); break; //===================================== case 6: //Ultimate's Random map: //Create shape $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; //Insert points $shape = insertPoint($shape, "sfabcr", $target = '?'); $shape = insertPoint($shape, weight("tu", "d", "tu", "", ""), $target = '?'); //Set params $params['rockchance'] = 10; $params['walls'] = weight(21, 20, 22, 20, 21); $params['name'] = 'Ultimate Random'; //Put it all together. $map = GenerateShapedMap($shape, $params); break; //===================================== //===================================== case 7: //Dual map $dualmapa[] = "s???????????????????f"; $dualmapa[] = "s???????????????????f"; $dualmapa[] = "s???????????????????f"; $dualmapa[] = "s???????????????????f"; $dualmapa[] = "s???????????????????f"; $dualmapa[] = "s???????????????????f"; $dualmapa[] = "oqqqqqqqqqqqqqqqqqqqo"; $dualmapb[] = "s???????????????????f"; $dualmapb[] = "s???????????????????f"; $dualmapb[] = "s???????????????????f"; $dualmapb[] = "s???????????????????f"; $dualmapb[] = "s???????????????????f"; $dualmapb[] = "s???????????????????f"; $dualmapa = insertPoint($dualmapa, 'abc'); $dualmapb = insertPoint($dualmapb, 'abc'); $dualmap = array_merge($dualmapa, $dualmapb); $dualmap = insertPoint($dualmap, 'tu'); $myparams['checkpoints'] = 3; $myparams['teleports'] = 1; $myparams['rockchance'] = 9; $myparams['walls'] = weight(20, 20, 21, 21, 22, 23); $myparams['name'] = 'Seeing Double'; $map = GenerateShapedMap($dualmap, $myparams); break; //===================================== //===================================== case 8: //Centralized $myshape[] = "ooooooooooooooooooo"; $myshape[] = "o?????????????????o"; $myshape[] = "o?????????????????o"; $myshape[] = "o?????????????????o"; $myshape[] = "o???????fos???????o"; $myshape[] = "o?????????????????o"; $myshape[] = "o?????????????????o"; $myshape[] = "o?????????????????o"; $myshape[] = "ooooooooooooooooooo"; $myshape = insertPoint($myshape, "abc", $target = '?'); $myshape = insertPoint($myshape, weight("tu", "d", "tud", ""), $target = '?'); $myparams['rockchance'] = 7; $myparams['walls'] = weight(17, 18, 19, 18, 17); $myparams['name'] = 'Centralized'; $map = GenerateShapedMap($myshape, $myparams); break; //===================================== //===================================== case 9: //Dualing paths $dualingPaths[] = 'so??????????????xf'; $dualingPaths[] = 'so??????????????xf'; $dualingPaths[] = 'so??????????????xf'; $dualingPaths[] = 'so??????????????xf'; $dualingPaths[] = 'Xo??????????????ox'; $dualingPaths[] = 'fX??????????????oS'; $dualingPaths[] = 'fX??????????????oS'; $dualingPaths[] = 'fX??????????????oS'; $dualingPaths[] = 'fX??????????????oS'; $dualingPaths = insertPoint($dualingPaths, 'abc'); $dualingPaths = insertPoint($dualingPaths, weight('xx', 'xxx', 'xxxx').weight('XX', 'XXX', 'XXXX')); $myparams['checkpoints'] = 3; $myparams['teleports'] = 0; $myparams['rockchance'] = 9; $myparams['walls'] = 13; $myparams['name'] = 'Dualing paths'; $map = GenerateShapedMap($dualingPaths, $myparams); break; //===================================== //===================================== case 10: //Unlimited $unlimited[] = 'so?o?o?o?o?o?o?of'; $unlimited[] = 's???????????????f'; $unlimited[] = 'so?????????????of'; $unlimited[] = 's???????????????f'; $unlimited[] = 'so?????????????of'; $unlimited[] = 's???????????????f'; $unlimited[] = 'so?????????????of'; $unlimited[] = 's???????????????f'; $unlimited[] = 'so?o?o?o?o?o?o?of'; $unlimited = insertPoint($unlimited, 'abc'); $unlimited = insertPoint($unlimited, weight('tu', 'dtu')); $myparams['checkpoints'] = 3; $myparams['teleports'] = 1; $myparams['rockchance'] = 9; $myparams['walls'] = 999; $myparams['name'] = 'Unlimited'; $map = GenerateShapedMap($unlimited, $myparams); break; //===================================== //===================================== case 11: //Thirty Too $thirtyTooShape[] = 's??????????????????Xf'; $thirtyTooShape[] = '????????????????????X'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = 'x????????????????????'; $thirtyTooShape[] = 'fx??????????????????S'; $thirtyTooShape = insertPoint($thirtyTooShape, 'atupppp'); $myparams['checkpoints'] = 2; $myparams['teleports'] = 1; $myparams['rockchance'] = 20; $myparams['walls'] = 32; $myparams['name'] = 'Thirty Too'; $map = GenerateShapedMap($thirtyTooShape, $myparams); break; //===================================== } return $map; } function getRandomWeeklyMap() { //This can be used to add additional weight to certain maps that we like. $random = weight(0); //FORCE: //$random = 1; $shape = array(); $params = array(); switch ($random) { case 0: $ultraComplex[] = "sooooooooooooooooooooooor"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "sooooooooooooooooooooooor"; $ultraComplex = insertPoint($ultraComplex, 'abcde'); $ultraComplex = insertPoint($ultraComplex, weight('a', 'b', 'c', 'd', 'e')); $ultraComplex = insertPoint($ultraComplex, weight('a', 'b', 'c', 'd', 'e', 'u', 'n', 'j', 'h', 'n')); $ultraComplex = insertPoint($ultraComplex, weight('a', 'b', 'c', 'd', 'e', 'u', 'n', 'j', 'h', 'n')); $ultraComplex = insertPoint($ultraComplex, 'tumnghij'); $myparams['checkpoints'] = 5; $myparams['teleports'] = 3; $myparams['rockchance'] = 12; $myparams['walls'] = 50; $myparams['name'] = 'Ultra Complex'; $map = GenerateShapedMap($ultraComplex, $myparams); break; case 1: $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage = insertPoint($mirrorImage, 'abcdetnglrrrrr'); $mirrorImageB = $mirrorImage; foreach ($mirrorImageB as &$value) { $value = str_replace("t", "u", $value); $value = str_replace("n", "m", $value); $value = str_replace("g", "h", $value); $value = str_replace("l", "k", $value); $value = str_replace("f", "s", $value); $value = str_replace("S", "f", $value); } $mirrorImage[] = "qqqqqqqqqqqqqqqqqqqqqqqqq"; $mirrorImage = array_merge($mirrorImage, $mirrorImageB); $myparams['checkpoints'] = 5; $myparams['teleports'] = 3; $myparams['rockchance'] = 400; $myparams['walls'] = 999; $myparams['name'] = 'Mirror Image'; $map = GenerateShapedMap($mirrorImage, $myparams); break; } return $map; } ?> \ No newline at end of file + NOW() ORDER BY mapOfTheDay.mapDate DESC LIMIT 1 "; $result = mysql_query($sql); if (mysql_num_rows($result) == 0) { return null; } //A map was found, so return it $r['code'] = mysql_result($result, 0, 'code'); $r['map'] = GenerateMapByCode($r['code']); $r['id'] = mysql_result($result, 0, 'ID'); return $r; } /** * Generates all the new maps for the day. Includes a critical section so maps aren't generated more * than once per day. */ function generateNewMapsOfTheDay() { ignore_user_abort(true); set_time_limit(0); $lock = acquireMotdLock(); try { //Double check that we still need to generate a new map for today. Since that was done outside of the lock, it's possible //two threads could reach this point at the same time. $latestSpecialMap = getMapOfTheDayInternal(MapType::Special); $latestWeeklyMap = getMapOfTheDayInternal(MapType::Weekly); if($latestSpecialMap != null && $latestWeeklyMap != null) { releaseMotdLock($lock); return; } //The rest of the code in the try{} can be assumed to only be run once a day //Generate the maps $mapCode = array(); if($latestSpecialMap == null) { $mapCode[MapType::Simple] = generateNewMapCode(MapType::Simple); $mapCode[MapType::Normal] = generateNewMapCode(MapType::Normal); $mapCode[MapType::Complex] = generateNewMapCode(MapType::Complex); $mapCode[MapType::Special] = generateNewMapCode(MapType::Special); } //The weekly maps might not need to be generated tonight. Check if it does first if($latestWeeklyMap == null) { $mapCode[MapType::Weekly] = generateNewMapCode(MapType::Weekly); } //Add the actual maps to the DB addNewMapsToDB($mapCode); //Update the player-statistics if($latestSpecialMap == null) { //Add points for yesterday's maps if we just created the daily maps addStatsForYesterdaysMaps(); } if($latestWeeklyMap == null) { //Add points for the weekly map, which is created at noon rather than midnight addStatsForMiddayMaps(); //Note that there could potentially be an issue adding points twice if server goes from noon on Saturday //(or whenever we generate the new weekly map) to midnight the next morning without anyone visiting the site. //That's probably not going to be an issue on the production site, however... } } catch (Exception $exc) { /* Ignore... :| */ } //try/catch above is necessary to make sure an exception doesn't prevent us from releasing the lock! releaseMotdLock($lock); } /** * Generates a single map of the given type, and returns its "map code" */ function generateNewMapCode($type) { // If you want to modify the maps created! This is the line //GenerateMap($rows, $cols, $rockchance, $numBlocks = -1, $cp = -1, $tp = -1) switch ($type) { case MapType::Simple: $map = GenerateMap(13, 7, 12, rand(7, 10), rand(0, 1), 0, 'Simple'); break; case MapType::Normal: $map = GenerateMap(15, 9, 7, rand(11, 13), rand(1, 3) + rand(0, 1), 0, 'Normal'); break; case MapType::Complex: $map = getRandomComplexMap(); break; case MapType::Special: $map = getRandomSpecialMap(); break; case MapType::Weekly: $map = getRandomWeeklyMap(); break; default: $map = GenerateMap(rand(13, 18), rand(10, 14), rand(6, 9)); break; } return GenerateMapCode($map); } function addNewMapsToDB($mapCode) { foreach($mapCode as $code) { $map = new map($code); $codeSafe = mysql_escape_string($code); $nameSafe = mysql_escape_string($map->name); $codeValuesAry[] = " ('$codeSafe', '$nameSafe')"; } $codeValues = implode(",", $codeValuesAry); //Insert all the maps at once. $sql = "INSERT INTO `maps` (`code`, `name`) VALUES $codeValues"; //Did we succeed? $result = mysql_query($sql); if (!$result) { releaseMotdLock($lock); die("Error on inserting maps, offending SQL: $sql"); } //Get the ID of the first insert. $mapIDI = mysql_insert_id(); foreach ($mapCode as $type => $code) { if($type == MapType::Weekly) { //Weekly map lasts MAP_EXPIRE_TIME_WEEKLY days. We also want to offset by 12 hours $numHours = 24*MAP_EXPIRE_TIME_WEEKLY + 12; $expireTime = "ADDDATE(CURDATE(), INTERVAL $numHours HOUR)"; } else { //All other maps are assumed to last one day $expireTime = 'ADDDATE(CURDATE(), INTERVAL 1 DAY)'; } $mapOfTheDayAry[] = "('$mapIDI', '$type', CURDATE(), $expireTime)"; $mapIDI++; } $mapOfTheDayValues = implode(",", $mapOfTheDayAry); $sql = "INSERT INTO `mapOfTheDay` (`mapID`, `mapType`, `mapDate`, `mapExpireTime`) VALUES $mapOfTheDayValues "; $result = mysql_query($sql); if (!$result) { releaseMotdLock($lock); die("Error on insert into mapOfTheDay SQL: $sql"); } else { //Post it in the chat! addchat(null, "New maps added!"); } } /** * The file locked in order to create serialize map-creations, since our DB doesn't support transactions... */ define('FILE_MOTD_LOCK', './motdLockFile'); /** * Obtains the mutex used for creating the Map Of The Day, so that race-conditions cannot occur (like two threads * creating and inserting the maps into the database at the same time, which has happened */ function acquireMotdLock() { $fileHandle = fopen(FILE_MOTD_LOCK, 'a+'); flock($fileHandle, LOCK_EX); return $fileHandle; } /** * Releases the lock acquired from acquireMotdLock */ function releaseMotdLock($fileHandle) { if($fileHandle) flock($fileHandle, LOCK_UN); } function getRandomComplexMap() { $random = weight(0, 0, 0, 0, 0, 0, 0, 1); switch ($random) { case 0: $map = GenerateMap(19, 9, rand(7, 9), rand(14, 16), rand(2, 5), rand(1, 2), 'Complex'); break; case 1: $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath[] = 'fo?????????????oS'; $reversePath = insertPoint($reversePath, 'abc'); $reversePath = insertPoint($reversePath, 'tu'); $myparams['checkpoints'] = 3; $myparams['teleports'] = 0; $myparams['rockchance'] = 7; $myparams['walls'] = 12; $myparams['name'] = 'Reverse Order'; $map = GenerateShapedMap($reversePath, $myparams); break; } return $map; } function getRandomSpecialMap() { //This can be used to add additional weight to certain maps that we like. $random = weight(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); //FORCE: //$random = 11; $shape = array(); $params = array(); switch ($random) { //===================================== case 0: //Thirty $map = GenerateMap( 18, 14, 20, //width, height, rocks weight(30), //Walls weight(1), //Checkpoints weight(1), //Teleports 'Thirty' ); break; //===================================== case 1: //Finite $map = GenerateMap( 18, 9, 7, //width, height, rocks weight(15, 16, 17), //Walls weight(0), //Checkpoints weight(0), //Teleports 'Finite' ); break; //===================================== case 2: //ABC's $map = GenerateMap( 19, 11, 12, //width, height, rocks weight(20, 21, 22, 22, 23), //Walls weight(3), //Checkpoints weight(0), //Teleports "ABC's " ); break; //===================================== case 3: //Tele Madness $map = GenerateMap( 17, 12, 10, //width, height, rocks weight(17, 18), //Walls weight(1), //Checkpoints weight(5), //Teleports 'Teleport Madness' ); break; //===================================== case 4: //Rocky Maze $map = GenerateMap( 19, 15, 5, //width, height, rocks weight(16, 17, 18), //Walls weight(1, 2, 2, 2, 3, 3), //Checkpoints weight(0), //Teleports 'Rocky Maze' ); break; //===================================== case 5: //Side to Side $map = GenerateMap( 26, 6, 12, //width, height, rocks weight(17, 18, 19), //Walls weight(2, 2, 2, 3, 3), //Checkpoints weight(3, 3, 3, 4), //Teleports 'Side to Side' ); break; //===================================== case 6: //Ultimate's Random map: //Create shape $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; $shape[] = "??????????????????"; //Insert points $shape = insertPoint($shape, "sfabcr", $target = '?'); $shape = insertPoint($shape, weight("tu", "d", "tu", "", ""), $target = '?'); //Set params $params['rockchance'] = 10; $params['walls'] = weight(21, 20, 22, 20, 21); $params['name'] = 'Ultimate Random'; //Put it all together. $map = GenerateShapedMap($shape, $params); break; //===================================== //===================================== case 7: //Dual map $dualmapa[] = "s???????????????????f"; $dualmapa[] = "s???????????????????f"; $dualmapa[] = "s???????????????????f"; $dualmapa[] = "s???????????????????f"; $dualmapa[] = "s???????????????????f"; $dualmapa[] = "s???????????????????f"; $dualmapa[] = "oqqqqqqqqqqqqqqqqqqqo"; $dualmapb[] = "s???????????????????f"; $dualmapb[] = "s???????????????????f"; $dualmapb[] = "s???????????????????f"; $dualmapb[] = "s???????????????????f"; $dualmapb[] = "s???????????????????f"; $dualmapb[] = "s???????????????????f"; $dualmapa = insertPoint($dualmapa, 'abc'); $dualmapb = insertPoint($dualmapb, 'abc'); $dualmap = array_merge($dualmapa, $dualmapb); $dualmap = insertPoint($dualmap, 'tu'); $myparams['checkpoints'] = 3; $myparams['teleports'] = 1; $myparams['rockchance'] = 9; $myparams['walls'] = weight(20, 20, 21, 21, 22, 23); $myparams['name'] = 'Seeing Double'; $map = GenerateShapedMap($dualmap, $myparams); break; //===================================== //===================================== case 8: //Centralized $myshape[] = "ooooooooooooooooooo"; $myshape[] = "o?????????????????o"; $myshape[] = "o?????????????????o"; $myshape[] = "o?????????????????o"; $myshape[] = "o???????fos???????o"; $myshape[] = "o?????????????????o"; $myshape[] = "o?????????????????o"; $myshape[] = "o?????????????????o"; $myshape[] = "ooooooooooooooooooo"; $myshape = insertPoint($myshape, "abc", $target = '?'); $myshape = insertPoint($myshape, weight("tu", "d", "tud", ""), $target = '?'); $myparams['rockchance'] = 7; $myparams['walls'] = weight(17, 18, 19, 18, 17); $myparams['name'] = 'Centralized'; $map = GenerateShapedMap($myshape, $myparams); break; //===================================== //===================================== case 9: //Dualing paths $dualingPaths[] = 'so??????????????xf'; $dualingPaths[] = 'so??????????????xf'; $dualingPaths[] = 'so??????????????xf'; $dualingPaths[] = 'so??????????????xf'; $dualingPaths[] = 'Xo??????????????ox'; $dualingPaths[] = 'fX??????????????oS'; $dualingPaths[] = 'fX??????????????oS'; $dualingPaths[] = 'fX??????????????oS'; $dualingPaths[] = 'fX??????????????oS'; $dualingPaths = insertPoint($dualingPaths, 'abc'); $dualingPaths = insertPoint($dualingPaths, weight('xx', 'xxx', 'xxxx').weight('XX', 'XXX', 'XXXX')); $myparams['checkpoints'] = 3; $myparams['teleports'] = 0; $myparams['rockchance'] = 9; $myparams['walls'] = 13; $myparams['name'] = 'Dualing paths'; $map = GenerateShapedMap($dualingPaths, $myparams); break; //===================================== //===================================== case 10: //Unlimited $unlimited[] = 'so?o?o?o?o?o?o?of'; $unlimited[] = 's???????????????f'; $unlimited[] = 'so?????????????of'; $unlimited[] = 's???????????????f'; $unlimited[] = 'so?????????????of'; $unlimited[] = 's???????????????f'; $unlimited[] = 'so?????????????of'; $unlimited[] = 's???????????????f'; $unlimited[] = 'so?o?o?o?o?o?o?of'; $unlimited = insertPoint($unlimited, 'abc'); $unlimited = insertPoint($unlimited, weight('tu', 'dtu')); $myparams['checkpoints'] = 3; $myparams['teleports'] = 1; $myparams['rockchance'] = 9; $myparams['walls'] = 999; $myparams['name'] = 'Unlimited'; $map = GenerateShapedMap($unlimited, $myparams); break; //===================================== //===================================== case 11: //Thirty Too $thirtyTooShape[] = 's??????????????????Xf'; $thirtyTooShape[] = '????????????????????X'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = '?????????????????????'; $thirtyTooShape[] = 'x????????????????????'; $thirtyTooShape[] = 'fx??????????????????S'; $thirtyTooShape = insertPoint($thirtyTooShape, 'atupppp'); $myparams['checkpoints'] = 2; $myparams['teleports'] = 1; $myparams['rockchance'] = 20; $myparams['walls'] = 32; $myparams['name'] = 'Thirty Too'; $map = GenerateShapedMap($thirtyTooShape, $myparams); break; //===================================== } return $map; } function getRandomWeeklyMap() { //This can be used to add additional weight to certain maps that we like. $random = weight(0); //FORCE: //$random = 1; $shape = array(); $params = array(); switch ($random) { case 0: $ultraComplex[] = "sooooooooooooooooooooooor"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "so?????????????????????or"; $ultraComplex[] = "ro?????????????????????of"; $ultraComplex[] = "sooooooooooooooooooooooor"; $ultraComplex = insertPoint($ultraComplex, 'abcde'); $ultraComplex = insertPoint($ultraComplex, weight('a', 'b', 'c', 'd', 'e')); $ultraComplex = insertPoint($ultraComplex, weight('a', 'b', 'c', 'd', 'e', 'u', 'n', 'j', 'h', 'n')); $ultraComplex = insertPoint($ultraComplex, weight('a', 'b', 'c', 'd', 'e', 'u', 'n', 'j', 'h', 'n')); $ultraComplex = insertPoint($ultraComplex, 'tumnghij'); $myparams['checkpoints'] = 5; $myparams['teleports'] = 3; $myparams['rockchance'] = 12; $myparams['walls'] = 50; $myparams['name'] = 'Ultra Complex'; $map = GenerateShapedMap($ultraComplex, $myparams); break; case 1: $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage[] = "fo???????????????????oS"; $mirrorImage = insertPoint($mirrorImage, 'abcdetnglrrrrr'); $mirrorImageB = $mirrorImage; foreach ($mirrorImageB as &$value) { $value = str_replace("t", "u", $value); $value = str_replace("n", "m", $value); $value = str_replace("g", "h", $value); $value = str_replace("l", "k", $value); $value = str_replace("f", "s", $value); $value = str_replace("S", "f", $value); } $mirrorImage[] = "qqqqqqqqqqqqqqqqqqqqqqqqq"; $mirrorImage = array_merge($mirrorImage, $mirrorImageB); $myparams['checkpoints'] = 5; $myparams['teleports'] = 3; $myparams['rockchance'] = 400; $myparams['walls'] = 999; $myparams['name'] = 'Mirror Image'; $map = GenerateShapedMap($mirrorImage, $myparams); break; } return $map; } ?> \ No newline at end of file diff --git a/pages/chat.php b/pages/chat.php index 8d3501b..4f903a8 100644 --- a/pages/chat.php +++ b/pages/chat.php @@ -1,7 +1,7 @@ @@ -76,7 +76,7 @@ function getChatDone(data) { if (chat.userID == userObj.ID) { strClass += ' self'; } - if (chat.userID == '-1') { + if (chat.userID == null || chat.userID <= 0) { strClass += ' server'; chat.displayName = 'SERVER' } @@ -110,7 +110,7 @@ function getChatDone(data) { p = p+ " "; p = p+ "
"; - if (chat.userID == '-1') { + if (chat.userID == null || chat.userID <= 0) { p = p+ ""; } else { p = p+ ""; diff --git a/pages/cp.php b/pages/cp.php index f6efd30..d5fff2b 100644 --- a/pages/cp.php +++ b/pages/cp.php @@ -143,25 +143,5 @@ $displayName = $_SESSION['displayName']; diff --git a/pages/login.php b/pages/login.php index 07662c3..04b4083 100644 --- a/pages/login.php +++ b/pages/login.php @@ -139,7 +139,7 @@ try { throwLoginError($d, "Unknown DB Registration failure"); exit; } - addchat(-1, "New user registered: \"$display\""); + addchat(null, "New user registered: \"$display\""); sendNewUserEmail($userID, $email, $display, $dateJoined); } //If 'remember me' use this for cookie password @@ -193,7 +193,7 @@ Happy Pathing, The Pathery Team "; $emailSubject = 'Welcome to Pathery.com!'; - QueueEmail(0, $email, $emailSubject, $emailBody, 5, true); + QueueEmail(null, $email, $emailSubject, $emailBody, 5); } function throwLoginError($data, $explination) { diff --git a/pages/massemail.php b/pages/massemail.php index 2d80b17..d009cf9 100644 --- a/pages/massemail.php +++ b/pages/massemail.php @@ -69,7 +69,7 @@ if (isset($_POST['queueMassEmail']) AND $_POST['queueMassEmail'] == 'true') { $tmpTitle = replaceByArray($tmpTitle, $replacements); echo "$tmpBody
"; //This Sanitizes data - so no worries! - QueueEmail(0, $tmpEmail, $tmpTitle, $tmpBody, 100, true); + QueueEmail(null, $tmpEmail, $tmpTitle, $tmpBody, 100); } echo "Complete!...
"; -- cgit v1.2.3