From 0a36018c7dd4e45fb4e64b14ac67badc0011c43c Mon Sep 17 00:00:00 2001 From: Patrick Davison Date: Mon, 19 Mar 2012 19:18:29 -0700 Subject: Some achievements set, and notifications adjusted. --- includes/datas.php | 391 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 278 insertions(+), 113 deletions(-) (limited to 'includes') diff --git a/includes/datas.php b/includes/datas.php index f29f60e..19337e1 100644 --- a/includes/datas.php +++ b/includes/datas.php @@ -28,124 +28,154 @@ function topScores($mapid, $top = 5) { "; $result = mysql_query($sql); - if (mysql_num_rows($result) > 0) { - $output .= ""; - $output .= ""; - $output .= ""; - $output .= ""; - $output .= ""; - $output .= ""; - $output .= ""; - $output .= ""; - while (list($diff, $display, $moves, $userID, $displayColor, $wallColor, $wallEmblem, $cdate) = mysql_fetch_row($result)) { - $i++; - if (!isset($displayColor)) { - $sql = "INSERT INTO `userData` (`userID`, `displayColor`, `wallColor`) - VALUES ('$userID', '#cccccc', '#666666')"; - mysql_query($sql); - $displayColor = '#cccccc'; - $wallColor = '#666666'; - $wallEmblem = ''; - } - if ($_SESSION['userID'] == $userID) - $output .= ""; - else - $output .= ""; - - $cdate = date("g:i A", strtotime($cdate)); - - $output .= ""; - $output .= "
RankBadgeNameMovesTime
$i
= 1) { - $unlocked = "You've unlocked: "; - while (list($uType, $uName, $uValue) = mysql_fetch_row($result)) { - switch ($uType) { - case 1: - $unlocked .= "$uName Wall Color!"; - $unlocked .= "
"; - break; - case 2: - $unlocked .= "$uName Emblem!"; - $unlocked .= "
"; - $unlocked .= "
"; - break; - case 3: - $unlocked .= "
$uName Username color!
"; - break; + $aName = $aTypeNames[$aType]; + $currency = $aTypeCurrency[$aType]; + + // --------- Any unlocks for this achievement? + $sql = "SELECT `type`, `name`, `value` + FROM `unlocks` + WHERE `achievementID` = '$aID'"; + $result = mysql_query($sql); + $unlocked = ''; + if (mysql_num_rows($result) >= 1) { + $unlocked = "You've unlocked: "; + while (list($uType, $uName, $uValue) = mysql_fetch_row($result)) { + switch ($uType) { + case 1: + $unlocked .= "$uName Wall Color!"; + $unlocked .= "
"; + break; + case 2: + $unlocked .= "$uName Emblem!"; + $unlocked .= "
"; + $unlocked .= "
"; + break; + case 3: + $unlocked .= "
$uName Username color!
"; + break; + } } } + // ---------- Prepare response + + $r .= "$aName"; + if ($unlocked !== '') { + $r .= "
$unlocked"; + //$r .= "
"; + $r .= "
"; + } + $aAry = getAchievementsArray($aType); + $nextLevelRequired = $aAry[($aLevel + 1)][0]; + $currentLevelRequired = $aAry[($aLevel)][0]; + + if ($currency) { + $currentLevelRequired = number_format($currentLevelRequired); + $r .= "You have $currentLevelRequired $currency
"; + } + if ($nextLevelRequired >= 1) { + $nextLevelRequired = number_format($nextLevelRequired); + $r .= "Next level at $nextLevelRequired
"; + } + + + + + // Item ID List + $aIDList[] = "'$aID'"; } - // ---------- Prepare response + $r .= "
Go select unlocks now"; - $r = "$aName"; - if ($unlocked !== '') { - $r .= "
$unlocked"; - $r .= ""; - $r .= "Go select this now"; - $r .= "
"; - } - $aAry = getAchievementsArray($aType); - $nextLevelRequired = $aAry[($aLevel + 1)][0]; - if ($nextLevelRequired >= 1) { - $nextLevelRequired = number_format($nextLevelRequired); - $r .= "Next level at $nextLevelRequired
"; // unavailable data? - } + // ---------- Mark that we have notified the user + $aIDListStr = implode(',', $aIDList); + $sql = "UPDATE `achievements` + SET `notified` = 1 + WHERE `ID` IN ($aIDListStr)"; + mysql_query($sql); - // ---------- Mark that we have notified the user - $sql = "UPDATE `achievements` - SET `notified` = 1 - WHERE `ID` = '$aID'"; - mysql_query($sql); - return $r; // ---------- Done! } //Returns true when an achievement is applied. // Usage example: applyCareerAchievement($userID); +// !! DEPRECIATED function applyCareerPathAchievements($userID) { $sql = "SELECT SUM(solutions.moves) as totalMoves @@ -192,13 +222,14 @@ function applyCareerPathAchievements($userID) { // ------- User gets unlock. (unlocks plural is possible here) $sql = "INSERT INTO `unlocks` - (`userID`, `achievementID`, `type`, `subType`, `name`, `value`) + (`userID`, `achievementID`, `type`, `subtype`, `name`, `value`) VALUES ('$userID', '$aID', '$unlockType', NULL, '$unlockName', '$unlockValue')"; mysql_query($sql); return true; } //Almost a duplicate of applyCareerPathAchievements +// !! DEPRECIATED function applyCareerMazesAchievements($userID) { $sql = "SELECT COUNT(*) as totalSolutions @@ -245,7 +276,7 @@ function applyCareerMazesAchievements($userID) { // ------- User gets unlock. (unlocks plural is possible here) $sql = "INSERT INTO `unlocks` - (`userID`, `achievementID`, `type`, `subType`, `name`, `value`) + (`userID`, `achievementID`, `type`, `subtype`, `name`, `value`) VALUES ('$userID', '$aID', '$unlockType', NULL, '$unlockName', '$unlockValue')"; mysql_query($sql); return true; @@ -280,20 +311,114 @@ function applyChallengeAchievements($userID, $challengeID, $mapID, $solution, $m // ------- User gets unlock. (unlocks plural is possible here) $sql = "INSERT INTO `unlocks` - (`userID`, `achievementID`, `type`, `subType`, `name`, `value`) - VALUES ('$userID', '$aID', '1', NULL, 'Blue', '#4444ff')"; + (`userID`, `achievementID`, `type`, `subtype`, `name`, `value`) + VALUES ('$userID', '$aID', '1', 0, 'Blue', '#4444ff')"; mysql_query($sql); return true; } } } +function applyAchievements($userID, $aType) { + + $amount = getAchievementCurrency($userID, $aType); + + $aLevel = getAchievementLevel($userID, $aType); + + $aArray = getAchievementsArray($aType); + + //Is there a next level for this? + $aNextLevel = $aLevel + 1; + if (!isset($aArray[$aNextLevel])) + return false; + list($required, $unlockType, $unlockValue, $unlockName, $unlockSubtype) = $aArray[$aNextLevel]; + if ($amount < $required) + return false; + + $sql = "INSERT INTO `achievements` + (`userID`, `type`, `level`) + VALUES ('$userID', $aType, '$aNextLevel')"; + mysql_query($sql); + $aID = mysql_insert_id(); + + // ------- User gets unlock. (!!unlocks plural is possible here) + $sql = "INSERT INTO `unlocks` + (`userID`, `achievementID`, `type`, `subtype`, `name`, `value`) + VALUES ('$userID', '$aID', '$unlockType', '$unlockSubtype', '$unlockName', '$unlockValue')"; + mysql_query($sql); + return true; + +} + +function getAchievementCurrency($userID, $aType) { + +// 1, Total Moves "Path Career" //Backdated +// 2, Total Solutions (Total maps played) "Mazes Career" //Backdated +// 3, Tie Top-Score on a map "Maze Mastery" //Tracked (no backdate) +// 4, Rank#1 Win Top-Score on a map "Wins" //Tracked + $r = 0; + $sql = ''; + switch ($aType) { + case 1: + $sql = "SELECT + SUM(solutions.moves) as t + FROM `solutions` + WHERE userID = '$userID'"; + break; + case 2: + $sql = "SELECT + COUNT(*) as t + FROM `solutions` + WHERE userID = '$userID'"; + break; + case 3: + $sql = "SELECT + SUM(`value`) as t + FROM `statistics` + WHERE `userID` = '$userID' + AND `type` IN (1, 2, 3, 4)"; + break; + case 4: + $sql = "SELECT + SUM(`value`) as t + FROM `statistics` + WHERE `userID` = '$userID' + AND `type` IN (32, 33, 34, 35)"; + break; + } + if ($sql == '') + return false; + $result = mysql_query($sql); + if (mysql_num_rows($result) == 1) + list($r) = mysql_fetch_row($result); + + return $r; +} + +function getAchievementLevel($userID, $aType) { + // ------- Select the highest level they've achieved. + $r = 0; + $sql = "SELECT `level` + FROM `achievements` + WHERE `userID` = '$userID' + AND `type` = '$aType' + ORDER BY `level` DESC + LIMIT 1"; + $result = mysql_query($sql); + if (mysql_num_rows($result) == 1) + list($r) = mysql_fetch_row($result); + return $r; +} function getAchievementsArray($type) { if ($type == 1) return getCareerPathArray(); if ($type == 2) return getCareerMazesArray(); + if ($type == 3) + return getMazeMasteryArray(); + if ($type == 4) + return getWinsArray(); //Tutorial if ($type == 32) { $r[1] = array(1, 1, '#4444ff', 'Blue'); @@ -305,41 +430,81 @@ function getAchievementsArray($type) { //TYPE 1 function getCareerPathArray() { //$cp[0] = array(requiredmoves, type, 'value', 'name'); - $cp[1] = array(100, 1, '#229922', 'Green'); - $cp[2] = array(400, 1, '#9922ff', 'Purple'); - $cp[3] = array(900, 2,'CircleSmall.png','Small White Circle'); - $cp[4] = array(2000, 2,'StarsR_W.png','Starry White'); - $cp[5] = array(3500, 2,'StarsR_B.png','Starry Black'); - $cp[6] = array(5000, 1, '#a9b1f6', 'Steel Blue'); - $cp[7] = array(7500, 3, '#aafcbb', 'Green'); - $cp[8] = array(10000, 3, '#ffffaa', 'Yellow'); - $cp[8] = array(13000, 3, '#ffbb77', 'Orange'); + // Note that the description is followed by " wall color" + $cp[1] = array(100, 1, '#229922', 'Green'); + $cp[2] = array(1000, 1, '#9922ff', 'Purple'); + $cp[3] = array(5000, 2, 'CircleSmall_W.png', 'Light Small Circle', 0); + $cp[4] = array(10000, 2, 'DiamondSmall_B.png', 'Dark Small Diamond', 0); + $cp[5] = array(20000, 3, '#a9b1f6', 'Steel Blue'); + $cp[6] = array(32000, 2, 'DiagonalCover_W.png', 'Light Diagonal Cover', 0); + $cp[7] = array(50000, 2, 'DiamondLargeDonut_B_I.png', 'Dark Annulated Diamond', 0); + $cp[8] = array(75000, 3, '#ffffaa', 'Yellow'); + $cp[9] = array(100000, 3, '#ffbb77', 'Orange'); + $cp[10] = array(130000, 2, 'OffsetStripesVertical_W.png', 'Light Vertical Stripes', 0); + $cp[11] = array(165000, 2, 'CircleSmall_B.png', 'Dark Small Circle', 0); + $cp[12] = array(200000, 3, '#ee77ff', 'Purple'); + $cp[13] = array(250000, 1, '#ffff22', 'Yellow', 1); + $cp[14] = array(300000, 2, 'DiagonalCover_B_I.png', 'Inverted Dark Diagonal Cover', 0); + $cp[15] = array(350000, 1, '#333377', 'Navy Blue', 0); + $cp[16] = array(400000, 2, 'RacingStripes_W.png', 'Light Racing Stripes', 0); + return $cp; } //TYPE 2 function getCareerMazesArray() { //$cp[0] = array(requiredmazes, type, 'value', 'name'); - $cm[1] = array(1, 1, '#eeeeee', 'Silver'); - $cm[2] = array(5, 1, '#22aaaa', 'Teal'); - $cm[3] = array(25, 1, '#ff3344', 'Red'); + + $cm[1] = array(5, 1, '#eeeeee', 'Silver', 1); + $cm[2] = array(15, 1, '#ff9922', 'Orange', 1); + $cm[3] = array(30, 2, 'DiamondLargeDonut_W.png', 'Light Annulated Diamond', 0); $cm[4] = array(50, 1, '#aaaa22', 'Chartreuse'); - $cm[5] = array(75, 1, '#ff9922', 'Orange'); - $cm[6] = array(100, 1, '#cc22aa', 'Magenta'); - + $cm[5] = array(85, 2, 'CrossXL_W.png', 'Light Large Present', 0); + $cm[6] = array(150, 1, '#cc22aa', 'Magenta', 0); + $cm[7] = array(250, 1, '#ff3344', 'Red'); + $cm[8] = array(375, 1, '#ffdd88', 'Gold'); + $cm[9] = array(550, 2, 'ConvexCover_W.png', 'Light Dome Cover', 0); + $cm[10] = array(750, 2, 'OffsetStripesVertical_B.png', 'Dark Vertical Stripes', 0); + $cm[11] = array(1000, 3, '#ff95b0', 'Pink'); + $cm[12] = array(1400, 1, '#ff95b0', 'Pink', 1); + $cm[13] = array(2000, 2, 'StarsR_W.png', 'Bright Stars', 0); + $cm[14] = array(2750, 2, 'Stars1_B.png', 'Dark Single Star', 0); + $cm[15] = array(3500, 2, 'CircleSmall_B_I.png', 'Inverted Dark Small Circle', 0); + return $cm; } +//TYPE 3 +function getMazeMasteryArray() { + //$cp[0] = array(requiredmazestied, type, 'value', 'name'); + $r[1] = array(1, 2, 'OffsetStripesDiagonal_W.png', 'Light Diagonal Stripes', 0); + $r[2] = array(5, 2, 'OffsetStripesVertical_B_I.png', 'Inverted Dark Vertical Stripes', 0); + $r[3] = array(15, 2, 'DiagonalCover_W_I.png', 'Inverted Light Diagonal Cover', 0); + $r[4] = array(30, 3, '#aafcbb', 'Green'); + $r[5] = array(50, 2, 'DiamondLarge_W.png', 'Light Large Diamond', 0); + $r[6] = array(75, 2, 'CrossXL_B.png', 'Dark Large Present', 0); + $r[7] = array(100, 2, 'CircleLargeDonut_W.png', 'Light Annulated Circle', 0); + $r[8] = array(150, 2, 'CrossXL_W_I.png', 'Inverted Bright Large Present', 0); + return $r; +} +//TYPE 4 +function getWinsArray() { + //$cp[0] = array(requiredmazewins, type, 'value', 'name'); + $r[1] = array(1, 2, 'DiagonalCover_B.png', 'Light Diagnol Cover', 0); + $r[2] = array(5, 1, '#22aaaa', 'Teal'); + $r[3] = array(15, 2, 'OffsetStripesDiagonal_B.png', 'Dark Diagonal Stripes', 0); + $r[4] = array(30, 2, 'DiamondLargeDonut_W_I.png', 'Inverted Light Annulated Diamond', 0); + $r[5] = array(50, 2, 'StarsR_B.png', 'Dark Stars', 0); + $r[6] = array(75, 2, 'CrossXL_B_I.png', 'Inverted Dark Large Present', 0); + $r[7] = array(75, 2, 'CircleSmall_W_I.png', 'Inverted Bright Small Circle', 0); -function apply() { - - + return $r; } - +//Used to track statistics on who wins or ties maps at the end of a day. function trackMOTDstats($mapType) { // Our rather massive query to get the data we need. $sql = "SELECT -- cgit v1.2.3