diff options
author | BlueRaja <BlueRaja.admin@gmail.com> | 2014-05-08 23:50:48 -0500 |
---|---|---|
committer | BlueRaja <BlueRaja.admin@gmail.com> | 2014-05-08 23:50:48 -0500 |
commit | a639bb2fd0e6128b3c92ce789c04619b273d5f5b (patch) | |
tree | 451a279321fcbcd2e1d14141ba3b42bc3dfe8f9e | |
parent | 17478de9c4ba215a43e7bc1b5849bb6041d50827 (diff) | |
parent | 598c2a0195fd95cda53d9067e6d6973048446a27 (diff) | |
download | pathery-a639bb2fd0e6128b3c92ce789c04619b273d5f5b.tar.xz |
Merge branch 'master' of git.raylu.net:pathery
Conflicts:
includes/mapoftheday.php
-rw-r--r-- | ajax/chat.ajax.php | 61 | ||||
-rw-r--r-- | css/chat.css | 4 | ||||
-rw-r--r-- | includes/chats.php | 114 | ||||
-rw-r--r-- | includes/mapoftheday.php | 2 | ||||
-rw-r--r-- | index.php | 6 | ||||
-rw-r--r-- | pages/challengelist.php | 16 | ||||
-rw-r--r-- | pages/chat.php | 110 | ||||
-rw-r--r-- | sounds/charm.mp3 | bin | 10368 -> 11540 bytes | |||
-rw-r--r-- | update notes.txt | 19 |
9 files changed, 282 insertions, 50 deletions
diff --git a/ajax/chat.ajax.php b/ajax/chat.ajax.php index 02a11c6..1574bde 100644 --- a/ajax/chat.ajax.php +++ b/ajax/chat.ajax.php @@ -6,6 +6,17 @@ session_start(); // exit;
// }
+
+//ini_set('display_errors',1);
+//ini_set('display_startup_errors',1);
+//error_reporting(-1);
+
+if (isset($_REQUEST['pollChannelList'])) {
+ require_once('../includes/chats.php');
+ echo json_encode(getChannelList());
+ exit;
+}
+
if (isset($_SESSION['chatLastReset'])) $chatLastReset = $_SESSION['chatLastReset'];
else $chatLastReset = 0;
@@ -13,6 +24,20 @@ if (strtotime('now') - $chatLastReset > 6) { $_SESSION['chatSendCount'] = 0;
$_SESSION['chatLastReset'] = strtotime('now');
}
+
+//T:
+if (rand(1,4) == 2 || true) {
+ $r[0]['serverMessage'] = 'true';
+ $r[0]['isJoinLeave'] = 'true';
+ $r[0]['message'] = "Server Test";
+ $r[0]['secondsSince'] = 0;
+ $r[0]['displayName'] = 'SERVER';
+ $r[0]['userID'] = null;
+ //echo json_encode($r);
+ //exit;
+}
+
+
if (isset($_REQUEST['messages'])) {
$_SESSION['chatSendCount']++;
if ($_SESSION['chatSendCount'] > 4) {
@@ -31,6 +56,8 @@ session_write_close(); $userID = $_SESSION['userID'];
$chatLockDown = false;
+$use_psuedo_longpoll = true;
+
// STOP CHAT?
//$chatLockDown = true;
@@ -42,6 +69,9 @@ $chatLockDown = false; require_once('../includes/chats.php');
+//exit;
+
+enterChannel($userID);
$sent = false;
if (isset($_REQUEST['messages'])) {
@@ -110,36 +140,33 @@ if (isset($_REQUEST['messages'])) { if ($_REQUEST['getChatFromID']) {
$getChatID = $_REQUEST['getChatFromID'];
- if ($sent) {
- //Wait .2 seconds
- usleep(200000);
- //echo "yesSent";
+ if ($sent == true AND $use_psuedo_longpoll == true) {
+ // PSUEDO LONG POLLING: - This loops to try to retrieve
+ // the message you just sent, back from the server.
+
for( $i = 1; $i < 3; $i++) {
- //echo "loop";
$data = getChat($getChatID);
if ($data !== false) {
- //$data['debug'][] = "Count times: $i";
- //$data['debug'][] = "Count value:".count($data);
echo prepareChatData($data);
exit;
}
- //Wait .1 seconds
- usleep(100000);
+ //Wait .01 seconds per loop
+ usleep(10000);
}
}
$json = prepareChatData(getChat($getChatID));
echo $json;
}
-exit;
function prepareChatData($data) {
- if ($data) {
- foreach($data as &$user) {
- //$user['message'] = $user['message'].'write-append';
- $user['secondsSince'] = strtotime($user['dateSent']) - strtotime("now");
- }
- return json_encode($data);
+ if (!$data)
+ {
+ return false;
+ }
+ foreach($data as &$user) {
+ //$user['message'] = $user['message'].'write-append';
+ $user['secondsSince'] = strtotime($user['dateSent']) - strtotime("now");
}
- return $data;
+ return json_encode($data);
}
?>
\ No newline at end of file diff --git a/css/chat.css b/css/chat.css index 5973b4d..105dfaf 100644 --- a/css/chat.css +++ b/css/chat.css @@ -89,7 +89,7 @@ font-family: 'Trebuchet MS1', 'Trebuchet MS', sans-serif; font-size: 16px; display: inline-block; - width: 525px; + width: 315px; padding: 5px 5px 5px 5px; white-space: pre-wrap; /* CSS3 */ white-space: -moz-pre-wrap; /* Firefox */ @@ -122,7 +122,7 @@ } .chatMessage { - width:780px; + width:570px; min-height:35px; margin:1px; display:block; diff --git a/includes/chats.php b/includes/chats.php index 7db4c58..47ecd39 100644 --- a/includes/chats.php +++ b/includes/chats.php @@ -32,6 +32,8 @@ function muteUser($userID, $numMinutes) { return;
}
+
+
function addChat($userID, $message) {
global $mysqli;
if ($message == '') return;
@@ -44,19 +46,23 @@ function addChat($userID, $message) { $ID = $stmt->insert_id;
$stmt->close();
+
+ //Turnicate messages.
+ $deleteFromID = $ID - CHAT_ROWS_TO_KEEP;
+ $mysqli->query("DELETE FROM `chat` WHERE `ID` < $deleteFromID");
+
return $ID;
}
function getChat($startID = 0) {
global $mysqli;
- $array = array();
if (!is_numeric($startID)) return false;
//Not sure why this happens; but just return nothing..
if (!is_object($mysqli)) die("mysqli is not an object");
- $res = $mysqli->query("
+ if ($res = $mysqli->query("
SELECT
chat.ID, chat.userID, chat.message, chat.dateSent,
users.displayName,
@@ -68,7 +74,97 @@ function getChat($startID = 0) { LEFT JOIN `users`
ON chat.userID = users.ID
WHERE chat.ID > '$startID'
- ORDER BY chat.ID ASC
+ ORDER BY chat.dateSent ASC, chat.ID ASC
+ ")) {
+ $array = array();
+ if ($res->num_rows == 0) {
+ $res->close();
+ return false;
+ }
+ while ($response = $res->fetch_assoc()) {
+ $array[] = $response;
+ }
+ $res->close();
+ if (count($array) < 1) return false;
+ return $array;
+ } else {
+ printf("DError: %s\n", $mysqli->error);
+ return false;
+ }
+
+}
+
+
+
+//Enters a user into a channel
+function enterChannel($userID, $channel = 1) {
+ global $mysqli;
+ $stmt = $mysqli->prepare("INSERT INTO `chatUsers`
+ (`userID`, `channel`, `dateEntered`, `isHere`)
+ VALUES (?, ?, NOW(), true)
+
+ ON DUPLICATE KEY UPDATE `isHere` = true, dateLastActive = NOW()
+ ");
+ $stmt->bind_param('ii', $userID, $channel);
+ $stmt->execute();
+ $stmt->close();
+ return;
+}
+
+//User leaves the channel
+function exitChannel($userID, $channel = 1) {
+ global $mysqli;
+ $stmt = $mysqli->prepare("UPDATE `chatUsers`
+ SET `isHere` = false
+ WHERE `userID` = ? AND `channel` = ?");
+ $stmt->bind_param('ii', $userID, $channel);
+ $stmt->execute();
+ return;
+}
+
+
+function channelListUpdated($timeStamp) {
+ global $mysqli;
+
+ $stmt = $mysqli->prepare("SELECT `value` FROM `settings`
+ WHERE `name` = 'Channel_Last_Update' AND
+ `value` < '?'"
+ );
+ $stmt->bind_param( "i", $timeStamp);
+ $stmt->execute();
+
+ $stmt->bind_result($value);
+
+ return $value;
+}
+
+
+//Get a list of users in channel
+function getChannelList($channel = 1) {
+ global $mysqli;
+
+ if (!is_numeric($channel)) return false;
+
+ $res = $mysqli->query("
+ SELECT
+ chatUsers.userID as 'ID',
+ chatUsers.dateEntered,
+
+ TIME_TO_SEC(TIMEDIFF(NOW(), chatUsers.dateLastActive)) as dateLastActive,
+
+ chatUsers.isAdmin,
+ chatUsers.isMod,
+
+ users.displayName as 'display',
+ users.displayColor,
+ users.wallColor,
+ users.wallEmblem,
+ users.wallOrientation
+ FROM `chatUsers`
+ LEFT JOIN `users`
+ ON chatUsers.userID = users.ID
+
+ ORDER BY chatUsers.isMod DESC, chatUsers.dateEntered ASC
");
$array = array();
if ($res->num_rows == 0) {
@@ -76,21 +172,17 @@ function getChat($startID = 0) { return false;
}
while ($response = $res->fetch_assoc()) {
- $array[] = $response;
- $lastID = $response['ID'];
+ $array['users'][] = $response;
+
}
$res->close();
-
- if (count($array) < 1) return false;
-
- //Turnicate messages.
- $deleteFromID = $lastID - CHAT_ROWS_TO_KEEP;
- $mysqli->query("DELETE FROM `chat` WHERE `ID` < $deleteFromID");
$mysqli->close();
+ if (count($array) < 1) return false;
return $array;
}
+
function filterStringForBadLanguage($chat) {
//cuss words
$chat = str_ireplace("fuck you", "i am moron", $chat);
diff --git a/includes/mapoftheday.php b/includes/mapoftheday.php index a4542cb..566e019 100644 --- a/includes/mapoftheday.php +++ b/includes/mapoftheday.php @@ -1 +1 @@ -<?php
include_once('maps.php');
include_once('sqlEmbedded.php');
include_once('playerStats.php');
include_once('constants.php');
include_once('mapclass.php');
include_once('chats.php');
/**
* Returns the Map Of The Day with the given type (index). Generates new maps if necessary.
*/
function mapOfTheDay($type = MapType::Simple)
{
//TODO del comments
//echo "[Seeking maptype $type]";
$map = getMapOfTheDayInternal($type);
if($map == null)
{
//Map doesn't exist, so we generate the maps and try again
generateNewMapsOfTheDay();
$map = getMapOfTheDayInternal($type);
}
//else echo "[Found $type]";
return $map;
}
/**
* Returns the map of the day of the given type, or null if not found.
* Do not call outside of mapoftheday.php
*/
function getMapOfTheDayInternal($type)
{
//The ORDER BY and LIMIT probably shouldn't be necessary, since there should only be one active map of each
//type at a time anyways..
$sql = "
SELECT maps.ID, maps.code
FROM `mapOfTheDay`
INNER JOIN `maps` ON mapOfTheDay.mapID = maps.ID
WHERE `mapType` = $type
AND mapOfTheDay.mapExpireTime > 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, 12, 13, 14);
//FORCE:
$random = 13;
$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;
//=====================================
//=====================================
case 12:
//InFinite
$inFinite[] = "s?????????????????otf";
$inFinite[] = "s?????????????????oof";
$inFinite[] = "s?????????????????omf";
$inFinite[] = "s?????????????????oof";
$inFinite[] = "s?????????????????ogf";
$inFinite[] = "s?????????????????oof";
$inFinite[] = "s?????????????????oif";
$inFinite[] = "s?????????????????oof";
$inFinite[] = "s?????????????????okf";
$inFinite = insertPoint($inFinite, 'unjhl');
$myparams['checkpoints'] = 0;
$myparams['teleports'] = 5;
$myparams['rockchance'] = 7;
$myparams['walls'] = weight(10, 11, 12, 13);
$myparams['name'] = 'InFinite';
$map = GenerateShapedMap($inFinite, $myparams);
break;
//=====================================
//=====================================
case 13:
//Edge case
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase = insertPoint($edgeCase, 'sfab');
$edgeCase = insertPoint($edgeCase, weight('tu', 'tumn', 'c'));
$myparams['checkpoints'] = 3;
$myparams['teleports'] = 2;
$myparams['rockchance'] = 8;
$myparams['walls'] = weight(15, 16, 17, 18, 19);
$myparams['name'] = 'Edge Case';
$map = GenerateShapedMap($edgeCase, $myparams);
break;
//=====================================
//=====================================
case 14:
//OrderINg
$orderIng[] = "s?????????????????fqu";
$orderIng[] = "s?????????????????fqn";
$orderIng[] = "s?????????????????fqh";
$orderIng[] = "s?????????????????fqi";
$orderIng[] = "s?????????????????fqk";
$orderIng[] = "s?????????????????fqa";
$orderIng[] = "s?????????????????fqb";
$orderIng[] = "s?????????????????fqc";
$orderIng[] = "s?????????????????fqd";
$orderIng[] = "s?????????????????fqf";
$orderIng = insertPoint($orderIng, 'abcdtmgjl');
$orderIng = insertPoint($orderIng, weight('', '', '', '', '', '', '', 'tmg'));
$myparams['checkpoints'] = 4;
$myparams['teleports'] = 5;
$myparams['rockchance'] = 7;
$myparams['walls'] = weight(16, 17, 18, 19, 20, 21);
$myparams['name'] = 'OrderINg';
$map = GenerateShapedMap($orderIng, $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 +<?php
include_once('maps.php');
include_once('sqlEmbedded.php');
include_once('playerStats.php');
include_once('constants.php');
include_once('mapclass.php');
include_once('chats.php');
/**
* Returns the Map Of The Day with the given type (index). Generates new maps if necessary.
*/
function mapOfTheDay($type = MapType::Simple)
{
//TODO del comments
//echo "[Seeking maptype $type]";
$map = getMapOfTheDayInternal($type);
if($map == null)
{
//Map doesn't exist, so we generate the maps and try again
generateNewMapsOfTheDay();
$map = getMapOfTheDayInternal($type);
}
//else echo "[Found $type]";
return $map;
}
/**
* Returns the map of the day of the given type, or null if not found.
* Do not call outside of mapoftheday.php
*/
function getMapOfTheDayInternal($type)
{
//The ORDER BY and LIMIT probably shouldn't be necessary, since there should only be one active map of each
//type at a time anyways..
$sql = "
SELECT maps.ID, maps.code
FROM `mapOfTheDay`
INNER JOIN `maps` ON mapOfTheDay.mapID = maps.ID
WHERE `mapType` = $type
AND mapOfTheDay.mapExpireTime > 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, 12, 13, 14);
//FORCE:
$random = 13;
$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;
//=====================================
//=====================================
case 13:
//Edge case
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????qqqqqqq?????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase[] = "?????????????????";
$edgeCase = insertPoint($edgeCase, 'sfab');
$edgeCase = insertPoint($edgeCase, weight('tu', 'tumn', 'c'));
$myparams['checkpoints'] = 3;
$myparams['teleports'] = 2;
$myparams['rockchance'] = 8;
$myparams['walls'] = weight(15, 16, 17, 18, 19);
$myparams['name'] = 'Edge Case';
$map = GenerateShapedMap($edgeCase, $myparams);
break;
//=====================================
//=====================================
case 14:
//OrderINg
$orderIng[] = "s?????????????????fqu";
$orderIng[] = "s?????????????????fqn";
$orderIng[] = "s?????????????????fqh";
$orderIng[] = "s?????????????????fqi";
$orderIng[] = "s?????????????????fqk";
$orderIng[] = "s?????????????????fqa";
$orderIng[] = "s?????????????????fqb";
$orderIng[] = "s?????????????????fqc";
$orderIng[] = "s?????????????????fqd";
$orderIng[] = "s?????????????????fqf";
$orderIng = insertPoint($orderIng, 'abcdtmgjl');
$orderIng = insertPoint($orderIng, weight('', '', '', '', '', '', '', 'tmg'));
$myparams['checkpoints'] = 4;
$myparams['teleports'] = 5;
$myparams['rockchance'] = 7;
$myparams['walls'] = weight(16, 17, 18, 19, 20, 21);
$myparams['name'] = 'OrderINg';
$map = GenerateShapedMap($orderIng, $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 = 0;
$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 @@ -37,12 +37,6 @@ if ($showUpdatePage AND $_GET['cu'] !== "true") { exit;
}
-include_once("globe.php");
-include_once("./includes/header.php");
-include_once ('./includes/sqlEmbedded.php');
-
-$accepted = isset($_SESSION['accepted']) && $_SESSION['accepted'] == 1;
-
//Not logged in?
if (!$accepted) {
if (isset($_COOKIE['doLogin']) && $_COOKIE['doLogin'] == 'yes') {
diff --git a/pages/challengelist.php b/pages/challengelist.php index a3b5ca7..8b60bd7 100644 --- a/pages/challengelist.php +++ b/pages/challengelist.php @@ -287,19 +287,21 @@ function showChallengeTiers() { </style> <div id="challengelist_wrapper" class="wrapper" style='overflow: auto;'> -<h3>Challenges - I'z working on this stuff.</h3> +<h3>Challenges</h3> <div id='backBtn' style='float:left;'><a href='javascript:back();' class='next'>Back</a></div> <div id='dialogBox'>Greetings tester of test-needed things.</div> + + <div id='mainDisplay' style='width:99%;overflow: hidden;'> - <div onclick='navShowLevels(0);' style='float:left; margin:20px; border:20px solid white;padding:40px'> - <h2>Easy</h2> + <div title='Start Here' onclick='navShowLevels(0);' style='float:left; margin:20px; border:20px solid white;padding:40px'> + <h2>Challenges</h2> </div> - <div onclick='navShowLevels(1);' style='float:left; margin:20px; border:20px solid white;padding:40px'> - <h2>Normal</h2> + <div style='float:left; margin:20px; border:20px solid white;padding:40px'> + <a href='home'><h2>Daily Maps</h2></a> </div> - <div style='float:left; margin:10px; border:10px solid gray;padding:20px'> - Hard + <div style='float:left; margin:20px; border:20px solid gray;padding:40px'> + <h2>Coming Soon</h2> </div> </div> diff --git a/pages/chat.php b/pages/chat.php index f55476f..a1870a6 100644 --- a/pages/chat.php +++ b/pages/chat.php @@ -20,10 +20,13 @@ if (!$accepted) { <script>
var lastID = 1;
-const chatTimerDelayUpper = 9000;
-const chatTimerDelayLower = 2000;
-const chatTimerDelayDefault = 5000;
-const chatTimerDelayWindowHidden = 90000;
+//Internet Explorer doesn't support "const"
+//CONSTANTS: ...
+var chatTimerDelayUpper = 9000;
+var chatTimerDelayLower = 2000;
+var chatTimerDelayDefault = 5000;
+var chatTimerDelayWindowHidden = 90000;
+
var chatTimerDelay = chatTimerDelayDefault;
var isChatWindowVisible = true;
var skipNextGetChat = false;
@@ -74,6 +77,11 @@ function getChatDone(data) { chat.displayName = 'SERVER'
}
+ if (chat.isJoinLeave == 'true') {
+ console.log('IsJoin Leave!')
+ //return true;
+ }
+
//Message is legitmently new or a server message?
if (chat.ID > lastID || typeof(chat.ID) == 'undefined') {
addChatMessage(chat.displayName, chat.message, postDate, isSelf, isServer, chat.wallColor, chat.wallEmblem,
@@ -248,6 +256,73 @@ function getChat(message) { });
}
+function pollChannelList() {
+ $.ajax({
+ //type: "POST",
+ url: "ajax/chat.ajax.php?pollChannelList=1",
+ error: function() {
+ console.log('Error: Failed pollChannelList');
+ },
+ success: function(data) {
+ console.log("ChannelPoll data recieved", data);
+ pollChannelListDone(data);
+ }
+ });
+}
+
+function pollChannelListDone(data) {
+
+ console.log('data recieved:', data);
+ if (data.length < 3 || data == 'false') return;
+ json = jQuery.parseJSON(data);
+
+ console.log('Loading channel.');
+ var c = channelListShow(json)
+ console.log(c);
+
+ var b = $("#channelContainer");
+ b.html(c);
+}
+
+
+function channelListShow(JO) {
+ console.log("Formating channelList");
+
+ var p = "<table class='membersList score' style='max-height:400px; width:220px; background-color:transparent; '>";
+
+ console.log('beginloop');
+
+ var previousI = 0;
+ for (var i in JO.users) {
+ console.log('loop')
+ var u = JO.users[i];
+ var styleClass = '';
+
+ if (previousI != i + 1) {
+ if (previousI < i - 1 && previousI != 0) {
+ styleClass = 'border-top: 6px solid #777799;';
+ }
+ }
+
+ if (u.wallEmblem == undefined) u.wallEmblem = 'blank.png';
+ p = p+ "<tr style='"+styleClass+" background-color: "+u.background+"; color:"+u.displayColor+";' title='Last Active: "+u.dateLastActive+"'>";
+
+ p = p+ "<td style='vertical-align: middle;width:100px;'>";
+ p = p+ " <div class='grid_td' style='float:left; width:35px; height:35px; background:"+u.wallColor+" url("+linkEmblem(u.wallEmblem, u.wallOrientation)+");'>";
+ p = p+ " <div style='background-color:transparent;' class='grid_td_inner grid_td_rocks'>";
+ p = p+ " </div>";
+ p = p+ " </div>";
+ p = p+ " <span class='scoreName' style='float:left;'><a target='_blank' href='achievements?id="+u.ID+"' style='color:"+u.displayColor+"'>"+u.display+"</a></span>";
+ p = p+ "</td>";
+
+ previousI = i;
+ }
+ p = p+"</table>";
+ return p;
+}
+
+
+
function sendChat() {
var message = $("input#message").val().replace("|:|", "||");
if (message == '') return false;
@@ -363,14 +438,35 @@ function setChatMute() { savePref('chatMute', value);
}
+pollChannelList();
+
</script>
<div class='wrapper'>
<h3>Pathery Chat - BETA</h3>
+<style>
+
+ #channelContainer, #chatContainer {
+ overflow:hidden;
+ overflow-y:auto;
+ display:inline-block;
+ float:right;
+ height:400px;
+
+ }
+
+
+</style>
+
<div class='chatContainer2'>
- <div id='chatContainer'>
- </div>
+
+ <div id='channelContainer' style='float:right; width:220px; overflow-y:scroll; display:inline-block;'>Loading...</div>
+
+ <div id='chatContainer' style='float:right; width:590px; '></div>
+
+ <div id='bb' style="clear:both"></div>
+
<form id='sendChat' onsubmit="return false">
<? if($accepted) { /*Only show the chat button if we're logged in*/ ?>
<input type="hidden" name="stuff" value="1724">
@@ -386,6 +482,8 @@ function setChatMute() { </form>
</div>
+
+
</div>
<?
diff --git a/sounds/charm.mp3 b/sounds/charm.mp3 Binary files differindex 951c8d1..f2a72ef 100644 --- a/sounds/charm.mp3 +++ b/sounds/charm.mp3 diff --git a/update notes.txt b/update notes.txt index 1ff219c..df95be1 100644 --- a/update notes.txt +++ b/update notes.txt @@ -1,3 +1,22 @@ + +Add Table: + +CREATE TABLE IF NOT EXISTS `chatUsers` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `userID` int(11) NOT NULL, + `channel` int(11) NOT NULL, + `client` varchar(16) NOT NULL, + `dateEntered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `dateLastActive` timestamp NULL DEFAULT NULL, + `isHere` tinyint(1) NOT NULL, + `isAdmin` tinyint(1) NOT NULL, + `isMod` tinyint(1) NOT NULL, + PRIMARY KEY (`ID`), + KEY `userID` (`userID`,`channel`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; + + + -- Did we do everything below? I think we did.. Jan 13 2014? For next update: - Move the new columns from BlueRaja's database over to your other databases (see also: db updates.sql. Most, but not all, are in there. I don't think Snap added his stuff there). Make sure to get not only the type, but nullable/default as well. |