diff --git a/.htaccess b/.htaccess index f879e521..a933492c 100644 --- a/.htaccess +++ b/.htaccess @@ -1,5 +1,9 @@ RewriteEngine On RewriteCond %{THE_REQUEST} ^GET\ ([^#?\ ]+)cbsig/ RewriteRule ^cbsig/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+).png$ %1sig.php?one=$1&two=$2&epic=$3&stat=$4&border=$5&background=$6&char=$7 [L] - + + +Order Allow,Deny +Deny from all + diff --git a/CHANGES.txt b/CHANGES.txt index 4750d006..34b6c630 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,30 @@ +v3.0.0 +---------------------------------------------------------------------- +finalized the 2.9.0 changes after testing/feedback + +Aprile 4, 2020 - Dont show an AA if it has no first rank + Modified htaccess to hide template and other files + Added favicon and touch icons + Added commas to a bunch of displayed numbers + Can search bazaar by seller name (thanks croco) + Added a "Store" link to the side profile menu to see + items the player sells + Hide the association between guild/player when they + are anon + Add item/augment icons to the item inspect windows + Add stack sizes to item icons + Added a way to easily replace what's displayed on + the main page (renamed home.template to home.php, + then edit) + Removed error reporting for self registration + Added a view to the server page that shows activity + in the last 30 days (can configure) + Fixed issue that caused dynamic images to not + display on newer PHP versions + Added ZOrdering to popup windows, made it + dynamically add the effect based on class + + v2.9.0 ---------------------------------------------------------------------- massive rewrite @@ -20,6 +47,12 @@ Mar 31, 2020 - Made all windows drag added mitigation ac to the inventory window removed autocorrect from all the search fields made search fields submit on pressing enter + version stamps css and js files so users dont + cache and old version + made cb_message_die output an error image for image + scripts + normalized a lot of the html to make it more SEO + and screen reader friendly v2.8.2 diff --git a/aas.php b/aas.php index 370d0e1a..d776ae71 100644 --- a/aas.php +++ b/aas.php @@ -40,6 +40,9 @@ * modularized the profile menu output * March 22, 2020 - Maudigan * impemented common.php + * April 3, 2020 - Maudigan + * dont show AAs if they dont have a first rank, some custom server + * hide AA by deleting their ranks * ***************************************************************************/ @@ -170,6 +173,8 @@ function getRankCost($first_rank, $value) { //calculate all the values $first_rank_id = $row['first_rank_id']; + //skip this one if there is no first rank data + if (!array_key_exists($first_rank_id, $aa_ranks)) continue; $cur = intval($character_aas[$first_rank_id]['aa_value']); $cost = getRankCost($first_rank_id, $cur); $max = getTotalRanks($first_rank_id); diff --git a/apple-touch-icon-precomposed.png b/apple-touch-icon-precomposed.png new file mode 100644 index 00000000..abb294b6 Binary files /dev/null and b/apple-touch-icon-precomposed.png differ diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 00000000..abb294b6 Binary files /dev/null and b/apple-touch-icon.png differ diff --git a/bazaar.php b/bazaar.php index b4f9e442..a2989bff 100644 --- a/bazaar.php +++ b/bazaar.php @@ -30,6 +30,11 @@ * Modified database to use a class. * March 22, 2020 - Maudigan * impemented common.php + * April 2, 2020 - Maudigan + * search by seller name (thanks croco/kinglykrab) + * April 3, 2020 - Maudigan + * add icons to inspect + * added number_format to prices * ***************************************************************************/ @@ -55,6 +60,7 @@ $pricemin = $_GET['pricemin']; $pricemax = $_GET['pricemax']; $item = $_GET['item']; +$seller = $_GET['char']; $direction = (($_GET['direction']=="DESC") ? "DESC" : "ASC"); $perpage=25; @@ -64,6 +70,7 @@ //security against sql injection if (!IsAlphaSpace($item)) cb_message_die($language['MESSAGE_ERROR'],$language['MESSAGE_ITEM_ALPHA']); +if (!IsAlphaSpace($seller)) cb_message_die($language['MESSAGE_ERROR'],$language['MESSAGE_NAME_ALPHA']); if (!IsAlphaSpace($orderby)) cb_message_die($language['MESSAGE_ERROR'],$language['MESSAGE_ORDER_ALPHA']); if (!is_numeric($start)) cb_message_die($language['MESSAGE_ERROR'],$language['MESSAGE_START_NUMERIC']); if (!is_numeric($pricemin) && $pricemin != "") cb_message_die($language['MESSAGE_ERROR'],$language['MESSAGE_PRICE_NUMERIC']); @@ -87,6 +94,10 @@ $where .= $divider."items.Name LIKE '%".str_replace("_", "%", str_replace(" ","%",$item))."%'"; $divider = " AND "; } +if ($seller) { + $where .= $divider."character_data.name = '".$seller."'"; + $divider = " AND "; +} if ($pricemin) { $modprice = $pricemin * 1000; $where .= $divider."trader.item_cost >= $modprice"; @@ -153,6 +164,16 @@ include(__DIR__ . "/include/header.php"); +/********************************************* + DROP PROFILE MENU +*********************************************/ +//if you're looking at a players store, treat it like +//a profile page +if ($seller) { + output_profile_menu($seller, 'bazaar'); +} + + /********************************************* POPULATE BODY *********************************************/ @@ -171,6 +192,8 @@ $cb_template->assign_vars(array( 'ITEM' => $item, + 'SELLER' => $seller, + 'STORENAME' => ($seller) ? " - ".$seller : "", 'ORDER_LINK' => $baselink."&start=$start&direction=".(($direction=="ASC") ? "DESC":"ASC"), 'PAGINATION' => cb_generate_pagination("$baselink&orderby=$orderby&direction=$direction", $totalitems, $perpage, $start, true), 'PRICE_MIN' => $pricemin, @@ -195,17 +218,18 @@ foreach($lots as $lot) { $tempitem = new item($lot); $price = $lot["tradercost"]; - $plat = floor($price/1000); + $plat = number_format(floor($price/1000)); $price = $price % 1000; - $gold = floor($price/100); + $gold = number_format(floor($price/100)); $price = $price % 100; - $silver = floor($price/10); - $copper = $price % 10; + $silver = number_format(floor($price/10)); + $copper = number_format($price % 10); $cb_template->assign_both_block_vars("items", array( 'SELLER' => $lot['charactername'], 'PRICE' => (($plat)?$plat."p ":"").(($silver)?$silver."s ":"").(($gold)?$gold."g ":"").(($copper)?$copper."c ":""), 'NAME' => $tempitem->name(), 'ID' => $tempitem->id(), + 'ICON' => $tempitem->icon(), 'LINK' => QuickTemplate($link_item, array('ITEM_ID' => $tempitem->id())), 'HTML' => $tempitem->html(), 'SLOT' => $slotcounter) diff --git a/character.php b/character.php index c928d066..0631c5f7 100644 --- a/character.php +++ b/character.php @@ -46,6 +46,10 @@ * prepared for implementation of dynamic guild ranks * March 22, 2020 - Maudigan * impemented common.php + * April 2, 2020 - Maudigan + * dont show anon guild members names + * show stack size code + * added item icon and stacksize to the item stat/inspect windows * ***************************************************************************/ @@ -82,44 +86,46 @@ //get character info $class = $char->GetValue('class'); -/* this will get implemented in the server code soon, uncomment and remove the code below -//load guild name -$tpl = <<GetValue('anon') != 1 || $showguildwhenanon || $charbrowser_is_admin_page) { + /* this will get implemented in the server code soon, uncomment and remove the code below + //load guild name + $tpl = <<query($query); + if($cbsql->rows($result)) + { + $row = $cbsql->nextrow($result); + $guild_name = $row['name']; + $guild_rank = $row['title']; + }*/ + + //load guild name statically + $tpl = <<query($query); -if($cbsql->rows($result)) -{ - $row = $cbsql->nextrow($result); - $guild_name = $row['name']; - $guild_rank = $row['title']; -}*/ - -//load guild name statically -$tpl = <<query($query); -if($cbsql->rows($result)) -{ - $row = $cbsql->nextrow($result); - $guild_name = $row['name']; - $guild_rank = $guildranks[$row['rank']]; + $query = sprintf($tpl, $charID); + $result = $cbsql->query($query); + if($cbsql->rows($result)) + { + $row = $cbsql->nextrow($result); + $guild_name = $row['name']; + $guild_rank = $guildranks[$row['rank']]; + } } @@ -358,7 +364,8 @@ if ($value->type() != INVENTORY) continue; $cb_template->assign_block_vars("invitem", array( 'SLOT' => $value->slot(), - 'ICON' => $value->icon()) + 'ICON' => $value->icon(), + 'STACK' => $value->stack()) ); if ($value->slotcount() > 0) { $cb_template->assign_block_vars("invitem.switch_is_bag", array()); @@ -370,7 +377,8 @@ if ($value->type() != EQUIPMENT) continue; $cb_template->assign_block_vars("equipitem", array( 'SLOT' => $value->slot(), - 'ICON' => $value->icon()) + 'ICON' => $value->icon(), + 'STACK' => $value->stack()) ); } //BANK @@ -379,7 +387,8 @@ if ($value->type() != BANK) continue; $cb_template->assign_block_vars("bankitem", array( 'SLOT' => $value->slot(), - 'ICON' => $value->icon()) + 'ICON' => $value->icon(), + 'STACK' => $value->stack()) ); if ($value->slotcount() > 0) { $cb_template->assign_block_vars("bankitem.switch_is_bag", array()); @@ -392,7 +401,8 @@ if ($value->type() != SHAREDBANK) continue; $cb_template->assign_block_vars("sharedbankitem", array( 'SLOT' => $value->slot(), - 'ICON' => $value->icon()) + 'ICON' => $value->icon(), + 'STACK' => $value->stack()) ); if ($value->slotcount() > 0) { $cb_template->assign_block_vars("sharedbankitem.switch_is_bag", array()); @@ -428,7 +438,8 @@ $cb_template->assign_block_vars("bags.bagitems", array( 'BI_SLOT' => $subvalue->slot(), 'BI_RELATIVE_SLOT' => $subvalue->vslot(), - 'BI_ICON' => $subvalue->icon()) + 'BI_ICON' => $subvalue->icon(), + 'STACK' => $subvalue->stack()) ); } } @@ -450,7 +461,8 @@ $cb_template->assign_both_block_vars("item", array( 'SLOT' => $value->slot(), 'ICON' => $value->icon(), - 'NAME' => $value->name(), + 'NAME' => $value->name(), + 'STACK' => $value->stack(), 'ID' => $value->id(), 'LINK' => QuickTemplate($link_item, array('ITEM_ID' => $value->id())), 'HTML' => $value->html()) diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000..c5e66c8c Binary files /dev/null and b/favicon.ico differ diff --git a/guild.php b/guild.php index ffa5e36c..7a5e811d 100644 --- a/guild.php +++ b/guild.php @@ -17,6 +17,13 @@ * Initial revision * March 22, 2020 - Maudigan * impemented common.php + * April 2, 2020 - Maudigan + * dont show anon guild members names + * April 2, 2020 - Maudigan + * removed some commented out test code + * April 3, 2020 - Maudigan + * removed some commented out test code + * added number_format to counts * ***************************************************************************/ @@ -116,7 +123,7 @@ $tpl = <<nextrow($result)) { + //dont show anonymous guild members name + if ($row['anon'] != 1 || $showguildwhenanon || $charbrowser_is_admin_page) { + $charname = ''.$row['name'].''; + } + else { + $charname = "Anonymous"; + } $guildavglevel += $row['level']; $guildmaxlevel = max($row['level'], $guildmaxlevel); $guildminlevel = min($row['level'], $guildminlevel); $guildmembers[] = array( - 'NAME' => $row['name'], + 'NAME' => $charname, 'RACE' => $dbracenames[$row['race']], 'RANK' => $guildranks[$row['rank']], 'CLASS' => $dbclassnames[$row['class']], @@ -172,7 +187,7 @@ $maxclasspercent = max($maxclasspercent, $classpercent); $guildclasses[] = array( 'CLASS' => $dbclassnames[$row['class']], - 'COUNT' => $row['count'], + 'COUNT' => number_format($row['count']), 'ROUNDED_PERCENT' => round($classpercent * 100), 'CLEAN_PERCENT' => round($classpercent * 100, 2), 'RAW_PERCENT' => $classpercent, @@ -225,72 +240,6 @@ } } - - /*$guildlevelcounts[1] = array('LEVEL' => 1, 'COUNT' => 0); - $guildlevelcounts[2] = array('LEVEL' => 2, 'COUNT' => 0); - $guildlevelcounts[3] = array('LEVEL' => 3, 'COUNT' => 0); - $guildlevelcounts[4] = array('LEVEL' => 4, 'COUNT' => 0); - $guildlevelcounts[5] = array('LEVEL' => 5, 'COUNT' => 0); - $guildlevelcounts[6] = array('LEVEL' => 6, 'COUNT' => 0); - $guildlevelcounts[7] = array('LEVEL' => 7, 'COUNT' => 0); - $guildlevelcounts[8] = array('LEVEL' => 8, 'COUNT' => 0); - $guildlevelcounts[9] = array('LEVEL' => 9, 'COUNT' => 0); - $guildlevelcounts[10] = array('LEVEL' => 10, 'COUNT' => 0); - $guildlevelcounts[11] = array('LEVEL' => 11, 'COUNT' => 0); - $guildlevelcounts[12] = array('LEVEL' => 12, 'COUNT' => 0); - $guildlevelcounts[13] = array('LEVEL' => 13, 'COUNT' => 0); - $guildlevelcounts[14] = array('LEVEL' => 14, 'COUNT' => 0); - $guildlevelcounts[15] = array('LEVEL' => 15, 'COUNT' => 0); - $guildlevelcounts[16] = array('LEVEL' => 16, 'COUNT' => 0); - $guildlevelcounts[17] = array('LEVEL' => 17, 'COUNT' => 0); - $guildlevelcounts[18] = array('LEVEL' => 18, 'COUNT' => 0); - $guildlevelcounts[19] = array('LEVEL' => 19, 'COUNT' => 0); - $guildlevelcounts[20] = array('LEVEL' => 20, 'COUNT' => 0); - $guildlevelcounts[21] = array('LEVEL' => 21, 'COUNT' => 0); - $guildlevelcounts[22] = array('LEVEL' => 22, 'COUNT' => 0); - $guildlevelcounts[23] = array('LEVEL' => 23, 'COUNT' => 0); - $guildlevelcounts[24] = array('LEVEL' => 24, 'COUNT' => 0); - $guildlevelcounts[25] = array('LEVEL' => 25, 'COUNT' => 0); - $guildlevelcounts[26] = array('LEVEL' => 26, 'COUNT' => 0); - $guildlevelcounts[27] = array('LEVEL' => 27, 'COUNT' => 0); - $guildlevelcounts[28] = array('LEVEL' => 28, 'COUNT' => 0); - $guildlevelcounts[29] = array('LEVEL' => 29, 'COUNT' => 0); - $guildlevelcounts[30] = array('LEVEL' => 30, 'COUNT' => 0); - $guildlevelcounts[31] = array('LEVEL' => 31, 'COUNT' => 0); - $guildlevelcounts[32] = array('LEVEL' => 32, 'COUNT' => 0); - $guildlevelcounts[33] = array('LEVEL' => 33, 'COUNT' => 0); - $guildlevelcounts[34] = array('LEVEL' => 34, 'COUNT' => 0); - $guildlevelcounts[35] = array('LEVEL' => 35, 'COUNT' => 0); - $guildlevelcounts[36] = array('LEVEL' => 36, 'COUNT' => 0); - $guildlevelcounts[37] = array('LEVEL' => 37, 'COUNT' => 0); - $guildlevelcounts[38] = array('LEVEL' => 38, 'COUNT' => 0); - $guildlevelcounts[39] = array('LEVEL' => 39, 'COUNT' => 0); - $guildlevelcounts[40] = array('LEVEL' => 40, 'COUNT' => 0); - $guildlevelcounts[41] = array('LEVEL' => 41, 'COUNT' => 0); - $guildlevelcounts[42] = array('LEVEL' => 42, 'COUNT' => 0); - $guildlevelcounts[43] = array('LEVEL' => 43, 'COUNT' => 0); - $guildlevelcounts[44] = array('LEVEL' => 44, 'COUNT' => 0); - $guildlevelcounts[45] = array('LEVEL' => 45, 'COUNT' => 0); - $guildlevelcounts[46] = array('LEVEL' => 46, 'COUNT' => 0); - $guildlevelcounts[47] = array('LEVEL' => 47, 'COUNT' => 0); - $guildlevelcounts[48] = array('LEVEL' => 48, 'COUNT' => 50); - $guildlevelcounts[49] = array('LEVEL' => 49, 'COUNT' => 0); - $guildlevelcounts[50] = array('LEVEL' => 50, 'COUNT' => 0); - $guildlevelcounts[51] = array('LEVEL' => 51, 'COUNT' => 0); - $guildlevelcounts[52] = array('LEVEL' => 52, 'COUNT' => 0); - $guildlevelcounts[53] = array('LEVEL' => 53, 'COUNT' => 0); - $guildlevelcounts[54] = array('LEVEL' => 54, 'COUNT' => 0); - $guildlevelcounts[55] = array('LEVEL' => 55, 'COUNT' => 0); - $guildlevelcounts[56] = array('LEVEL' => 56, 'COUNT' => 0); - $guildlevelcounts[57] = array('LEVEL' => 57, 'COUNT' => 16); - $guildlevelcounts[58] = array('LEVEL' => 58, 'COUNT' => 10); - $guildlevelcounts[59] = array('LEVEL' => 59, 'COUNT' => 10); - $guildlevelcounts[60] = array('LEVEL' => 60, 'COUNT' => 0); - $guildlevelcounts[61] = array('LEVEL' => 61, 'COUNT' => 6); - $guildlevelcounts[62] = array('LEVEL' => 62, 'COUNT' => 0); - $guildlevelcounts[63] = array('LEVEL' => 63, 'COUNT' => 8); - $guildlevelcounts[64] = array('LEVEL' => 64, 'COUNT' => 0); - $guildlevelcounts[65] = array('LEVEL' => 65, 'COUNT' => 8);*/ /********************************************* DROP HEADER @@ -309,7 +258,7 @@ $cb_template->assign_both_vars(array( 'GUILD_NAME' => $guildname, 'GUILD_LEADER' => $guildleader, - 'GUILD_COUNT' => $guildmembercount, + 'GUILD_COUNT' => number_format($guildmembercount), 'GUILD_AVG_LEVEL' => $guildavglevel) ); $cb_template->assign_vars(array( diff --git a/home.template b/home.template new file mode 100644 index 00000000..402fde52 --- /dev/null +++ b/home.template @@ -0,0 +1,104 @@ +query($query); + +//no rows? +$rows = $cbsql->rows($result); +if (!$rows) { + cb_message_die($language['MESSAGE_ERROR'],$language['MESSAGE_NO_RESULTS_ITEMS']); +} + +$output = array(); +while($row = $cbsql->nextrow($result)) { + $output[] = array( + 'FIRSTCOL' => $row['firstcol'], + 'SECONDCOL' => $row['secondcol'], + 'THIRDCOL' => $row['thirdcol'] + ); +} + +/********************************************* + DROP HEADER +*********************************************/ +$d_title = $subtitle; +include(__DIR__ . "/include/header.php"); + + +/********************************************* + POPULATE BODY +*********************************************/ +$cb_template->set_filenames(array( + 'body' => 'home_body.tpl') +); + +//output page vars +$cb_template->assign_both_vars(array( + 'ROWS' => number_format($rows)." row(s)") +); + +//output page language +$cb_template->assign_vars(array( + 'L_HOME' => $language['HOME_HOME'], + 'L_COL1' => $language['HOME_COL1'], + 'L_COL2' => $language['HOME_COL2'], + 'L_COL3' => $language['HOME_COL3']) +); + + +//output data rows +foreach ($output as $row) { + $cb_template->assign_both_block_vars('rows', $row); +} + + +/********************************************* + OUTPUT BODY AND FOOTER +*********************************************/ +$cb_template->pparse('body'); + +$cb_template->destroy; + +include(__DIR__ . "/include/footer.php"); +?> \ No newline at end of file diff --git a/images/favicons/android-chrome-192x192.png b/images/favicons/android-chrome-192x192.png new file mode 100644 index 00000000..7d8b3b79 Binary files /dev/null and b/images/favicons/android-chrome-192x192.png differ diff --git a/images/favicons/android-chrome-512x512.png b/images/favicons/android-chrome-512x512.png new file mode 100644 index 00000000..282486cc Binary files /dev/null and b/images/favicons/android-chrome-512x512.png differ diff --git a/images/favicons/apple-touch-icon-114x114-precomposed.png b/images/favicons/apple-touch-icon-114x114-precomposed.png new file mode 100644 index 00000000..b08f3195 Binary files /dev/null and b/images/favicons/apple-touch-icon-114x114-precomposed.png differ diff --git a/images/favicons/apple-touch-icon-120x120-precomposed.png b/images/favicons/apple-touch-icon-120x120-precomposed.png new file mode 100644 index 00000000..2b6afbe3 Binary files /dev/null and b/images/favicons/apple-touch-icon-120x120-precomposed.png differ diff --git a/images/favicons/apple-touch-icon-144x144-precomposed.png b/images/favicons/apple-touch-icon-144x144-precomposed.png new file mode 100644 index 00000000..e4641d48 Binary files /dev/null and b/images/favicons/apple-touch-icon-144x144-precomposed.png differ diff --git a/images/favicons/apple-touch-icon-152x152-precomposed.png b/images/favicons/apple-touch-icon-152x152-precomposed.png new file mode 100644 index 00000000..20083394 Binary files /dev/null and b/images/favicons/apple-touch-icon-152x152-precomposed.png differ diff --git a/images/favicons/apple-touch-icon-180x180-precomposed.png b/images/favicons/apple-touch-icon-180x180-precomposed.png new file mode 100644 index 00000000..63974163 Binary files /dev/null and b/images/favicons/apple-touch-icon-180x180-precomposed.png differ diff --git a/images/favicons/apple-touch-icon-57X57-precomposed.png b/images/favicons/apple-touch-icon-57X57-precomposed.png new file mode 100644 index 00000000..abb294b6 Binary files /dev/null and b/images/favicons/apple-touch-icon-57X57-precomposed.png differ diff --git a/images/favicons/apple-touch-icon-72x72-precomposed.png b/images/favicons/apple-touch-icon-72x72-precomposed.png new file mode 100644 index 00000000..b413fc39 Binary files /dev/null and b/images/favicons/apple-touch-icon-72x72-precomposed.png differ diff --git a/images/favicons/apple-touch-icon-76x76-precomposed.png b/images/favicons/apple-touch-icon-76x76-precomposed.png new file mode 100644 index 00000000..d8c883ee Binary files /dev/null and b/images/favicons/apple-touch-icon-76x76-precomposed.png differ diff --git a/images/favicons/apple-touch-icon-precomposed.png b/images/favicons/apple-touch-icon-precomposed.png new file mode 100644 index 00000000..abb294b6 Binary files /dev/null and b/images/favicons/apple-touch-icon-precomposed.png differ diff --git a/images/favicons/favicon-16x16.png b/images/favicons/favicon-16x16.png new file mode 100644 index 00000000..9555e4c4 Binary files /dev/null and b/images/favicons/favicon-16x16.png differ diff --git a/images/favicons/favicon-32x32.png b/images/favicons/favicon-32x32.png new file mode 100644 index 00000000..2906b1df Binary files /dev/null and b/images/favicons/favicon-32x32.png differ diff --git a/images/favicons/favicon-48x48.png b/images/favicons/favicon-48x48.png new file mode 100644 index 00000000..f1013088 Binary files /dev/null and b/images/favicons/favicon-48x48.png differ diff --git a/images/favicons/touch-icon-192x192.png b/images/favicons/touch-icon-192x192.png new file mode 100644 index 00000000..7d8b3b79 Binary files /dev/null and b/images/favicons/touch-icon-192x192.png differ diff --git a/include/common.php b/include/common.php index add05b90..2024128d 100644 --- a/include/common.php +++ b/include/common.php @@ -16,6 +16,7 @@ * March 22, 2020 - Initial Revision. Moved common features here instead * of using global.php (Maudigan) * March 28, 2020 - add the new self registration code (Maudigan) + * April 2, 2020 - make our index url a global var (Maudigan) * ***************************************************************************/ @@ -39,8 +40,10 @@ include_once(__DIR__ . "/functions.php"); include_once(__DIR__ . "/global.php"); include_once(__DIR__ . "/template.php" ); - + //figure our current url + $cb_index_url = ($charbrowser_wrapped) ? $_SERVER['SCRIPT_NAME'] : "index.php"; + //CREATE TEMPLATE CLASS $cb_template = new CB_Template(__DIR__ . "/../templates"); @@ -143,10 +146,10 @@ $cb_vars .= '&time='.urlencode(filemtime($cb_reg_file)); //send it - $cbhost = 'charbrowser.mqemulator.net'; + $cbhost = 'charbrowser.net'; $cbpath = '/register.php'.$cb_vars; $cbhttp = "GET $cbpath HTTP/1.0\r\nHost: $cbhost\r\n\r\n"; - $cbstream = stream_socket_client("$cbhost:80", $cberrno, $cberrstr, 120,STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT); + $cbstream = @stream_socket_client("$cbhost:80", $cberrno, $cberrstr, 120,STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT); if ($cbstream) { fwrite($cbstream, $cbhttp); } diff --git a/include/config.template b/include/config.template index 92543a3f..c1b4264d 100644 --- a/include/config.template +++ b/include/config.template @@ -120,6 +120,17 @@ $showsoftdelete = 0; $blockguilddata = 0; +/***************************************************** +** Should the guild member page, signature page, ** +** search page and character inventory show the ** +** guild names/char name association when a ** +** character is anon. ** +** 0 - block association ** +** 1 - show association ** +*****************************************************/ +$showguildwhenanon = 0; + + /***************************************************** ** You can look at composition of server on the ** ** server.php page. This setting will block it ** @@ -134,6 +145,10 @@ $blockguilddata = 0; *****************************************************/ $blockserverdata = 0; +//how many days of history to show on +//timed server queries +$cb_history_days = 30; + /***************************************************** ** By default charbrowser will automatically ** @@ -302,29 +317,53 @@ $guild_permissions = array( /***************************************************** ** SELF REGISTRATION ** -** You can disable this by setting ** -** $cb_allow_self_register to 0. If enabled (1) ** -** the script will phone-home to register by ** -** providing your URL, admin email, version, if ** -** you're a custom server, and your server name. ** -** Your admin email will NOT be shared, it will be ** -** used in case of an emergency patch or releases ** -** (depending on your settings). My hope is to ** -** setup a page listing all public facing ** -** CharBrowser installs for EQEmulator to make it ** -** easy for players to discover other popular ** -** servers and browse their characters. (depending ** -** on if people register their installs). This is ** -** all disabled by default. If enabled it will ** -** update the registration several times a day. ** -** It times the interval by touching the timestamp ** -** on a .registration file. ** -** Even if you have a private or local install ** -** you can feel free to register, it wont junk ** -** the data up. ** -** All the values in this section are for this ** -** feature. ** -** 0 = block 1 = allow ** +** This section of settings will publish your site ** +** with a central index of charbrowser sites. ** +** Visit http://charbrowser.net to see the listing ** +** of servers. The sites will not immediately show ** +** up, they are verified before listing. Whether ** +** or not they are listed is up to admin ** +** discretion. If a server is particularly small, ** +** or appears to have been intended to be private ** +** it wont be listed. ** +** ** +** There is a secondary reason to register. Your ** +** admin email address can be provided (or ** +** omitted) as well. This will allow us to ** +** contact you directly in case of an emergency ** +** patch. ** +** ** +** Your email address will not be shared publicly. ** +** ** +** If enabled the self registration automatically ** +** happens, at most, every hour depending on your ** +** traffic. If you would like to update any ** +** values, simply change them here and wait. After ** +** the next self registration you will become ** +** unlisted until you are manually verified again. ** +** ** +** You may not be listed if you do not set a ** +** custom cb_unique_string, which is used in an ** +** automated handshake to verify the authenticity ** +** of the registration. ** +** ** +** You can disable this process by setting ** +** cb_allow_self_register to 0, (it defaults to ** +** off). If you disable it you can ignore all vars ** +** in this section, they will be unused. You can ** +** also choose to register but mark your server as ** +** unlisted and it wont be publicised. No servers ** +** will be published until and unless they are ** +** clearly meant to be public upon manual review. ** +** ** +** if you would like additional piece of mind you ** +** can review or edit the code for this process ** +** in /include/common.php ** +** ** +** if this doesn't prove useful it may be removed ** +** in future builds. ** +** ** +** 0 = block (default) 1 = allow ** *****************************************************/ //set to 0 to block self registration, if set to 1 @@ -356,13 +395,11 @@ $cb_installation_url = "charbrowser.mqemulator.net/index.php"; //server. 1 = custom, 0 = standard $cb_is_custom = 0; -//Your server name, may be displayed in a central index -//of servers one day if enough people register +//how your site will be titled on charbrowser.net +// (if self registration and listing is enabled) $cb_server_title = "Your Server Name"; -//if enough people register we may setup a central server -//list, either in charbrowser or a central location -//set this to 0 to be unlisted in any future index +//publicise my charbrowser install on charbrowser.net // 1 = list my server, 0 = don't list me ever $cb_list_server = 1; @@ -376,7 +413,7 @@ $cb_list_server = 1; //registration is sent, this value will be included. The //registration server will do a handshake with this //value to ensure the values really came from your -//server. +//server. All registrations are manually verified $cb_unique_string = "SET THIS TO A LONG UNIQUE STRING OF LETTERS AND NUMBERS"; diff --git a/include/functions.php b/include/functions.php index 398a64be..e697ac1d 100644 --- a/include/functions.php +++ b/include/functions.php @@ -40,6 +40,9 @@ * March 28, 2020 - Maudigan * added a quest global permission fetching function for guilds * which is set by the guild leader + * April 2, 2020 - Maudigan + * flush the cache prior to outputting the image to make sure + * we don't send a text header * ***************************************************************************/ @@ -120,6 +123,7 @@ function output_profile_menu($charname, $curpage) { array( 'PAGE' => 'skills', 'BUTTON_NAME' => $language['BUTTON_SKILLS']), array( 'PAGE' => 'corpse', 'BUTTON_NAME' => $language['BUTTON_CORPSE']), array( 'PAGE' => 'factions', 'BUTTON_NAME' => $language['BUTTON_FACTION']), + array( 'PAGE' => 'bazaar', 'BUTTON_NAME' => $language['BUTTON_STORE']), array( 'PAGE' => 'signaturebuilder', 'BUTTON_NAME' => $language['BUTTON_SIG']), array( 'PAGE' => 'charmove', 'BUTTON_NAME' => $language['BUTTON_CHARMOVE']) ); @@ -254,6 +258,7 @@ function cb_message_die($dietitle, $text) { $error_color = imagecolorallocate($error_image, $defaultcolor['r'], $defaultcolor['g'], $defaultcolor['b']); imagestring($error_image, 5, 10, 30, $dietitle, $error_color); imagestring($error_image, 2, 10, 50, $text, $error_color); + ob_clean(); //make sure we haven't sent a text header header("Content-Type: image/png"); imagepng($error_image); ImageDestroy($error_image); diff --git a/include/header.php b/include/header.php index cf93af32..f298c5c0 100644 --- a/include/header.php +++ b/include/header.php @@ -16,6 +16,8 @@ * May 17, 2017 - added version.php include and changed the config.php * include to include_once() * September 16, 2017 - added an optional simple header. + * April 2, 2020 - made the index url a var so subsequent scripts can + * use it too. * ***************************************************************************/ @@ -48,7 +50,7 @@ 'VERSION' => $version, 'ADVERTISEMENT' => $adscript, 'ROOT_URL' => $charbrowser_root_url, - 'INDEX_URL' => ($charbrowser_wrapped) ? $_SERVER['SCRIPT_NAME'] : "index.php", + 'INDEX_URL' => $cb_index_url, 'L_GUILD' => $language['HEADER_GUILD'], 'L_NAME' => $language ['HEADER_NAME'], 'L_SETTINGS' => $language['HEADER_SETTINGS'], diff --git a/include/itemclass.php b/include/itemclass.php index 502f6cbf..754d0669 100644 --- a/include/itemclass.php +++ b/include/itemclass.php @@ -25,6 +25,9 @@ * New bags contents are in 331-340 and 341-350 * March 8, 2020 - implement shared bank (Maudigan) * March 21, 2020 - track item skill (Maudigan) + * April 2, 2020 - Maudigan + * show stack size code + * cleaned up commented out code * ***************************************************************************/ @@ -52,6 +55,9 @@ class item { var $myslot; //actual slot in the inventory table + + var $mystack; + //how many items in the stack var $myid; //id of the item for linking @@ -95,8 +101,16 @@ public function item($row) { $this->myname=$row['Name']; $this->myid=$row['id']; $this->myskill=$row["itemtype"]; - //switch ($this->myslot){ //removed line 2/9/2014 - switch (true){ //added line 2/9/2014 + //stackable? + if ($row['stackable']) { + $this->mystack = $row['charges']; + } + else { + $this->mystack = ""; + } + + + switch (true){ case ($this->myslot >= 0 && $this->myslot <= 22): $this->mytype = 1; $this->myvslot = $this->myslot; @@ -296,6 +310,10 @@ function id() { function slot() { return $this->myslot; } + + function stack() { + return $this->mystack; + } function html() { return $this->myhtml; diff --git a/include/language.php b/include/language.php index c0ae4bbf..0b160762 100644 --- a/include/language.php +++ b/include/language.php @@ -29,6 +29,8 @@ * March 23, 2020 - added base data error message(Maudigan) * March 26, 2020 - added skill tab mod(Maudigan) * March 26, 2020 - added server info language(Maudigan) + * April 2, 2020 - added store language(Maudigan) + * April 3, 2020 - added custom home page language(Maudigan) ***************************************************************************/ @@ -337,17 +339,28 @@ + +//home language +$language['HOME_HOME'] = "Home"; +$language['HOME_COL1'] = "Col 1"; +$language['HOME_COL2'] = "Col 2"; +$language['HOME_COL3'] = "Col 3"; + //server language $language['SERVER_MIN_LEVEL'] = "Minimum Level"; $language['SERVER_MAX_LEVEL'] = "Maximum Level"; $language['SERVER_AVG_LEVEL'] = "Average Level"; $language['SERVER_CHAR_COUNT'] = "Character Count"; +$language['SERVER_NONE'] = "None"; $language['SERVER_SERVER'] = "Server"; $language['SERVER_CLASSES'] = "Classes"; $language['SERVER_CLASS'] = "Class"; $language['SERVER_PERCENT'] = "Percent"; $language['SERVER_COUNT'] = "Count"; $language['SERVER_LEVELS'] = "Level Distribution"; +$language['SERVER_LEVELS_CUTOFF'] = "Level Distribution (Last %s Days)"; +$language['SERVER_ALL_TIME'] = "All Time"; +$language['SERVER_CUTOFF'] = "Last %s Days"; //key language $language['KEYS_KEY'] = "Keys"; @@ -486,6 +499,8 @@ $language['SETTINGS_RESULTS'] = "Search results per page"; $language['SETTINGS_HIGHLIGHT_GM'] = "Highlight GM Inventory"; $language['SETTINGS_CHARMOVE'] = "Character Mover"; +$language['SETTINGS_GUILDVIEW'] = "Guild View"; +$language['SETTINGS_SERVERVIEW'] = "Server View"; $language['SETTINGS_BAZAAR'] = "The Bazaar"; $language['SETTINGS_USERS_GM'] = "GMs"; $language['SETTINGS_USERS_ANON'] = "Anonymous"; @@ -556,6 +571,7 @@ $language['BUTTON_CORPSE'] = "Corpse"; $language['BUTTON_FACTION'] = "Faction"; $language['BUTTON_CHARMOVE'] = "Move"; +$language['BUTTON_STORE'] = "Store"; $language['BUTTON_BOOKMARK'] = "Link"; $language['BUTTON_SIG'] = "Sig"; $language['BUTTON_KEYS'] = "Keys"; diff --git a/include/profile.php b/include/profile.php index 9f389161..77ee3e5f 100644 --- a/include/profile.php +++ b/include/profile.php @@ -41,6 +41,8 @@ * relocated the locator inside of the class * pulled the code from calculatestats.php and put it here * that code was recopied from eqemu from the 20200316 build + * April 2, 2020 - Maudigan + * show stack size code * ***************************************************************************/ @@ -2175,7 +2177,8 @@ private function _populateItems() $tpl = <<assign_both_block_vars("characters", array( 'CLASS' => $dbclassnames[$character["class"]], 'LEVEL' => $character["level"], 'DELETED' => (($character["deleted_at"]) ? " ".$language['CHAR_DELETED']:""), 'NAME' => $character["name"], - 'GUILD_NAME' => getGuildLink($character["guildname"]) ) + 'GUILD_NAME' => $charguildname ) ); } diff --git a/server.php b/server.php index 6f690742..23575b85 100644 --- a/server.php +++ b/server.php @@ -15,6 +15,9 @@ * * March 30, 2020 - Maudigan * Initial revision + * April 3, 2020 - Maudigan + * added data views with a day cutoff + * added number_format to counts * ***************************************************************************/ @@ -25,6 +28,8 @@ define('INCHARBROWSER', true); include_once(__DIR__ . "/include/common.php"); include_once(__DIR__ . "/include/db.php"); + + /********************************************* @@ -34,11 +39,17 @@ if ($blockserverdata) cb_message_die($language['MESSAGE_ERROR'],$language['MESSAGE_ITEM_NO_VIEW']); +//calculate how many seconds of history to show +//defaults to 30 days +if (!$cb_history_days) $cb_history_days = 30; +$cb_history_cutoff = time() - $cb_history_days * 24 * 60 * 60; + + /********************************************* GATHER RELEVANT PAGE DATA *********************************************/ -//get guild data +//get server data $tpl = << '%s' +TPL; + +$query = sprintf($tpl, $cb_history_cutoff); +$result = $cbsql->query($query); + +//no characters in the last 30 days? +//thats possible so dont error +if (!($row = $cbsql->nextrow($result))) { + $maxlevel = $language['SERVER_NONE']; + $minlevel = $language['SERVER_NONE']; + $avglevel = $language['SERVER_NONE']; + $charactercount = $language['SERVER_NONE']; +} +else { + $maxlevel_cutoff = $row['maxlevel']; + $minlevel_cutoff = $row['minlevel']; + $avglevel_cutoff = $row['avglevel']; + $charactercount_cutoff = $row['count']; +} + +//get server class makeup data $tpl = << $dbclassnames[$row['class']], - 'COUNT' => $row['count'], + 'COUNT' => number_format($row['count']), 'ROUNDED_PERCENT' => round($classpercent * 100), 'CLEAN_PERCENT' => round($classpercent * 100, 2), 'RAW_PERCENT' => $classpercent, @@ -126,6 +166,38 @@ ); } } + + + +//get level distribution with cutoff +$tpl = << '%s' +GROUP BY character_data.level +TPL; + +$query = sprintf($tpl, $cb_history_cutoff); +$result = $cbsql->query($query); + + +$levelcounts_cutoff = array(); +//prime level array with zeroes +for ($i = $minlevel_cutoff - 1; $i <= $maxlevel_cutoff + 1; $i++) { + $levelcounts_cutoff[$i] = array( + 'LEVEL' => $i, + 'COUNT' => 0 + ); +} +if ($cbsql->rows($result)) { + while ($row = $cbsql->nextrow($result)) { + $levelcounts_cutoff[$row['level']] = array( + 'LEVEL' => $row['level'], + 'COUNT' => $row['count'] + ); + } +} /********************************************* @@ -142,20 +214,29 @@ 'body' => 'server_body.tpl') ); + $cb_template->assign_both_vars(array( - 'MIN_LEVEL' => $minlevel, - 'MAX_LEVEL' => $maxlevel, - 'AVG_LEVEL' => round($avglevel), - 'CHAR_COUNT' => $charactercount) + 'MIN_LEVEL' => number_format($minlevel), + 'MAX_LEVEL' => number_format($maxlevel), + 'AVG_LEVEL' => number_format(round($avglevel)), + 'CHAR_COUNT' => number_format($charactercount), + 'MIN_LEVEL_CUTOFF' => number_format($minlevel_cutoff), + 'MAX_LEVEL_CUTOFF' => number_format($maxlevel_cutoff), + 'AVG_LEVEL_CUTOFF' => number_format(round($avglevel_cutoff)), + 'CHAR_COUNT_CUTOFF' => number_format($charactercount_cutoff)) ); + $cb_template->assign_vars(array( 'L_SERVER' => $language['SERVER_SERVER'], + 'L_ALL_TIME' => $language['SERVER_ALL_TIME'], + 'L_CUTOFF' => sprintf($language['SERVER_CUTOFF'], $cb_history_days), 'L_MIN_LEVEL' => $language['SERVER_MIN_LEVEL'], 'L_MAX_LEVEL' => $language['SERVER_MAX_LEVEL'], 'L_AVG_LEVEL' => $language['SERVER_AVG_LEVEL'], 'L_CHAR_COUNT' => $language['SERVER_CHAR_COUNT'], 'L_CLASSES' => $language['SERVER_CLASSES'], 'L_LEVELS' => $language['SERVER_LEVELS'], + 'L_LEVELS_CUTOFF' => sprintf($language['SERVER_LEVELS_CUTOFF'], $cb_history_days), 'L_CLASS' => $language['SERVER_CLASS'], 'L_PERCENT' => $language['SERVER_PERCENT'], 'L_COUNT' => $language['SERVER_COUNT'], @@ -170,6 +251,10 @@ $cb_template->assign_both_block_vars('levels', $levelcount); } +foreach ($levelcounts_cutoff as $levelcount_cutoff) { + $cb_template->assign_both_block_vars('levels_cutoff', $levelcount_cutoff); +} + /********************************************* diff --git a/settings.php b/settings.php index 9b1b996f..6e0b0f7f 100644 --- a/settings.php +++ b/settings.php @@ -26,6 +26,10 @@ * implemented self version checking * March 22, 2020 - Maudigan * impemented common.php + * APril 2, 2020 - Maudigan + * swapped to version_compare for the version check so we don't show + * the update message if they have applied a patch that's newer than + * the latest release. ***************************************************************************/ @@ -88,8 +92,8 @@ //current version number $CB_cur_version = $CB_json->tag_name; -//is this install current -$CB_is_old = ($CB_cur_version != $version) ? true : false; +//is this install older than the latest major release (new patches are ignored) +$CB_is_old = (version_compare($CB_cur_version, $version) == 1) ? true : false; //if it's old grab the new version info, when it was published //download url, and its description @@ -155,11 +159,15 @@ 'S_RESULTS' => $numToDisplay, 'S_HIGHLIGHT_GM' => (($highlightgm)?$language['SETTINGS_ENABLED']:$language['SETTINGS_DISABLED']), 'S_BAZAAR' => (($blockbazaar)?$language['SETTINGS_DISABLED']:$language['SETTINGS_ENABLED']), - 'S_CHARMOVE' => (($blockcharmove)?$language['SETTINGS_DISABLED']:$language['SETTINGS_ENABLED'])) + 'S_CHARMOVE' => (($blockcharmove)?$language['SETTINGS_DISABLED']:$language['SETTINGS_ENABLED']), + 'S_GUILDVIEW' => (($blockguilddata)?$language['SETTINGS_DISABLED']:$language['SETTINGS_ENABLED']), + 'S_SERVERVIEW' => (($blockserverdata)?$language['SETTINGS_DISABLED']:$language['SETTINGS_ENABLED'])) ); $cb_template->assign_vars(array( 'L_RESULTS' => $language['SETTINGS_RESULTS'], 'L_CHARMOVE' => $language['SETTINGS_CHARMOVE'], + 'L_GUILDVIEW' => $language['SETTINGS_GUILDVIEW'], + 'L_SERVERVIEW' => $language['SETTINGS_SERVERVIEW'], 'L_HIGHLIGHT_GM' => $language['SETTINGS_HIGHLIGHT_GM'], 'L_UPDATES_EXIST' => $language['SETTINGS_UPDATES_EXIST'], 'L_DOWNLOAD' => $language['SETTINGS_DOWNLOAD'], diff --git a/sig.php b/sig.php index 86f1cfc2..725137ff 100644 --- a/sig.php +++ b/sig.php @@ -37,6 +37,11 @@ * impemented common.php * March 31, 2020 - Maudigan * updated to work with all the profile.php changes + * April 2, 2020 - Maudigan + * flush the cache prior to outputting an image to make sure + * we don't send a text header + * April 2, 2020 - Maudigan + * dont show anon guild members names ***************************************************************************/ @@ -182,44 +187,46 @@ function HexToRGB($hex) { $class = $char->GetValue('class'); -/* this will get implemented in the server code soon, uncomment and remove the code below -//load guild name dynamically -$tpl = <<GetValue('anon') != 1 || $showguildwhenanon || $charbrowser_is_admin_page) { + /* this will get implemented in the server code soon, uncomment and remove the code below + //load guild name dynamically + $tpl = <<query($query); + if($cbsql->rows($result)) + { + $row = $cbsql->nextrow($result); + $guild_name = $row['name']; + $guild_rank = $row['title']; + } */ + + //load guild name statically + $tpl = <<query($query); -if($cbsql->rows($result)) -{ - $row = $cbsql->nextrow($result); - $guild_name = $row['name']; - $guild_rank = $row['title']; -} */ - -//load guild name statically -$tpl = <<query($query); -if($cbsql->rows($result)) -{ - $row = $cbsql->nextrow($result); - $guild_name = $row['name']; - $guild_rank = $guildranks[$row['rank']]; + $query = sprintf($tpl, $charID); + $result = $cbsql->query($query); + if($cbsql->rows($result)) + { + $row = $cbsql->nextrow($result); + $guild_name = $row['name']; + $guild_rank = $guildranks[$row['rank']]; + } } @@ -373,7 +380,8 @@ function drawtext( $image, $text, $size, $font, $color, $offsetx, $offsety, $sha /********************************************* OUTPUT IMAGE *********************************************/ +ob_clean(); //make sure we haven't sent a text header header("Content-Type: image/png"); imagepng($image); ImageDestroy($image); -?> \ No newline at end of file +?> \ No newline at end of file diff --git a/templates/bazaar_body.tpl b/templates/bazaar_body.tpl index 6b32e98e..18a962f9 100644 --- a/templates/bazaar_body.tpl +++ b/templates/bazaar_body.tpl @@ -1,11 +1,14 @@ -
-
{L_BAZAAR}
+
+
{L_BAZAAR}{STORENAME}
+ + + diff --git a/templates/flags_body.tpl b/templates/flags_body.tpl index 1bea2e31..343b2c19 100644 --- a/templates/flags_body.tpl +++ b/templates/flags_body.tpl @@ -16,7 +16,7 @@


-
+
{head.NAME}
diff --git a/templates/functions-1.0.js b/templates/functions-1.0.js index 1a6606ae..5fa12067 100644 --- a/templates/functions-1.0.js +++ b/templates/functions-1.0.js @@ -13,6 +13,8 @@ * Maudigan(Airwalking) * * March 7, 2020 - initial revision (Maudigan) + * April 3, 2020 - Add ZOrder handling to anything with the + * CB_Should_ZOrder class (Maudigan) * ***************************************************************************/ @@ -92,11 +94,16 @@ function cbPopup_KeepItemUp(curItemID, keepItemUp = "check") { return false; } + + //CLICK CONTENT //move it to the top of the stack when interacted with -function cbPopup_ZOrder(curItemID) { - $(curItemID).css('z-index', cbPopup_curZIndex++); +function cbPopup_ZOrder(that) { + $(that).css('z-index', cbPopup_curZIndex++); } +$( "#charbrowser .CB_Should_ZOrder" ).mousedown(function() { + cbPopup_ZOrder( this ); +}); //TILE CONTENT diff --git a/templates/guild_body.tpl b/templates/guild_body.tpl index 3523cd4c..398cf73c 100644 --- a/templates/guild_body.tpl +++ b/templates/guild_body.tpl @@ -1,4 +1,4 @@ -
+
{L_GUILD} - {GUILD_NAME}
@@ -61,7 +61,7 @@ - + diff --git a/templates/header_body.tpl b/templates/header_body.tpl index 92e620f9..4efafccb 100644 --- a/templates/header_body.tpl +++ b/templates/header_body.tpl @@ -5,6 +5,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/home_body.tpl b/templates/home_body.tpl new file mode 100644 index 00000000..91ab5f14 --- /dev/null +++ b/templates/home_body.tpl @@ -0,0 +1,26 @@ +
+
{L_HOME}
+ +

You've enabled the custom home page by renaming home.template to home.php. To add custom data edit the queries and templates in home.php. To edit the layout, make changes to /templates/home_body.tpl.

+

Demo Data: {ROWS}

+
+
{guildmembers.NAME}{guildmembers.NAME} {guildmembers.RANK} {guildmembers.RACE} {guildmembers.CLASS}
+ + + + + + + + + + + + + + + + +
{L_COL1}{L_COL2}{L_COL3}
{rows.FIRSTCOL}{rows.SECONDCOL}{rows.THIRDCOL}
+
+
diff --git a/templates/server_body.tpl b/templates/server_body.tpl index bfea9f29..1c40e5ed 100644 --- a/templates/server_body.tpl +++ b/templates/server_body.tpl @@ -1,6 +1,12 @@ -
-
{L_SERVER}
- +
+
{L_SERVER}
+ +
@@ -17,14 +23,33 @@ +
{L_MIN_LEVEL}{CHAR_COUNT}
+ + + + + + + + + + + + + + + + +
{L_MIN_LEVEL}{L_MAX_LEVEL}{L_AVG_LEVEL}{L_CHAR_COUNT}
{MIN_LEVEL_CUTOFF}{MAX_LEVEL_CUTOFF}{AVG_LEVEL_CUTOFF}{CHAR_COUNT_CUTOFF}
-