Files
TravianZ/GameEngine/Ranking.php
T
2017-11-10 12:39:32 +01:00

586 lines
19 KiB
PHP
Executable File

<?php
/** --------------------------------------------------- **\
| ********* DO NOT REMOVE THIS COPYRIGHT NOTICE ********* |
+---------------------------------------------------------+
| Credits: All the developers including the leaders: |
| Advocaite & Dzoki & Donnchadh |
| |
| Copyright: TravianX Project All rights reserved |
\** --------------------------------------------------- **/
class Ranking {
public $rankarray = array();
private $rlastupdate;
public function getRank() {
return $this->rankarray;
}
public function getUserRank($id) {
$ranking = $this->getRank();
$users = "SELECT Count(*) as Total FROM " . TB_PREFIX . "users WHERE access < " . (INCLUDE_ADMIN ? "10" : "8");
$users2 = mysqli_fetch_array(mysqli_query($GLOBALS['link'],$users), MYSQLI_ASSOC);
$users2 = $users2['Total'];
$users3 = $users2+1;
$myrank = 0;
if(count($ranking) > 0) {
for($i=0;$i<($users3);$i++) {
if( isset( $ranking[$i]['userid'] ) ) {
if($ranking[$i]['userid'] == $id && $ranking[$i] != "pad") {
$myrank = $i;
}
}
}
}
return $myrank;
}
public function procRankReq($get) {
global $village, $session;
if(isset($get['id'])) {
switch($get['id']) {
case 1:
$this->procRankArray();
break;
case 8:
$this->procHeroRankArray();
if($get['hero'] == 0) {
$this->getStart(1);
} else {
$this->getStart($this->searchRank($session->uid, "uid"));
}
break;
case 11:
$this->procRankRaceArray(1);
if($this->searchRank($session->uid, "userid") != 0){
$this->getStart($this->searchRank($session->uid, "userid"));
}else{
$this->getStart(1);
}
break;
case 12:
$this->procRankRaceArray(2);
if($this->searchRank($session->uid, "userid") != 0){
$this->getStart($this->searchRank($session->uid, "userid"));
}else{
$this->getStart(1);
}
break;
case 13:
$this->procRankRaceArray(3);
if($this->searchRank($session->uid, "userid") != 0){
$this->getStart($this->searchRank($session->uid, "userid"));
}else{
$this->getStart(1);
}
break;
case 31:
$this->procAttRankArray();
$this->getStart($this->searchRank($session->uid, "userid"));
break;
case 32:
$this->procDefRankArray();
$this->getStart($this->searchRank($session->uid, "userid"));
break;
case 2:
$this->procVRankArray();
$this->getStart($this->searchRank($village->wid, "wref"));
break;
case 4:
$this->procARankArray();
if($get['aid'] == 0) {
$this->getStart(1);
} else {
$this->getStart($this->searchRank($get['aid'], "id"));
}
break;
case 41:
$this->procAAttRankArray();
if($get['aid'] == 0) {
$this->getStart(1);
} else {
$this->getStart($this->searchRank($get['aid'], "id"));
}
break;
case 42:
$this->procADefRankArray();
if($get['aid'] == 0) {
$this->getStart(1);
} else {
$this->getStart($this->searchRank($get['aid'], "id"));
}
break;
}
} else {
$this->procRankArray();
$this->getStart($this->searchRank($session->uid, "userid"));
}
}
public function procRank($post) {
if(isset($post['ft'])) {
switch($post['ft']) {
case "r1":
case "r11":
case "r12":
case "r13":
case "r31":
case "r32":
if(isset($post['rank']) && $post['rank'] != "") {
$this->getStart($post['rank']);
}
if(isset($post['name']) && $post['name'] != "") {
$this->getStart($this->searchRank(stripslashes($post['name']), "username"));
}
break;
case "r4":
case "r42":
case "r41":
if(isset($post['rank']) && $post['rank'] != "") {
$this->getStart($post['rank']);
}
if(isset($post['name']) && $post['name'] != "") {
$this->getStart($this->searchRank(stripslashes($post['name']), "tag"));
}
break;
case "r2":
case "r8":
if(isset($post['rank']) && $post['rank'] != "") {
$this->getStart($post['rank']);
}
if(isset($post['name']) && $post['name'] != "") {
$this->getStart($this->searchRank(stripslashes($post['name']), "name"));
}
break;
}
}
}
private function getStart($search) {
$multiplier = 1;
if(!is_numeric($search)) {
$_SESSION['search'] = $search;
} else {
if($search > count($this->rankarray)) {
$search = count($this->rankarray) - 1;
}
while($search > (20 * $multiplier)) {
$multiplier += 1;
}
$start = 20 * $multiplier - 19 - 1;
$_SESSION['search'] = $search;
$_SESSION['start'] = $start;
}
}
public function getAllianceRank($id) {
$this->procARankArray();
while(1) {
if(count($this->rankarray) > 1) {
$key = key($this->rankarray);
if(isset ($this->rankarray[$key]["id"]) && $this->rankarray[$key]["id"] === $id) {
return $key;
break;
} else {
if(!next($this->rankarray)) {
return false;
break;
}
}
} else {
return 1;
}
}
}
public function searchRank($name, $field) {
while(1) {
//$key = key($this->rankarray);
for($key=0;$key<count($this->rankarray);$key++){
if($this->rankarray[$key]!="pad") {
if($this->rankarray[$key][$field] == $name) {
return $key;
break;
}
}
}
if(!next($this->rankarray)) {
if($field != "userid"){
return $name;
break;
}else{
return 0;
break;
}
}
}
}
public function procRankArray() {
global $multisort;
if($GLOBALS['db']->countUser() > 0){
$holder = array();
if(SHOW_NATARS == True){
$q = "SELECT " . TB_PREFIX . "users.id userid, " . TB_PREFIX . "users.username username, " . TB_PREFIX . "users.oldrank oldrank, " . TB_PREFIX . "users.alliance alliance, (
SELECT SUM( " . TB_PREFIX . "vdata.pop )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid
)totalpop, (
SELECT COUNT( " . TB_PREFIX . "vdata.wref )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid AND type != 99
)totalvillages, (
SELECT " . TB_PREFIX . "alidata.tag
FROM " . TB_PREFIX . "alidata, " . TB_PREFIX . "users
WHERE " . TB_PREFIX . "alidata.id = " . TB_PREFIX . "users.alliance
AND " . TB_PREFIX . "users.id = userid
)allitag
FROM " . TB_PREFIX . "users
WHERE " . TB_PREFIX . "users.access < " . (INCLUDE_ADMIN ? "10" : "8") . "
AND (" . TB_PREFIX . "users.tribe <= 5 OR " . TB_PREFIX . "users.tribe = 5)
AND (" . TB_PREFIX . "users.id > 5 OR " . TB_PREFIX . "users.id = 3)
ORDER BY totalpop DESC, totalvillages DESC, userid DESC";
} else {
$q = "SELECT " . TB_PREFIX . "users.id userid, " . TB_PREFIX . "users.username username, " . TB_PREFIX . "users.oldrank oldrank, " . TB_PREFIX . "users.alliance alliance, (
SELECT SUM( " . TB_PREFIX . "vdata.pop )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid
)totalpop, (
SELECT COUNT( " . TB_PREFIX . "vdata.wref )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid AND type != 99
)totalvillages, (
SELECT " . TB_PREFIX . "alidata.tag
FROM " . TB_PREFIX . "alidata, " . TB_PREFIX . "users
WHERE " . TB_PREFIX . "alidata.id = " . TB_PREFIX . "users.alliance
AND " . TB_PREFIX . "users.id = userid
)allitag
FROM " . TB_PREFIX . "users
WHERE " . TB_PREFIX . "users.access < " . (INCLUDE_ADMIN ? "10" : "8") . "
AND " . TB_PREFIX . "users.tribe <= 3
AND " . TB_PREFIX . "users.id > 5
ORDER BY totalpop DESC, totalvillages DESC, userid DESC";
}
$result = (mysqli_query($GLOBALS['link'],$q));
while($row = mysqli_fetch_assoc($result)) {
$datas[] = $row;
}
if (count($datas)) {
foreach($datas as $result) {
$value['userid'] = $result['userid'];
$value['username'] = $result['username'];
$value['oldrank'] = $result['oldrank'];
$value['alliance'] = $result['alliance'];
$value['aname'] = $result['allitag'];
$value['totalpop'] = $result['totalpop'];
$value['totalvillage'] = $result['totalvillages'];
array_push($holder, $value);
}
}
$newholder = array("pad");
foreach($holder as $key) {
array_push($newholder, $key);
}
$this->rankarray = $newholder;
}
}
public function procRankRaceArray($race) {
global $multisort,$database;
$race = $database->escape((int) $race);
//$array = $GLOBALS['db']->getRanking();
$holder = array();
//$value['totalvillage'] = count($GLOBALS['db']->getVillagesID($value['id']));
//$value['totalvillage'] = count($GLOBALS['db']->getVillagesID($value['id']));
//$value['totalpop'] = $GLOBALS['db']->getVSumField($value['id'],"pop");
//$value['aname'] = $GLOBALS['db']->getAllianceName($value['alliance']);
$q = "SELECT " . TB_PREFIX . "users.id userid, " . TB_PREFIX . "users.tribe tribe, " . TB_PREFIX . "users.username username," . TB_PREFIX . "users.alliance alliance, (
SELECT SUM( " . TB_PREFIX . "vdata.pop )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid
)totalpop, (
SELECT COUNT( " . TB_PREFIX . "vdata.wref )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid AND type != 99
)totalvillages, (
SELECT " . TB_PREFIX . "alidata.tag
FROM " . TB_PREFIX . "alidata, " . TB_PREFIX . "users
WHERE " . TB_PREFIX . "alidata.id = " . TB_PREFIX . "users.alliance
AND " . TB_PREFIX . "users.id = userid
)allitag
FROM " . TB_PREFIX . "users
WHERE " . TB_PREFIX . "users.tribe = $race AND " . TB_PREFIX . "users.access < " . (INCLUDE_ADMIN ? "10" : "8") . "
AND " . TB_PREFIX . "users.id > 5
ORDER BY totalpop DESC, totalvillages DESC, userid DESC";
$result = (mysqli_query($GLOBALS['link'],$q));
while($row = mysqli_fetch_assoc($result)) {
$datas[] = $row;
}
if(mysqli_num_rows($result)) {
foreach($datas as $result) {
$value['userid'] = $result['userid'];
$value['username'] = $result['username'];
$value['alliance'] = $result['alliance'];
$value['aname'] = $result['allitag'];
$value['totalpop'] = $result['totalpop'];
$value['totalvillage'] = $result['totalvillages'];
//SELECT (SELECT SUM(".TB_PREFIX."vdata.pop) FROM ".TB_PREFIX."vdata WHERE ".TB_PREFIX."vdata.owner = 2) totalpop, (SELECT COUNT(".TB_PREFIX."vdata.wref) FROM ".TB_PREFIX."vdata WHERE ".TB_PREFIX."vdata.owner = 2) totalvillages, (SELECT ".TB_PREFIX."alidata.tag FROM ".TB_PREFIX."alidata WHERE ".TB_PREFIX."alidata.id = ".TB_PREFIX."users.alliance AND ".TB_PREFIX."users.id = 2);
array_push($holder, $value);
}
} else {
$value['userid'] = 0;
$value['username'] = "No User";
$value['alliance'] = "";
$value['aname'] = "";
$value['totalpop'] = "";
$value['totalvillage'] = "";
array_push($holder, $value);
}
//$holder = $multisort->sorte($holder, "'totalvillage'", false, 2, "'totalpop'", false, 2);
$newholder = array("pad");
foreach($holder as $key) {
array_push($newholder, $key);
}
$this->rankarray = $newholder;
}
public function procAttRankArray() {
global $multisort;
//$array = $GLOBALS['db']->getRanking();
$holder = array();
//$value['totalvillage'] = count($GLOBALS['db']->getVillagesID($value['id']));
//$value['totalpop'] = $GLOBALS['db']->getVSumField($value['id'],"pop");
$q = "SELECT " . TB_PREFIX . "users.id userid, " . TB_PREFIX . "users.username username, " . TB_PREFIX . "users.apall, (
SELECT COUNT( " . TB_PREFIX . "vdata.wref )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid AND type != 99
)totalvillages, (
SELECT SUM( " . TB_PREFIX . "vdata.pop )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid
)pop
FROM " . TB_PREFIX . "users
WHERE " . TB_PREFIX . "users.apall >=0 AND " . TB_PREFIX . "users.access < " . (INCLUDE_ADMIN ? "10" : "8") . " AND " . TB_PREFIX . "users.tribe <= 3
AND " . TB_PREFIX . "users.id > 5
ORDER BY " . TB_PREFIX . "users.apall DESC, pop DESC, userid DESC";
$result = mysqli_query($GLOBALS['link'],$q) or die(mysqli_error($database->dblink));
while($row = mysqli_Fetch_assoc($result)) {
$datas[] = $row;
}
foreach($datas as $key => $row) {
$value['userid'] = $row['userid'];
$value['username'] = $row['username'];
$value['totalvillages'] = $row['totalvillages'];
$value['id'] = $row['userid'];
$value['totalpop'] = $row['pop'];
$value['apall'] = $row['apall'];
array_push($holder, $value);
printf("\n<!-- %s %s %s %s -->\n", $value['username'], $value['totalvillages'], $value['totalpop'], $value['apall']);
}
//$holder = $multisort->sorte($holder, "'ap'", false, 2, "'totalvillages'", false, 2, "'ap'", false, 2);
$newholder = array("pad");
foreach($holder as $key) {
array_push($newholder, $key);
}
$this->rankarray = $newholder;
}
public function procDefRankArray() {
//global $GLOBALS['db'], $multisort;
//$array = $GLOBALS['db']->getRanking();
$holder = array();
$q = "SELECT " . TB_PREFIX . "users.id userid, " . TB_PREFIX . "users.username username, " . TB_PREFIX . "users.dpall, (
SELECT COUNT( " . TB_PREFIX . "vdata.wref )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid AND type != 99
)totalvillages, (
SELECT SUM( " . TB_PREFIX . "vdata.pop )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid
)pop
FROM " . TB_PREFIX . "users
WHERE " . TB_PREFIX . "users.dpall >=0 AND " . TB_PREFIX . "users.access < " . (INCLUDE_ADMIN ? "10" : "8") . " AND " . TB_PREFIX . "users.tribe <= 3
AND " . TB_PREFIX . "users.id > 5
ORDER BY " . TB_PREFIX . "users.dpall DESC, pop DESC, userid DESC";
$result = mysqli_query($GLOBALS['link'],$q) or die(mysqli_error($database->dblink));
while($row = mysqli_Fetch_assoc($result)) {
$datas[] = $row;
}
foreach($datas as $key => $row) {
$value['userid'] = $row['userid'];
$value['username'] = $row['username'];
$value['totalvillages'] = $row['totalvillages'];
$value['id'] = $row['userid'];
$value['totalpop'] = $row['pop'];
$value['dpall'] = $row['dpall'];
array_push($holder, $value);
}
//$holder = $multisort->sorte($holder, "'dpall'", false, 2, "'totalvillage'", false, 2, "'dpall'", false, 2);
$newholder = array("pad");
foreach($holder as $key) {
array_push($newholder, $key);
}
$this->rankarray = $newholder;
}
public function procVRankArray() {
global $multisort;
$array = $GLOBALS['db']->getVRanking();
$holder = array();
foreach($array as $value) {
$coor = $GLOBALS['db']->getCoor($value['wref']);
$value['x'] = $coor['x'];
$value['y'] = $coor['y'];
$value['user'] = $GLOBALS['db']->getUserField($value['owner'], "username", 0);
array_push($holder, $value);
}
$holder = $multisort->sorte($holder, "'x'", true, 2, "'y'", true, 2, "'pop'", false, 2);
$newholder = array("pad");
foreach($holder as $key) {
array_push($newholder, $key);
}
$this->rankarray = $newholder;
}
public function procARankArray() {
global $multisort;
$array = $GLOBALS['db']->getARanking();
$holder = array();
foreach($array as $value) {
$memberlist = $GLOBALS['db']->getAllMember($value['id']);
$totalpop = 0;
foreach($memberlist as $member) {
$totalpop += $GLOBALS['db']->getVSumField($member['id'], "pop");
}
$value['players'] = count($memberlist);
$value['totalpop'] = $totalpop;
if(!isset($value['avg'])) {
$value['avg'] = @round($totalpop / count($memberlist));
} else {
$value['avg'] = 0;
}
array_push($holder, $value);
}
$holder = $multisort->sorte($holder, "'totalpop'", false, 2);
$newholder = array("pad");
foreach($holder as $key) {
array_push($newholder, $key);
}
$this->rankarray = $newholder;
}
public function procHeroRankArray() {
global $multisort;
$array = $GLOBALS['db']->getHeroRanking();
$holder = array();
foreach($array as $value) {
$value['owner'] = $GLOBALS['db']->getUserField($value['uid'], "username", 0);
$value['level'];
$value['name'];
$value['uid'];
array_push($holder, $value);
}
$holder = $multisort->sorte($holder, "'experience'", false, 2);
$newholder = array("pad");
foreach($holder as $key) {
array_push($newholder, $key);
}
$this->rankarray = $newholder;
}
public function procAAttRankArray() {
global $multisort;
$array = $GLOBALS['db']->getARanking();
$holder = array();
foreach($array as $value) {
$memberlist = $GLOBALS['db']->getAllMember($value['id']);
$totalap = 0;
foreach($memberlist as $member) {
$totalap += $member['ap'];
}
$value['players'] = count($memberlist);
$value['totalap'] = $totalap;
if($value['avg'] > 0) {
$value['avg'] = round($totalap / count($memberlist));
} else {
$value['avg'] = 0;
}
array_push($holder, $value);
}
$holder = $multisort->sorte($holder, "'Aap'", false, 2);
$newholder = array("pad");
foreach($holder as $key) {
array_push($newholder, $key);
}
$this->rankarray = $newholder;
}
public function procADefRankArray() {
global $multisort;
$array = $GLOBALS['db']->getARanking();
$holder = array();
foreach($array as $value) {
$memberlist = $GLOBALS['db']->getAllMember($value['id']);
$totaldp = 0;
foreach($memberlist as $member) {
$totaldp += $member['dp'];
}
$value['players'] = count($memberlist);
$value['totaldp'] = $totaldp;
if($value['avg'] > 0) {
$value['avg'] = round($totalap / count($memberlist));
} else {
$value['avg'] = 0;
}
array_push($holder, $value);
}
$holder = $multisort->sorte($holder, "'Adp'", false, 2);
$newholder = array("pad");
foreach($holder as $key) {
array_push($newholder, $key);
}
$this->rankarray = $newholder;
}
}
;
$ranking = new Ranking;
?>